diff --git a/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py b/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py index a6909c96fe12..f4e270bbbdd9 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py @@ -150,10 +150,13 @@ class OptionsChainsData(OptionsChainsProperties): json_schema_extra={"x-unit_measurement": "currency"}, ) option_type: List[str] = Field(description="Call or Put.") - open_interest: List[Union[int, None]] = Field( + contract_size: List[Union[int, float, None]] = Field( + default_factory=list, description="Number of underlying units per contract." + ) + open_interest: List[Union[int, float, None]] = Field( default_factory=list, description="Open interest on the contract." ) - volume: List[Union[int, None]] = Field( + volume: List[Union[int, float, None]] = Field( default_factory=list, description=DATA_DESCRIPTIONS.get("volume", "") ) theoretical_price: List[Union[float, None]] = Field( @@ -166,7 +169,7 @@ class OptionsChainsData(OptionsChainsProperties): description="Last trade price of the option.", json_schema_extra={"x-unit_measurement": "currency"}, ) - last_trade_size: List[Union[int, None]] = Field( + last_trade_size: List[Union[int, float, None]] = Field( default_factory=list, description="Last trade size of the option." ) last_trade_time: List[Union[datetime, None]] = Field( @@ -182,7 +185,7 @@ class OptionsChainsData(OptionsChainsProperties): description="Current bid price for the option.", json_schema_extra={"x-unit_measurement": "currency"}, ) - bid_size: List[Union[int, None]] = Field( + bid_size: List[Union[int, float, None]] = Field( default_factory=list, description="Bid size for the option." ) bid_time: List[Union[datetime, None]] = Field( @@ -197,7 +200,7 @@ class OptionsChainsData(OptionsChainsProperties): description="Current ask price for the option.", json_schema_extra={"x-unit_measurement": "currency"}, ) - ask_size: List[Union[int, None]] = Field( + ask_size: List[Union[int, float, None]] = Field( default_factory=list, description="Ask size for the option." ) ask_time: List[Union[datetime, None]] = Field( @@ -262,7 +265,7 @@ class OptionsChainsData(OptionsChainsProperties): description=DATA_DESCRIPTIONS.get("close", ""), json_schema_extra={"x-unit_measurement": "currency"}, ) - close_size: List[Union[int, None]] = Field( + close_size: List[Union[int, float, None]] = Field( default_factory=list, description="The closing trade size for the option that day.", ) @@ -275,7 +278,7 @@ class OptionsChainsData(OptionsChainsProperties): description="The closing bid price for the option that day.", json_schema_extra={"x-unit_measurement": "currency"}, ) - close_bid_size: List[Union[int, None]] = Field( + close_bid_size: List[Union[int, float, None]] = Field( default_factory=list, description="The closing bid size for the option that day.", ) @@ -287,7 +290,7 @@ class OptionsChainsData(OptionsChainsProperties): default_factory=list, description="The closing ask price for the option that day.", ) - close_ask_size: List[Union[int, None]] = Field( + close_ask_size: List[Union[int, float, None]] = Field( default_factory=list, description="The closing ask size for the option that day.", ) diff --git a/openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py b/openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py index 4e12435377f3..0d89426dc0c3 100644 --- a/openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py +++ b/openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py @@ -3,6 +3,7 @@ # pylint: disable=too-many-lines, too-many-arguments, too-many-locals, too-many-statements, too-many-positional-arguments from datetime import datetime +from functools import cached_property from typing import TYPE_CHECKING, Dict, List, Literal, Optional, Union from openbb_core.app.model.abstract.error import OpenBBError @@ -41,7 +42,7 @@ def last_price(self): if hasattr(self, "_last_price"): del self._last_price - @property + @cached_property def dataframe(self) -> "DataFrame": """Return all data as a Pandas DataFrame, with additional computed columns (Breakeven, GEX, DEX) if available. @@ -72,13 +73,13 @@ def dataframe(self) -> "DataFrame": raise OpenBBError("Error: No validated data was found.") if "dte" not in chains_data.columns and "eod_date" in chains_data.columns: - _date = to_datetime(chains_data["eod_date"]) + _date = to_datetime(chains_data.eod_date) temp = DatetimeIndex(chains_data.expiration) temp_ = temp - _date # type: ignore chains_data.loc[:, "dte"] = [Timedelta(_temp_).days for _temp_ in temp_] if "dte" in chains_data.columns: - chains_data = DataFrame(chains_data[chains_data["dte"] >= 0]) + chains_data = DataFrame(chains_data[chains_data.dte >= 0]) if "dte" not in chains_data.columns and "eod_date" not in chains_data.columns: today = datetime.today().date() @@ -86,51 +87,75 @@ def dataframe(self) -> "DataFrame": # Add the breakeven price for each option, and the DEX and GEX for each option, if available. try: - last_price = chains_data.underlying_price.iloc[0] - _calls = DataFrame(chains_data[chains_data["option_type"] == "call"]) - _puts = DataFrame(chains_data[chains_data["option_type"] == "put"]) - _ask = self._identify_price_col( + _calls = DataFrame(chains_data[chains_data.option_type == "call"]) + _puts = DataFrame(chains_data[chains_data.option_type == "put"]) + _ask = self._identify_price_col( # pylint: disable=W0212 chains_data, "call", "ask" - ) # pylint: disable=W0212 - _calls.loc[:, ("Breakeven")] = ( - _calls.loc[:, ("strike")] + _calls.loc[:, (_ask)] - ) - _puts.loc[:, ("Breakeven")] = ( - _puts.loc[:, ("strike")] - _puts.loc[:, (_ask)] ) - + _calls.loc[:, ("Breakeven")] = _calls.strike + _calls.loc[:, (_ask)] + _puts.loc[:, ("Breakeven")] = _puts.strike - _puts.loc[:, (_ask)] if "delta" in _calls.columns: _calls.loc[:, ("DEX")] = ( - (_calls.loc[:, ("delta")] * 100) - * (_calls.loc[:, ("open_interest")]) - * last_price + ( + _calls.delta + * ( + _calls.contract_size + if hasattr(_calls, "contract_size") + else 100 + ) + * _calls.open_interest + * _calls.underlying_price + ) + .replace({nan: 0}) + .astype("int64") ) - _calls["DEX"] = _calls["DEX"].replace({nan: 0}).astype("int64") _puts.loc[:, ("DEX")] = ( - (_puts.loc[:, ("delta")] * 100) - * (_puts.loc[:, ("open_interest")]) - * last_price + ( + _puts.delta + * ( + _puts.contract_size + if hasattr(_puts, "contract_size") + else 100 + ) + * _puts.open_interest + * _puts.underlying_price + ) + .replace({nan: 0}) + .astype("int64") ) - _puts["DEX"] = _puts["DEX"].replace({nan: 0}).astype("int64") if "gamma" in _calls.columns: _calls.loc[:, ("GEX")] = ( - _calls.loc[:, ("gamma")] - * 100 - * _calls.loc[:, ("open_interest")] - * (last_price * last_price) - * 0.01 + ( + _calls.gamma + * ( + _calls.contract_size + if hasattr(_calls, "contract_size") + else 100 + ) + * _calls.open_interest + * (_calls.underlying_price * _calls.underlying_price) + * 0.01 + ) + .replace({nan: 0}) + .astype("int64") ) - _calls["GEX"] = _calls["GEX"].replace({nan: 0}).astype("int64") _puts.loc[:, ("GEX")] = ( - _puts.loc[:, ("gamma")] - * 100 - * _puts.loc[:, ("open_interest")] - * (last_price * last_price) - * 0.01 - * (-1) + ( + _puts.gamma + * ( + _puts.contract_size + if hasattr(_puts, "contract_size") + else 100 + ) + * _puts.open_interest + * (_puts.underlying_price * _puts.underlying_price) + * 0.01 + * (-1) + ) + .replace({nan: 0}) + .astype("int64") ) - _puts["GEX"] = _puts["GEX"].replace({nan: 0}).astype("int64") _calls.set_index(keys=["expiration", "strike", "option_type"], inplace=True) _puts.set_index(keys=["expiration", "strike", "option_type"], inplace=True) @@ -371,17 +396,7 @@ def _get_stat( from numpy import inf, nan from pandas import DataFrame, concat - df = DataFrame() - - if metric in ["volume", "open_interest"]: - df = DataFrame( - self.model_dump( - exclude_unset=True, - exclude_none=True, - ) - ) - else: - df = self.dataframe + df = self.dataframe if metric in ["DEX", "GEX"]: if not self.has_greeks: @@ -395,7 +410,7 @@ def _get_stat( "Calls": total_calls, "Puts": total_puts, "Total": total_metric, - "PCR": round(total_puts / total_calls, 4), + "PCR": round(total_puts / total_calls, 4) if total_calls != 0 else 0, } df = DataFrame(df[df[metric].notnull()]) # type: ignore @@ -542,6 +557,11 @@ def _get_nearest_otm_strikes( "Error: underlying_price must be provided if underlying_price is not available" ) + if date is not None: + date = self._get_nearest_expiration(date) + df = df[df.expiration.astype(str) == date] + strikes = Series(df.strike.unique().tolist()) + last_price = ( underlying_price if underlying_price is not None @@ -549,11 +569,6 @@ def _get_nearest_otm_strikes( ) strikes = Series(self.strikes) - if date is not None: - date = self._get_nearest_expiration(date) - df = df[df.expiration.astype(str) == date] - strikes = Series(df.strike.unique().tolist()) - upper = last_price * (1 + moneyness) # type: ignore lower = last_price * (1 - moneyness) # type: ignore nearest_call = (upper - strikes).abs().idxmin() @@ -606,15 +621,14 @@ def _get_nearest_strike( if days is None: days = 30 - if strike is None: - strike = chains.underlying_price.iloc[0] - dte_estimate = self._get_nearest_expiration(days) df = ( chains[chains.expiration.astype(str) == dte_estimate] .query("`option_type` == @option_type") .copy() ) + if strike is None: + strike = df.underlying_price.iloc[0] if price_col is not None: df = df[df[price_col].notnull()] # type: ignore @@ -676,16 +690,6 @@ def straddle( chains = self.dataframe - if not hasattr(chains, "underlying_price") and underlying_price is None: - raise OpenBBError( - "Error: underlying_price must be provided if underlying_price is not available" - ) - underlying_price = ( - underlying_price - if underlying_price is not None - else chains.underlying_price.iloc[0] - ) - if days is None: days = 30 @@ -696,6 +700,16 @@ def straddle( chains = chains[chains.expiration.astype(str) == dte_estimate] + if not hasattr(chains, "underlying_price") and underlying_price is None: + raise OpenBBError( + "Error: underlying_price must be provided if underlying_price is not available" + ) + underlying_price = ( + underlying_price + if underlying_price is not None + else chains.underlying_price.iloc[0] + ) + force_otm = True if strike is None and not hasattr(chains, "underlying_price"): @@ -843,6 +857,12 @@ def strangle( "Error: underlying_price must be provided if underlying_price is not available" ) + underlying_price = ( + underlying_price + if underlying_price is not None + else chains.underlying_price.iloc[0] + ) + strikes = self._get_nearest_otm_strikes( dte_estimate, underlying_price, moneyness ) @@ -968,11 +988,6 @@ def vertical_call_spread( raise OpenBBError( "Error: underlying_price must be provided if underlying_price is not available" ) - last_price = ( - underlying_price - if underlying_price is not None - else chains.underlying_price.iloc[0] - ) if days is None: days = 30 @@ -986,6 +1001,12 @@ def vertical_call_spread( "`option_type` == 'call'" ) + last_price = ( + underlying_price + if underlying_price is not None + else chains.underlying_price.iloc[0] + ) + if bought is None: bought = last_price * 1.0250 @@ -1103,11 +1124,6 @@ def vertical_put_spread( raise OpenBBError( "Error: underlying_price must be provided if underlying_price is not available" ) - last_price = ( - underlying_price - if underlying_price is not None - else chains.underlying_price.iloc[0] - ) if days is None: days = 30 @@ -1121,6 +1137,12 @@ def vertical_put_spread( "`option_type` == 'put'" ) + last_price = ( + underlying_price + if underlying_price is not None + else chains.underlying_price.iloc[0] + ) + if bought is None: bought = last_price * 0.9750 @@ -1226,11 +1248,6 @@ def synthetic_long( raise OpenBBError( "Error: underlying_price must be provided if underlying_price is not available" ) - last_price = ( - underlying_price - if underlying_price is not None - else chains.underlying_price.iloc[0] - ) if days is None: days = 30 @@ -1240,6 +1257,11 @@ def synthetic_long( dte_estimate = self._get_nearest_expiration(days) chains = DataFrame(chains[chains["expiration"].astype(str) == dte_estimate]) + last_price = ( + underlying_price + if underlying_price is not None + else chains.underlying_price.iloc[0] + ) bid = self._identify_price_col(chains, "put", "bid") ask = self._identify_price_col(chains, "call", "ask") strike_price = last_price if strike == 0 else strike @@ -1329,11 +1351,6 @@ def synthetic_short( raise OpenBBError( "Error: underlying_price must be provided if underlying_price is not available" ) - last_price = ( - underlying_price - if underlying_price is not None - else chains.underlying_price.iloc[0] - ) if days is None: days = 30 @@ -1343,6 +1360,11 @@ def synthetic_short( dte_estimate = self._get_nearest_expiration(days) chains = DataFrame(chains[chains["expiration"].astype(str) == dte_estimate]) + last_price = ( + underlying_price + if underlying_price is not None + else chains.underlying_price.iloc[0] + ) bid = self._identify_price_col(chains, "call", "bid") ask = self._identify_price_col(chains, "put", "ask") strike_price = last_price if strike == 0 else strike @@ -1667,11 +1689,6 @@ def skew( raise OpenBBError( "Error: underlying_price must be provided if underlying_price is not available" ) - last_price = ( - underlying_price - if underlying_price is not None - else data.underlying_price.iloc[0] - ) if moneyness is not None and date is None: date = -1 @@ -1703,13 +1720,12 @@ def skew( if moneyness is not None: atm_call_iv = DataFrame() atm_put_iv = DataFrame() - for day in days: strikes = self._get_nearest_otm_strikes( date=day, moneyness=moneyness, underlying_price=underlying_price ) atm_call_strike = self._get_nearest_strike( # noqa:F841 - "call", day, last_price, call_price_col, False + "call", day, underlying_price, call_price_col, False ) call_strike = self._get_nearest_strike( # noqa:F841 "call", day, strikes["call"], call_price_col, False @@ -1719,6 +1735,11 @@ def skew( .query("`option_type` == 'call'") # type: ignore .copy() ) + last_price = ( + underlying_price + if underlying_price is not None + else _calls.underlying_price.iloc[0] + ) if len(_calls) > 0: call_iv = _calls[_calls.strike == call_strike][ ["expiration", "strike", "implied_volatility"] diff --git a/openbb_platform/dev_install.py b/openbb_platform/dev_install.py index 258d41fa9bd3..b7e74a6fcf43 100644 --- a/openbb_platform/dev_install.py +++ b/openbb_platform/dev_install.py @@ -55,6 +55,7 @@ openbb-alpha-vantage = { path = "./providers/alpha_vantage", optional = true, develop = true } openbb-biztoc = { path = "./providers/biztoc", optional = true, develop = true } openbb-cboe = { path = "./providers/cboe", optional = true, develop = true } +openbb-deribit = { path = "./providers/deribit", optional = true, develop = true } openbb-ecb = { path = "./providers/ecb", optional = true, develop = true } openbb-finra = { path = "./providers/finra", optional = true, develop = true } openbb-finviz = { path = "./providers/finviz", optional = true, develop = true } diff --git a/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py b/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py index 4dc7e1309a02..deb3e60fabc2 100644 --- a/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py +++ b/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py @@ -46,6 +46,7 @@ def headers(): ({"provider": "cboe", "symbol": "AAPL", "use_cache": False}), ({"provider": "tradier", "symbol": "AAPL"}), ({"provider": "yfinance", "symbol": "AAPL"}), + ({"provider": "deribit", "symbol": "BTC"}), ( { "provider": "tmx", diff --git a/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py b/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py index 681e2f56f26f..b261e35e8959 100644 --- a/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py +++ b/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py @@ -42,6 +42,7 @@ def obb(pytestconfig): ({"provider": "cboe", "symbol": "AAPL", "use_cache": False}), ({"provider": "tradier", "symbol": "AAPL"}), ({"provider": "yfinance", "symbol": "AAPL"}), + ({"provider": "deribit", "symbol": "BTC"}), ( { "provider": "tmx", diff --git a/openbb_platform/poetry.lock b/openbb_platform/poetry.lock index 829325ea7eaf..5e30c28b830f 100644 --- a/openbb_platform/poetry.lock +++ b/openbb_platform/poetry.lock @@ -2192,6 +2192,23 @@ files = [ [package.dependencies] openbb-core = ">=1.3.6,<2.0.0" +[[package]] +name = "openbb-deribit" +version = "1.0.0b" +description = "Deribit is a cryptocurrency exchange that offers futures and options trading." +optional = true +python-versions = "^3.9" +files = [] +develop = false + +[package.dependencies] +async-lru = "^2.0.4" +openbb-core = "^1.3.7" + +[package.source] +type = "directory" +url = "providers/deribit" + [[package]] name = "openbb-derivatives" version = "1.3.5" @@ -2991,13 +3008,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "poetry" -version = "1.8.4" +version = "1.8.5" description = "Python dependency management and packaging made easy." optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "poetry-1.8.4-py3-none-any.whl", hash = "sha256:1223bb6dfdbdfbebc6790796b9b7a88ea1f1f4679e709594f698499010ffb129"}, - {file = "poetry-1.8.4.tar.gz", hash = "sha256:5490f8da66d17eecd660e091281f8aaa5554381644540291817c249872c99202"}, + {file = "poetry-1.8.5-py3-none-any.whl", hash = "sha256:5505fba69bf2a792b5d7402d21839c853644337392b745109b86a23010cce5f3"}, + {file = "poetry-1.8.5.tar.gz", hash = "sha256:eb2c88d224f58f36df8f7b36d6c380c07d1001bca28bde620f68fc086e881b70"}, ] [package.dependencies] @@ -3012,7 +3029,7 @@ installer = ">=0.7.0,<0.8.0" keyring = ">=24.0.0,<25.0.0" packaging = ">=23.1" pexpect = ">=4.7.0,<5.0.0" -pkginfo = ">=1.10,<2.0" +pkginfo = ">=1.12,<2.0" platformdirs = ">=3.0.0,<5" poetry-core = "1.9.1" poetry-plugin-export = ">=1.6.0,<2.0.0" @@ -4741,7 +4758,7 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", type = ["pytest-mypy"] [extras] -all = ["openbb-alpha-vantage", "openbb-biztoc", "openbb-cboe", "openbb-charting", "openbb-ecb", "openbb-econometrics", "openbb-finra", "openbb-finviz", "openbb-government-us", "openbb-multpl", "openbb-nasdaq", "openbb-quantitative", "openbb-seeking-alpha", "openbb-stockgrid", "openbb-technical", "openbb-tmx", "openbb-tradier", "openbb-wsj"] +all = ["openbb-alpha-vantage", "openbb-biztoc", "openbb-cboe", "openbb-charting", "openbb-deribit", "openbb-ecb", "openbb-econometrics", "openbb-finra", "openbb-finviz", "openbb-government-us", "openbb-multpl", "openbb-nasdaq", "openbb-quantitative", "openbb-seeking-alpha", "openbb-stockgrid", "openbb-technical", "openbb-tmx", "openbb-tradier", "openbb-wsj"] alpha-vantage = ["openbb-alpha-vantage"] biztoc = ["openbb-biztoc"] cboe = ["openbb-cboe"] @@ -4764,4 +4781,4 @@ wsj = ["openbb-wsj"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "a2901737d966bcf33f21094863132898f6ab2b3469e371bdd753f5651ff5a3cb" +content-hash = "814de57cabbeaba8d3614703e3ac73d124aded9ff34970c06957fad994c6397f" diff --git a/openbb_platform/providers/deribit/README.md b/openbb_platform/providers/deribit/README.md new file mode 100644 index 000000000000..af2e097201f8 --- /dev/null +++ b/openbb_platform/providers/deribit/README.md @@ -0,0 +1,12 @@ +# OpenBB Deribit Provider Extension + +## Coverage + +- obb.derivatives.options.chains + - Support for symbols: + - BTC + - ETH + - XRP + - SOL + - BNB + - PAXG diff --git a/openbb_platform/providers/deribit/__init__.py b/openbb_platform/providers/deribit/__init__.py new file mode 100644 index 000000000000..9c4295e33ba5 --- /dev/null +++ b/openbb_platform/providers/deribit/__init__.py @@ -0,0 +1 @@ +"""OpenBB Deribit Provider Module.""" diff --git a/openbb_platform/providers/deribit/openbb_deribit/__init__.py b/openbb_platform/providers/deribit/openbb_deribit/__init__.py new file mode 100644 index 000000000000..c09d418bf07c --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/__init__.py @@ -0,0 +1,15 @@ +"""OpenBB Deribit Provider Module.""" + +from openbb_core.provider.abstract.provider import Provider + +from openbb_deribit.models.options_chains import DeribitOptionsChainsFetcher + +deribit_provider = Provider( + name="deribit", + website="https://deribit.com/", + description="""Unofficial Python client for public data published by Deribit.""", + credentials=None, + fetcher_dict={"OptionsChains": DeribitOptionsChainsFetcher}, + repr_name="Deribit Public Data", + instructions="This provider does not require any credentials and is not meant for trading.", +) diff --git a/openbb_platform/providers/deribit/openbb_deribit/models/__init__.py b/openbb_platform/providers/deribit/openbb_deribit/models/__init__.py new file mode 100644 index 000000000000..894c02c22fa0 --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/models/__init__.py @@ -0,0 +1 @@ +"""Deribit Data Models.""" diff --git a/openbb_platform/providers/deribit/openbb_deribit/models/options_chains.py b/openbb_platform/providers/deribit/openbb_deribit/models/options_chains.py new file mode 100644 index 000000000000..9e55c65ed1cf --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/models/options_chains.py @@ -0,0 +1,279 @@ +"""Deribit Options Chains Model.""" + +# pylint: disable=unused-argument + +from datetime import datetime +from typing import Any, Optional, Union + +from openbb_core.app.model.abstract.error import OpenBBError +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.options_chains import ( + OptionsChainsData, + OptionsChainsQueryParams, +) +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_deribit.utils.helpers import DERIBIT_OPTIONS_SYMBOLS +from pydantic import Field, field_validator + + +class DeribitOptionsChainsQueryParams(OptionsChainsQueryParams): + """Deribit Options Chains Query Parameters Model.""" + + __json_schema_extra__ = { + "symbol": { + "multiple_items_allowed": False, + "choices": DERIBIT_OPTIONS_SYMBOLS, + } + } + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def _validate_symbol(cls, v): + """Validate the symbol.""" + if v.upper() not in DERIBIT_OPTIONS_SYMBOLS: + raise ValueError( + f"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_OPTIONS_SYMBOLS)}", + ) + return v + + +class DeribitOptionsChainsData(OptionsChainsData): + """Deribit Options Chains Data Model.""" + + __alias_dict__ = { + "contract_symbol": "instrument_name", + "change_percent": "price_change", + "underlying_symbol": "underlying_index", + "underlying_spot_price": "index_price", + "bid_size": "best_bid_amount", + "ask_size": "best_ask_amount", + "bid": "best_bid_price", + "ask": "best_ask_price", + "implied_volatility": "mark_iv", + "mark": "mark_price", + "last_trade_price": "last_price", + "volume_notional": "volume_usd", + } + + __doc__ = OptionsChainsData.__doc__ + + bid_iv: list[Union[float, None]] = Field( + default_factory=list, + description="The implied volatility of the bid price.", + json_schema_extra={"x-unit_measurement": "decimal"}, + ) + ask_iv: list[Union[float, None]] = Field( + default_factory=list, + description="The implied volatility of the ask price.", + json_schema_extra={"x-unit_measurement": "decimal"}, + ) + interest_rate: list[Union[float, None]] = Field( + default_factory=list, + description="The interest rate used by Deribit to calculate greeks.", + ) + underlying_spot_price: list[float] = Field( + description="The spot price of the underlying asset." + " The underlying asset is the specific future or index that the option is based on.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + settlement_price: list[Union[float, None]] = Field( + default_factory=list, + description="The settlement price of the contract.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + min_price: list[Union[float, None]] = Field( + default_factory=list, + description="The minimum price allowed.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + max_price: list[Union[float, None]] = Field( + default_factory=list, + description="The maximum price allowed.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + volume_notional: list[Union[float, None]] = Field( + default_factory=list, + description="The notional trading volume of the contract, as USD or USDC.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + timestamp: list[datetime] = Field( + description="The datetime of the data, as America/New_York time.", + ) + + +class DeribitOptionsChainsFetcher( + Fetcher[DeribitOptionsChainsQueryParams, DeribitOptionsChainsData] +): + """Deribit Options Chains Fetcher.""" + + require_credentials = False + + @staticmethod + def transform_query(params: dict[str, Any]) -> DeribitOptionsChainsQueryParams: + """Transform the query parameters.""" + return DeribitOptionsChainsQueryParams(**params) + + @staticmethod + async def aextract_data( + query: DeribitOptionsChainsQueryParams, + credentials: Optional[dict[str, str]], + **kwargs: Any, + ) -> list[dict]: + """Extract the data.""" + # pylint: disable=import-outside-toplevel + import asyncio # noqa + import json + import websockets + from openbb_deribit.utils.helpers import get_options_symbols + from pandas import to_datetime + from warnings import warn + + # We need to identify each option contract in order to fetch the chains data. + symbols_dict: dict[str, str] = {} + + try: + symbols_dict = await get_options_symbols(query.symbol) + except OpenBBError as e: + raise OpenBBError(e) from e + + # For each expiration, we need to create a websocket connection to fetch the data. + # We subscribe to each contract symbol and break the connection when we have all the data for an expiry. + # If it takes too long, we break the connection and return an error message. + results: list = [] + messages: set = set() + + async def call_api(expiration): + """Call the Deribit API.""" + symbols = symbols_dict[expiration] + received_symbols: set = set() + msg = { + "jsonrpc": "2.0", + "id": 3600, + "method": "public/subscribe", + "params": {"channels": ["ticker." + d + ".100ms" for d in symbols]}, + } + async with websockets.connect( + "wss://www.deribit.com/ws/api/v2" + ) as websocket: + await websocket.send(json.dumps(msg)) + try: + await asyncio.wait_for( + receive_data(websocket, symbols, received_symbols), timeout=2.0 + ) + except asyncio.TimeoutError: + messages.add(f"Timeout reached for {expiration}, data incomplete.") + + async def receive_data(websocket, symbols, received_symbols): + """Receive the data from the websocket with a timeout.""" + while websocket.open: + response = await websocket.recv() + data = json.loads(response) + + if "params" not in data: + continue + + if "error" in data and data.get("error"): + messages.add(f"Error while receiving data -> {data['error']}") + break + + res = data.get("params", {}).get("data", {}) + symbol = res.get("instrument_name") + + # While we are handling the data, we will parse the message. + if symbol not in received_symbols: + received_symbols.add(symbol) + stats = res.pop("stats", {}) + greeks = res.pop("greeks", {}) + timestamp = res.pop("timestamp", None) + underlying_symbol = res.get("underlying_index") + + if underlying_symbol == "index_price": + res["underlying_index"] = symbol.split("-")[0].replace("_", "-") + + res["timestamp"] = to_datetime( + timestamp, unit="ms", utc=True + ).tz_convert("America/New_York") + + if res.get("estimated_delivery_price") == res.get("index_price"): + _ = res.pop("estimated_delivery_price", None) + + _ = res.pop("state", None) + result = { + "expiration": to_datetime(symbol.split("-")[1]).date(), + "strike": ( + float(symbol.split("-")[2].replace("d", ".")) + if "d" in symbol.split("-")[2] + else int(symbol.split("-")[2]) + ), + "option_type": ( + "call" + if symbol.endswith("-C") + else "put" if symbol.endswith("-P") else None + ), + **res, + **stats, + **greeks, + } + result["dte"] = ( + result["expiration"] - to_datetime("today").date() + ).days + results.append(result) + + if len(received_symbols) == len(symbols): + await websocket.close() + break + + tasks = [ + asyncio.create_task(call_api(expiration)) for expiration in symbols_dict + ] + await asyncio.gather(*tasks) + + if messages and not results: + raise OpenBBError(", ".join(messages)) + + if results and messages: + for message in messages: + warn(message) + + if not results and not messages: + raise EmptyDataError("All requests returned empty with no error messages.") + + return results + + @staticmethod + def transform_data( + query: DeribitOptionsChainsQueryParams, + data: list[dict], + **kwargs: Any, + ) -> DeribitOptionsChainsData: + """Transform the data.""" + # pylint: disable=import-outside-toplevel + from numpy import nan + from pandas import DataFrame + + df = DataFrame(data) + + # For BTC and ETH options, we need to convert price units to USD. + for col in df.columns: + if col in [ + "last_price", + "settlement_price", + "mark_price", + "min_price", + "max_price", + "best_ask_price", + "best_bid_price", + "high", + "low", + ] and query.symbol.upper() in ["BTC", "ETH"]: + df.loc[:, col] = df[col].astype(float).multiply(df.index_price).round(2) + elif col in ["price_change", "mark_iv", "bid_iv", "ask_iv"]: + df.loc[:, col] = df[col].astype(float).divide(100) + + df = df.replace({nan: None}) + df = df.sort_values(["expiration", "strike", "option_type"]) + df = df.reset_index(drop=True) + df.loc[:, "contract_size"] = 1 + results = df.to_dict(orient="list") + + return DeribitOptionsChainsData.model_validate(results) diff --git a/openbb_platform/providers/deribit/openbb_deribit/utils/__init__.py b/openbb_platform/providers/deribit/openbb_deribit/utils/__init__.py new file mode 100644 index 000000000000..fcda51074edb --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/utils/__init__.py @@ -0,0 +1 @@ +"""Deribit Utility Functions.""" diff --git a/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py b/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py new file mode 100644 index 000000000000..1cddcf297eb7 --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py @@ -0,0 +1,111 @@ +"""Deribit Helpers Module.""" + +from typing import Literal, Optional + +from async_lru import alru_cache +from openbb_core.app.model.abstract.error import OpenBBError + +DERIBIT_OPTIONS_SYMBOLS = ["BTC", "ETH", "SOL", "XRP", "BNB", "PAXG"] +OptionsSymbols = Literal["BTC", "ETH", "SOL", "XRP", "BNB", "PAXG"] +CURRENCIES = ["BTC", "ETH", "USDC", "USDT", "EURR", "all"] +Currencies = Literal["BTC", "ETH", "USDC", "USDT", "EURR", "all"] +DERIVATIVE_TYPES = ["future", "option", "spot", "future_combo", "option_combo"] +DerivativeTypes = Literal["future", "option", "spot", "future_combo", "option_combo"] +BASE_URL = "https://www.deribit.com" + + +@alru_cache(maxsize=64) +async def get_instruments( + currency: Currencies = "BTC", + derivative_type: Optional[DerivativeTypes] = None, +) -> list[dict]: + """ + Get Deribit instruments. + + Parameters + ---------- + currency : Currencies + The currency to get instruments for. Default is "BTC". + derivative_type : Optional[DerivativeTypes] + The type of derivative to get instruments for. Default is None, which gets all types. + + Returns + ------- + list[dict] + A list of instrument dictionaries. + """ + # pylint: disable=import-outside-toplevel + from openbb_core.provider.utils.helpers import amake_request + + if currency != "all" and currency.upper() not in CURRENCIES: + raise ValueError( + f"Currency {currency} not supported. Supported currencies are: {', '.join(CURRENCIES)}" + ) + if derivative_type and derivative_type not in DERIVATIVE_TYPES: + raise ValueError( + f"Kind {derivative_type} not supported. Supported kinds are: {', '.join(DERIVATIVE_TYPES)}" + ) + + url = f"{BASE_URL}/api/v2/public/get_instruments?currency={currency.upper() if currency != 'all' else 'any'}" + + if derivative_type is not None: + url += f"&kind={derivative_type}" + + try: + response = await amake_request(url) + return response.get("result", []) # type: ignore + except Exception as e: # pylint: disable=broad-except + raise OpenBBError( + f"Failed to get instruments -> {e.__class__.__name__}: {e}" + ) from e + + +async def get_options_symbols(symbol: OptionsSymbols = "BTC") -> dict: + """ + Get a dictionary of contract symbols by expiry. + + Parameters + ---------- + symbol : OptionsSymbols + The underlying symbol to get options for. Default is "BTC". + + Returns + ------- + dict[str, str] + A dictionary of contract symbols by expiry date. + """ + # pylint: disable=import-outside-toplevel + from pandas import to_datetime + + if symbol.upper() not in DERIBIT_OPTIONS_SYMBOLS: + raise ValueError( + f"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_OPTIONS_SYMBOLS)}", + ) + + currency = ( + "USDC" if symbol.upper() in ["BNB", "PAXG", "SOL", "XRP"] else symbol.upper() + ) + instruments = await get_instruments(currency, "option") + expirations: dict = {} + all_options = list( + set( + d.get("instrument_name") + for d in instruments + if d.get("instrument_name").startswith(symbol) + and d.get("instrument_name").endswith(("-C", "-P")) + ) + ) + for item in sorted( + list( + set( + ( + to_datetime(d.split("-")[1]).date().strftime("%Y-%m-%d"), + d.split("-")[1], + ) + for d in all_options + ) + ) + ): + expirations[item[0]] = item[1] + + return {k: [d for d in all_options if v in d] for k, v in expirations.items()} diff --git a/openbb_platform/providers/deribit/poetry.lock b/openbb_platform/providers/deribit/poetry.lock new file mode 100644 index 000000000000..8527753addde --- /dev/null +++ b/openbb_platform/providers/deribit/poetry.lock @@ -0,0 +1,1609 @@ +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.4.4" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, + {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, +] + +[[package]] +name = "aiohttp" +version = "3.11.10" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.9" +files = [ + {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cbad88a61fa743c5d283ad501b01c153820734118b65aee2bd7dbb735475ce0d"}, + {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80886dac673ceaef499de2f393fc80bb4481a129e6cb29e624a12e3296cc088f"}, + {file = "aiohttp-3.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61b9bae80ed1f338c42f57c16918853dc51775fb5cb61da70d590de14d8b5fb4"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e2e576caec5c6a6b93f41626c9c02fc87cd91538b81a3670b2e04452a63def6"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02c13415b5732fb6ee7ff64583a5e6ed1c57aa68f17d2bda79c04888dfdc2769"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfce37f31f20800a6a6620ce2cdd6737b82e42e06e6e9bd1b36f546feb3c44f"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3bbbfff4c679c64e6e23cb213f57cc2c9165c9a65d63717108a644eb5a7398df"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49c7dbbc1a559ae14fc48387a115b7d4bbc84b4a2c3b9299c31696953c2a5219"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68386d78743e6570f054fe7949d6cb37ef2b672b4d3405ce91fafa996f7d9b4d"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9ef405356ba989fb57f84cac66f7b0260772836191ccefbb987f414bcd2979d9"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5d6958671b296febe7f5f859bea581a21c1d05430d1bbdcf2b393599b1cdce77"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:99b7920e7165be5a9e9a3a7f1b680f06f68ff0d0328ff4079e5163990d046767"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0dc49f42422163efb7e6f1df2636fe3db72713f6cd94688e339dbe33fe06d61d"}, + {file = "aiohttp-3.11.10-cp310-cp310-win32.whl", hash = "sha256:40d1c7a7f750b5648642586ba7206999650208dbe5afbcc5284bcec6579c9b91"}, + {file = "aiohttp-3.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:68ff6f48b51bd78ea92b31079817aff539f6c8fc80b6b8d6ca347d7c02384e33"}, + {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:77c4aa15a89847b9891abf97f3d4048f3c2d667e00f8a623c89ad2dccee6771b"}, + {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:909af95a72cedbefe5596f0bdf3055740f96c1a4baa0dd11fd74ca4de0b4e3f1"}, + {file = "aiohttp-3.11.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:386fbe79863eb564e9f3615b959e28b222259da0c48fd1be5929ac838bc65683"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3de34936eb1a647aa919655ff8d38b618e9f6b7f250cc19a57a4bf7fd2062b6d"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c9527819b29cd2b9f52033e7fb9ff08073df49b4799c89cb5754624ecd98299"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a96e3e03300b41f261bbfd40dfdbf1c301e87eab7cd61c054b1f2e7c89b9e8"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98f5635f7b74bcd4f6f72fcd85bea2154b323a9f05226a80bc7398d0c90763b0"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03b6002e20938fc6ee0918c81d9e776bebccc84690e2b03ed132331cca065ee5"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6362cc6c23c08d18ddbf0e8c4d5159b5df74fea1a5278ff4f2c79aed3f4e9f46"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3691ed7726fef54e928fe26344d930c0c8575bc968c3e239c2e1a04bd8cf7838"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31d5093d3acd02b31c649d3a69bb072d539d4c7659b87caa4f6d2bcf57c2fa2b"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8b3cf2dc0f0690a33f2d2b2cb15db87a65f1c609f53c37e226f84edb08d10f52"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fbbaea811a2bba171197b08eea288b9402faa2bab2ba0858eecdd0a4105753a3"}, + {file = "aiohttp-3.11.10-cp311-cp311-win32.whl", hash = "sha256:4b2c7ac59c5698a7a8207ba72d9e9c15b0fc484a560be0788b31312c2c5504e4"}, + {file = "aiohttp-3.11.10-cp311-cp311-win_amd64.whl", hash = "sha256:974d3a2cce5fcfa32f06b13ccc8f20c6ad9c51802bb7f829eae8a1845c4019ec"}, + {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b78f053a7ecfc35f0451d961dacdc671f4bcbc2f58241a7c820e9d82559844cf"}, + {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab7485222db0959a87fbe8125e233b5a6f01f4400785b36e8a7878170d8c3138"}, + {file = "aiohttp-3.11.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf14627232dfa8730453752e9cdc210966490992234d77ff90bc8dc0dce361d5"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076bc454a7e6fd646bc82ea7f98296be0b1219b5e3ef8a488afbdd8e81fbac50"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:482cafb7dc886bebeb6c9ba7925e03591a62ab34298ee70d3dd47ba966370d2c"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf3d1a519a324af764a46da4115bdbd566b3c73fb793ffb97f9111dbc684fc4d"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24213ba85a419103e641e55c27dc7ff03536c4873470c2478cce3311ba1eee7b"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b99acd4730ad1b196bfb03ee0803e4adac371ae8efa7e1cbc820200fc5ded109"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:14cdb5a9570be5a04eec2ace174a48ae85833c2aadc86de68f55541f66ce42ab"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7e97d622cb083e86f18317282084bc9fbf261801b0192c34fe4b1febd9f7ae69"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:012f176945af138abc10c4a48743327a92b4ca9adc7a0e078077cdb5dbab7be0"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44224d815853962f48fe124748227773acd9686eba6dc102578defd6fc99e8d9"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c87bf31b7fdab94ae3adbe4a48e711bfc5f89d21cf4c197e75561def39e223bc"}, + {file = "aiohttp-3.11.10-cp312-cp312-win32.whl", hash = "sha256:06a8e2ee1cbac16fe61e51e0b0c269400e781b13bcfc33f5425912391a542985"}, + {file = "aiohttp-3.11.10-cp312-cp312-win_amd64.whl", hash = "sha256:be2b516f56ea883a3e14dda17059716593526e10fb6303189aaf5503937db408"}, + {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8cc5203b817b748adccb07f36390feb730b1bc5f56683445bfe924fc270b8816"}, + {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ef359ebc6949e3a34c65ce20230fae70920714367c63afd80ea0c2702902ccf"}, + {file = "aiohttp-3.11.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9bca390cb247dbfaec3c664326e034ef23882c3f3bfa5fbf0b56cad0320aaca5"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811f23b3351ca532af598405db1093f018edf81368e689d1b508c57dcc6b6a32"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddf5f7d877615f6a1e75971bfa5ac88609af3b74796ff3e06879e8422729fd01"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ab29b8a0beb6f8eaf1e5049252cfe74adbaafd39ba91e10f18caeb0e99ffb34"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c49a76c1038c2dd116fa443eba26bbb8e6c37e924e2513574856de3b6516be99"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f3dc0e330575f5b134918976a645e79adf333c0a1439dcf6899a80776c9ab39"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:efb15a17a12497685304b2d976cb4939e55137df7b09fa53f1b6a023f01fcb4e"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:db1d0b28fcb7f1d35600150c3e4b490775251dea70f894bf15c678fdd84eda6a"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:15fccaf62a4889527539ecb86834084ecf6e9ea70588efde86e8bc775e0e7542"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:593c114a2221444f30749cc5e5f4012488f56bd14de2af44fe23e1e9894a9c60"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7852bbcb4d0d2f0c4d583f40c3bc750ee033265d80598d0f9cb6f372baa6b836"}, + {file = "aiohttp-3.11.10-cp313-cp313-win32.whl", hash = "sha256:65e55ca7debae8faaffee0ebb4b47a51b4075f01e9b641c31e554fd376595c6c"}, + {file = "aiohttp-3.11.10-cp313-cp313-win_amd64.whl", hash = "sha256:beb39a6d60a709ae3fb3516a1581777e7e8b76933bb88c8f4420d875bb0267c6"}, + {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0580f2e12de2138f34debcd5d88894786453a76e98febaf3e8fe5db62d01c9bf"}, + {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a55d2ad345684e7c3dd2c20d2f9572e9e1d5446d57200ff630e6ede7612e307f"}, + {file = "aiohttp-3.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04814571cb72d65a6899db6099e377ed00710bf2e3eafd2985166f2918beaf59"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e44a9a3c053b90c6f09b1bb4edd880959f5328cf63052503f892c41ea786d99f"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:502a1464ccbc800b4b1995b302efaf426e8763fadf185e933c2931df7db9a199"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:613e5169f8ae77b1933e42e418a95931fb4867b2991fc311430b15901ed67079"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cca22a61b7fe45da8fc73c3443150c3608750bbe27641fc7558ec5117b27fdf"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86a5dfcc39309470bd7b68c591d84056d195428d5d2e0b5ccadfbaf25b026ebc"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:77ae58586930ee6b2b6f696c82cf8e78c8016ec4795c53e36718365f6959dc82"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:78153314f26d5abef3239b4a9af20c229c6f3ecb97d4c1c01b22c4f87669820c"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:98283b94cc0e11c73acaf1c9698dea80c830ca476492c0fe2622bd931f34b487"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:53bf2097e05c2accc166c142a2090e4c6fd86581bde3fd9b2d3f9e93dda66ac1"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5532f0441fc09c119e1dca18fbc0687e64fbeb45aa4d6a87211ceaee50a74c4"}, + {file = "aiohttp-3.11.10-cp39-cp39-win32.whl", hash = "sha256:47ad15a65fb41c570cd0ad9a9ff8012489e68176e7207ec7b82a0940dddfd8be"}, + {file = "aiohttp-3.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:c6b9e6d7e41656d78e37ce754813fa44b455c3d0d0dced2a047def7dc5570b74"}, + {file = "aiohttp-3.11.10.tar.gz", hash = "sha256:b1fc6b45010a8d0ff9e88f9f2418c6fd408c99c211257334aff41597ebece42e"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" +aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.7.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +files = [ + {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, + {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "async-timeout" +version = "5.0.1" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, +] + +[[package]] +name = "attrs" +version = "24.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, +] + +[package.extras] +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 = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.115.6" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305"}, + {file = "fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.40.0,<0.42.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "frozenlist" +version = "1.5.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, +] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["chardet (>=2.2)", "genshi", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "importlib-metadata" +version = "8.5.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, +] + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + +[[package]] +name = "multidict" +version = "6.1.0" +description = "multidict implementation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, + {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, + {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, + {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, + {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, + {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, + {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, + {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, + {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, + {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, + {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, + {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, + {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, + {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, + {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "numpy" +version = "2.0.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, + {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, + {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, + {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, + {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, + {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, + {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, + {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, + {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, + {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, +] + +[[package]] +name = "numpy" +version = "2.1.3" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +files = [ + {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, + {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, + {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, + {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, + {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, + {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, + {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, + {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, + {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, + {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, + {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, + {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, +] + +[[package]] +name = "openbb-core" +version = "1.3.7" +description = "OpenBB package with core functionality." +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "openbb_core-1.3.7-py3-none-any.whl", hash = "sha256:2dd620db5d17c8c4802dd0537de92fb88d11f4f7252ab026e54302c6f86467fa"}, + {file = "openbb_core-1.3.7.tar.gz", hash = "sha256:2e6facd812ee4ad43b9444fedcf3211599d7cda9cbb4999647cd8e4d9e4af210"}, +] + +[package.dependencies] +aiohttp = ">=3.10.11,<4.0.0" +fastapi = ">=0.115,<0.116" +html5lib = ">=1.1,<2.0" +importlib-metadata = ">=6.8.0" +pandas = ">=1.5.3" +posthog = ">=3.3.1,<4.0.0" +pydantic = ">=2.5.1,<3.0.0" +pyjwt = ">=2.10.1,<3.0.0" +python-dotenv = ">=1.0.0,<2.0.0" +python-multipart = ">=0.0.18,<0.0.19" +requests = ">=2.32.1,<3.0.0" +ruff = ">=0.7,<0.8" +uuid7 = ">=0.1.0,<0.2.0" +uvicorn = ">=0.32.0,<0.33.0" +websockets = ">=13.0,<14.0" + +[[package]] +name = "pandas" +version = "2.2.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "posthog" +version = "3.7.4" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.7.4-py2.py3-none-any.whl", hash = "sha256:21c18c6bf43b2de303ea4cd6e95804cc0f24c20cb2a96a8fd09da2ed50b62faa"}, + {file = "posthog-3.7.4.tar.gz", hash = "sha256:19384bd09d330f9787a7e2446aba14c8057ece56144970ea2791072d4e40cd36"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "django", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] + +[[package]] +name = "propcache" +version = "0.2.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +files = [ + {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, + {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, + {file = "propcache-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b"}, + {file = "propcache-0.2.1-cp310-cp310-win32.whl", hash = "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4"}, + {file = "propcache-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e"}, + {file = "propcache-0.2.1-cp311-cp311-win32.whl", hash = "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034"}, + {file = "propcache-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518"}, + {file = "propcache-0.2.1-cp312-cp312-win32.whl", hash = "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246"}, + {file = "propcache-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30"}, + {file = "propcache-0.2.1-cp313-cp313-win32.whl", hash = "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6"}, + {file = "propcache-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6a9a8c34fb7bb609419a211e59da8887eeca40d300b5ea8e56af98f6fbbb1541"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae1aa1cd222c6d205853b3013c69cd04515f9d6ab6de4b0603e2e1c33221303e"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:accb6150ce61c9c4b7738d45550806aa2b71c7668c6942f17b0ac182b6142fd4"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eee736daafa7af6d0a2dc15cc75e05c64f37fc37bafef2e00d77c14171c2097"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7a31fc1e1bd362874863fdeed71aed92d348f5336fd84f2197ba40c59f061bd"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba4cfa1052819d16699e1d55d18c92b6e094d4517c41dd231a8b9f87b6fa681"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f089118d584e859c62b3da0892b88a83d611c2033ac410e929cb6754eec0ed16"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:781e65134efaf88feb447e8c97a51772aa75e48b794352f94cb7ea717dedda0d"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31f5af773530fd3c658b32b6bdc2d0838543de70eb9a2156c03e410f7b0d3aae"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:a7a078f5d37bee6690959c813977da5291b24286e7b962e62a94cec31aa5188b"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cea7daf9fc7ae6687cf1e2c049752f19f146fdc37c2cc376e7d0032cf4f25347"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b3489ff1ed1e8315674d0775dc7d2195fb13ca17b3808721b54dbe9fd020faf"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9403db39be1393618dd80c746cb22ccda168efce239c73af13c3763ef56ffc04"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5d97151bc92d2b2578ff7ce779cdb9174337390a535953cbb9452fb65164c587"}, + {file = "propcache-0.2.1-cp39-cp39-win32.whl", hash = "sha256:9caac6b54914bdf41bcc91e7eb9147d331d29235a7c967c150ef5df6464fd1bb"}, + {file = "propcache-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:92fc4500fcb33899b05ba73276dfb684a20d31caa567b7cb5252d48f896a91b1"}, + {file = "propcache-0.2.1-py3-none-any.whl", hash = "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54"}, + {file = "propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64"}, +] + +[[package]] +name = "pydantic" +version = "2.10.3" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d"}, + {file = "pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.27.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pyjwt" +version = "2.10.1" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, + {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.18" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python_multipart-0.0.18-py3-none-any.whl", hash = "sha256:efe91480f485f6a361427a541db4796f9e1591afc0fb8e7a4ba06bfbc6708996"}, + {file = "python_multipart-0.0.18.tar.gz", hash = "sha256:7a68db60c8bfb82e460637fa4750727b45af1d5e2ed215593f917f64694d34fe"}, +] + +[[package]] +name = "pytz" +version = "2024.2" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "ruff" +version = "0.7.4" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.7.4-py3-none-linux_armv6l.whl", hash = "sha256:a4919925e7684a3f18e18243cd6bea7cfb8e968a6eaa8437971f681b7ec51478"}, + {file = "ruff-0.7.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfb365c135b830778dda8c04fb7d4280ed0b984e1aec27f574445231e20d6c63"}, + {file = "ruff-0.7.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:63a569b36bc66fbadec5beaa539dd81e0527cb258b94e29e0531ce41bacc1f20"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d06218747d361d06fd2fdac734e7fa92df36df93035db3dc2ad7aa9852cb109"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0cea28d0944f74ebc33e9f934238f15c758841f9f5edd180b5315c203293452"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80094ecd4793c68b2571b128f91754d60f692d64bc0d7272ec9197fdd09bf9ea"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:997512325c6620d1c4c2b15db49ef59543ef9cd0f4aa8065ec2ae5103cedc7e7"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00b4cf3a6b5fad6d1a66e7574d78956bbd09abfd6c8a997798f01f5da3d46a05"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7dbdc7d8274e1422722933d1edddfdc65b4336abf0b16dfcb9dedd6e6a517d06"}, + {file = "ruff-0.7.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e92dfb5f00eaedb1501b2f906ccabfd67b2355bdf117fea9719fc99ac2145bc"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3bd726099f277d735dc38900b6a8d6cf070f80828877941983a57bca1cd92172"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2e32829c429dd081ee5ba39aef436603e5b22335c3d3fff013cd585806a6486a"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:662a63b4971807623f6f90c1fb664613f67cc182dc4d991471c23c541fee62dd"}, + {file = "ruff-0.7.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:876f5e09eaae3eb76814c1d3b68879891d6fde4824c015d48e7a7da4cf066a3a"}, + {file = "ruff-0.7.4-py3-none-win32.whl", hash = "sha256:75c53f54904be42dd52a548728a5b572344b50d9b2873d13a3f8c5e3b91f5cac"}, + {file = "ruff-0.7.4-py3-none-win_amd64.whl", hash = "sha256:745775c7b39f914238ed1f1b0bebed0b9155a17cd8bc0b08d3c87e4703b990d6"}, + {file = "ruff-0.7.4-py3-none-win_arm64.whl", hash = "sha256:11bff065102c3ae9d3ea4dc9ecdfe5a5171349cdd0787c1fc64761212fc9cf1f"}, + {file = "ruff-0.7.4.tar.gz", hash = "sha256:cd12e35031f5af6b9b93715d8c4f40360070b2041f81273d0527683d5708fce2"}, +] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "starlette" +version = "0.41.3" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"}, + {file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "tzdata" +version = "2024.2" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, +] + +[[package]] +name = "urllib3" +version = "2.2.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "uuid7" +version = "0.1.0" +description = "UUID version 7, generating time-sorted UUIDs with 200ns time resolution and 48 bits of randomness" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uuid7-0.1.0-py2.py3-none-any.whl", hash = "sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61"}, + {file = "uuid7-0.1.0.tar.gz", hash = "sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c"}, +] + +[[package]] +name = "uvicorn" +version = "0.32.1" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.32.1-py3-none-any.whl", hash = "sha256:82ad92fd58da0d12af7482ecdb5f2470a04c9c9a53ced65b9bbb4a205377602e"}, + {file = "uvicorn-0.32.1.tar.gz", hash = "sha256:ee9519c246a72b1c084cea8d3b44ed6026e78a4a309cbedae9c37e4cb9fbb175"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websockets" +version = "13.1" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, + {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, + {file = "websockets-13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f779498eeec470295a2b1a5d97aa1bc9814ecd25e1eb637bd9d1c73a327387f6"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676df3fe46956fbb0437d8800cd5f2b6d41143b6e7e842e60554398432cf29b"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7affedeb43a70351bb811dadf49493c9cfd1ed94c9c70095fd177e9cc1541fa"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1971e62d2caa443e57588e1d82d15f663b29ff9dfe7446d9964a4b6f12c1e700"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5f2e75431f8dc4a47f31565a6e1355fb4f2ecaa99d6b89737527ea917066e26c"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58cf7e75dbf7e566088b07e36ea2e3e2bd5676e22216e4cad108d4df4a7402a0"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c90d6dec6be2c7d03378a574de87af9b1efea77d0c52a8301dd831ece938452f"}, + {file = "websockets-13.1-cp310-cp310-win32.whl", hash = "sha256:730f42125ccb14602f455155084f978bd9e8e57e89b569b4d7f0f0c17a448ffe"}, + {file = "websockets-13.1-cp310-cp310-win_amd64.whl", hash = "sha256:5993260f483d05a9737073be197371940c01b257cc45ae3f1d5d7adb371b266a"}, + {file = "websockets-13.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:61fc0dfcda609cda0fc9fe7977694c0c59cf9d749fbb17f4e9483929e3c48a19"}, + {file = "websockets-13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ceec59f59d092c5007e815def4ebb80c2de330e9588e101cf8bd94c143ec78a5"}, + {file = "websockets-13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1dca61c6db1166c48b95198c0b7d9c990b30c756fc2923cc66f68d17dc558fd"}, + {file = "websockets-13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308e20f22c2c77f3f39caca508e765f8725020b84aa963474e18c59accbf4c02"}, + {file = "websockets-13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d516c325e6540e8a57b94abefc3459d7dab8ce52ac75c96cad5549e187e3a7"}, + {file = "websockets-13.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c6e35319b46b99e168eb98472d6c7d8634ee37750d7693656dc766395df096"}, + {file = "websockets-13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f9fee94ebafbc3117c30be1844ed01a3b177bb6e39088bc6b2fa1dc15572084"}, + {file = "websockets-13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7c1e90228c2f5cdde263253fa5db63e6653f1c00e7ec64108065a0b9713fa1b3"}, + {file = "websockets-13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6548f29b0e401eea2b967b2fdc1c7c7b5ebb3eeb470ed23a54cd45ef078a0db9"}, + {file = "websockets-13.1-cp311-cp311-win32.whl", hash = "sha256:c11d4d16e133f6df8916cc5b7e3e96ee4c44c936717d684a94f48f82edb7c92f"}, + {file = "websockets-13.1-cp311-cp311-win_amd64.whl", hash = "sha256:d04f13a1d75cb2b8382bdc16ae6fa58c97337253826dfe136195b7f89f661557"}, + {file = "websockets-13.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9d75baf00138f80b48f1eac72ad1535aac0b6461265a0bcad391fc5aba875cfc"}, + {file = "websockets-13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9b6f347deb3dcfbfde1c20baa21c2ac0751afaa73e64e5b693bb2b848efeaa49"}, + {file = "websockets-13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de58647e3f9c42f13f90ac7e5f58900c80a39019848c5547bc691693098ae1bd"}, + {file = "websockets-13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1b54689e38d1279a51d11e3467dd2f3a50f5f2e879012ce8f2d6943f00e83f0"}, + {file = "websockets-13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf1781ef73c073e6b0f90af841aaf98501f975d306bbf6221683dd594ccc52b6"}, + {file = "websockets-13.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d23b88b9388ed85c6faf0e74d8dec4f4d3baf3ecf20a65a47b836d56260d4b9"}, + {file = "websockets-13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3c78383585f47ccb0fcf186dcb8a43f5438bd7d8f47d69e0b56f71bf431a0a68"}, + {file = "websockets-13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d6d300f8ec35c24025ceb9b9019ae9040c1ab2f01cddc2bcc0b518af31c75c14"}, + {file = "websockets-13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a9dcaf8b0cc72a392760bb8755922c03e17a5a54e08cca58e8b74f6902b433cf"}, + {file = "websockets-13.1-cp312-cp312-win32.whl", hash = "sha256:2f85cf4f2a1ba8f602298a853cec8526c2ca42a9a4b947ec236eaedb8f2dc80c"}, + {file = "websockets-13.1-cp312-cp312-win_amd64.whl", hash = "sha256:38377f8b0cdeee97c552d20cf1865695fcd56aba155ad1b4ca8779a5b6ef4ac3"}, + {file = "websockets-13.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a9ab1e71d3d2e54a0aa646ab6d4eebfaa5f416fe78dfe4da2839525dc5d765c6"}, + {file = "websockets-13.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b9d7439d7fab4dce00570bb906875734df13d9faa4b48e261c440a5fec6d9708"}, + {file = "websockets-13.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:327b74e915cf13c5931334c61e1a41040e365d380f812513a255aa804b183418"}, + {file = "websockets-13.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:325b1ccdbf5e5725fdcb1b0e9ad4d2545056479d0eee392c291c1bf76206435a"}, + {file = "websockets-13.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:346bee67a65f189e0e33f520f253d5147ab76ae42493804319b5716e46dddf0f"}, + {file = "websockets-13.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91a0fa841646320ec0d3accdff5b757b06e2e5c86ba32af2e0815c96c7a603c5"}, + {file = "websockets-13.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:18503d2c5f3943e93819238bf20df71982d193f73dcecd26c94514f417f6b135"}, + {file = "websockets-13.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9cd1af7e18e5221d2878378fbc287a14cd527fdd5939ed56a18df8a31136bb2"}, + {file = "websockets-13.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:70c5be9f416aa72aab7a2a76c90ae0a4fe2755c1816c153c1a2bcc3333ce4ce6"}, + {file = "websockets-13.1-cp313-cp313-win32.whl", hash = "sha256:624459daabeb310d3815b276c1adef475b3e6804abaf2d9d2c061c319f7f187d"}, + {file = "websockets-13.1-cp313-cp313-win_amd64.whl", hash = "sha256:c518e84bb59c2baae725accd355c8dc517b4a3ed8db88b4bc93c78dae2974bf2"}, + {file = "websockets-13.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c7934fd0e920e70468e676fe7f1b7261c1efa0d6c037c6722278ca0228ad9d0d"}, + {file = "websockets-13.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:149e622dc48c10ccc3d2760e5f36753db9cacf3ad7bc7bbbfd7d9c819e286f23"}, + {file = "websockets-13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a569eb1b05d72f9bce2ebd28a1ce2054311b66677fcd46cf36204ad23acead8c"}, + {file = "websockets-13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95df24ca1e1bd93bbca51d94dd049a984609687cb2fb08a7f2c56ac84e9816ea"}, + {file = "websockets-13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8dbb1bf0c0a4ae8b40bdc9be7f644e2f3fb4e8a9aca7145bfa510d4a374eeb7"}, + {file = "websockets-13.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035233b7531fb92a76beefcbf479504db8c72eb3bff41da55aecce3a0f729e54"}, + {file = "websockets-13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e4450fc83a3df53dec45922b576e91e94f5578d06436871dce3a6be38e40f5db"}, + {file = "websockets-13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:463e1c6ec853202dd3657f156123d6b4dad0c546ea2e2e38be2b3f7c5b8e7295"}, + {file = "websockets-13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6d6855bbe70119872c05107e38fbc7f96b1d8cb047d95c2c50869a46c65a8e96"}, + {file = "websockets-13.1-cp38-cp38-win32.whl", hash = "sha256:204e5107f43095012b00f1451374693267adbb832d29966a01ecc4ce1db26faf"}, + {file = "websockets-13.1-cp38-cp38-win_amd64.whl", hash = "sha256:485307243237328c022bc908b90e4457d0daa8b5cf4b3723fd3c4a8012fce4c6"}, + {file = "websockets-13.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b37c184f8b976f0c0a231a5f3d6efe10807d41ccbe4488df8c74174805eea7d"}, + {file = "websockets-13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:163e7277e1a0bd9fb3c8842a71661ad19c6aa7bb3d6678dc7f89b17fbcc4aeb7"}, + {file = "websockets-13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b889dbd1342820cc210ba44307cf75ae5f2f96226c0038094455a96e64fb07a"}, + {file = "websockets-13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:586a356928692c1fed0eca68b4d1c2cbbd1ca2acf2ac7e7ebd3b9052582deefa"}, + {file = "websockets-13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7bd6abf1e070a6b72bfeb71049d6ad286852e285f146682bf30d0296f5fbadfa"}, + {file = "websockets-13.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2aad13a200e5934f5a6767492fb07151e1de1d6079c003ab31e1823733ae79"}, + {file = "websockets-13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:df01aea34b6e9e33572c35cd16bae5a47785e7d5c8cb2b54b2acdb9678315a17"}, + {file = "websockets-13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e54affdeb21026329fb0744ad187cf812f7d3c2aa702a5edb562b325191fcab6"}, + {file = "websockets-13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9ef8aa8bdbac47f4968a5d66462a2a0935d044bf35c0e5a8af152d58516dbeb5"}, + {file = "websockets-13.1-cp39-cp39-win32.whl", hash = "sha256:deeb929efe52bed518f6eb2ddc00cc496366a14c726005726ad62c2dd9017a3c"}, + {file = "websockets-13.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c65ffa900e7cc958cd088b9a9157a8141c991f8c53d11087e6fb7277a03f81d"}, + {file = "websockets-13.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5dd6da9bec02735931fccec99d97c29f47cc61f644264eb995ad6c0c27667238"}, + {file = "websockets-13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:2510c09d8e8df777177ee3d40cd35450dc169a81e747455cc4197e63f7e7bfe5"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1c3cf67185543730888b20682fb186fc8d0fa6f07ccc3ef4390831ab4b388d9"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcc03c8b72267e97b49149e4863d57c2d77f13fae12066622dc78fe322490fe6"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:004280a140f220c812e65f36944a9ca92d766b6cc4560be652a0a3883a79ed8a"}, + {file = "websockets-13.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e2620453c075abeb0daa949a292e19f56de518988e079c36478bacf9546ced23"}, + {file = "websockets-13.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9156c45750b37337f7b0b00e6248991a047be4aa44554c9886fe6bdd605aab3b"}, + {file = "websockets-13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80c421e07973a89fbdd93e6f2003c17d20b69010458d3a8e37fb47874bd67d51"}, + {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82d0ba76371769d6a4e56f7e83bb8e81846d17a6190971e38b5de108bde9b0d7"}, + {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9875a0143f07d74dc5e1ded1c4581f0d9f7ab86c78994e2ed9e95050073c94d"}, + {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11e38ad8922c7961447f35c7b17bffa15de4d17c70abd07bfbe12d6faa3e027"}, + {file = "websockets-13.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4059f790b6ae8768471cddb65d3c4fe4792b0ab48e154c9f0a04cefaabcd5978"}, + {file = "websockets-13.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:25c35bf84bf7c7369d247f0b8cfa157f989862c49104c5cf85cb5436a641d93e"}, + {file = "websockets-13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:83f91d8a9bb404b8c2c41a707ac7f7f75b9442a0a876df295de27251a856ad09"}, + {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a43cfdcddd07f4ca2b1afb459824dd3c6d53a51410636a2c7fc97b9a8cf4842"}, + {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a2ef1381632a2f0cb4efeff34efa97901c9fbc118e01951ad7cfc10601a9bb"}, + {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bf774c754c35dbb487360b12c5727adab887f1622b8aed5755880a21c4a20"}, + {file = "websockets-13.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:95858ca14a9f6fa8413d29e0a585b31b278388aa775b8a81fa24830123874678"}, + {file = "websockets-13.1-py3-none-any.whl", hash = "sha256:a9a396a6ad26130cdae92ae10c36af09d9bfe6cafe69670fd3b6da9b07b4044f"}, + {file = "websockets-13.1.tar.gz", hash = "sha256:a3b3366087c1bc0a2795111edcadddb8b3b59509d5db5d7ea3fdd69f954a8878"}, +] + +[[package]] +name = "yarl" +version = "1.18.3" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +files = [ + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, + {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, + {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, + {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, + {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, + {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, + {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, + {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, + {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, + {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, + {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, + {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, + {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.0" + +[[package]] +name = "zipp" +version = "3.21.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "f63dcdb3eaac7db677ee1c887ccfa60049602b6bfead6698a9ca8116c60cf209" diff --git a/openbb_platform/providers/deribit/pyproject.toml b/openbb_platform/providers/deribit/pyproject.toml new file mode 100644 index 000000000000..c5edb5bd7c08 --- /dev/null +++ b/openbb_platform/providers/deribit/pyproject.toml @@ -0,0 +1,20 @@ +[tool.poetry] +name = "openbb-deribit" +version = "1.0.0b" +description = "Deribit is a crypto-native derivatives exchange." +authors = ["OpenBB Team "] +license = "AGPL-3.0-only" +readme = "README.md" +packages = [{ include = "openbb_deribit" }] + +[tool.poetry.dependencies] +python = "^3.9" +openbb-core = "^1.3.7" +async-lru = "^2.0.4" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.plugins."openbb_provider_extension"] +deribit = "openbb_deribit:deribit_provider" diff --git a/openbb_platform/providers/deribit/tests/__init__.py b/openbb_platform/providers/deribit/tests/__init__.py new file mode 100644 index 000000000000..f09bcab29334 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/__init__.py @@ -0,0 +1 @@ +"""OpenBB Deribit Provider Tests.""" diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_get_options_symbols_urllib3_v1.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_get_options_symbols_urllib3_v1.yaml new file mode 100644 index 000000000000..f1d4daab32d0 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_get_options_symbols_urllib3_v1.yaml @@ -0,0 +1,265 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=BTC&kind=option + response: + body: + string: !!binary | + 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 + eHz+ifEf/zcumxcqrf8IAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '12385' + Content-Type: + - application/json + Date: + - Sat, 07 Dec 2024 00:22:12 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_get_options_symbols_urllib3_v2.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_get_options_symbols_urllib3_v2.yaml new file mode 100644 index 000000000000..6fb44364537e --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_get_options_symbols_urllib3_v2.yaml @@ -0,0 +1,265 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=BTC&kind=option + response: + body: + string: !!binary | + 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 + wnWqHd4STq59p0cu7HFL2XWzM9wutM7ad17Akyc74Tz7r0VzPBWeJ3RSHQrvHgJ6ZdcwkT2dNNkJ + 16lpIkM4qY6Fd9hbrRtOp654ezppohOuU23xhnBSHQzvsLdal1Bzv0NpcykndShdoJMmOuE6+w1K + czoVnSdwUp1w7LC3Wt/WdTXG29NJE51wnWqMN4ST6qhO95Ch63oNuf8h3vnkiupEF+ikiU64zn57 + 0pxORecJnFRnzrmHgl7X1RZvTydNdMJ1qi3eEE6qw5PcQ8WOu9X+Ba3BJZ0Bco1OmuiE6+z3zs3p + VHTO47xv8Wmi08OPWeg3dmrXeZlOkuhcoFNN8YZwUs2xe+ikcNzi4ISaEEJp6752net10kQnXGf3 + c9KkTkXnCZxUo5geO+xW4tbvnAub23PZFZ3rddJEJ1znqHVuRqei8wROqpZ4j206LqX07xsMzrtQ + FZ0X6KSJTrjOwbfOKZ2KzhM4qfo6PbZzrtSGb3AqYnRO0XmBTprohOscXGQwpVPReQInVXOSx7Z/ + 1K3GwYGyaat5U3Su10kTnXCd/W+dczoVnfM47+cr0ERnwNYwa4qDlnjv3Z4UnRfoJInOBToHJ3ZO + 6fz/JDr/+btXX57+44eXeloKWwypti36rYn7y9N/br+Dv/wDv6fbH/zq3e9+d/uP136m5/ab/vD4 + /BPjP/5vfg/xlq3/CAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '12383' + Content-Type: + - application/json + Date: + - Sat, 07 Dec 2024 00:13:55 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/test_deribit_fetchers.py b/openbb_platform/providers/deribit/tests/test_deribit_fetchers.py new file mode 100644 index 000000000000..121d5ec1b3b1 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/test_deribit_fetchers.py @@ -0,0 +1,99 @@ +"""Deribit Fetcher Tests.""" + +from unittest.mock import MagicMock, patch + +import pytest +from openbb_core.app.service.user_service import UserService +from openbb_core.provider.utils.helpers import run_async +from openbb_deribit.models.options_chains import ( + DeribitOptionsChainsData, + DeribitOptionsChainsFetcher, +) + +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) + +MOCK_OPTIONS_DATA = DeribitOptionsChainsData.model_validate( + { + "expiration": ["2024-12-07", "2024-12-07"], + "strike": [84000.0, 84000.0], + "option_type": ["call", "put"], + "underlying_symbol": ["SYN.BTC-7DEC24", "SYN.BTC-7DEC24"], + "underlying_price": [100671.2825, 100671.2825], + "contract_symbol": ["BTC-7DEC24-84000-C", "BTC-7DEC24-84000-P"], + "dte": [1, 1], + "contract_size": [1, 1], + "open_interest": [1.0, 124.8], + "volume": [0.1, 151.9], + "last_trade_price": [None, 20.13], + "bid": [10.06, 0.05], + "bid_size": [0.3, 0.0], + "ask": [0.06, 10.06], + "ask_size": [0.0, 0.2], + "mark": [16666.69, 0.0], + "high": [None, 442.83], + "low": [None, 10.06], + "change_percent": [0, -0.6], + "implied_volatility": [1.3618999999999999, 1.3618999999999999], + "delta": [0.99997, -3e-05], + "gamma": [0.0, 0.0], + "theta": [-0.24909, -0.0263], + "vega": [0.00366, 0.00366], + "rho": [0.91572, -3e-05], + "underlying_spot_price": [100644.24, 100644.24], + "settlement_price": [14590.44, 14.35], + "timestamp": [ + "2024-12-06 17:26:36.234000-0500", + "2024-12-06 17:26:36.234000-0500", + ], + "min_price": [13184.4, 10.06], + "max_price": [20078.53, 1509.66], + "interest_rate": [0.0, 0.0], + "bid_iv": [0.0, 0.0], + "ask_iv": [0.0, 2.1254], + "volume_notional": [0.0, 7083.24], + } +) + + +@pytest.fixture(scope="module") +def vcr_config(): + """VCR configuration.""" + return { + "filter_headers": [("User-Agent", None)], + "filter_query_parameters": [ + None, + ], + } + + +@pytest.mark.record_http +def test_get_options_symbols(): + """Test getting the list of options symbols.""" + # pylint: disable=import-outside-toplevel + from openbb_deribit.utils.helpers import get_options_symbols + + params = {"symbol": "BTC"} + + result = run_async(get_options_symbols, **params) + assert result is not None + assert isinstance(result, dict) + assert len(result) > 0 + for key, value in result.items(): + assert isinstance(value, list) + assert key.startswith("2") + + +@pytest.mark.asyncio +async def test_deribit_options_chains_fetcher(credentials=test_credentials): + """Test Deribit Options Chains Fetcher.""" + params = {"symbol": "BTC"} + fetcher = DeribitOptionsChainsFetcher() + + with patch( + "openbb_deribit.models.options_chains.DeribitOptionsChainsFetcher.fetch_data", + return_value=MagicMock(MOCK_OPTIONS_DATA), + ): + result = await fetcher.fetch_data(params, {}) + assert isinstance(result, DeribitOptionsChainsData) diff --git a/openbb_platform/pyproject.toml b/openbb_platform/pyproject.toml index 283b2f5fe12a..80f8bb25f2ae 100644 --- a/openbb_platform/pyproject.toml +++ b/openbb_platform/pyproject.toml @@ -45,6 +45,7 @@ openbb-regulators = "^1.3.5" openbb-alpha-vantage = { version = "^1.3.5", optional = true } openbb-biztoc = { version = "^1.3.5", optional = true } openbb-cboe = { version = "^1.3.5", optional = true } +openbb-deribit = { path = "./providers/deribit", optional = true } openbb-ecb = { version = "^1.3.5", optional = true } openbb-finra = { version = "^1.3.5", optional = true } openbb-finviz = { version = "^1.2.5", optional = true } @@ -88,6 +89,7 @@ all = [ "openbb-biztoc", "openbb-cboe", "openbb-charting", + "openbb-deribit", "openbb-ecb", "openbb-econometrics", "openbb-finra",