From beda95c645ce0a3eca6f0ce8f16d2af1a8f1ea18 Mon Sep 17 00:00:00 2001 From: Henrique Joaquim Date: Sat, 20 Apr 2024 14:47:31 +0100 Subject: [PATCH] [Release] 4.1.7 (#6326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * remove reviewpad (#6010) * Remove Ultima provider (#6012) * Add OECD unemployment (+more) + data cache idea (#5917) * Add OECD unemployment + data cache idea * Docstring edits * Tests * Add composite leading indicator * i truested ruff --fix too much * Add short + long term interest rates * pylint * pylint2 * was not committing. my b * add csv cache + make it default. remove pyarrow from poetry * Clean up * Didnt run on this file. My bad * Why was this ignored /shrug * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/improved pr template (#6018) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * better pr templates * developer template * [Feature] - Custom deprecation (#6005) * custom deprecation * custom deprecation * using the new deprecation * custom deprecation on the package builder * remove comment * ruff * black * static assets * tests * using parametrization instead * test for deprecated endpoints (#6014) * Deprecation warning on the reference docs (#6015) * typo/fix * bring back methods needed for markdown generation * add deprecation warning to docs * contributor docs for deprecating endpoints - tks @deeleeramone * small changes on publishing procedure per @the-praxs * moving the deprecation summary class to deprecation file instead * explanation on class variables * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update openbb_platform/openbb/package/index.py Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * deprecating on 4.3 instead @the-praxs --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla * [BugFix] Fix package builder (#6022) * fix: remove specific imports * adjustments for correct deprecation * static assets --------- Co-authored-by: hjoaquim * [Feature] Add support for multiple tags in `historical_attributes` and `latest_attributes` (#6013) * historical attributes standard model - * add support multiple tags * add `tag` field in data * add support for multiple tags in historical attributes * set correct return type in `callback` function * latest attributes standard model - * add support for multiple tags * add `tag` field in data * add support for multiple tags in latest attributes * add test params for the attributes endpoints * add support for multiple `symbol` and add `symbol` field in the data * modified code to fetch data from multiple symbols and throw warning as per @deeleeramone * add params for testing multiple symbols * linting * fix test params * fixed condition to check if its a `Dict` type * updated intrinio fetcher tests for the statements * updated static * [feature]: feature/overview-to-profile: Deprecate `equity.fundamental.overview()` and move to `equity.profile()` (#6011) * fmp overview to equity profile * deprecation warning * urls * wrangle fields * black * pylint unused argument * insert additional securityID fields to standard model * custom deprecation using OpenBBDeprecationWarning * typo - need to have the deprecated=True flag * static assets * fix non related test * minor adjustment - removing the need for the try/except block - using the get and pop removes the need for key existance checking. cc @deeleeramone --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim * [BugFix] - Remove duplicate code (#6025) Co-authored-by: Pratyush Shukla * remove `SectorNews` from router and standard models (#6026) * feature/more-yfinance: Adds some more to openbb-yfinance (#5979) * equity profile for yFinance * pylint * equity quote * unused imports * price target consensus * add currency field * add share_statistics * don't append empty result to results * key executives * missing definition in key_executives * pylint * key metrics * add currency to key metrics * add etf_info * rename trailing_annual_dividend -> dividend_rate_ttm * add institutions count to share_statistics * add historical dividends * add logic for start-end dates to historical_dividends * recapture the test..? * funny test * filter on tests? * record test with clean cache..? * year_price_change -> price_return_1y in key_metrics * black * make descriptions clear for beta and dividend_yield fields * add description field to standard model * updated static * clear description of shares_implied_outstanding field * updated static for equity * clean descriptions --------- Co-authored-by: Pratyush Shukla * feature/commodities-lbma-fixing: Adds Commodity Extension and LBMA Gold/Silver daily fixing levels (#5760) * add commodity extension and add lbma fixing endpoint * dev_install.py * readme url * renovate the standard model * makes a query_params model for nasdaq data link * literal not optional * unused imports * missing test params * test cassette * DataLink query param description * test file import * actually fix import * from openbb_core.provider..... * ruff * another import statement * black * async router * move query_params * update version * version numbers * extension_map * satisfy pylint? * pylint * Update pyproject.toml * black * poetry lock * Update extension_map.json * Update __extensions__.py * Update module_map.json * clean descriptions --------- Co-authored-by: Pratyush Shukla * Improve UX for `obb.news` (#5986) * adding date,start_date and end_date to std params * add date to special params which should've another type * change types to dateType * change helper to accomadate changes in types * date filtering * using the date filtering for all providers * date params on the std model instead * adding the right type * filtering dates on world news * integration tests * fix descriptions * static assets * black * Revert "black" This reverts commit 7288b59f87e1b0816733a96ce77fb96e13dcf0e3. * lint * addressing @montezdesousa suggestion: removing qua 31 jan 2024 15:01:20 WET from standard models and using it only on benzing * tests accordingly * static assets * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Improve Standardization - `IndexHistorical` (#6030) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * fix tests * keep the skip * fix test * [Feature] - Refactor Response Model (#6024) * Start refactor with @montezdesousa * feat: add response model inside openapi_extra * feat: find+replace return types * fix: ruff * Feature/api response by provider (#6029) * init * Update router.py * Update registry_map.py * check dicts * lint * exclude provider on data model for package build * `results_type_repr` logic for `Annotated`, ignore provider field in `_extract_data` --------- Co-authored-by: Diogo Sousa Co-authored-by: teh_coderer * [BugFix] - Improve Standardization - `CotSearch` (#6031) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * keep the skip * fix test * adding missing param * fix tests accordingly * Docs/byod (#5996) * add byod to reference * fix: rename add-in name * feat: add data conectors page * fix: additional notes * tiny tweaks * update functions.json and openapi.json * fix: fix bug in hedge controller * fix: another bug hedgecontroller * black --------- Co-authored-by: DidierRLopes * Feature/ex-dividend: Renames "date" columns as "ex_dividend_date" for Dividend Calendar and Historical Dividends (#6006) * date -> ex_dividend_date * nasdaq historical dividends * black * pylint * intrinio alias_dict * dividend_currency -> currency * yfinance field name --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Adds a timezone to the Unix timestamp conversion to correct localization errors. (#6023) * fix: remove specific imports * make polygon historical tz-aware * undo including that commit * that PR wasn't supposed to be there. * pylint unused argument * fix polygon crypto historical intervals * pylint * new cassette * fix the rest of the polygon historical price query params * black * pylint.. * integration test param * appease daylight savings handling * paginate for crypto currency and index * black * raise EmptyDataError when no results instead of returning an empty list * ruff --------- Co-authored-by: Diogo Sousa * Hotfix/wrong pydantic validator (#6037) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * Use field_validator instead * fix openapi schema fields `to_snake` (#6036) * Fix data connectors link typo (#6038) * [BugFix] - Improve Standardization - `EquitySearch` (#6033) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * use_cache as std * adjust tests * keep the skip * re-record test * black * Docs / only display results for current platform (#6017) * Update index.js * Update index.js * yfinance * tzcache no longer exists * fixxy * ruff --------- Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek Co-authored-by: Andrew * Improve the docstrings (#6040) * Improve the docstrings (#6041) Co-authored-by: Henrique Joaquim * dont run base tests with v4 label (#6046) * Sync excel reference (#6039) * sync excel reference * fix: change delimiter to comma * feat: update data connectors * test skipping wf * Update unit-test.yml * Update unit-test.yml * test skipping wf * watch label changes * Update unit-test.yml * [Enhancement] - Improve `news` router docs and examples (#6047) * better docs * static assets * Feature/platform standardization notebook (#6049) * Add platform standardization overview notebook to examples * Add py.typed marker to openbb-fred * [Enhancement] - Improve `currency` router docs and examples (#6045) * currency search * reference rates * historical price * static assets --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * display warnings based on preference (#6051) * [Enhancement] - Improve `crypto` router docs and examples (#6048) * crypto search add validation for '-'-separated pairs * set default query value to None * improve /crypto description with custom examples * improve /crypto/price/historical description with custom examples * updated static for crypto menu * ignore line too long * linting --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Final Implementation of Changelog V2 (#6050) * Updated the release drafter to process the released changelog for OpenBB Platform * Update release drafter configuration * Add OpenBB Documentation Changes and Create Release * Update process_changelog.py path in draft-release.yml * Update release-drafter version and save changelog * Copy changelog with python * Update draft-release.yml to save Changelog * Update draft-release.yml * Encode and save Changelog to Base64 * Update Changelog saving method * Update Changelog format * Update CHANGELOG.md with release notes * Fix draft release workflow * Add cat command to print CHANGELOG.md * Add platform-drafter.yml and update release-drafter.yml and draft-release.yml * Commented out config-name in release-drafter step * Update branch name validation and process_changelog.py * Refactor process_changelog.py to improve readability and maintainability * Refactor process_changelog.py to handle file I/O errors and remove duplicate PR entries --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * improve discriminator logic, fix package return type docs (#6052) * improve discriminator logic, fix package return type docs * Update registry_map.py * build package * Update registry_map.py * defaults * Update registry_map.py --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add LLM tools example notebook (#6053) * Add LLM tools example notebook * Update README, rename example notebook --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Remove the preference (#6055) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * [Feature] - Standardise multiple symbols input (#6056) * feat: remove list of str * fix: update cpi * package builder + cpi * build * fix: update unittests * fix: check_item * fix: unittests * Improve the docstrings (#6057) * update economy router docstrings (#6058) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix OECD Long Term Interest Rate (#6060) * fix long term interest rate * pylint unused argument * [Bugfix] - Fix economic calendar country (#6059) * fix economic calendar country * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [HotFix] Index Router Docstrings & `sp500_multiples()` Cleanup (#6063) * sp500 multiples cleanup * remove dict from standard model * static pacakge * pylint * [Feature] FMP Current Holdings (#6043) * add fmp current holdings to etf holdings * pylint unused argument --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Replace symbols in company/news (#6061) * feat: replace symbols in /news * fix: integration tests * fix: integration tests api * fix: typo * Update test_intrinio_fetchers.py * [Enhancement] Add function examples to router. (#6042) * options router * fixedincome router * futures router * missing comma * static assets * futures router --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] Add function examples to Regulators Router (#6054) * options router * fixedincome router * futures router * missing comma * static assets * futures router * sec router * cftc router * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix World News (#6064) * fix fmp * fix intrinio * fix biztoc * actually commit intrinio fix * fix tiingo * unused import * fix tests * black * ruff * benzinga empty strings * codespell * fix test? * more empty strings --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - remove unused validators from standard models (#6067) * update standard models * lint * Update USD Liquidity Example Notebook for V4 (#5902) * Update USD Liquidity Example Notebook for V4 * delete some v3 text in the copperToGold * Update README.md * findSymbols preview image * Google Colab preview image * financialStatements preview * content tsx file * ### title * convert tsx to json * indent size * double quote keys.json * trailing commas * Update content.json * patch --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix QA Examples (#6072) * [Feature] - Ensure Bugfix branches can only do PRs to `develop` branches (#6073) * bugfix branch name checks and few fixes on the linting not to run on pushes to branches outside PRs * Update branch naming guidelines link --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/charting obbject (#5938) * fix circular import issues on the obbject extension framework * settings available on the obbject * extension init * charting assets and code * introduce to_chart functionality * removes the to_chart method from obbject in detriment of the one from the obbject extension * Update openbb_platform/obbject_extensions/charting/charting/__init__.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * fix on the show method * adding the example to the to_chart docstring * copying the exsting README from charting extension - needs to be revamped * moving to openbb_charting instead * update the pyproject.toml file * pydocstyle * versions * better docstrings * making accessors public * removing unnecessary credentials variable cc @montezdesousa * removing access to extra/metadata and use designated private attrs instead * Fixes linting for the logging service (#5992) * lints * typing.Type instead * deprecating ChartingService to use the new extension instead - adding function discovery capabilities using it * tests for the obbject charting extension * removing charting service from command runner * filter functions not implemented in the module * remove charting service tests * removing charting service on the tests for int tests * charting integration tests * removing charting service file * removing old charting extension code * revamp builder * fix obbject tests * fix command_runner tests * removing openbb_figure_table * better website docs * reviewed readme * unsetting api key for posthog (pywry) windows * added debug_mode to the system settings * removing api key * update nightly script * fix tests * black * black * Revert "black" This reverts commit 21d76ad689087b4ad38cec55667186263363c89f. * Revert "black" This reverts commit 0904653fd73518c0d345a82f91f4cb06cfa84cb6. * black for henrique * returning a list instead * better docstrings * removing unnecessary indicators docstring * typo * black * intentional access to protected member * changes to publish script * filtering deleted files * black * adding render argument * fixing the df_to_basemodel function: it should include the index in the columns either if flagged or if the index is named * adding the hability to add you own data to to_chart method * tests * black * disable protected access * accept kwargs to eg. save image * adjustment cc Igor * add if statement for protection * remove unused return typing * fix technical charting views * better error message cc @IgorWounds * better structure and fix test * Revert "better structure and fix test" This reverts commit 612ea6117ce064d5e41f74e72e171646be614408. * Revert "better error message cc @IgorWounds" This reverts commit 3d7ee53878b7742d187e83f7e5d4c27438aa40ef. --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix CAPM example (#6075) * Start removing dead v3 commands for deprecation (#6070) * Yeet tokenterminal * Yeet crypto/onchain/hr and gwei * yeet luna * yeet coinglass * yeet dps/ctb * yeet reddit * yeet covid * actually not yeeting hide yfinance future warning * yeet options/hedge * not yeeting. i18n words * something happened on accident * still fixing * git reset/git checkout -f 2516cfbc72d23a7656715314ea94cc34d4c994ee website/content * still not sure whats going on * Edit workflow to not look at deleted files + change bootup message * Dont pin the workflow to my branch always lol * Remove askobb * [Feature] - Comma separated string and list inputs (#6062) * feat: balancesheet * feat: income statement * fix: cash flow statement * feat: financial ratios * feat: reported financials * feat: revenue business line * feat: revenue per geography * fix: warnings * Update balance_sheet.py * fix: remove warning imports * feat: balance sheet growth * feat: calendar ipo * feat: cashflow growth * feat: __validators__ * fix: typing * fix: validator msg * feat: trailing dividend_yield * feat: short volume * feat: share statistics * feat: price target + consensus * fix: update validator * feat: historical dividends * feat: key executives * fix: getattr directly * fix: type hint validator * fix: add default to getattr * typo * feat: otc * feat: options chains * fix: remove list validators * feat: add validator dict to fetchers * lint * update standard models * lint * feat: rename validator * fix: ownership * feat: query params description * fix: balance yfinance * key execs, income statement * remove change * fix: revenue geographic * fix: disable pylint * fix: unusual + balance * unit test validator * minor fix * explicit validators * update test * feat: multiple items allowed * rebuild * move check_single_value * crypto historical * order providers * fix typing * rename extra dict * marking multiple items allowed * Revert "marking multiple items allowed" This reverts commit 7da04817e18b2c9e373ffde9134f3949d11f58dd. * error msg * fix: default provider runtime vs configuration * minor fix * docstring * revert default changes * get provider before executing cmd * fix container bug * clean filter * add comment * prevent bad defaults * update docstring * typing * fix * black * fix docstring generation * [Feature] - Mark multiple item fetchers (#6074) * feat: price target * bezinga company news * equity quote * marking multiple items allowed * more multiple items * black * rebuild * another batch * rebuild * another * cpi * move prop * rebuild --------- Co-authored-by: hjoaquim * rename var * update msg * rename func * fix test * mypy * ruff --------- Co-authored-by: hjoaquim * [Feature] Add Regional Data Endpoint from FRED (#6071) * add regional data endpoint from FRED * codespell * ruff * sort imports * add provder='fred' to integration test * thought I already sorted those imports.. * pylint.. * more test params.... * even more test params... * even more test params.... * static assets * reconfigure params * ruff * alias dict * recapture cassette * router doctstring --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Fix most integration tests (#6082) * Fix most integration tests * Lint * Fix price_target column for Benzinga (#6083) * Release/4.1.4 (#6081) * static assets * patch version increase * core update * bumping versions * bump finviz version * bump versions * bump versions on package.extension --------- Co-authored-by: James Maslek * Add dates to /quantitative as needed. (#6078) * Add dates to /quantitative as needed. Run new black * Fix tests * Pycharm is weird sometimes * uncommit * Add default window + error handling + mistake --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add end point: `etf.equity_exposure()` with FMP provider (#6079) * add etf.equity_exposure from FMP * empty data error * recapture cassette * pylint unused argument * Fix router example typo * fix test...? * static file to fix test? * fix test..? * __json_schema_extra__ * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [BugFix] Fix Equity Integration Tests (#6086) * fix equity integration tests * black * pylint * black * black * move df_apply to helpers * unused import * remove file that shouldn't have been added * oops. didn't remove a couple lines * [Enhancement] Add `analyst_search` to the Equity/Estimates Router (#6088) * standardize price_target * add analyst search * black * more black * ruff * linter, test parmas * last missing param * get rid of convert to upper * ruff * pylint * [BugFix] - Fix POST docstring examples (#6095) * Fix POST docstring examples. * Move router examples to command decorator * [BugFix] Fix `treasury_rates()` (#6092) * fix treasury_rates * drop rows with no data --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * clean up the remains from my yeeting (#6089) * clean up the remains from my yeeting * was not careful * Add ETF examples (#6102) Co-authored-by: Pratyush Shukla * [BugFix] Fix integration tests (#6100) * fix int tests * fix obbject int tests * fix quant tests * fix index tests * use python 3.10 instead * remove cache * end_date < start_date * [Enhancement]: Add TMX data provider extension. (#5913) * dev install * add TMX provider extension * normalize ytm and coupopn_rate values * black * codespell * ruff * black again * pylint * ftw * undo what Pylint thinks is best * more black * renovate insider_trading standard model * fix tests * typo * tests * empty string * pylint unused argument * nans for some reason * black * static files * static files with openbb-tmx installed this time * yfinance TypeError..? * NA -> N/A * update for version bump * list exchange-calendars as tmx dependency * eod chains date -> eod_date * new line * not that file * more black * one more black * fix weird merge thing * ruff * index constituents params * insider trading * fixing things * black * black AGAIN * news integration params * the other missing param * ruff * historical dividends field update * add json_schema_extra * gainers * symbols -> symbol * company news symbol * unit test param * review items * wrangle a rogue field * index router example * company news thing - symbols -> symbol * field name map --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek * [Feature] - OBB.GET (#6097) * create OBB.GET and data slicer page * remove quotes * format description * wording * functions.json * sidebar position * remove if stamente * [Docs] Remove Reference to `to_chart` in OBBject. (#6096) * remove reference to to_chart in OBBject. * put chart description back in OBBject properties * [Feature] - Create openbb assets folder (#6101) * create openbb assets folder * fix unittest * rebuild --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fixes to_df() where the date series contains multiple TZ-offsets. (#6099) * allow mixed utc offset in a tz-aware date column * enforce ascending from all providers for price.historical * fix tests * add comments and apply treatment to basemodel_from_df before JSON output * yfinance consistency * add unit test * add unit test * better test * ruff --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update the quantitative extension to make more sense (#6087) * Split out a rolling submenu for the rolling functions * Make a performance and a stats submenu. * Test the statistics functions * lint * lint * dupe test * pylint * ruff * Try tests quick * black magic signature funcs * fix my custom tests * Fix the existing imports/urls * push the api update * okay I figured out whats going on * this should be all of them * Correct docstringing examples --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Fix ECB Yield Curve (#6108) * fix ecb yield curve * standard model update * Update unit-test workflow to check for changes to openbb_platform (#6109) * [Bug fix] - Fix package mypy (#6110) * fix: package mypy * types * black * [Feature] - Equity router descriptions & examples (#6103) * feat: equity/calendar * feat: compare router * fix descriptions * darkpool + discovery * fix paragraph issues * fix descriptions * fundamental part 1 * fundamental part2 * transcipts * ownership * fix * price * shorts * Update darkpool_router.py * minor fix * shorts examples * examples * ruff * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Add `exception_handler` decorator to static (#6112) * add exception handler decorator * add exception handler decorator code * updated static * rebuild to fix docstring indentation --------- Co-authored-by: Diogo Sousa * update extensions list (#6114) * add missing field descriptions to yfinance equity price historical (#6116) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * remove charting extension env var (#6118) * [BugFix] Fix Company News (#6111) * fix company news * update tests * multiple symbols for polygon * don't include pageSize in Benzinga querystring, fixed as 100 * remove extra space * black * unused imports * make benzinga test cassette smaller * missing params * clear empty strings --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Allow Multiple Symbols in `equity.fundamental.metrics()` from `yfinance` (#6124) * allow multiple symbols in key_metrics from yfinance * field order thing * remove unnecessary function (#6125) * [Docs] Update OpenBB Copilot docs (#6106) * WIP: Tweak description. * WIP: Experimenting with react-player * WIP: Add copilot docs. * fixes videos width/height * WIP: Refine videos and copy. * WIP: Add last videos and sections. * Add bring-your-own-copilot section. * Tweak grammar. * Add copilot link. * Fix typos. --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * [Enhancement] Add Previous Close to DATA_DESCRIPTIONS (#6120) * add data description for previous close * ..just the one * update the model tripped by this change --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * added australia as a country also (#6131) * [Bug fix] - Fix regulator cik map standard model (#6129) * Fix regulator cik map standard model * fix description * Update cik_map.py * increase timeout to 30 (#6115) Co-authored-by: James Maslek * clean up some v3 deps (#6105) * clean up some v3 deps * forgot we need to do the requirements txt files * not sure it matters, but run ruff + black * am addicted to bug fixes --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [Bug fix] - explicit multiple items docstring (#6127) * explicit multiple items docstring * rebuiild * rebuild again --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [Feature] Pretty Pydantic `ValidationError` exceptions (#6130) * fix validator in fmp IndexHistorical model * make ValidationError pretty * modify arg error * linting fmp IndexHistorical * black * remove unused code * tmx etf info (#6132) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * [Feature] - Platform V4 Markdown Generator V2 (#6094) * add recent `openapi.json` * fix data types in models * removed `openapi.json` * set default date value as None in PolygonCurrencyPairs class * add function to generate reference.json file * reworked function to improve readability * reword function to add seo metadata * add functions for creating markdown sections * add code to extract data card markdown title * add additional functions for generating index and data models file * extract first sentence of the description for cards * code cleanup and documentation * linting * linting polygon models * add openbb import statement in create_reference_markdown_examples function * add POST method functions * cleanup; reworked generate_reference_index_files function * moved development section to 7th position in the sidebar * fix POST function params default value add standard flag to QueryParams and Data fields cleanup * add type expansion from package_builder.MethodDefinition * sort data models cards alphabetically make printing less verbose * make MAX_CARDS global display less content in cards in Commannds section * cleanup * Remove '_' from the cards under Commands section * " to ' in econometrics/causality * replace ' with " in ReferenceCard for reference dir index files * remove extra . from the quantile function description * shoutout to @deeleeramone for finding POST method description bug! * set correct value for standard field * handle BaseModel types in provider data fields * unit tests for the platform markdown generator v2 * yeet 'Default' and 'Optional' columns in the 'Data' section * last minute bug fix * add info for multiple symbols * make multiple items info same as platform static * organize sections properly * sort reference sub-directories alphabetically * extra space in 'OBBject extra' description * add type expansion for fields with multiple items POST method cleanup --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Docs] Adds Example Notebook for the Implied Earnings Move (#6128) * adds example notebook for the implied earnings move * remove commented out line --------- Co-authored-by: James Maslek * [Feature] - Sync with new openapi.json (#6137) * feat: create data tabs * fix: uncomment * fix: remove unecessary comment * sort side bar * comment * uncomment * use .dev functions.json + clean traverse * fix futures example * fix example * point to .co * Fix the v3 markdown generation workflow (#6138) * fix workflow * debug time * see if the docs generate at least * ahhhh i found it * getting there * put the test first * some keys cleanup * small change to error message * update functions.json (#6140) * fix intraday check in charting ta_class (#6119) Co-authored-by: Henrique Joaquim * [BugFix] Display EconDB as source for macro (#6143) * [BugFix] Disable Intrinio `InstitutionalOwnership` model (#6142) * disable fetcher in init and fetcher tests * disable provider test params from equity python and api tests * updated static * add more examples into findSymbols (#6139) Co-authored-by: James Maslek * [BugFix] Fix SEC ETF Holdings Parsing Exception (#6121) * fix etf holdings * linting * black --------- Co-authored-by: James Maslek * Docs/update xl docs (#6145) * remove print * update obb.get docs * example * md lint * fix get reference (#6147) * [BugFix] Filter OECD data using `start_date` and `end_date` parameters (#6144) * move constant dicts to constants.py filter by start_date and end_date * black * black again again * Merge 'main' into 'develop' (#6151) * Release/3.2.4 (#5696) * test * ultima description (#5541) * Updating showcase page (#5543) * updating showcase page * use sdk instead * add new bot command autopost docs (#5530) add new bot command autopost docs to docs.openbb.co Co-authored-by: James Maslek * Hotfix/ultima improvements (#5553) * tweaks for monetization * fix linting issue * fix: Modify 'load' behavior to append data to existing sheet (#5503) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Fixed 'worksheet not found' error during export to an existing sheet * Changes: * Now if the sheet exists in the xlsx file it will ask the user if he wants to replace/append/create new sheet --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * added platform API integration test to Nightly build (#5571) * Add columns to `stocks/search` (#5565) * Add columns to `stocks/search` isin, cusip, figi, composite_figi, shareclass_figi * Update test_search[False].txt * Update test_search[True].txt * Delete tests/openbb_terminal/stocks/cassettes/test_stocks_helper/test_search.yaml * Create test_search.yaml --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * updating ultima urls (#5587) * fix: A value is trying to be set on a copy of a slice from a DataFrame #5582 (#5591) * Update README.md (#5598) * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * fix docs (#5646) * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update settings.md (#5665) * fix front matter (#5667) * #5633 adding comma every 1000 (#5652) * #5633 adding comma every 1000 * pylint --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Hotfix/reports model render report sanitize inputs (#5669) * Adding more robust special character handling to create_output_path(). Addresses https://github.com/OpenBB-finance/OpenBBTerminal/issues/5299 * Running black linter on code to conform to OBB style guides. --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * hotfix/fix-gov-histcont: Fix #5650 - /stocks/gov/histcont (#5676) * fix histcont * some cleanup * remove sort line * 12-31 not 12-12 * columns_keep_types * remove space in regex (#5675) * Pin openai (#5685) * Clarified stocks/ta empty recom object message (#5468) * Clarified stocks/ta empty recom object message * black * lint --------- Co-authored-by: James Maslek * improved market cap value extraction (#5169) * improved market cap value extraction * pylint --------- Co-authored-by: James Maslek * 3.2.3->3.2.4 * Changelogs * new changelog --------- Co-authored-by: Henrique Joaquim Co-authored-by: Andrew Co-authored-by: Adi Sai Co-authored-by: Sandip Saha Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Luqman Co-authored-by: Adwait <111136306+AdwaitSalankar@users.noreply.github.com> Co-authored-by: Abhishek Amar <66067391+abhishek-amar@users.noreply.github.com> Co-authored-by: DidierRLopes Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Ramazan Co-authored-by: joshuabuildsthings Co-authored-by: wojda <114031148+polooner@users.noreply.github.com> Co-authored-by: Bim Phomthong <118195204+bimbolimbo@users.noreply.github.com> * Release/4.0.1 (#5840) * test * ultima description (#5541) * Updating showcase page (#5543) * updating showcase page * use sdk instead * add new bot command autopost docs (#5530) add new bot command autopost docs to docs.openbb.co Co-authored-by: James Maslek * Hotfix/ultima improvements (#5553) * tweaks for monetization * fix linting issue * fix: Modify 'load' behavior to append data to existing sheet (#5503) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Fixed 'worksheet not found' error during export to an existing sheet * Changes: * Now if the sheet exists in the xlsx file it will ask the user if he wants to replace/append/create new sheet --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * added platform API integration test to Nightly build (#5571) * Add columns to `stocks/search` (#5565) * Add columns to `stocks/search` isin, cusip, figi, composite_figi, shareclass_figi * Update test_search[False].txt * Update test_search[True].txt * Delete tests/openbb_terminal/stocks/cassettes/test_stocks_helper/test_search.yaml * Create test_search.yaml --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * updating ultima urls (#5587) * fix: A value is trying to be set on a copy of a slice from a DataFrame #5582 (#5591) * Update README.md (#5598) * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * fix docs (#5646) * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update settings.md (#5665) * fix front matter (#5667) * #5633 adding comma every 1000 (#5652) * #5633 adding comma every 1000 * pylint --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Hotfix/reports model render report sanitize inputs (#5669) * Adding more robust special character handling to create_output_path(). Addresses https://github.com/OpenBB-finance/OpenBBTerminal/issues/5299 * Running black linter on code to conform to OBB style guides. --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * hotfix/fix-gov-histcont: Fix #5650 - /stocks/gov/histcont (#5676) * fix histcont * some cleanup * remove sort line * 12-31 not 12-12 * columns_keep_types * remove space in regex (#5675) * Pin openai (#5685) * Clarified stocks/ta empty recom object message (#5468) * Clarified stocks/ta empty recom object message * black * lint --------- Co-authored-by: James Maslek * improved market cap value extraction (#5169) * improved market cap value extraction * pylint --------- Co-authored-by: James Maslek * Release/3.2.4 (#5704) * 3.2.3->3.2.4 * Changelogs * new changelog * OpenBB Platform v4 (#5225) * change location * check something * add cache * fixed auth w/@IgorWounds and @montezdesousa * fixes for econometrics * include Darren auth suggestions * some routers included if dev + chg hub backend var * coverage router should not be here * update docker readme * forgot to check auth here * Change extension imports * update docstrings and readme * headers function wasnt being called, just referenced * relative import * econometrics add headers everywhere * Fix QA * Fix TA * Fix test * Fix python interface QA and TA * Lint * Cleanup * Change path * make the changes and some etf models * tests for command_runner * ruff * solving naming issues on pytest * Update some docstrings, fix typos and lint * solving econometrics instantiating wrong openbb * chaging the way pytest runs * messing around with the imports * ruff * Change template to add platform considerations (#5533) * change template to add platform considerations * @the-praxs suggestions * solving __pycache__ issue * removing typo * ci yml * making linters happy (i guess) * Improve Omega Ratio and docstrings * chaging pro validation hash * ruff * Fix OLS Summary and lint * Add OECD Provider for economy extension (#5534) * Add record to docs * update a couple of cboe models * Fix econometrics bugs. Make tests pass. Lint. * black * ruff * pydantic v2: remove deprecated Extra * pydantic v2: self.dict -> self.model_dump * revert pydantic * revert the revert * try 1: pin urllib3 < 2 * Revert "try 1: pin urllib3 < 2" This reverts commit 3736c311cb6aa9e653dcb5db733798408b72a82e. * Revert dep * Fix * re-lock * Skip all tests when doing cspell in pre-commit * Resolve linter errors * Add OECD to install script * Add OECD * Resolve more linter errors * Exclude static files of v4 python from ruff * More linting * Another attempt to resolve even more linting errors * Change how Literal is used * ticker. symbol. consistent. @piiq * change ticker field in Stock Search to is_symbol * Update Cboe model for stocks_search -> is_symbol parameter. * Fix issue * Lint * Small QA to rename SDK to Platform (#5544) * SDK -> Platform in docs * renamed in core * renamed in openbb `init` * `sdk` variable renamed as `platform` --------- Co-authored-by: hjoaquim * `validator` -> `field_validator` in standard models * Standard convention for multi-ticker symbols (#5549) * standardize symbol input param in forex and crypto historical data * static * linting * Fix stock_search integration test params * Update dependencies and linting on the CI (#5550) * Remove ruff and black from platform dependencies * Update codespell configuration * Lint python code * Add toml and tomli to root dev dependencies * Update requirements.txt files * Fix buggy docstring in python package methods (#5548) * fix buggy docstring for methods * remove space * fix typing * avoid name collision with validator * Revert "avoid name collision with validator" This reverts commit 8a30a44555d97132f6bddcbc4a4facdd97ecc591. * typing * rebuild * python 3.8, ParamSpec not available * lint * ruff noqa * Merge with develop (#5551) * Charting extension integration tests (#5547) * initial proposal for integration tests on the charting extension * int tests for charting generation * python generator * ruff * boilerplate templates * python tests * tests for the api * using body instead so data don't get redefined * unit tests for coverage * ruff * docstrings * unnecessary access to keys() * Add trading economics economic calendar * dev install * Data Models disposition on the website (#5538) * pydantic v4 * flat structure * md files * Revert "md files" This reverts commit bd2170e2adf82fed3a35d34fad6a2e3ba3ae1d49. * improve command descriptions * nice title and description * human readble data model names on left panel * implementation details section * content markdown files * markdown versioned files * showcase page * updates --------- Co-authored-by: tehcoderer * everything except tests * fix `datetime.date` import in fetcher test * modified url to remove `api_key` placeholder * record test * api key is called c here * fixed fetcher test for api key * recorded tests * refactor * life is ruff * codespell * Make Intrinio options chains great again (#5540) * add multithreading * cleanup * linting * use dateutil.parser * removed `TICKER_EXCEPTIONS` * modified `date` and `type` fields in standard model * set alias for `date` and `type` to match standards * static * static * Hotfix/fix post tests (#5555) * Fix econometrics * Fix ta * Fix qa. Remove intrinio to not be rate limited * Lint * Fix typo * obbject tests (#5558) * obbject tests * ruff * fix dev_install * fix unittests * black on nox * black on nox * nox * fix fetcher test so it can compare dates * fix intrinio tests * ruff * change to model_dum() instead (#5561) * Passing tests (#5560) * Passing tests * fix options * Fix most tests and bugs * fix forex missing params * make symbol upper in polygon fx pairs * fix fixedincome integration tests (#5564) * Fixing charting api integration tests (#5562) * fixing charting api integration tests * black * fix stocks less five API fails * fix the 5 failing stocks integration tests * recapture fmp stock news unit test * fix fmp forex api test * couple more forex integration fixes * changing the request to always use the legacy session. @jmaslek this is was broken for 3.8 and 3.9; with this change apparently all versions work - lemme know if you see any issue with this change * ruff * fix ta * add missing param * fix testers for the api * fix globalnews to use images instead of image * remove unncessary pandas import * econcal int tests * update gitignore * fix get_querystring to support lists * add missing parameters --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim * Stock Historical standardization and UX improvements (#5457) * polygon add interval standard param * attempt at standardization * Alpha Vantage params standardization * rename `get_intervals` and fixed bug for extracting wrong value * missed changing it in `extract_data` * linting * polygon cleanup * modified `start_date` & `end_date` type to `datetime` from `dateType` * standardized intrinio stock historical params * fixed yfinance * linting * revert start and end date to dateType from datetime * fix alpha vantage * changed param * fix intrinio infinite loop * `validator` is `field_validator` * revert time params and fixed intervals * `outputsize` alias set in `Field` * set interval description using in-build dict * yfinance stock param standardization * static * intrinio cleanup * Polygon add api params as `PrivateAttr` * modified yfinance params to `PrivateAttr` * intrinio remove overriding date params * fixed description for AV adjusted param * fix alpha vantage intraday not working * re-record and pass unit tests * pass integration tests * Update test --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix econcal endpoint (#5567) * fix econcal for python interface * fix econcal tests * fix non supported json output * Fixes FMP index endpoint to get 1 day interval data (#5535) * fix FMP endpoint for getting index data for `1day` interval * fix `open` type to prevent validation error * modifed `validator` to `field_validator` * type of fields is `StrictFloat` * re-record and pass test * linting * `validator` -> `field_validator`, a3'd everything * Fix regression in tests. Lint * updating the integration test actions * Fix typo * Fix typo * Fix import * Publish versions `a3` to Pypi (#5568) * bump versions and script to publish * small improvements * uncomment exception * openbb * publishing guidelines * improve docs * add providers to economy api * make symbol required in stock_quote * Fix keys * Fix oecd * add comma * revert * Add quotes * Sleep * Improve tests * Improve * Feature/query transform (#5566) * inject query into transform_data * swap query and data * update missing fetchers * last test failing * sig test fetcher * black * av add `query` to `transform_data` call * transform_data: missing refactoring * fix uvicorn command in the doc * Automated examples (#5576) * Automated examples * Fix bug * Lint * static assets built on 3.8 * Revert "static assets built on 3.8" This reverts commit fb82ff7bd9af92ed676d8f8047c31e74daf7b8b2. * remove assets * static assets on 3.8 * static assets on 3.8 * Wrap in quotes * Improve wrap * minor fix * rebuild 3.8 * Fix bug * Fix edge case * Lint * rebuild --------- Co-authored-by: hjoaquim Co-authored-by: Diogo Sousa * use SecretStr for sensitive fields (#5578) * use SecretStr for sensitive fields * fix * docstring * Add tests for provider (#5583) * Add tests for provider * Test standard models * Lint * Fix standard model issues. Co-authored-by: @the-praxs * linting * `symbol` -> `is_symbol` in `economy.index_search` * static --------- Co-authored-by: Pratyush Shukla * feature/v4-biztoc-provider: Adds Biztoc provider and GlobalNews (#5546) * add biztoc provider * duplicate field * black * request headers * recapture test * move stuff around * add integration tests * duplicate OECD entry in dev_install * duplicate entry for oecd in pyproject.toml * Add Biztoc to workflow * update readme: credentials * Add Preferences to README * improve tests * fix biztoc * obbject pylint * Bug fix: serializ SecretStr before dumping to json * export credentials as json (#5592) * Check for wrong, changed, or outdated params. (#5597) * Improving `economy.cpi` for the FRED data (#5602) * remove multiindex using coding magic * Update field descriptions --------- Co-authored-by: Theodore Aptekarev * Improve error message. * Improve * Test tests (#5607) * Test tests * Add test * 4.0.0a4 PyPI publishing (#5608) * changes to publish * fix mini conflict * typo * cleaned `descriptions.py` * fix description in `cpi.py` * Add ETF extension to v4 (#5609) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests * Add ETF historical price from yfinance (#5610) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests * Add etf historical price standard model and route * Add etf historical data from yfinance * Add unit tests * Fix linter error. Organize imports * Update test data * Revert common descriptions erased by CPI PR * remove `symbol` from data for `stocks.ca.peers` * Test docstrings (#5613) * Test docstrings * fix minor bugs w/@IgorWounds * static only w/@IgorWounds * fix `importance` param in `economy.econcal` * right static only w/@IgorWounds * Fix econcal and add tests to noxfile * fix econcal static * re-record --------- Co-authored-by: Pratyush Shukla * Clean up the newly created ETF extension (#5611) * Add ETF to dev_install bundle * Add integration tests for openbb-etf * Patch integration test generator scripts to produce lintable code * Add py.typed markers for extensions * user preferences descriptions (#5593) * user preferences descriptions * typo * Feature/v4-sec-provider: Add SEC provider to V4 (#5556) * coerce string type, add default=None * add sec provider and FTD function * update description * ruff * data model definitions in standard model already * duplicate oecd entries in dev_install and pyproject * actually commit * integration test * add stock search to SEC * add company filings for SEC provider * integration tests * remove duplicated line * ruff * **kwargs in Transform Data * some helper functions for later * black * add helper for mutual fund and etf lookup * add some SEC lookup helpers to a new regulators extension * black * ruff * fix test param * take institution filter out of sec stock_search * ruff * remove URL that codespell doesn't like * add cik-to-ticker map * add litigations rss feed * make openbb-regulators a dependency of openbb-sec * add SIC search * improve ftd and remove BeautifulSoup from SEC dependencies * fix parsing the zip files pre-2009 * ruff * update descriptions * recapture ftd test * tests params * typo * change limit param to 1 in test_sec_stock_ftd * Add didiers to_records method (#5588) * Add didiers to_records * unused import * Bring back polars + do what igor suggested * Make the output consistent with what it was. * Black ? * spelling. oops. almost like we have a pre commit or something * Feature/v4-price-performance: % returns for various horizons, comparable across multiple tickers. (#5618) * coerce string type, add default=None * add price_performance endpoint from FMP * black * extra period in docstring * ruff * forgot one file * Feature/ipo-calendar: V4 IPO Calendar (#5605) * coerce string type, add default=None * add intrinio ipo calendar * fix typo * sort __init__ * fix description * make requested changes * update test params * black * test updates * etf integration * Add disc router and WSJ provider * OBBject extensions (#5612) * changes to core * bug? * docstring * doc * Update credentials.py * fix model_dump * create extensions * fix docstring * doc * revert change query_exc * doc * fix container test * redirect obbject test patch * doc * rename method * move decorator to extension file * rename method extend_obbject * changes in creds model * avoid credential racing * doc * rename prop * doc * doc * remove comment * comment some code * free extension names * docstring * doc * docs * Hotfix/fix-v4-economic-calendar: Add FMP to Econ Calendar and fix some TE bugs (#5580) * coerce string type, add default=None * adds fmp to economic calendar and fixes some things with TE * ruff * etf integration test * missing provider for test * rename te cassette to economic_calendar * fix test * rename tests --------- Co-authored-by: James Maslek * Add stocks disc endpoints (#5630) * Add stocks disc endpoints * Explicit * Lint * Add tests * Bump timeout * Feature/disc router (#5616) * Add disc router and WSJ provider * Lint * Lint * Move endpoints under ETF router * Update etf_performance.py * Add ETF info and sector exposure from FMP (#5620) * Add ETF info from FMP * Add integration tests * Add unit tests * Add etf sectors endpoint * Add etf sectors fmp endpoint * Omit nested sector list from fmp info data * Update tests and test data * Update test data * Specify provider explicitly in integration tests * Update tests * Skip yfinance etf historical test * Fix linter errors after the merge * Fix more linter errors * Fix failing and add missing tests * Fix integration tests * Fix calendar ipo tests * Add ETF holdings and holding report dates from FMP (#5629) * Add ETF info from FMP * Add integration tests * Add unit tests * Add etf sectors endpoint * Add etf sectors fmp endpoint * Omit nested sector list from fmp info data * Update tests and test data * Update test data * Specify provider explicitly in integration tests * Update tests * Skip yfinance etf historical test * Add etf holdings and holdings date routes and standard models * Add fmp holdings and holding dates fetchers * Update holdings fetcher to properly handle date object inputs * Add unit tests * Add integration tests * Black after merge * Fix test input data format * Disc router for equities. (#5640) * Disc router for equities. * add tests * Bug fixes in financial statements (#5537) * `validator` to `field_validator` in standard models * Polygon add `ttm` to `period` param * Revert "Polygon add `ttm` to `period` param" * Polygon add `ttm` to param `period` * `EarningsCallTranscript` standard model removed `quarter` param * use `tag` instead of `name` for correct field name * fix url for intrinio income statement * modified intrinio cash flow `transform_data` function * set optional data fields and validate dates * fix insider trading not fetching recent data * linting * refactoring * refactoring * set param alias in fmp stock insider provider model * get all quarter data for intrinio * add `limit` param to `stocks.fa.ins` * refactoring and linting * removed additional comment * linting * re-recorded and fix tests * cash flow standard model field type to `StrictFloat` * Intrinio cash flow model fixed to get all quarters' data * linting * refactoring * financial statement standard model field type to `StrictFloat` * Intrinio financial statement model get all quarter data * set `period` type to `Optional[str]` * add `period` param to balance sheet provider models * add `period` param to cash flow provider models * use alias in model dump * remove `ttm` from `period` param * revamped intrinio financials * fixed incorrect description for `limit` param * modified tests for `balance`, `cash` and `income` * re-recorded tests * skipped intrinio financial statement fetcher tests * Add ETF county weighting command with FMP data (#5645) * Remove code that wrongfully infers the filing date as end of quarter * Add etf countries command with fmp data * Add countries command to etf router * Update sector and country weighting fmp models * Fix docstring typo * Add unit tests and update mock data * Add integration tests for etf.countries * Bring back missing integration tests * Fix economic calendar integration tests * fix missing data in intrinio financials * removed inutile params from Polygon financial statement models * Intrinio IPO overhaul * tests fixed and re-recorded * Add ETF holdings performance with FMP data (#5659) * Add etf holdings performance endpoint * Add tests * Fix failing polygon fetcher tests * Split long holdings lists into chunks and update test data * Change chunk length to 500 tickers * Add stock search from FMP (#5642) Co-authored-by: Theodore Aptekarev * Feature/v4 pypi (#5579) * improvements to the publish script * move scripts * initial script that builds the package * adjustments on the docs * test pypi workflow * add hour and minute to version * black * ruff * duplicate file * moving files instead * build throught the script instead * update nox file * integration tests workflow * change workflow * fix dev_install * fix in sed cmd * testing the platform only * commenting out the publishing * fix run commands * improvements to the publish script and doc * fix publish script * updating the script and the workflow * feature/v4-pypi nightly (#5589) * init * Update nightly.py * cleanup * init file * not referencing dev_utils * updating obb platform key * revert * Increase warmup time * project name on pyproject and adding the --pre flag on readme * moving to the build folder * fix noxfile * reflecting the moves on the import statements * fix pyproject path * ruff * fix paths * fix super typo * update workflows * moving the pypi terminal files into its folder --------- Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * economy.calendar nasdaq (#5628) * add quandl econcal * unittest * add integration tests * replace   * fix bug TE importance * small fix * remove stuff from quandl * add nasdaq provider * add nasdaq to install files * Update test_economy_api.py * test * quandl leftovers * remove quandl econcal test * lint * replace   * ruff * lint * update nasdaq gmt * validate countries * here * no need for this * fix calendar tests * static * static * remove error * static * readme + website * readme * remove changes TE * typo * fix unittest * fix tests * Update __init__.py * Update economic_calendar.py * revamped model and added helpers for date range --------- Co-authored-by: Pratyush Shukla * Feature/v4-dividend-calendar: Adds Nasdaq dividend calendar and moves the command out of fundamental_analysis (#5672) * add nasdaq dividend calendar and move out of fundamental_analysis * black * ruff * add random-user-agent to pyproject.toml * add nasdaq ipo calendar * add nasdaq flag for SPO to IPO calendar * add spo test param * black * dividend test * fix transform_query - nasdaq_calendar_ipo * bring back different headers for ipo calendar * remove references to test * Add disc endpoints (#5660) * Add Quandl top retail * Add tests * Add Seeking Alpha * Add Filings * Change Provider * Fix test * Add dev_install * static * static correct * y u forget me * updated deps * static --------- Co-authored-by: Pratyush Shukla * using dev install (#5673) * Expanding the `fixedincome` menu (#5655) * models and fetcher * making the fetcher visible * std model * adding the command * improvements to the models * typo * adding the command * imrpovements to dwpcr * standard model for ecb int rates * adding the fetcher for fred * standard model of ice bofa * add ice_bofa command * ruff * ice bofa fetcher * moody std model * moody * std model * add cp command * unused import * cp * spot * ruff * hqm * tmc * ffrmc * tbffr * ruff * typing fixes * buggy dates * fred fetcher tests * ruff * adding ecb as a provider * adding new provider related stuff * adding the new command eu_ycvr * models * test for ecb fetcher * Feature/v4 fixedincome int tests (#5661) * integration tests * happy ruff * mini adjustment * ruff * typo * verbose type * fix tests * docstrings everywhere and an happy pydocstyle * fix tests * Feature/user-cache-dir: Add User Preference for the Cache Directory (#5621) * add user preference for storing cached data * ruff * fix tests? * fix test key error..? * etf integration test fix * add cache dir to SEC * black * improve docs structure for V4 (#5586) * improve docs structure for V4 * moving over changes * Add Docs to the navbar * add some, re-order sidebar * fix sentence * add docs install to source instructions * insert a couple of links, fix a typo * big terminal docs usage revamps * improve toggle component for tutorials * get rid of TOCs for all terminal docs for consistency and simplicity * improve platform docs * improve bot docs content structure * remove index from bot docs * improve ON THIS PAGE to only display TOC if at least 1 element * make edit this page text and icon on same line * add author and date to docs * add basic syntax page to usage * sidebar order for usage section * move api start command to the top with the import python import * some install page additions * small improvement * refactor routines section * Update introduction-to-routines.md * Update pipeline-of-commands.md * Update introduction-to-routines.md * Update routines-for-power-users.md * Update community-routines.md * update keyboard hotkey macros * askobb page * Update askobb-feature.md * Update index.md * Update index.md * Update index.md * Update index.md * fix images * remove HeadTitle from all files where it exist * get rid of extra spacing in markdown * small update * small edit * need index at the start because of main path when homepage of docs * use openAI to create SEO for front matter on my behalf * remove table of content from sdk page * finish improving metadata SEO for SDK docs * update duplicate header * update HeadTitle to be more specific on product * remove index from bot telegram reference * delete duplicated title for platform reference * another update * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * start PR so screenshots can get attached via GitHub website * Update qa.md * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * Update crypto introduction.md * titles * another title * Update crypto dd.md * Update defi.md * Update disc.md * Update nft.md * Update onchain.md * Update ov.md * Update introduction.md updates URL * Update introduction.md add HeadTitle * Update ba.md * Update comparison.md * Update dark-pool-shorts.md * Update disc.md * fix docs (#5646) * Update fa.md * Update gov.md * Update ins.md * Update tradinghours.md * Delete website/content/terminal/menus/stocks/options/screener.md * Update Options introduction.md * Update screener head title * Update screener TOC * Update econometrics.md * Update economy head title * Update etf.md * codespell * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Contributing guidelines (#5615) * intro section * what's expected sections * improve sections * improve sections and move how to add a data point * moving qa under contributor * better intro * moving the sharing section * better expectations * small intro to the contributor guidelines * moving things under the contributor section * there is no pre commits on the platform yet * dependency management * best practices for extensions * typo * collapse options subfolder * codespell * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update fixedincome.md * url * Update forecast.md * Update settings.md (#5665) * Update forex.md * fix front matter (#5667) * Fix conflict markers that got into markdown during previous merges * Fix front matter list formatting * Fix typo * small thing * fix hyperlinks * Update .codespell.ignore * output_type options * Architectural considerations * Update sidebar to hide pro section by default * Minor copy changes * TET pattern * import statements * clarification on preferences * Minor copy changes * Lint markdown and python * fix: open index on collapsible root elements * remove old content * options title * Fix linting errors * Refactor sidebar label to url mapping condition --------- Co-authored-by: andrewkenreich Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim Co-authored-by: Sandip Saha Co-authored-by: James Maslek Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Theodore Aptekarev * Add multi-ticker support to etf_countries (#5670) * add multi-ticker support to etf_countries * remove commented-out lines * normalized percent points * percent -> percentage * Fix Nasdaq Econ Calendar Fetcher (#5668) * fix nasdaq econ cal request * more html tags * add random-user-agent to pyproject * another edge case - 24H -> 00:00 * Feature/v4-unusual-options: Adds unusual options endpoint. (#5677) * add unusual options fro Intrinio * test params * move sorting * Change type * update FMP fetcher to use the V4 endpoint (#5681) * Fix price performance not parsed correctly when there is only 1 ticker (#5678) * Add crypto search standard model and FMP data for it (#5679) * Apply renaming to news data (#5684) * inegration complete * reformatted for black * fix ruff issues * revised integration * changes to versions in pyproject.toml and updated lock files * Rename models * Update tests * Fix typos here and there * Update routers * Apply rename to ultima * Properly mock api key * Mock ultima api key --------- Co-authored-by: Adi Sai * Feature/v4-market-snapshots: Adds full market snapshots (#5473) * add stocks market snapshots from fmp * add fmp fetcher test * unused imports * add polygon to market_snapshots * update fmp market_snapshots * black * pydantic2 things * updates * change validate_obj to model_validate * polygon cleanup * tests * descriptions * black * data description * minor adjustments, using less local variables, improving readability and removing pandas * better structure * minor adjustments * lint * fix int tests --------- Co-authored-by: hjoaquim * Add NBBO Quotes, with historical, to `obb.stocks.quote()` (#5617) * coerce string type, add default=None * add polygon stock quote * limit cleanup * add greater/less than to params * limit param * black * tests * fix tests * test_etf * rename model and function to NBBO * add standard model for nbbo * improve standardization * not redifining builtin max * fix input params * integration test params * removing unused import Co-authored-by: Pratyush Shukla * revamped code * re-recorded nbbo test * added symbol validator * added alias in field * Stock news -> Company news --------- Co-authored-by: hjoaquim Co-authored-by: Pratyush Shukla Co-authored-by: Theodore Aptekarev * hotfix/update-quandl-to-nasdaq: Merge Quandl + Nasdaq (#5682) * merge quandl nd nasdaq * dev_install.py * test param name * economy python integration test * Add more input types to data processing commands (#5453) * adding more supported types to data processing commands * ruff * removing unused import * docstrings * data processing types covertion * data description * test filters * ruff * fix package builder tests * ruff * removing print * Add stocks/dps module (#5638) * short volume * pyproject missed * add sec short interest with days to cover * Add FINRA OTC endopoint * some tests * rest of unit tests * Integratin test scripts * dev install * linters caught by pre commit * lines too long * Last test files * maybe it needs a lock file? * thanks pratty * Maybe ill actually listen to pratty next time * sec test date freeze * I cant hit buttons * re record tests * tests 3 * Stockgrid test * regen int test * more testing * lint * moved these fns * dis killing me * one more test * last one * Update integration tests * Fix tests picking up wrong dps route --------- Co-authored-by: Theodore Aptekarev * Rename Forex to Currency (#5687) * restore fields as optional (#5686) * Rename Crypto (#5689) * added `crypto.price.historical` * static * fix tests * fix incorrect label * Move model from sec to finra (#5692) * Update toml * fixed deps * add openbb-etf lock file * cleanup * cleanup (#5694) * Rename Fixed Income (#5695) * Rename Fixed Income * Add routers * Rename stocks to equity (#5688) * Rename stocks folder * Rename openbb_stocks package * Rename routers * Reroute equity menu * Update routes based on feedback * StockNews -> EquityNews * StockInfo -> EquityProfile * Rename Equity calendars * Equity peers rename * Rename discovery * Rename fundamental * Rename price command models * Rename shorts * Update charting router * Fix seeking alpha upcoming release date * Fix linting errors * Update tests * Fix tests * Skip econometrics api tests because it's python only * Update integration tests and test data * Historical analyst estimates * Skip cboe options chain test. Unable to record vcr cassette * re-record cboe cassettes * Document CBOE unit test creation caveats --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Feature/files-for-igor: Adding a few standard models for Igor (#5699) * add some standard models for Igor * codespell * update descriptions * Add devtools metapackage (#5703) * Add openbb-devtools metapackage * adding devtools to the dev_install script --------- Co-authored-by: hjoaquim * Rename econometrics commands to be more verbose (#5702) * Expose command to model map (#5706) * Rename ta qa (#5708) * Rename ta folder * Rename ta to technical * Rename qa folder * Rename qa to quantitative * Rename the actual routes in quantitative * Equity cleanup (#5707) * cleanup * static * renaming to equity cc @the-praxs * Proof reading --------- Co-authored-by: hjoaquim Co-authored-by: Theodore Aptekarev * Don't enforce imperative for first word of the docstring * Remove ultima from default extensions * Rename `economy` and create `index` extension (#5705) * renamed economy and re-recorded tests * static * market indices * european indices * fred indices * index constituents * tests * correct package name * oops * static * linting * Move COT commands to regulators * Rename economy.list to available_indices * Rename GDP models and clean up * Fix charting tests * Drop _indices from available_indices command * Fix obbject to_dict test --------- Co-authored-by: Theodore Aptekarev * Rename etf/disc (#5715) * Docs/v4-working-docs: PR to Work on V4 Docs (#5693) * Revert changes related to pydantic2 made into v3 code * Revert fred model changes in v3 * Revert pydantic2 databento model changes in v2 * Update some names and v3 lock file * Clean up openbb/package before the beta release * Platform publishing procedure (#5701) * update instructions * introducing the version script * publish message * fix platform path * reflecting version changes * getting version from installed packages instead * removing toml from dependencies * Changes to get `a7` out (#5697) * changes to get a7 out * etf menu on the pyproject.toml * poetry lock * bump `openbb-etf` to `a5` to match version * updated deps * removing ultima * removing references to a4 cc @the-praxs * Bump index menu version * poetry lock --------- Co-authored-by: Pratyush Shukla Co-authored-by: Theodore Aptekarev * Update publishing instructions * Bump core dependencies in extensions and providers * Add changes to the publish script following the beta release * Update the versions in static extension map and openbb metapackage --------- Co-authored-by: James Maslek Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim Co-authored-by: Diogo Sousa Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: tehcoderer Co-authored-by: DidierRLopes Co-authored-by: andrewkenreich Co-authored-by: Sandip Saha Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Adi Sai * Hotfix/pypi openbb terminal (#5719) * renaming the project * documentation changes * Finishing touches to the publishing procedure (#5728) * finishing touches to the publishing procedure * grammar improvements * Run tests on develop (#5725) * Run tests on develop * Add a check that files changes in platform * Seprate Intrinio financials data tags into a different command (#5723) * add `ebit` field in income statement standard model * only add required data tags * remove calculations data * use `name` key instead of `tag` key * set `period` as required in data * remove `period` and `cik` from provider models * add `equity/fundamental/search_financial_attributes` with tests * clean descriptions file * add `equity/fundamental/financial_attributes` with tests * set `value` as `Optional` * Fix threadpool test error (#5734) * Remove ultima from deps (#5736) * remove ultima from deps * skip ultima test * black * change skip location * try except statement to avoid error on the ci * new currency reference rates pr (#5724) * point files to linters (#5739) * remove news from equity (#5741) * Add tiingo provider (#5740) * first commit * things * Add news endpoints * CryptoHistorical * Add currency and trailing dividend yield * things working * deps * fix pre commit things * tests? * black on the tests * pratty told me to add it * integration tests * added helpers * crypto revamped * currency revamped * trailing dividend yield revamped * equity historical revamped * company news overhauled * global news overhauled * remove `tags` param from news models * crypto correct `exchanges` description * james smh * re-recorded fetcher tests * fixed integration tests * econometrics smh * james smh again --------- Co-authored-by: Pratyush Shukla * Add `derivatives` extension for `futures` and `options` (#5742) * removed options and futures * add derivatives extension * cleanup * bug #5649 (#5722) * bug #5649 * fixing --a upmom, downmom --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Rename the fmp search -> screener (#5744) * Rename the fmp search -> screener * misses some * i cant copy paste * docs/fix-urls: Updates the Terminal About URLs to match `/develop` (#5720) * update Terminal about URLs and some other broken links * ruff * intro * changing the heading levels * dependency management sections * structure * developer guides * structure * contributor guides * keywords and descriptions * broken urls * cool cards * Cool cards (#5727) * tidy up terminal/content * some more tidy up * fix styling for platform that was missing * more tidy up * improve color for dark and light mode * create new reference card for more basic cards * rename back to menus * implement all index.md for terminal, except reference * improve bot title * more refactoring * fix remaining index * header styling * more styling * heheheheheheeh * Revert "heheheheheheeh" This reverts commit 7d095fcfd258efb7e82b75b4663b5360785195f3. * Ccards (#5733) * links * more links * improved styling and chevron aligned to title * fix index.mdx urls for Terminal * update package.json * update index.mdx * fix generation * spelling * toolkit_extensions * update data extensions * couple of links * add tiingo to data extensions list --------- Co-authored-by: hjoaquim Co-authored-by: andrewkenreich Co-authored-by: DidierRLopes Co-authored-by: James Maslek * Stock leftover cleanup (#5745) * change to equity in `.md` files * `HistoricalStockSplits`->`HistoricalSplits` * `StockInsiderTrading`->`InsiderTrading` * sorry fmp * `EquityHistorical` cleanup * `EquityNBBO` cleanup * .md leftover * the last of stocks * Hotfix/urllib to dev group (#5732) * use the urllib3 dependency on the dev group instead * adapt the version script for the nightlies - if it's a nightly the package distribution name will have a different name * add dev dependencies to the dev installation bc of the ci * updating the import on validate_call according to: https://docs.pydantic.dev/latest/concepts/validation_decorator/ the way we were importing it breaks if pydantic=2.5 @montezdesousa * loosing urllib3 version specification on the provider and adding it to platform dev deps * rmeoving urllib from top level deps; and removing --with dev flag * changing to ^ instead * Revert "changing to ^ instead" This reverts commit 7300904e9f3adba372b106d381b70ae06e28795a. * unnecessary dep --------- Co-authored-by: Theodore Aptekarev Co-authored-by: James Maslek * feature/v4-bop - Add ECB Balance of Payments (Replaces #5716) (#5726) * add ecb balance of payments * missing __init__.py files * Nasdaq calendar earnings and fix FMP calendar earnings (#5718) Co-authored-by: James Maslek * feature/us-treasury-auctions: Adds Treasury Auctions endpoint and provider for US Government Data. (#5746) * add government_us provider and treasury auctions endpoint * black * add param for cusip * move logic for setting default start/end date * Update hub<>platform credentials map (#5749) * update hub<>platform credentials map * typo * Add API settings schema to system settings (#5743) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Skip checking creds (#5737) * skip checking creds * fix bug * ok mypy * add comment * rename required_credentials * fix * fix top_retail bug * don't require creds in some nasdaq fetchers * black * this was not here before * fix tests * update fetcher test * update contributing guidelines * Fix Quote (#5752) * Fix Quote * fixed return type and model validation --------- Co-authored-by: Pratyush Shukla * Wrap up renaming global news to world news on a model level (#5750) * Wrap up renaming global news to world news on a model level * cleanup --------- Co-authored-by: Pratyush Shukla * Remove eod from docstrings (#5751) * Wrap up renaming global news to world news on a model level * Remove "end of day" from historical price model docstrings --------- Co-authored-by: Pratyush Shukla * Massive docstring cleanup (#5755) * sec router remove command * standard models cleanup * fmp cleanup * av cleanup * benzinga cleanup * biztoc cleanup * cboe cleanup * ecb cleanup * finra cleanup * fred cleanup * us cleanup * intrinio cleanup * nasdaq cleanup * oecd cleanup * polygon cleanup * sec cleanup * seeking alpha cleanup * stockgrid cleanup * tiingo cleanup * tradingeconomics cleanup * ultima cleanup * wsj cleanup * yfinance cleanup * sec router lint * fix date query param description * Updates system and api settings (#5753) * remove uncessary import on rest api * remove FrozenField and add api.version * allow setup from json * remove id tag * computed field is better * formatting --------- Co-authored-by: Theodore Aptekarev * Squeeze build time (#5756) * squeeze build time * bug fix * fix test * typo? * rebuild * keep tradingeconomics * docs/working-docs: Working V4 Docs PR (#5747) * post-install clarification, fix links * more links * change word * toolkit cleanup * rename 'contributing' to 'development' * update extensions * some urls * Update sdk-platform and v4-develop in urls (#5730) * Update sdk-platform and v4-develop in urls * Seprate Intrinio financials data tags into a different command (#5723) * add `ebit` field in income statement standard model * only add required data tags * remove calculations data * use `name` key instead of `tag` key * set `period` as required in data * remove `period` and `cik` from provider models * add `equity/fundamental/search_financial_attributes` with tests * clean descriptions file * add `equity/fundamental/financial_attributes` with tests * set `value` as `Optional` * Fix threadpool test error (#5734) * Remove ultima from deps (#5736) * remove ultima from deps * skip ultima test * black * c… * More v3 removals (#6141) * remove ultima + althub * move twitter keys * economy kill bigmac + remove eval + plot+ stored data * am losing track * oanda is next * brokers now * fix sdk in case anyone wants it * missed an sdk endpoint * spec file * small edits for installer * stop the int tests on these * always be fixin bugs * some more removals * [Enhancement] Show the source of error in exception traceback (#6153) * show source of error * restructure code for readability * Improve the OECD requests (#6152) * remove ultima + althub * move twitter keys * Enhance caching + more specific urls * Update urls for stir * LTIR * cli * one v3 file to fix * Typing edits + gdp dates + gdp all countries * Tests * lint * not sure why those didnt record * handle the fact that we artifically add some start dates and end dates * fix dates with actual solution not weird patch * lint * adds AlphaVantage to historical_eps (#6155) * [BugFix] Fix FMP Market Snapshots (#6160) * fix FMP market snapshots * exception handling * model type * forgot one line * fix test --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Excel help page (#6165) * create help page * rename file * words * words * more issues * less words * minor fix * email * no bare urls * unused attribute * ruff * [Feature] Add Currency Snapshots With Data From FMP (#6162) * add obb.currency.snapshots() endpoint and create new standard model * add standard model * static assets * add couple of comments * codespell --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add `form_13f` Endpoint to `equity.ownership` (#6122) * add form_13f endpoint * review things * option_type validator * black * codespell * add some comments to the code * remove duplicated process * static file * remove warning * static why no one updates you :-( --------- Co-authored-by: Pratyush Shukla Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Bug fix] - Run charting tests again (#6167) * run tests again * forgot these 2 * [Enhancement] Slightly Change The Order of intrinio Cash Flow (#6168) * fix order of intrinio cash flow * apparently homebrew takes priority, deleted that black * [Bug fix] - Fix integration tests (#6170) * fix integration tests * rebuild * unittest * [Bug fix] - Handle multiple items with arbitrary type (#6171) * handle multiple items with arbitrary type * minor fix * ruff * inequality * integration tests * test * pylint * fix tests * fix category * ruff * [Feature] Custom choices (#6169) * custom choices * remove unnecessary choices from the extra info * static assets * simpler way to pop choices on extra * Getting json_schema_extra without changing the original dict --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * exception in debug mode shows complete argument (#6174) * [Bugfix] - Lower case validator in standard models (#6172) * add to_lower validator * change validator name * docstrings * fix interval * [Enhancement] Standardize "X".price.historical Intervals and Params (#6146) * FMP * tiingo * yfinance * intrinio * polygon * fmp interval descriptions * alpha_vantage * update unit tests * tests * static files * black * black * black again * codespell * codespell again * futures historical * ruff * some more black * pylint * now black again * test params * skip deprecated * fmp test cassette * fix some tests * fix test_query * fix bad symbol in toolkit integration tests * attempt at parameter deprecation warning * Fix edge case * test params * more test params * that's the ticket --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - refactor examples (#6154) * remove auto examples and split python from api * add missing exampels * rebuild * query params focstring * black * add scoped examples * group model imports in the router * unblock api * fix * classify examples * fix package identation * black sig * fix indentation without linter * fix python examples * remove doc * pylint * again * add model validators * commodity, crypto, currency * filter examples * fix python examples * fix filter and build * undo toml change * add comment * oop * comment * typing * lint * Update router.py * Update econometrics_router.py * fix to_python * to_python * to_python * black * fix multiple line field descriptions * remove circular import * add missing import * pass indent as object attr * doc * doc * this looks better * forgot this * fix: new examples adapted * fix prev commit * avoid future problems * Update ownership_router.py * rebuild + remove todo * make description mandatory for python examples * simple indent * append_examples func works for both website and docstring * Add example unit tests * Edit example unit tests * fix validator * this works * fix to_python * fix mandatory docstrings * typing * shorter error msgs * economy router * fix more examples * more examples * more examples * more examples * field desc * minor fix * fix etf examples * handling types better * lint * rename method * rename var * docstring + move method * typing * prompt * rebuild * prompt fix in PythonEx * fix examples without model * example mock data * add get_field_type func to get field data type * panel data * mock data * fix * fix * docstring * ohlcv * pylint * quantitaive router * simplify mock data * fix remaining quantitative routers * a bit more flexibility for examples * lint * mock dat from sample * docstring * assertion * bugfix * minor fix * technical * fix integration tests * fix docstring * econometrics examples * econometrics examples * remove warning * add technical examples * fix bad examples * fix more examples * update test rules * remoce old pydantic referenc * fix bug in treasury prices * fix quantitative examples * discovery router * equity shorts * equity shorts * fix currency pairs * fix sec_router example * fix panel data to support all funcs * black * more examples fixes * simplify test * rebuild * test doc * add provider to some ex * ^ * last * add provider * rebuild * working examples * noqa * pylint * pylint * clean * minor fix * fix test * lint * ruff --------- Co-authored-by: Pratyush Shukla Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] Improve Intrinio Unusual Options (#6177) * improve intrinio unusual options * static files * fix test * really fix the test * added code to get new examples as string (#6181) * [Feature] Add Tradier Provider Extension (#6178) * add tradier provider * python 3-9 tz parsing * unused argument * add handling for cassette playback on GitHub * sort equity historical nicely --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Create static asset tests (#6182) * Create static asset tests * Lint * Add labels for `breaking_changes` tag (#6184) * Add labels for breaking changes*** ***Update release-drafter configuration * Update release-drafter.yml to include emoji for OpenBB Platform Breaking Changes * [Bugfix] - Fix equity/price/historical w/ alphavantage (#6183) * fix premium endpoint bug * lint * [Enhancement] Allow Multiple Symbols For Intrinio Key Metrics (#6186) * improve intrinio key metrics * type thing * some thing * ruff * handle date type (#6185) * Release bug fixes (#6187) * release bug fixes * rebuild --------- Co-authored-by: Pratyush Shukla * [BugFix] Update `README` for Platform (#6189) * update readme * prevent oopsies * beta versions * print extensions name * update toml with beta versions * [BugFix] Raise Alpha Vantage API Error (#6188) * raise API error * handle more API error messages * handle bad data --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Diogo Sousa * update econ cal headers (#6191) * [Release] 4.1.5 to `develop` (#6192) * Release/3.2.4 (#5696) * test * ultima description (#5541) * Updating showcase page (#5543) * updating showcase page * use sdk instead * add new bot command autopost docs (#5530) add new bot command autopost docs to docs.openbb.co Co-authored-by: James Maslek * Hotfix/ultima improvements (#5553) * tweaks for monetization * fix linting issue * fix: Modify 'load' behavior to append data to existing sheet (#5503) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Fixed 'worksheet not found' error during export to an existing sheet * Changes: * Now if the sheet exists in the xlsx file it will ask the user if he wants to replace/append/create new sheet --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * added platform API integration test to Nightly build (#5571) * Add columns to `stocks/search` (#5565) * Add columns to `stocks/search` isin, cusip, figi, composite_figi, shareclass_figi * Update test_search[False].txt * Update test_search[True].txt * Delete tests/openbb_terminal/stocks/cassettes/test_stocks_helper/test_search.yaml * Create test_search.yaml --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * updating ultima urls (#5587) * fix: A value is trying to be set on a copy of a slice from a DataFrame #5582 (#5591) * Update README.md (#5598) * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * fix docs (#5646) * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update settings.md (#5665) * fix front matter (#5667) * #5633 adding comma every 1000 (#5652) * #5633 adding comma every 1000 * pylint --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Hotfix/reports model render report sanitize inputs (#5669) * Adding more robust special character handling to create_output_path(). Addresses https://github.com/OpenBB-finance/OpenBBTerminal/issues/5299 * Running black linter on code to conform to OBB style guides. --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * hotfix/fix-gov-histcont: Fix #5650 - /stocks/gov/histcont (#5676) * fix histcont * some cleanup * remove sort line * 12-31 not 12-12 * columns_keep_types * remove space in regex (#5675) * Pin openai (#5685) * Clarified stocks/ta empty recom object message (#5468) * Clarified stocks/ta empty recom object message * black * lint --------- Co-authored-by: James Maslek * improved market cap value extraction (#5169) * improved market cap value extraction * pylint --------- Co-authored-by: James Maslek * 3.2.3->3.2.4 * Changelogs * new changelog --------- Co-authored-by: Henrique Joaquim Co-authored-by: Andrew Co-authored-by: Adi Sai Co-authored-by: Sandip Saha Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Luqman Co-authored-by: Adwait <111136306+AdwaitSalankar@users.noreply.github.com> Co-authored-by: Abhishek Amar <66067391+abhishek-amar@users.noreply.github.com> Co-authored-by: DidierRLopes Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Ramazan Co-authored-by: joshuabuildsthings Co-authored-by: wojda <114031148+polooner@users.noreply.github.com> Co-authored-by: Bim Phomthong <118195204+bimbolimbo@users.noreply.github.com> * Release/4.0.1 (#5840) * test * ultima description (#5541) * Updating showcase page (#5543) * updating showcase page * use sdk instead * add new bot command autopost docs (#5530) add new bot command autopost docs to docs.openbb.co Co-authored-by: James Maslek * Hotfix/ultima improvements (#5553) * tweaks for monetization * fix linting issue * fix: Modify 'load' behavior to append data to existing sheet (#5503) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Fixed 'worksheet not found' error during export to an existing sheet * Changes: * Now if the sheet exists in the xlsx file it will ask the user if he wants to replace/append/create new sheet --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * added platform API integration test to Nightly build (#5571) * Add columns to `stocks/search` (#5565) * Add columns to `stocks/search` isin, cusip, figi, composite_figi, shareclass_figi * Update test_search[False].txt * Update test_search[True].txt * Delete tests/openbb_terminal/stocks/cassettes/test_stocks_helper/test_search.yaml * Create test_search.yaml --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * updating ultima urls (#5587) * fix: A value is trying to be set on a copy of a slice from a DataFrame #5582 (#5591) * Update README.md (#5598) * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * fix docs (#5646) * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update settings.md (#5665) * fix front matter (#5667) * #5633 adding comma every 1000 (#5652) * #5633 adding comma every 1000 * pylint --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Hotfix/reports model render report sanitize inputs (#5669) * Adding more robust special character handling to create_output_path(). Addresses https://github.com/OpenBB-finance/OpenBBTerminal/issues/5299 * Running black linter on code to conform to OBB style guides. --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * hotfix/fix-gov-histcont: Fix #5650 - /stocks/gov/histcont (#5676) * fix histcont * some cleanup * remove sort line * 12-31 not 12-12 * columns_keep_types * remove space in regex (#5675) * Pin openai (#5685) * Clarified stocks/ta empty recom object message (#5468) * Clarified stocks/ta empty recom object message * black * lint --------- Co-authored-by: James Maslek * improved market cap value extraction (#5169) * improved market cap value extraction * pylint --------- Co-authored-by: James Maslek * Release/3.2.4 (#5704) * 3.2.3->3.2.4 * Changelogs * new changelog * OpenBB Platform v4 (#5225) * change location * check something * add cache * fixed auth w/@IgorWounds and @montezdesousa * fixes for econometrics * include Darren auth suggestions * some routers included if dev + chg hub backend var * coverage router should not be here * update docker readme * forgot to check auth here * Change extension imports * update docstrings and readme * headers function wasnt being called, just referenced * relative import * econometrics add headers everywhere * Fix QA * Fix TA * Fix test * Fix python interface QA and TA * Lint * Cleanup * Change path * make the changes and some etf models * tests for command_runner * ruff * solving naming issues on pytest * Update some docstrings, fix typos and lint * solving econometrics instantiating wrong openbb * chaging the way pytest runs * messing around with the imports * ruff * Change template to add platform considerations (#5533) * change template to add platform considerations * @the-praxs suggestions * solving __pycache__ issue * removing typo * ci yml * making linters happy (i guess) * Improve Omega Ratio and docstrings * chaging pro validation hash * ruff * Fix OLS Summary and lint * Add OECD Provider for economy extension (#5534) * Add record to docs * update a couple of cboe models * Fix econometrics bugs. Make tests pass. Lint. * black * ruff * pydantic v2: remove deprecated Extra * pydantic v2: self.dict -> self.model_dump * revert pydantic * revert the revert * try 1: pin urllib3 < 2 * Revert "try 1: pin urllib3 < 2" This reverts commit 3736c311cb6aa9e653dcb5db733798408b72a82e. * Revert dep * Fix * re-lock * Skip all tests when doing cspell in pre-commit * Resolve linter errors * Add OECD to install script * Add OECD * Resolve more linter errors * Exclude static files of v4 python from ruff * More linting * Another attempt to resolve even more linting errors * Change how Literal is used * ticker. symbol. consistent. @piiq * change ticker field in Stock Search to is_symbol * Update Cboe model for stocks_search -> is_symbol parameter. * Fix issue * Lint * Small QA to rename SDK to Platform (#5544) * SDK -> Platform in docs * renamed in core * renamed in openbb `init` * `sdk` variable renamed as `platform` --------- Co-authored-by: hjoaquim * `validator` -> `field_validator` in standard models * Standard convention for multi-ticker symbols (#5549) * standardize symbol input param in forex and crypto historical data * static * linting * Fix stock_search integration test params * Update dependencies and linting on the CI (#5550) * Remove ruff and black from platform dependencies * Update codespell configuration * Lint python code * Add toml and tomli to root dev dependencies * Update requirements.txt files * Fix buggy docstring in python package methods (#5548) * fix buggy docstring for methods * remove space * fix typing * avoid name collision with validator * Revert "avoid name collision with validator" This reverts commit 8a30a44555d97132f6bddcbc4a4facdd97ecc591. * typing * rebuild * python 3.8, ParamSpec not available * lint * ruff noqa * Merge with develop (#5551) * Charting extension integration tests (#5547) * initial proposal for integration tests on the charting extension * int tests for charting generation * python generator * ruff * boilerplate templates * python tests * tests for the api * using body instead so data don't get redefined * unit tests for coverage * ruff * docstrings * unnecessary access to keys() * Add trading economics economic calendar * dev install * Data Models disposition on the website (#5538) * pydantic v4 * flat structure * md files * Revert "md files" This reverts commit bd2170e2adf82fed3a35d34fad6a2e3ba3ae1d49. * improve command descriptions * nice title and description * human readble data model names on left panel * implementation details section * content markdown files * markdown versioned files * showcase page * updates --------- Co-authored-by: tehcoderer * everything except tests * fix `datetime.date` import in fetcher test * modified url to remove `api_key` placeholder * record test * api key is called c here * fixed fetcher test for api key * recorded tests * refactor * life is ruff * codespell * Make Intrinio options chains great again (#5540) * add multithreading * cleanup * linting * use dateutil.parser * removed `TICKER_EXCEPTIONS` * modified `date` and `type` fields in standard model * set alias for `date` and `type` to match standards * static * static * Hotfix/fix post tests (#5555) * Fix econometrics * Fix ta * Fix qa. Remove intrinio to not be rate limited * Lint * Fix typo * obbject tests (#5558) * obbject tests * ruff * fix dev_install * fix unittests * black on nox * black on nox * nox * fix fetcher test so it can compare dates * fix intrinio tests * ruff * change to model_dum() instead (#5561) * Passing tests (#5560) * Passing tests * fix options * Fix most tests and bugs * fix forex missing params * make symbol upper in polygon fx pairs * fix fixedincome integration tests (#5564) * Fixing charting api integration tests (#5562) * fixing charting api integration tests * black * fix stocks less five API fails * fix the 5 failing stocks integration tests * recapture fmp stock news unit test * fix fmp forex api test * couple more forex integration fixes * changing the request to always use the legacy session. @jmaslek this is was broken for 3.8 and 3.9; with this change apparently all versions work - lemme know if you see any issue with this change * ruff * fix ta * add missing param * fix testers for the api * fix globalnews to use images instead of image * remove unncessary pandas import * econcal int tests * update gitignore * fix get_querystring to support lists * add missing parameters --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim * Stock Historical standardization and UX improvements (#5457) * polygon add interval standard param * attempt at standardization * Alpha Vantage params standardization * rename `get_intervals` and fixed bug for extracting wrong value * missed changing it in `extract_data` * linting * polygon cleanup * modified `start_date` & `end_date` type to `datetime` from `dateType` * standardized intrinio stock historical params * fixed yfinance * linting * revert start and end date to dateType from datetime * fix alpha vantage * changed param * fix intrinio infinite loop * `validator` is `field_validator` * revert time params and fixed intervals * `outputsize` alias set in `Field` * set interval description using in-build dict * yfinance stock param standardization * static * intrinio cleanup * Polygon add api params as `PrivateAttr` * modified yfinance params to `PrivateAttr` * intrinio remove overriding date params * fixed description for AV adjusted param * fix alpha vantage intraday not working * re-record and pass unit tests * pass integration tests * Update test --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix econcal endpoint (#5567) * fix econcal for python interface * fix econcal tests * fix non supported json output * Fixes FMP index endpoint to get 1 day interval data (#5535) * fix FMP endpoint for getting index data for `1day` interval * fix `open` type to prevent validation error * modifed `validator` to `field_validator` * type of fields is `StrictFloat` * re-record and pass test * linting * `validator` -> `field_validator`, a3'd everything * Fix regression in tests. Lint * updating the integration test actions * Fix typo * Fix typo * Fix import * Publish versions `a3` to Pypi (#5568) * bump versions and script to publish * small improvements * uncomment exception * openbb * publishing guidelines * improve docs * add providers to economy api * make symbol required in stock_quote * Fix keys * Fix oecd * add comma * revert * Add quotes * Sleep * Improve tests * Improve * Feature/query transform (#5566) * inject query into transform_data * swap query and data * update missing fetchers * last test failing * sig test fetcher * black * av add `query` to `transform_data` call * transform_data: missing refactoring * fix uvicorn command in the doc * Automated examples (#5576) * Automated examples * Fix bug * Lint * static assets built on 3.8 * Revert "static assets built on 3.8" This reverts commit fb82ff7bd9af92ed676d8f8047c31e74daf7b8b2. * remove assets * static assets on 3.8 * static assets on 3.8 * Wrap in quotes * Improve wrap * minor fix * rebuild 3.8 * Fix bug * Fix edge case * Lint * rebuild --------- Co-authored-by: hjoaquim Co-authored-by: Diogo Sousa * use SecretStr for sensitive fields (#5578) * use SecretStr for sensitive fields * fix * docstring * Add tests for provider (#5583) * Add tests for provider * Test standard models * Lint * Fix standard model issues. Co-authored-by: @the-praxs * linting * `symbol` -> `is_symbol` in `economy.index_search` * static --------- Co-authored-by: Pratyush Shukla * feature/v4-biztoc-provider: Adds Biztoc provider and GlobalNews (#5546) * add biztoc provider * duplicate field * black * request headers * recapture test * move stuff around * add integration tests * duplicate OECD entry in dev_install * duplicate entry for oecd in pyproject.toml * Add Biztoc to workflow * update readme: credentials * Add Preferences to README * improve tests * fix biztoc * obbject pylint * Bug fix: serializ SecretStr before dumping to json * export credentials as json (#5592) * Check for wrong, changed, or outdated params. (#5597) * Improving `economy.cpi` for the FRED data (#5602) * remove multiindex using coding magic * Update field descriptions --------- Co-authored-by: Theodore Aptekarev * Improve error message. * Improve * Test tests (#5607) * Test tests * Add test * 4.0.0a4 PyPI publishing (#5608) * changes to publish * fix mini conflict * typo * cleaned `descriptions.py` * fix description in `cpi.py` * Add ETF extension to v4 (#5609) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests * Add ETF historical price from yfinance (#5610) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests * Add etf historical price standard model and route * Add etf historical data from yfinance * Add unit tests * Fix linter error. Organize imports * Update test data * Revert common descriptions erased by CPI PR * remove `symbol` from data for `stocks.ca.peers` * Test docstrings (#5613) * Test docstrings * fix minor bugs w/@IgorWounds * static only w/@IgorWounds * fix `importance` param in `economy.econcal` * right static only w/@IgorWounds * Fix econcal and add tests to noxfile * fix econcal static * re-record --------- Co-authored-by: Pratyush Shukla * Clean up the newly created ETF extension (#5611) * Add ETF to dev_install bundle * Add integration tests for openbb-etf * Patch integration test generator scripts to produce lintable code * Add py.typed markers for extensions * user preferences descriptions (#5593) * user preferences descriptions * typo * Feature/v4-sec-provider: Add SEC provider to V4 (#5556) * coerce string type, add default=None * add sec provider and FTD function * update description * ruff * data model definitions in standard model already * duplicate oecd entries in dev_install and pyproject * actually commit * integration test * add stock search to SEC * add company filings for SEC provider * integration tests * remove duplicated line * ruff * **kwargs in Transform Data * some helper functions for later * black * add helper for mutual fund and etf lookup * add some SEC lookup helpers to a new regulators extension * black * ruff * fix test param * take institution filter out of sec stock_search * ruff * remove URL that codespell doesn't like * add cik-to-ticker map * add litigations rss feed * make openbb-regulators a dependency of openbb-sec * add SIC search * improve ftd and remove BeautifulSoup from SEC dependencies * fix parsing the zip files pre-2009 * ruff * update descriptions * recapture ftd test * tests params * typo * change limit param to 1 in test_sec_stock_ftd * Add didiers to_records method (#5588) * Add didiers to_records * unused import * Bring back polars + do what igor suggested * Make the output consistent with what it was. * Black ? * spelling. oops. almost like we have a pre commit or something * Feature/v4-price-performance: % returns for various horizons, comparable across multiple tickers. (#5618) * coerce string type, add default=None * add price_performance endpoint from FMP * black * extra period in docstring * ruff * forgot one file * Feature/ipo-calendar: V4 IPO Calendar (#5605) * coerce string type, add default=None * add intrinio ipo calendar * fix typo * sort __init__ * fix description * make requested changes * update test params * black * test updates * etf integration * Add disc router and WSJ provider * OBBject extensions (#5612) * changes to core * bug? * docstring * doc * Update credentials.py * fix model_dump * create extensions * fix docstring * doc * revert change query_exc * doc * fix container test * redirect obbject test patch * doc * rename method * move decorator to extension file * rename method extend_obbject * changes in creds model * avoid credential racing * doc * rename prop * doc * doc * remove comment * comment some code * free extension names * docstring * doc * docs * Hotfix/fix-v4-economic-calendar: Add FMP to Econ Calendar and fix some TE bugs (#5580) * coerce string type, add default=None * adds fmp to economic calendar and fixes some things with TE * ruff * etf integration test * missing provider for test * rename te cassette to economic_calendar * fix test * rename tests --------- Co-authored-by: James Maslek * Add stocks disc endpoints (#5630) * Add stocks disc endpoints * Explicit * Lint * Add tests * Bump timeout * Feature/disc router (#5616) * Add disc router and WSJ provider * Lint * Lint * Move endpoints under ETF router * Update etf_performance.py * Add ETF info and sector exposure from FMP (#5620) * Add ETF info from FMP * Add integration tests * Add unit tests * Add etf sectors endpoint * Add etf sectors fmp endpoint * Omit nested sector list from fmp info data * Update tests and test data * Update test data * Specify provider explicitly in integration tests * Update tests * Skip yfinance etf historical test * Fix linter errors after the merge * Fix more linter errors * Fix failing and add missing tests * Fix integration tests * Fix calendar ipo tests * Add ETF holdings and holding report dates from FMP (#5629) * Add ETF info from FMP * Add integration tests * Add unit tests * Add etf sectors endpoint * Add etf sectors fmp endpoint * Omit nested sector list from fmp info data * Update tests and test data * Update test data * Specify provider explicitly in integration tests * Update tests * Skip yfinance etf historical test * Add etf holdings and holdings date routes and standard models * Add fmp holdings and holding dates fetchers * Update holdings fetcher to properly handle date object inputs * Add unit tests * Add integration tests * Black after merge * Fix test input data format * Disc router for equities. (#5640) * Disc router for equities. * add tests * Bug fixes in financial statements (#5537) * `validator` to `field_validator` in standard models * Polygon add `ttm` to `period` param * Revert "Polygon add `ttm` to `period` param" * Polygon add `ttm` to param `period` * `EarningsCallTranscript` standard model removed `quarter` param * use `tag` instead of `name` for correct field name * fix url for intrinio income statement * modified intrinio cash flow `transform_data` function * set optional data fields and validate dates * fix insider trading not fetching recent data * linting * refactoring * refactoring * set param alias in fmp stock insider provider model * get all quarter data for intrinio * add `limit` param to `stocks.fa.ins` * refactoring and linting * removed additional comment * linting * re-recorded and fix tests * cash flow standard model field type to `StrictFloat` * Intrinio cash flow model fixed to get all quarters' data * linting * refactoring * financial statement standard model field type to `StrictFloat` * Intrinio financial statement model get all quarter data * set `period` type to `Optional[str]` * add `period` param to balance sheet provider models * add `period` param to cash flow provider models * use alias in model dump * remove `ttm` from `period` param * revamped intrinio financials * fixed incorrect description for `limit` param * modified tests for `balance`, `cash` and `income` * re-recorded tests * skipped intrinio financial statement fetcher tests * Add ETF county weighting command with FMP data (#5645) * Remove code that wrongfully infers the filing date as end of quarter * Add etf countries command with fmp data * Add countries command to etf router * Update sector and country weighting fmp models * Fix docstring typo * Add unit tests and update mock data * Add integration tests for etf.countries * Bring back missing integration tests * Fix economic calendar integration tests * fix missing data in intrinio financials * removed inutile params from Polygon financial statement models * Intrinio IPO overhaul * tests fixed and re-recorded * Add ETF holdings performance with FMP data (#5659) * Add etf holdings performance endpoint * Add tests * Fix failing polygon fetcher tests * Split long holdings lists into chunks and update test data * Change chunk length to 500 tickers * Add stock search from FMP (#5642) Co-authored-by: Theodore Aptekarev * Feature/v4 pypi (#5579) * improvements to the publish script * move scripts * initial script that builds the package * adjustments on the docs * test pypi workflow * add hour and minute to version * black * ruff * duplicate file * moving files instead * build throught the script instead * update nox file * integration tests workflow * change workflow * fix dev_install * fix in sed cmd * testing the platform only * commenting out the publishing * fix run commands * improvements to the publish script and doc * fix publish script * updating the script and the workflow * feature/v4-pypi nightly (#5589) * init * Update nightly.py * cleanup * init file * not referencing dev_utils * updating obb platform key * revert * Increase warmup time * project name on pyproject and adding the --pre flag on readme * moving to the build folder * fix noxfile * reflecting the moves on the import statements * fix pyproject path * ruff * fix paths * fix super typo * update workflows * moving the pypi terminal files into its folder --------- Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * economy.calendar nasdaq (#5628) * add quandl econcal * unittest * add integration tests * replace   * fix bug TE importance * small fix * remove stuff from quandl * add nasdaq provider * add nasdaq to install files * Update test_economy_api.py * test * quandl leftovers * remove quandl econcal test * lint * replace   * ruff * lint * update nasdaq gmt * validate countries * here * no need for this * fix calendar tests * static * static * remove error * static * readme + website * readme * remove changes TE * typo * fix unittest * fix tests * Update __init__.py * Update economic_calendar.py * revamped model and added helpers for date range --------- Co-authored-by: Pratyush Shukla * Feature/v4-dividend-calendar: Adds Nasdaq dividend calendar and moves the command out of fundamental_analysis (#5672) * add nasdaq dividend calendar and move out of fundamental_analysis * black * ruff * add random-user-agent to pyproject.toml * add nasdaq ipo calendar * add nasdaq flag for SPO to IPO calendar * add spo test param * black * dividend test * fix transform_query - nasdaq_calendar_ipo * bring back different headers for ipo calendar * remove references to test * Add disc endpoints (#5660) * Add Quandl top retail * Add tests * Add Seeking Alpha * Add Filings * Change Provider * Fix test * Add dev_install * static * static correct * y u forget me * updated deps * static --------- Co-authored-by: Pratyush Shukla * using dev install (#5673) * Expanding the `fixedincome` menu (#5655) * models and fetcher * making the fetcher visible * std model * adding the command * improvements to the models * typo * adding the command * imrpovements to dwpcr * standard model for ecb int rates * adding the fetcher for fred * standard model of ice bofa * add ice_bofa command * ruff * ice bofa fetcher * moody std model * moody * std model * add cp command * unused import * cp * spot * ruff * hqm * tmc * ffrmc * tbffr * ruff * typing fixes * buggy dates * fred fetcher tests * ruff * adding ecb as a provider * adding new provider related stuff * adding the new command eu_ycvr * models * test for ecb fetcher * Feature/v4 fixedincome int tests (#5661) * integration tests * happy ruff * mini adjustment * ruff * typo * verbose type * fix tests * docstrings everywhere and an happy pydocstyle * fix tests * Feature/user-cache-dir: Add User Preference for the Cache Directory (#5621) * add user preference for storing cached data * ruff * fix tests? * fix test key error..? * etf integration test fix * add cache dir to SEC * black * improve docs structure for V4 (#5586) * improve docs structure for V4 * moving over changes * Add Docs to the navbar * add some, re-order sidebar * fix sentence * add docs install to source instructions * insert a couple of links, fix a typo * big terminal docs usage revamps * improve toggle component for tutorials * get rid of TOCs for all terminal docs for consistency and simplicity * improve platform docs * improve bot docs content structure * remove index from bot docs * improve ON THIS PAGE to only display TOC if at least 1 element * make edit this page text and icon on same line * add author and date to docs * add basic syntax page to usage * sidebar order for usage section * move api start command to the top with the import python import * some install page additions * small improvement * refactor routines section * Update introduction-to-routines.md * Update pipeline-of-commands.md * Update introduction-to-routines.md * Update routines-for-power-users.md * Update community-routines.md * update keyboard hotkey macros * askobb page * Update askobb-feature.md * Update index.md * Update index.md * Update index.md * Update index.md * fix images * remove HeadTitle from all files where it exist * get rid of extra spacing in markdown * small update * small edit * need index at the start because of main path when homepage of docs * use openAI to create SEO for front matter on my behalf * remove table of content from sdk page * finish improving metadata SEO for SDK docs * update duplicate header * update HeadTitle to be more specific on product * remove index from bot telegram reference * delete duplicated title for platform reference * another update * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * start PR so screenshots can get attached via GitHub website * Update qa.md * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * Update crypto introduction.md * titles * another title * Update crypto dd.md * Update defi.md * Update disc.md * Update nft.md * Update onchain.md * Update ov.md * Update introduction.md updates URL * Update introduction.md add HeadTitle * Update ba.md * Update comparison.md * Update dark-pool-shorts.md * Update disc.md * fix docs (#5646) * Update fa.md * Update gov.md * Update ins.md * Update tradinghours.md * Delete website/content/terminal/menus/stocks/options/screener.md * Update Options introduction.md * Update screener head title * Update screener TOC * Update econometrics.md * Update economy head title * Update etf.md * codespell * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Contributing guidelines (#5615) * intro section * what's expected sections * improve sections * improve sections and move how to add a data point * moving qa under contributor * better intro * moving the sharing section * better expectations * small intro to the contributor guidelines * moving things under the contributor section * there is no pre commits on the platform yet * dependency management * best practices for extensions * typo * collapse options subfolder * codespell * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update fixedincome.md * url * Update forecast.md * Update settings.md (#5665) * Update forex.md * fix front matter (#5667) * Fix conflict markers that got into markdown during previous merges * Fix front matter list formatting * Fix typo * small thing * fix hyperlinks * Update .codespell.ignore * output_type options * Architectural considerations * Update sidebar to hide pro section by default * Minor copy changes * TET pattern * import statements * clarification on preferences * Minor copy changes * Lint markdown and python * fix: open index on collapsible root elements * remove old content * options title * Fix linting errors * Refactor sidebar label to url mapping condition --------- Co-authored-by: andrewkenreich Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim Co-authored-by: Sandip Saha Co-authored-by: James Maslek Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Theodore Aptekarev * Add multi-ticker support to etf_countries (#5670) * add multi-ticker support to etf_countries * remove commented-out lines * normalized percent points * percent -> percentage * Fix Nasdaq Econ Calendar Fetcher (#5668) * fix nasdaq econ cal request * more html tags * add random-user-agent to pyproject * another edge case - 24H -> 00:00 * Feature/v4-unusual-options: Adds unusual options endpoint. (#5677) * add unusual options fro Intrinio * test params * move sorting * Change type * update FMP fetcher to use the V4 endpoint (#5681) * Fix price performance not parsed correctly when there is only 1 ticker (#5678) * Add crypto search standard model and FMP data for it (#5679) * Apply renaming to news data (#5684) * inegration complete * reformatted for black * fix ruff issues * revised integration * changes to versions in pyproject.toml and updated lock files * Rename models * Update tests * Fix typos here and there * Update routers * Apply rename to ultima * Properly mock api key * Mock ultima api key --------- Co-authored-by: Adi Sai * Feature/v4-market-snapshots: Adds full market snapshots (#5473) * add stocks market snapshots from fmp * add fmp fetcher test * unused imports * add polygon to market_snapshots * update fmp market_snapshots * black * pydantic2 things * updates * change validate_obj to model_validate * polygon cleanup * tests * descriptions * black * data description * minor adjustments, using less local variables, improving readability and removing pandas * better structure * minor adjustments * lint * fix int tests --------- Co-authored-by: hjoaquim * Add NBBO Quotes, with historical, to `obb.stocks.quote()` (#5617) * coerce string type, add default=None * add polygon stock quote * limit cleanup * add greater/less than to params * limit param * black * tests * fix tests * test_etf * rename model and function to NBBO * add standard model for nbbo * improve standardization * not redifining builtin max * fix input params * integration test params * removing unused import Co-authored-by: Pratyush Shukla * revamped code * re-recorded nbbo test * added symbol validator * added alias in field * Stock news -> Company news --------- Co-authored-by: hjoaquim Co-authored-by: Pratyush Shukla Co-authored-by: Theodore Aptekarev * hotfix/update-quandl-to-nasdaq: Merge Quandl + Nasdaq (#5682) * merge quandl nd nasdaq * dev_install.py * test param name * economy python integration test * Add more input types to data processing commands (#5453) * adding more supported types to data processing commands * ruff * removing unused import * docstrings * data processing types covertion * data description * test filters * ruff * fix package builder tests * ruff * removing print * Add stocks/dps module (#5638) * short volume * pyproject missed * add sec short interest with days to cover * Add FINRA OTC endopoint * some tests * rest of unit tests * Integratin test scripts * dev install * linters caught by pre commit * lines too long * Last test files * maybe it needs a lock file? * thanks pratty * Maybe ill actually listen to pratty next time * sec test date freeze * I cant hit buttons * re record tests * tests 3 * Stockgrid test * regen int test * more testing * lint * moved these fns * dis killing me * one more test * last one * Update integration tests * Fix tests picking up wrong dps route --------- Co-authored-by: Theodore Aptekarev * Rename Forex to Currency (#5687) * restore fields as optional (#5686) * Rename Crypto (#5689) * added `crypto.price.historical` * static * fix tests * fix incorrect label * Move model from sec to finra (#5692) * Update toml * fixed deps * add openbb-etf lock file * cleanup * cleanup (#5694) * Rename Fixed Income (#5695) * Rename Fixed Income * Add routers * Rename stocks to equity (#5688) * Rename stocks folder * Rename openbb_stocks package * Rename routers * Reroute equity menu * Update routes based on feedback * StockNews -> EquityNews * StockInfo -> EquityProfile * Rename Equity calendars * Equity peers rename * Rename discovery * Rename fundamental * Rename price command models * Rename shorts * Update charting router * Fix seeking alpha upcoming release date * Fix linting errors * Update tests * Fix tests * Skip econometrics api tests because it's python only * Update integration tests and test data * Historical analyst estimates * Skip cboe options chain test. Unable to record vcr cassette * re-record cboe cassettes * Document CBOE unit test creation caveats --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Feature/files-for-igor: Adding a few standard models for Igor (#5699) * add some standard models for Igor * codespell * update descriptions * Add devtools metapackage (#5703) * Add openbb-devtools metapackage * adding devtools to the dev_install script --------- Co-authored-by: hjoaquim * Rename econometrics commands to be more verbose (#5702) * Expose command to model map (#5706) * Rename ta qa (#5708) * Rename ta folder * Rename ta to technical * Rename qa folder * Rename qa to quantitative * Rename the actual routes in quantitative * Equity cleanup (#5707) * cleanup * static * renaming to equity cc @the-praxs * Proof reading --------- Co-authored-by: hjoaquim Co-authored-by: Theodore Aptekarev * Don't enforce imperative for first word of the docstring * Remove ultima from default extensions * Rename `economy` and create `index` extension (#5705) * renamed economy and re-recorded tests * static * market indices * european indices * fred indices * index constituents * tests * correct package name * oops * static * linting * Move COT commands to regulators * Rename economy.list to available_indices * Rename GDP models and clean up * Fix charting tests * Drop _indices from available_indices command * Fix obbject to_dict test --------- Co-authored-by: Theodore Aptekarev * Rename etf/disc (#5715) * Docs/v4-working-docs: PR to Work on V4 Docs (#5693) * Revert changes related to pydantic2 made into v3 code * Revert fred model changes in v3 * Revert pydantic2 databento model changes in v2 * Update some names and v3 lock file * Clean up openbb/package before the beta release * Platform publishing procedure (#5701) * update instructions * introducing the version script * publish message * fix platform path * reflecting version changes * getting version from installed packages instead * removing toml from dependencies * Changes to get `a7` out (#5697) * changes to get a7 out * etf menu on the pyproject.toml * poetry lock * bump `openbb-etf` to `a5` to match version * updated deps * removing ultima * removing references to a4 cc @the-praxs * Bump index menu version * poetry lock --------- Co-authored-by: Pratyush Shukla Co-authored-by: Theodore Aptekarev * Update publishing instructions * Bump core dependencies in extensions and providers * Add changes to the publish script following the beta release * Update the versions in static extension map and openbb metapackage --------- Co-authored-by: James Maslek Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim Co-authored-by: Diogo Sousa Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: tehcoderer Co-authored-by: DidierRLopes Co-authored-by: andrewkenreich Co-authored-by: Sandip Saha Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Adi Sai * Hotfix/pypi openbb terminal (#5719) * renaming the project * documentation changes * Finishing touches to the publishing procedure (#5728) * finishing touches to the publishing procedure * grammar improvements * Run tests on develop (#5725) * Run tests on develop * Add a check that files changes in platform * Seprate Intrinio financials data tags into a different command (#5723) * add `ebit` field in income statement standard model * only add required data tags * remove calculations data * use `name` key instead of `tag` key * set `period` as required in data * remove `period` and `cik` from provider models * add `equity/fundamental/search_financial_attributes` with tests * clean descriptions file * add `equity/fundamental/financial_attributes` with tests * set `value` as `Optional` * Fix threadpool test error (#5734) * Remove ultima from deps (#5736) * remove ultima from deps * skip ultima test * black * change skip location * try except statement to avoid error on the ci * new currency reference rates pr (#5724) * point files to linters (#5739) * remove news from equity (#5741) * Add tiingo provider (#5740) * first commit * things * Add news endpoints * CryptoHistorical * Add currency and trailing dividend yield * things working * deps * fix pre commit things * tests? * black on the tests * pratty told me to add it * integration tests * added helpers * crypto revamped * currency revamped * trailing dividend yield revamped * equity historical revamped * company news overhauled * global news overhauled * remove `tags` param from news models * crypto correct `exchanges` description * james smh * re-recorded fetcher tests * fixed integration tests * econometrics smh * james smh again --------- Co-authored-by: Pratyush Shukla * Add `derivatives` extension for `futures` and `options` (#5742) * removed options and futures * add derivatives extension * cleanup * bug #5649 (#5722) * bug #5649 * fixing --a upmom, downmom --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Rename the fmp search -> screener (#5744) * Rename the fmp search -> screener * misses some * i cant copy paste * docs/fix-urls: Updates the Terminal About URLs to match `/develop` (#5720) * update Terminal about URLs and some other broken links * ruff * intro * changing the heading levels * dependency management sections * structure * developer guides * structure * contributor guides * keywords and descriptions * broken urls * cool cards * Cool cards (#5727) * tidy up terminal/content * some more tidy up * fix styling for platform that was missing * more tidy up * improve color for dark and light mode * create new reference card for more basic cards * rename back to menus * implement all index.md for terminal, except reference * improve bot title * more refactoring * fix remaining index * header styling * more styling * heheheheheheeh * Revert "heheheheheheeh" This reverts commit 7d095fcfd258efb7e82b75b4663b5360785195f3. * Ccards (#5733) * links * more links * improved styling and chevron aligned to title * fix index.mdx urls for Terminal * update package.json * update index.mdx * fix generation * spelling * toolkit_extensions * update data extensions * couple of links * add tiingo to data extensions list --------- Co-authored-by: hjoaquim Co-authored-by: andrewkenreich Co-authored-by: DidierRLopes Co-authored-by: James Maslek * Stock leftover cleanup (#5745) * change to equity in `.md` files * `HistoricalStockSplits`->`HistoricalSplits` * `StockInsiderTrading`->`InsiderTrading` * sorry fmp * `EquityHistorical` cleanup * `EquityNBBO` cleanup * .md leftover * the last of stocks * Hotfix/urllib to dev group (#5732) * use the urllib3 dependency on the dev group instead * adapt the version script for the nightlies - if it's a nightly the package distribution name will have a different name * add dev dependencies to the dev installation bc of the ci * updating the import on validate_call according to: https://docs.pydantic.dev/latest/concepts/validation_decorator/ the way we were importing it breaks if pydantic=2.5 @montezdesousa * loosing urllib3 version specification on the provider and adding it to platform dev deps * rmeoving urllib from top level deps; and removing --with dev flag * changing to ^ instead * Revert "changing to ^ instead" This reverts commit 7300904e9f3adba372b106d381b70ae06e28795a. * unnecessary dep --------- Co-authored-by: Theodore Aptekarev Co-authored-by: James Maslek * feature/v4-bop - Add ECB Balance of Payments (Replaces #5716) (#5726) * add ecb balance of payments * missing __init__.py files * Nasdaq calendar earnings and fix FMP calendar earnings (#5718) Co-authored-by: James Maslek * feature/us-treasury-auctions: Adds Treasury Auctions endpoint and provider for US Government Data. (#5746) * add government_us provider and treasury auctions endpoint * black * add param for cusip * move logic for setting default start/end date * Update hub<>platform credentials map (#5749) * update hub<>platform credentials map * typo * Add API settings schema to system settings (#5743) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Skip checking creds (#5737) * skip checking creds * fix bug * ok mypy * add comment * rename required_credentials * fix * fix top_retail bug * don't require creds in some nasdaq fetchers * black * this was not here before * fix tests * update fetcher test * update contributing guidelines * Fix Quote (#5752) * Fix Quote * fixed return type and model validation --------- Co-authored-by: Pratyush Shukla * Wrap up renaming global news to world news on a model level (#5750) * Wrap up renaming global news to world news on a model level * cleanup --------- Co-authored-by: Pratyush Shukla * Remove eod from docstrings (#5751) * Wrap up renaming global news to world news on a model level * Remove "end of day" from historical price model docstrings --------- Co-authored-by: Pratyush Shukla * Massive docstring cleanup (#5755) * sec router remove command * standard models cleanup * fmp cleanup * av cleanup * benzinga cleanup * biztoc cleanup * cboe cleanup * ecb cleanup * finra cleanup * fred cleanup * us cleanup * intrinio cleanup * nasdaq cleanup * oecd cleanup * polygon cleanup * sec cleanup * seeking alpha cleanup * stockgrid cleanup * tiingo cleanup * tradingeconomics cleanup * ultima cleanup * wsj cleanup * yfinance cleanup * sec router lint * fix date query param description * Updates system and api settings (#5753) * remove uncessary import on rest api * remove FrozenField and add api.version * allow setup from json * remove id tag * computed field is better * formatting --------- Co-authored-by: Theodore Aptekarev * Squeeze build time (#5756) * squeeze build time * bug fix * fix test * typo? * rebuild * keep tradingeconomics * docs/working-docs: Working V4 Docs PR (#5747) * post-install clarification, fix links * more links * change word * toolkit cleanup * rename 'contributing' to 'development' * update extensions * some urls * Update sdk-platform and v4-develop in urls (#5730) * Update sdk-platform and v4-develop in urls * Seprate Intrinio financials data tags into a different command (#5723) * add `ebit` field in income statement standard model * only add required data tags * remove calculations data * use `name` key instead of `tag` key * set `period` as required in data * remove `period` and `cik` from provider models * add `equity/fundamental/search_financial_attributes` with tests * clean descriptions file * add `equity/fundamental/financial_attributes` with tests * set `value` as `Optional` * Fix threadpool test error (#5734) * Remove ultima from deps (#5736) * remove ultima from deps * skip ultima test * black… * [Bugfix] Update `PUBLISH.md` file (#6193) * publish doc updated * add info * Remove charting extension preference from user settings (#6194) * [Bugfix] - Small update on PUBLISH.md (#6196) * small update on publish.md * minor fix * updated with more details --------- Co-authored-by: Pratyush Shukla * [Feature] Hotfix develop main sync (#6200) * Release/3.2.4 (#5696) * test * ultima description (#5541) * Updating showcase page (#5543) * updating showcase page * use sdk instead * add new bot command autopost docs (#5530) add new bot command autopost docs to docs.openbb.co Co-authored-by: James Maslek * Hotfix/ultima improvements (#5553) * tweaks for monetization * fix linting issue * fix: Modify 'load' behavior to append data to existing sheet (#5503) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Fixed 'worksheet not found' error during export to an existing sheet * Changes: * Now if the sheet exists in the xlsx file it will ask the user if he wants to replace/append/create new sheet --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * added platform API integration test to Nightly build (#5571) * Add columns to `stocks/search` (#5565) * Add columns to `stocks/search` isin, cusip, figi, composite_figi, shareclass_figi * Update test_search[False].txt * Update test_search[True].txt * Delete tests/openbb_terminal/stocks/cassettes/test_stocks_helper/test_search.yaml * Create test_search.yaml --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * updating ultima urls (#5587) * fix: A value is trying to be set on a copy of a slice from a DataFrame #5582 (#5591) * Update README.md (#5598) * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * fix docs (#5646) * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update settings.md (#5665) * fix front matter (#5667) * #5633 adding comma every 1000 (#5652) * #5633 adding comma every 1000 * pylint --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Hotfix/reports model render report sanitize inputs (#5669) * Adding more robust special character handling to create_output_path(). Addresses https://github.com/OpenBB-finance/OpenBBTerminal/issues/5299 * Running black linter on code to conform to OBB style guides. --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * hotfix/fix-gov-histcont: Fix #5650 - /stocks/gov/histcont (#5676) * fix histcont * some cleanup * remove sort line * 12-31 not 12-12 * columns_keep_types * remove space in regex (#5675) * Pin openai (#5685) * Clarified stocks/ta empty recom object message (#5468) * Clarified stocks/ta empty recom object message * black * lint --------- Co-authored-by: James Maslek * improved market cap value extraction (#5169) * improved market cap value extraction * pylint --------- Co-authored-by: James Maslek * 3.2.3->3.2.4 * Changelogs * new changelog --------- Co-authored-by: Henrique Joaquim Co-authored-by: Andrew Co-authored-by: Adi Sai Co-authored-by: Sandip Saha Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Luqman Co-authored-by: Adwait <111136306+AdwaitSalankar@users.noreply.github.com> Co-authored-by: Abhishek Amar <66067391+abhishek-amar@users.noreply.github.com> Co-authored-by: DidierRLopes Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Ramazan Co-authored-by: joshuabuildsthings Co-authored-by: wojda <114031148+polooner@users.noreply.github.com> Co-authored-by: Bim Phomthong <118195204+bimbolimbo@users.noreply.github.com> * Release/4.0.1 (#5840) * test * ultima description (#5541) * Updating showcase page (#5543) * updating showcase page * use sdk instead * add new bot command autopost docs (#5530) add new bot command autopost docs to docs.openbb.co Co-authored-by: James Maslek * Hotfix/ultima improvements (#5553) * tweaks for monetization * fix linting issue * fix: Modify 'load' behavior to append data to existing sheet (#5503) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Fixed 'worksheet not found' error during export to an existing sheet * Changes: * Now if the sheet exists in the xlsx file it will ask the user if he wants to replace/append/create new sheet --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * added platform API integration test to Nightly build (#5571) * Add columns to `stocks/search` (#5565) * Add columns to `stocks/search` isin, cusip, figi, composite_figi, shareclass_figi * Update test_search[False].txt * Update test_search[True].txt * Delete tests/openbb_terminal/stocks/cassettes/test_stocks_helper/test_search.yaml * Create test_search.yaml --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * updating ultima urls (#5587) * fix: A value is trying to be set on a copy of a slice from a DataFrame #5582 (#5591) * Update README.md (#5598) * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * fix docs (#5646) * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update settings.md (#5665) * fix front matter (#5667) * #5633 adding comma every 1000 (#5652) * #5633 adding comma every 1000 * pylint --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Hotfix/reports model render report sanitize inputs (#5669) * Adding more robust special character handling to create_output_path(). Addresses https://github.com/OpenBB-finance/OpenBBTerminal/issues/5299 * Running black linter on code to conform to OBB style guides. --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * hotfix/fix-gov-histcont: Fix #5650 - /stocks/gov/histcont (#5676) * fix histcont * some cleanup * remove sort line * 12-31 not 12-12 * columns_keep_types * remove space in regex (#5675) * Pin openai (#5685) * Clarified stocks/ta empty recom object message (#5468) * Clarified stocks/ta empty recom object message * black * lint --------- Co-authored-by: James Maslek * improved market cap value extraction (#5169) * improved market cap value extraction * pylint --------- Co-authored-by: James Maslek * Release/3.2.4 (#5704) * 3.2.3->3.2.4 * Changelogs * new changelog * OpenBB Platform v4 (#5225) * change location * check something * add cache * fixed auth w/@IgorWounds and @montezdesousa * fixes for econometrics * include Darren auth suggestions * some routers included if dev + chg hub backend var * coverage router should not be here * update docker readme * forgot to check auth here * Change extension imports * update docstrings and readme * headers function wasnt being called, just referenced * relative import * econometrics add headers everywhere * Fix QA * Fix TA * Fix test * Fix python interface QA and TA * Lint * Cleanup * Change path * make the changes and some etf models * tests for command_runner * ruff * solving naming issues on pytest * Update some docstrings, fix typos and lint * solving econometrics instantiating wrong openbb * chaging the way pytest runs * messing around with the imports * ruff * Change template to add platform considerations (#5533) * change template to add platform considerations * @the-praxs suggestions * solving __pycache__ issue * removing typo * ci yml * making linters happy (i guess) * Improve Omega Ratio and docstrings * chaging pro validation hash * ruff * Fix OLS Summary and lint * Add OECD Provider for economy extension (#5534) * Add record to docs * update a couple of cboe models * Fix econometrics bugs. Make tests pass. Lint. * black * ruff * pydantic v2: remove deprecated Extra * pydantic v2: self.dict -> self.model_dump * revert pydantic * revert the revert * try 1: pin urllib3 < 2 * Revert "try 1: pin urllib3 < 2" This reverts commit 3736c311cb6aa9e653dcb5db733798408b72a82e. * Revert dep * Fix * re-lock * Skip all tests when doing cspell in pre-commit * Resolve linter errors * Add OECD to install script * Add OECD * Resolve more linter errors * Exclude static files of v4 python from ruff * More linting * Another attempt to resolve even more linting errors * Change how Literal is used * ticker. symbol. consistent. @piiq * change ticker field in Stock Search to is_symbol * Update Cboe model for stocks_search -> is_symbol parameter. * Fix issue * Lint * Small QA to rename SDK to Platform (#5544) * SDK -> Platform in docs * renamed in core * renamed in openbb `init` * `sdk` variable renamed as `platform` --------- Co-authored-by: hjoaquim * `validator` -> `field_validator` in standard models * Standard convention for multi-ticker symbols (#5549) * standardize symbol input param in forex and crypto historical data * static * linting * Fix stock_search integration test params * Update dependencies and linting on the CI (#5550) * Remove ruff and black from platform dependencies * Update codespell configuration * Lint python code * Add toml and tomli to root dev dependencies * Update requirements.txt files * Fix buggy docstring in python package methods (#5548) * fix buggy docstring for methods * remove space * fix typing * avoid name collision with validator * Revert "avoid name collision with validator" This reverts commit 8a30a44555d97132f6bddcbc4a4facdd97ecc591. * typing * rebuild * python 3.8, ParamSpec not available * lint * ruff noqa * Merge with develop (#5551) * Charting extension integration tests (#5547) * initial proposal for integration tests on the charting extension * int tests for charting generation * python generator * ruff * boilerplate templates * python tests * tests for the api * using body instead so data don't get redefined * unit tests for coverage * ruff * docstrings * unnecessary access to keys() * Add trading economics economic calendar * dev install * Data Models disposition on the website (#5538) * pydantic v4 * flat structure * md files * Revert "md files" This reverts commit bd2170e2adf82fed3a35d34fad6a2e3ba3ae1d49. * improve command descriptions * nice title and description * human readble data model names on left panel * implementation details section * content markdown files * markdown versioned files * showcase page * updates --------- Co-authored-by: tehcoderer * everything except tests * fix `datetime.date` import in fetcher test * modified url to remove `api_key` placeholder * record test * api key is called c here * fixed fetcher test for api key * recorded tests * refactor * life is ruff * codespell * Make Intrinio options chains great again (#5540) * add multithreading * cleanup * linting * use dateutil.parser * removed `TICKER_EXCEPTIONS` * modified `date` and `type` fields in standard model * set alias for `date` and `type` to match standards * static * static * Hotfix/fix post tests (#5555) * Fix econometrics * Fix ta * Fix qa. Remove intrinio to not be rate limited * Lint * Fix typo * obbject tests (#5558) * obbject tests * ruff * fix dev_install * fix unittests * black on nox * black on nox * nox * fix fetcher test so it can compare dates * fix intrinio tests * ruff * change to model_dum() instead (#5561) * Passing tests (#5560) * Passing tests * fix options * Fix most tests and bugs * fix forex missing params * make symbol upper in polygon fx pairs * fix fixedincome integration tests (#5564) * Fixing charting api integration tests (#5562) * fixing charting api integration tests * black * fix stocks less five API fails * fix the 5 failing stocks integration tests * recapture fmp stock news unit test * fix fmp forex api test * couple more forex integration fixes * changing the request to always use the legacy session. @jmaslek this is was broken for 3.8 and 3.9; with this change apparently all versions work - lemme know if you see any issue with this change * ruff * fix ta * add missing param * fix testers for the api * fix globalnews to use images instead of image * remove unncessary pandas import * econcal int tests * update gitignore * fix get_querystring to support lists * add missing parameters --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim * Stock Historical standardization and UX improvements (#5457) * polygon add interval standard param * attempt at standardization * Alpha Vantage params standardization * rename `get_intervals` and fixed bug for extracting wrong value * missed changing it in `extract_data` * linting * polygon cleanup * modified `start_date` & `end_date` type to `datetime` from `dateType` * standardized intrinio stock historical params * fixed yfinance * linting * revert start and end date to dateType from datetime * fix alpha vantage * changed param * fix intrinio infinite loop * `validator` is `field_validator` * revert time params and fixed intervals * `outputsize` alias set in `Field` * set interval description using in-build dict * yfinance stock param standardization * static * intrinio cleanup * Polygon add api params as `PrivateAttr` * modified yfinance params to `PrivateAttr` * intrinio remove overriding date params * fixed description for AV adjusted param * fix alpha vantage intraday not working * re-record and pass unit tests * pass integration tests * Update test --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix econcal endpoint (#5567) * fix econcal for python interface * fix econcal tests * fix non supported json output * Fixes FMP index endpoint to get 1 day interval data (#5535) * fix FMP endpoint for getting index data for `1day` interval * fix `open` type to prevent validation error * modifed `validator` to `field_validator` * type of fields is `StrictFloat` * re-record and pass test * linting * `validator` -> `field_validator`, a3'd everything * Fix regression in tests. Lint * updating the integration test actions * Fix typo * Fix typo * Fix import * Publish versions `a3` to Pypi (#5568) * bump versions and script to publish * small improvements * uncomment exception * openbb * publishing guidelines * improve docs * add providers to economy api * make symbol required in stock_quote * Fix keys * Fix oecd * add comma * revert * Add quotes * Sleep * Improve tests * Improve * Feature/query transform (#5566) * inject query into transform_data * swap query and data * update missing fetchers * last test failing * sig test fetcher * black * av add `query` to `transform_data` call * transform_data: missing refactoring * fix uvicorn command in the doc * Automated examples (#5576) * Automated examples * Fix bug * Lint * static assets built on 3.8 * Revert "static assets built on 3.8" This reverts commit fb82ff7bd9af92ed676d8f8047c31e74daf7b8b2. * remove assets * static assets on 3.8 * static assets on 3.8 * Wrap in quotes * Improve wrap * minor fix * rebuild 3.8 * Fix bug * Fix edge case * Lint * rebuild --------- Co-authored-by: hjoaquim Co-authored-by: Diogo Sousa * use SecretStr for sensitive fields (#5578) * use SecretStr for sensitive fields * fix * docstring * Add tests for provider (#5583) * Add tests for provider * Test standard models * Lint * Fix standard model issues. Co-authored-by: @the-praxs * linting * `symbol` -> `is_symbol` in `economy.index_search` * static --------- Co-authored-by: Pratyush Shukla * feature/v4-biztoc-provider: Adds Biztoc provider and GlobalNews (#5546) * add biztoc provider * duplicate field * black * request headers * recapture test * move stuff around * add integration tests * duplicate OECD entry in dev_install * duplicate entry for oecd in pyproject.toml * Add Biztoc to workflow * update readme: credentials * Add Preferences to README * improve tests * fix biztoc * obbject pylint * Bug fix: serializ SecretStr before dumping to json * export credentials as json (#5592) * Check for wrong, changed, or outdated params. (#5597) * Improving `economy.cpi` for the FRED data (#5602) * remove multiindex using coding magic * Update field descriptions --------- Co-authored-by: Theodore Aptekarev * Improve error message. * Improve * Test tests (#5607) * Test tests * Add test * 4.0.0a4 PyPI publishing (#5608) * changes to publish * fix mini conflict * typo * cleaned `descriptions.py` * fix description in `cpi.py` * Add ETF extension to v4 (#5609) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests * Add ETF historical price from yfinance (#5610) * Add etf extension with search data model * Add FMP ETF search * Add fetcher tests * Add etf historical price standard model and route * Add etf historical data from yfinance * Add unit tests * Fix linter error. Organize imports * Update test data * Revert common descriptions erased by CPI PR * remove `symbol` from data for `stocks.ca.peers` * Test docstrings (#5613) * Test docstrings * fix minor bugs w/@IgorWounds * static only w/@IgorWounds * fix `importance` param in `economy.econcal` * right static only w/@IgorWounds * Fix econcal and add tests to noxfile * fix econcal static * re-record --------- Co-authored-by: Pratyush Shukla * Clean up the newly created ETF extension (#5611) * Add ETF to dev_install bundle * Add integration tests for openbb-etf * Patch integration test generator scripts to produce lintable code * Add py.typed markers for extensions * user preferences descriptions (#5593) * user preferences descriptions * typo * Feature/v4-sec-provider: Add SEC provider to V4 (#5556) * coerce string type, add default=None * add sec provider and FTD function * update description * ruff * data model definitions in standard model already * duplicate oecd entries in dev_install and pyproject * actually commit * integration test * add stock search to SEC * add company filings for SEC provider * integration tests * remove duplicated line * ruff * **kwargs in Transform Data * some helper functions for later * black * add helper for mutual fund and etf lookup * add some SEC lookup helpers to a new regulators extension * black * ruff * fix test param * take institution filter out of sec stock_search * ruff * remove URL that codespell doesn't like * add cik-to-ticker map * add litigations rss feed * make openbb-regulators a dependency of openbb-sec * add SIC search * improve ftd and remove BeautifulSoup from SEC dependencies * fix parsing the zip files pre-2009 * ruff * update descriptions * recapture ftd test * tests params * typo * change limit param to 1 in test_sec_stock_ftd * Add didiers to_records method (#5588) * Add didiers to_records * unused import * Bring back polars + do what igor suggested * Make the output consistent with what it was. * Black ? * spelling. oops. almost like we have a pre commit or something * Feature/v4-price-performance: % returns for various horizons, comparable across multiple tickers. (#5618) * coerce string type, add default=None * add price_performance endpoint from FMP * black * extra period in docstring * ruff * forgot one file * Feature/ipo-calendar: V4 IPO Calendar (#5605) * coerce string type, add default=None * add intrinio ipo calendar * fix typo * sort __init__ * fix description * make requested changes * update test params * black * test updates * etf integration * Add disc router and WSJ provider * OBBject extensions (#5612) * changes to core * bug? * docstring * doc * Update credentials.py * fix model_dump * create extensions * fix docstring * doc * revert change query_exc * doc * fix container test * redirect obbject test patch * doc * rename method * move decorator to extension file * rename method extend_obbject * changes in creds model * avoid credential racing * doc * rename prop * doc * doc * remove comment * comment some code * free extension names * docstring * doc * docs * Hotfix/fix-v4-economic-calendar: Add FMP to Econ Calendar and fix some TE bugs (#5580) * coerce string type, add default=None * adds fmp to economic calendar and fixes some things with TE * ruff * etf integration test * missing provider for test * rename te cassette to economic_calendar * fix test * rename tests --------- Co-authored-by: James Maslek * Add stocks disc endpoints (#5630) * Add stocks disc endpoints * Explicit * Lint * Add tests * Bump timeout * Feature/disc router (#5616) * Add disc router and WSJ provider * Lint * Lint * Move endpoints under ETF router * Update etf_performance.py * Add ETF info and sector exposure from FMP (#5620) * Add ETF info from FMP * Add integration tests * Add unit tests * Add etf sectors endpoint * Add etf sectors fmp endpoint * Omit nested sector list from fmp info data * Update tests and test data * Update test data * Specify provider explicitly in integration tests * Update tests * Skip yfinance etf historical test * Fix linter errors after the merge * Fix more linter errors * Fix failing and add missing tests * Fix integration tests * Fix calendar ipo tests * Add ETF holdings and holding report dates from FMP (#5629) * Add ETF info from FMP * Add integration tests * Add unit tests * Add etf sectors endpoint * Add etf sectors fmp endpoint * Omit nested sector list from fmp info data * Update tests and test data * Update test data * Specify provider explicitly in integration tests * Update tests * Skip yfinance etf historical test * Add etf holdings and holdings date routes and standard models * Add fmp holdings and holding dates fetchers * Update holdings fetcher to properly handle date object inputs * Add unit tests * Add integration tests * Black after merge * Fix test input data format * Disc router for equities. (#5640) * Disc router for equities. * add tests * Bug fixes in financial statements (#5537) * `validator` to `field_validator` in standard models * Polygon add `ttm` to `period` param * Revert "Polygon add `ttm` to `period` param" * Polygon add `ttm` to param `period` * `EarningsCallTranscript` standard model removed `quarter` param * use `tag` instead of `name` for correct field name * fix url for intrinio income statement * modified intrinio cash flow `transform_data` function * set optional data fields and validate dates * fix insider trading not fetching recent data * linting * refactoring * refactoring * set param alias in fmp stock insider provider model * get all quarter data for intrinio * add `limit` param to `stocks.fa.ins` * refactoring and linting * removed additional comment * linting * re-recorded and fix tests * cash flow standard model field type to `StrictFloat` * Intrinio cash flow model fixed to get all quarters' data * linting * refactoring * financial statement standard model field type to `StrictFloat` * Intrinio financial statement model get all quarter data * set `period` type to `Optional[str]` * add `period` param to balance sheet provider models * add `period` param to cash flow provider models * use alias in model dump * remove `ttm` from `period` param * revamped intrinio financials * fixed incorrect description for `limit` param * modified tests for `balance`, `cash` and `income` * re-recorded tests * skipped intrinio financial statement fetcher tests * Add ETF county weighting command with FMP data (#5645) * Remove code that wrongfully infers the filing date as end of quarter * Add etf countries command with fmp data * Add countries command to etf router * Update sector and country weighting fmp models * Fix docstring typo * Add unit tests and update mock data * Add integration tests for etf.countries * Bring back missing integration tests * Fix economic calendar integration tests * fix missing data in intrinio financials * removed inutile params from Polygon financial statement models * Intrinio IPO overhaul * tests fixed and re-recorded * Add ETF holdings performance with FMP data (#5659) * Add etf holdings performance endpoint * Add tests * Fix failing polygon fetcher tests * Split long holdings lists into chunks and update test data * Change chunk length to 500 tickers * Add stock search from FMP (#5642) Co-authored-by: Theodore Aptekarev * Feature/v4 pypi (#5579) * improvements to the publish script * move scripts * initial script that builds the package * adjustments on the docs * test pypi workflow * add hour and minute to version * black * ruff * duplicate file * moving files instead * build throught the script instead * update nox file * integration tests workflow * change workflow * fix dev_install * fix in sed cmd * testing the platform only * commenting out the publishing * fix run commands * improvements to the publish script and doc * fix publish script * updating the script and the workflow * feature/v4-pypi nightly (#5589) * init * Update nightly.py * cleanup * init file * not referencing dev_utils * updating obb platform key * revert * Increase warmup time * project name on pyproject and adding the --pre flag on readme * moving to the build folder * fix noxfile * reflecting the moves on the import statements * fix pyproject path * ruff * fix paths * fix super typo * update workflows * moving the pypi terminal files into its folder --------- Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * economy.calendar nasdaq (#5628) * add quandl econcal * unittest * add integration tests * replace   * fix bug TE importance * small fix * remove stuff from quandl * add nasdaq provider * add nasdaq to install files * Update test_economy_api.py * test * quandl leftovers * remove quandl econcal test * lint * replace   * ruff * lint * update nasdaq gmt * validate countries * here * no need for this * fix calendar tests * static * static * remove error * static * readme + website * readme * remove changes TE * typo * fix unittest * fix tests * Update __init__.py * Update economic_calendar.py * revamped model and added helpers for date range --------- Co-authored-by: Pratyush Shukla * Feature/v4-dividend-calendar: Adds Nasdaq dividend calendar and moves the command out of fundamental_analysis (#5672) * add nasdaq dividend calendar and move out of fundamental_analysis * black * ruff * add random-user-agent to pyproject.toml * add nasdaq ipo calendar * add nasdaq flag for SPO to IPO calendar * add spo test param * black * dividend test * fix transform_query - nasdaq_calendar_ipo * bring back different headers for ipo calendar * remove references to test * Add disc endpoints (#5660) * Add Quandl top retail * Add tests * Add Seeking Alpha * Add Filings * Change Provider * Fix test * Add dev_install * static * static correct * y u forget me * updated deps * static --------- Co-authored-by: Pratyush Shukla * using dev install (#5673) * Expanding the `fixedincome` menu (#5655) * models and fetcher * making the fetcher visible * std model * adding the command * improvements to the models * typo * adding the command * imrpovements to dwpcr * standard model for ecb int rates * adding the fetcher for fred * standard model of ice bofa * add ice_bofa command * ruff * ice bofa fetcher * moody std model * moody * std model * add cp command * unused import * cp * spot * ruff * hqm * tmc * ffrmc * tbffr * ruff * typing fixes * buggy dates * fred fetcher tests * ruff * adding ecb as a provider * adding new provider related stuff * adding the new command eu_ycvr * models * test for ecb fetcher * Feature/v4 fixedincome int tests (#5661) * integration tests * happy ruff * mini adjustment * ruff * typo * verbose type * fix tests * docstrings everywhere and an happy pydocstyle * fix tests * Feature/user-cache-dir: Add User Preference for the Cache Directory (#5621) * add user preference for storing cached data * ruff * fix tests? * fix test key error..? * etf integration test fix * add cache dir to SEC * black * improve docs structure for V4 (#5586) * improve docs structure for V4 * moving over changes * Add Docs to the navbar * add some, re-order sidebar * fix sentence * add docs install to source instructions * insert a couple of links, fix a typo * big terminal docs usage revamps * improve toggle component for tutorials * get rid of TOCs for all terminal docs for consistency and simplicity * improve platform docs * improve bot docs content structure * remove index from bot docs * improve ON THIS PAGE to only display TOC if at least 1 element * make edit this page text and icon on same line * add author and date to docs * add basic syntax page to usage * sidebar order for usage section * move api start command to the top with the import python import * some install page additions * small improvement * refactor routines section * Update introduction-to-routines.md * Update pipeline-of-commands.md * Update introduction-to-routines.md * Update routines-for-power-users.md * Update community-routines.md * update keyboard hotkey macros * askobb page * Update askobb-feature.md * Update index.md * Update index.md * Update index.md * Update index.md * fix images * remove HeadTitle from all files where it exist * get rid of extra spacing in markdown * small update * small edit * need index at the start because of main path when homepage of docs * use openAI to create SEO for front matter on my behalf * remove table of content from sdk page * finish improving metadata SEO for SDK docs * update duplicate header * update HeadTitle to be more specific on product * remove index from bot telegram reference * delete duplicated title for platform reference * another update * Hotfix/econometrics export filename fix (#5508) * fix: Modify 'load' behavior to append data to existing sheet Details: - Added logic to detect existing sheet and append data if present. - There is no direct way to append on the sheet, so I am reading the sheet to get the last row number and then writing after that row number. Resolves: #5472 * Added --export option for exporting to a desired file in /econometrics menu * Added a -f/--file option to provide the filename for export. Made -t/--type and -f/--file mutually exclusive. If -f is not given, -t is required and the filename will be generated based on the time and module. * Revert `helper_funcs.py` to original state * Made some arguments not required. * Minor changes asked by @deeleeramone * No sheet name * black --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * FIX #5600 Updated the Twitter logo to X logo (#5601) * Change Ultima paragraph (#5624) * change ultima paragraph * remove old paragraph * Update CONTRIBUTING.md (#5623) * mobile line-brake fixed (#5604) In the mobile view (media max 400px ), the text line "Installation >>" appears broken into smaller segments. Co-authored-by: James Maslek * start PR so screenshots can get attached via GitHub website * Update qa.md * Docs/terminalpro and improvement (#5622) * add first iteration of content for Terminal Pro * Update index.md * Update dashboards.md * Update folders.md * Update grouping.md * Update report.md * Update templates.md * Update quick-start.md * Update index.md * Update index.md * Update home.md * Update news.md * Update index.md * Update index.md * Update index.md * Update data-provider.md * Update chat-with-widget.md * Update data-manipulation.md * Update forecasting.md * fix: images self closing tags * fix: only pro visitors can see pro * inter font * improve SEO content and restructuring * add new package for toggle on tutorials * move folder around * improve main page of each prod * small updates and improvements * fix logo above * small improvement in headtitle for portfolio funcs * fix typos from OpenAI's GPT-4 * fix _category_ json * remove generic SEO words * add script that generates SEO for documentation * add missing file * remove sdk warning message * fix links for andrew --------- Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: andrewkenreich * Add light blue banner, blue when clicking sidebar + fix link in docusaurus.config.js (#5627) * typo * pro docs tab coloring * sidebar selection blue * redirecting missing * Update crypto introduction.md * titles * another title * Update crypto dd.md * Update defi.md * Update disc.md * Update nft.md * Update onchain.md * Update ov.md * Update introduction.md updates URL * Update introduction.md add HeadTitle * Update ba.md * Update comparison.md * Update dark-pool-shorts.md * Update disc.md * fix docs (#5646) * Update fa.md * Update gov.md * Update ins.md * Update tradinghours.md * Delete website/content/terminal/menus/stocks/options/screener.md * Update Options introduction.md * Update screener head title * Update screener TOC * Update econometrics.md * Update economy head title * Update etf.md * codespell * Fix the redirect for intro to the correct url for docs (#5658) * fix the redirect for intro to the correct url for docs * fix code linting --------- Co-authored-by: James Maslek * Contributing guidelines (#5615) * intro section * what's expected sections * improve sections * improve sections and move how to add a data point * moving qa under contributor * better intro * moving the sharing section * better expectations * small intro to the contributor guidelines * moving things under the contributor section * there is no pre commits on the platform yet * dependency management * best practices for extensions * typo * collapse options subfolder * codespell * Improve Pro documentation further (#5641) * small improvement * Fix TutorialVideo for mobile view * main page terminal pro docs * jose whelp * placeholder index file that needs to be removed * fix: fixes sidebar, removes unused index.md * update link to api keys * update api keys link * fix hyperlinks in terminal helper * fix a few more links * fix some more links * linter * black linter * improve main docs page for each product * small refactor * header to take to main page of product * run OpenAI script to generate SEO for pro content --------- Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> * Update folders.md * Update integrate-your-own-backend.md * Update index.md * Update fixedincome.md * url * Update forecast.md * Update settings.md (#5665) * Update forex.md * fix front matter (#5667) * Fix conflict markers that got into markdown during previous merges * Fix front matter list formatting * Fix typo * small thing * fix hyperlinks * Update .codespell.ignore * output_type options * Architectural considerations * Update sidebar to hide pro section by default * Minor copy changes * TET pattern * import statements * clarification on preferences * Minor copy changes * Lint markdown and python * fix: open index on collapsible root elements * remove old content * options title * Fix linting errors * Refactor sidebar label to url mapping condition --------- Co-authored-by: andrewkenreich Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim Co-authored-by: Sandip Saha Co-authored-by: James Maslek Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Theodore Aptekarev * Add multi-ticker support to etf_countries (#5670) * add multi-ticker support to etf_countries * remove commented-out lines * normalized percent points * percent -> percentage * Fix Nasdaq Econ Calendar Fetcher (#5668) * fix nasdaq econ cal request * more html tags * add random-user-agent to pyproject * another edge case - 24H -> 00:00 * Feature/v4-unusual-options: Adds unusual options endpoint. (#5677) * add unusual options fro Intrinio * test params * move sorting * Change type * update FMP fetcher to use the V4 endpoint (#5681) * Fix price performance not parsed correctly when there is only 1 ticker (#5678) * Add crypto search standard model and FMP data for it (#5679) * Apply renaming to news data (#5684) * inegration complete * reformatted for black * fix ruff issues * revised integration * changes to versions in pyproject.toml and updated lock files * Rename models * Update tests * Fix typos here and there * Update routers * Apply rename to ultima * Properly mock api key * Mock ultima api key --------- Co-authored-by: Adi Sai * Feature/v4-market-snapshots: Adds full market snapshots (#5473) * add stocks market snapshots from fmp * add fmp fetcher test * unused imports * add polygon to market_snapshots * update fmp market_snapshots * black * pydantic2 things * updates * change validate_obj to model_validate * polygon cleanup * tests * descriptions * black * data description * minor adjustments, using less local variables, improving readability and removing pandas * better structure * minor adjustments * lint * fix int tests --------- Co-authored-by: hjoaquim * Add NBBO Quotes, with historical, to `obb.stocks.quote()` (#5617) * coerce string type, add default=None * add polygon stock quote * limit cleanup * add greater/less than to params * limit param * black * tests * fix tests * test_etf * rename model and function to NBBO * add standard model for nbbo * improve standardization * not redifining builtin max * fix input params * integration test params * removing unused import Co-authored-by: Pratyush Shukla * revamped code * re-recorded nbbo test * added symbol validator * added alias in field * Stock news -> Company news --------- Co-authored-by: hjoaquim Co-authored-by: Pratyush Shukla Co-authored-by: Theodore Aptekarev * hotfix/update-quandl-to-nasdaq: Merge Quandl + Nasdaq (#5682) * merge quandl nd nasdaq * dev_install.py * test param name * economy python integration test * Add more input types to data processing commands (#5453) * adding more supported types to data processing commands * ruff * removing unused import * docstrings * data processing types covertion * data description * test filters * ruff * fix package builder tests * ruff * removing print * Add stocks/dps module (#5638) * short volume * pyproject missed * add sec short interest with days to cover * Add FINRA OTC endopoint * some tests * rest of unit tests * Integratin test scripts * dev install * linters caught by pre commit * lines too long * Last test files * maybe it needs a lock file? * thanks pratty * Maybe ill actually listen to pratty next time * sec test date freeze * I cant hit buttons * re record tests * tests 3 * Stockgrid test * regen int test * more testing * lint * moved these fns * dis killing me * one more test * last one * Update integration tests * Fix tests picking up wrong dps route --------- Co-authored-by: Theodore Aptekarev * Rename Forex to Currency (#5687) * restore fields as optional (#5686) * Rename Crypto (#5689) * added `crypto.price.historical` * static * fix tests * fix incorrect label * Move model from sec to finra (#5692) * Update toml * fixed deps * add openbb-etf lock file * cleanup * cleanup (#5694) * Rename Fixed Income (#5695) * Rename Fixed Income * Add routers * Rename stocks to equity (#5688) * Rename stocks folder * Rename openbb_stocks package * Rename routers * Reroute equity menu * Update routes based on feedback * StockNews -> EquityNews * StockInfo -> EquityProfile * Rename Equity calendars * Equity peers rename * Rename discovery * Rename fundamental * Rename price command models * Rename shorts * Update charting router * Fix seeking alpha upcoming release date * Fix linting errors * Update tests * Fix tests * Skip econometrics api tests because it's python only * Update integration tests and test data * Historical analyst estimates * Skip cboe options chain test. Unable to record vcr cassette * re-record cboe cassettes * Document CBOE unit test creation caveats --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Feature/files-for-igor: Adding a few standard models for Igor (#5699) * add some standard models for Igor * codespell * update descriptions * Add devtools metapackage (#5703) * Add openbb-devtools metapackage * adding devtools to the dev_install script --------- Co-authored-by: hjoaquim * Rename econometrics commands to be more verbose (#5702) * Expose command to model map (#5706) * Rename ta qa (#5708) * Rename ta folder * Rename ta to technical * Rename qa folder * Rename qa to quantitative * Rename the actual routes in quantitative * Equity cleanup (#5707) * cleanup * static * renaming to equity cc @the-praxs * Proof reading --------- Co-authored-by: hjoaquim Co-authored-by: Theodore Aptekarev * Don't enforce imperative for first word of the docstring * Remove ultima from default extensions * Rename `economy` and create `index` extension (#5705) * renamed economy and re-recorded tests * static * market indices * european indices * fred indices * index constituents * tests * correct package name * oops * static * linting * Move COT commands to regulators * Rename economy.list to available_indices * Rename GDP models and clean up * Fix charting tests * Drop _indices from available_indices command * Fix obbject to_dict test --------- Co-authored-by: Theodore Aptekarev * Rename etf/disc (#5715) * Docs/v4-working-docs: PR to Work on V4 Docs (#5693) * Revert changes related to pydantic2 made into v3 code * Revert fred model changes in v3 * Revert pydantic2 databento model changes in v2 * Update some names and v3 lock file * Clean up openbb/package before the beta release * Platform publishing procedure (#5701) * update instructions * introducing the version script * publish message * fix platform path * reflecting version changes * getting version from installed packages instead * removing toml from dependencies * Changes to get `a7` out (#5697) * changes to get a7 out * etf menu on the pyproject.toml * poetry lock * bump `openbb-etf` to `a5` to match version * updated deps * removing ultima * removing references to a4 cc @the-praxs * Bump index menu version * poetry lock --------- Co-authored-by: Pratyush Shukla Co-authored-by: Theodore Aptekarev * Update publishing instructions * Bump core dependencies in extensions and providers * Add changes to the publish script following the beta release * Update the versions in static extension map and openbb metapackage --------- Co-authored-by: James Maslek Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim Co-authored-by: Diogo Sousa Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: tehcoderer Co-authored-by: DidierRLopes Co-authored-by: andrewkenreich Co-authored-by: Sandip Saha Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: Mohamad Fadil Co-authored-by: Adi Sai * Hotfix/pypi openbb terminal (#5719) * renaming the project * documentation changes * Finishing touches to the publishing procedure (#5728) * finishing touches to the publishing procedure * grammar improvements * Run tests on develop (#5725) * Run tests on develop * Add a check that files changes in platform * Seprate Intrinio financials data tags into a different command (#5723) * add `ebit` field in income statement standard model * only add required data tags * remove calculations data * use `name` key instead of `tag` key * set `period` as required in data * remove `period` and `cik` from provider models * add `equity/fundamental/search_financial_attributes` with tests * clean descriptions file * add `equity/fundamental/financial_attributes` with tests * set `value` as `Optional` * Fix threadpool test error (#5734) * Remove ultima from deps (#5736) * remove ultima from deps * skip ultima test * black * change skip location * try except statement to avoid error on the ci * new currency reference rates pr (#5724) * point files to linters (#5739) * remove news from equity (#5741) * Add tiingo provider (#5740) * first commit * things * Add news endpoints * CryptoHistorical * Add currency and trailing dividend yield * things working * deps * fix pre commit things * tests? * black on the tests * pratty told me to add it * integration tests * added helpers * crypto revamped * currency revamped * trailing dividend yield revamped * equity historical revamped * company news overhauled * global news overhauled * remove `tags` param from news models * crypto correct `exchanges` description * james smh * re-recorded fetcher tests * fixed integration tests * econometrics smh * james smh again --------- Co-authored-by: Pratyush Shukla * Add `derivatives` extension for `futures` and `options` (#5742) * removed options and futures * add derivatives extension * cleanup * bug #5649 (#5722) * bug #5649 * fixing --a upmom, downmom --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * Rename the fmp search -> screener (#5744) * Rename the fmp search -> screener * misses some * i cant copy paste * docs/fix-urls: Updates the Terminal About URLs to match `/develop` (#5720) * update Terminal about URLs and some other broken links * ruff * intro * changing the heading levels * dependency management sections * structure * developer guides * structure * contributor guides * keywords and descriptions * broken urls * cool cards * Cool cards (#5727) * tidy up terminal/content * some more tidy up * fix styling for platform that was missing * more tidy up * improve color for dark and light mode * create new reference card for more basic cards * rename back to menus * implement all index.md for terminal, except reference * improve bot title * more refactoring * fix remaining index * header styling * more styling * heheheheheheeh * Revert "heheheheheheeh" This reverts commit 7d095fcfd258efb7e82b75b4663b5360785195f3. * Ccards (#5733) * links * more links * improved styling and chevron aligned to title * fix index.mdx urls for Terminal * update package.json * update index.mdx * fix generation * spelling * toolkit_extensions * update data extensions * couple of links * add tiingo to data extensions list --------- Co-authored-by: hjoaquim Co-authored-by: andrewkenreich Co-authored-by: DidierRLopes Co-authored-by: James Maslek * Stock leftover cleanup (#5745) * change to equity in `.md` files * `HistoricalStockSplits`->`HistoricalSplits` * `StockInsiderTrading`->`InsiderTrading` * sorry fmp * `EquityHistorical` cleanup * `EquityNBBO` cleanup * .md leftover * the last of stocks * Hotfix/urllib to dev group (#5732) * use the urllib3 dependency on the dev group instead * adapt the version script for the nightlies - if it's a nightly the package distribution name will have a different name * add dev dependencies to the dev installation bc of the ci * updating the import on validate_call according to: https://docs.pydantic.dev/latest/concepts/validation_decorator/ the way we were importing it breaks if pydantic=2.5 @montezdesousa * loosing urllib3 version specification on the provider and adding it to platform dev deps * rmeoving urllib from top level deps; and removing --with dev flag * changing to ^ instead * Revert "changing to ^ instead" This reverts commit 7300904e9f3adba372b106d381b70ae06e28795a. * unnecessary dep --------- Co-authored-by: Theodore Aptekarev Co-authored-by: James Maslek * feature/v4-bop - Add ECB Balance of Payments (Replaces #5716) (#5726) * add ecb balance of payments * missing __init__.py files * Nasdaq calendar earnings and fix FMP calendar earnings (#5718) Co-authored-by: James Maslek * feature/us-treasury-auctions: Adds Treasury Auctions endpoint and provider for US Government Data. (#5746) * add government_us provider and treasury auctions endpoint * black * add param for cusip * move logic for setting default start/end date * Update hub<>platform credentials map (#5749) * update hub<>platform credentials map * typo * Add API settings schema to system settings (#5743) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Skip checking creds (#5737) * skip checking creds * fix bug * ok mypy * add comment * rename required_credentials * fix * fix top_retail bug * don't require creds in some nasdaq fetchers * black * this was not here before * fix tests * update fetcher test * update contributing guidelines * Fix Quote (#5752) * Fix Quote * fixed return type and model validation --------- Co-authored-by: Pratyush Shukla * Wrap up renaming global news to world news on a model level (#5750) * Wrap up renaming global news to world news on a model level * cleanup --------- Co-authored-by: Pratyush Shukla * Remove eod from docstrings (#5751) * Wrap up renaming global news to world news on a model level * Remove "end of day" from historical price model docstrings --------- Co-authored-by: Pratyush Shukla * Massive docstring cleanup (#5755) * sec router remove command * standard models cleanup * fmp cleanup * av cleanup * benzinga cleanup * biztoc cleanup * cboe cleanup * ecb cleanup * finra cleanup * fred cleanup * us cleanup * intrinio cleanup * nasdaq cleanup * oecd cleanup * polygon cleanup * sec cleanup * seeking alpha cleanup * stockgrid cleanup * tiingo cleanup * tradingeconomics cleanup * ultima cleanup * wsj cleanup * yfinance cleanup * sec router lint * fix date query param description * Updates system and api settings (#5753) * remove uncessary import on rest api * remove FrozenField and add api.version * allow setup from json * remove id tag * computed field is better * formatting --------- Co-authored-by: Theodore Aptekarev * Squeeze build time (#5756) * squeeze build time * bug fix * fix test * typo? * rebuild * keep tradingeconomics * docs/working-docs: Working V4 Docs PR (#5747) * post-install clarification, fix links * more links * change word * toolkit cleanup * rename 'contributing' to 'development' * update extensions * some urls * Update sdk-platform and v4-develop in urls (#5730) * Update sdk-platform and v4-develop in urls * Seprate Intrinio financials data tags into a different command (#5723) * add `ebit` field in income statement standard model * only add required data tags * remove calculations data * use `name` key instead of `tag` key * set `period` as required in data * remove `period` and `cik` from provider models * add `equity/fundamental/search_financial_attributes` with tests * clean descriptions file * add `equity/fundamental/financial_attributes` with tests * set `value` as `Optional` * Fix threadpool test error (#5734) * Remove ultima from deps (#5736) * remove ultima from deps * skip ultima test * black… * Improve the example test (#6203) * Improve fetcher test error messages (#6204) * [Feature] Add Intrinio ETF Info/Search (#6198) * add intrinio etf info * black * should have been "x-unit_measurement" * field order thing * another field order * review things * [Enhancement] `ReferenceGenerator` class in `package_builder.py` (#6179) * fix docstrings in quantitative,technical,econometrics routers * add reference generator class to create reference.json file in openbb/assets folder * modify platform markdown generator script to not generate the reference.json file * get properly formatted examples for the website * modify get_field_type function * remove TODO comment * path change / to . * remove extra '-' below 'Args' in function docstring * get obbject extensions in extension_map.json * skew in stats_router had extra . rip * black * extra space (sigh) * modify get_provider_parameter_info func to use model_provider from provider interface * update lock files * black * Revert "update lock files" This reverts commit 13e7d8b280a910acd19959ae2ffac3cdab5a2818. * add function to check all extensions are installed before the markdow generator runs * better comment * fix docstring fix mypy obbject description function * black * 'static * remove duplicate standard params & data from reference data add standard params & data fields while generating markdown files * Final v3 touches (#6205) * remove ultima + althub * move twitter keys * Remove reports * Launch Message * Actual launch message * Correct leaving message * Update version * [BugFix] Fix empty docstring in data processing functions (#6206) * update etf static file update reference.json with changes * data processing docstrings can be empty use self._write func to create reference.json file * Add unit tests (#6213) * Update build-release.yml (#6215) * [Hotfix] - docs workflow (#6216) * [Critical] Sync `main` with `develop` (#6202) * feature/intrinio-equity-search: Adds Intrinio to `obb.equity.search()` (#5863) * intrinio equity search * integration tests * test --------- Co-authored-by: James Maslek * feature/yfinance-multi-ticker: Adds support to openbb-yfinance for multi-ticker download. (#5845) * yfinance multi-ticker support * multi-ticker support for market indices * crypto multi-ticker support * recapture tests * yfinance cache and tests * currency historical multi-ticker support * style things * black * missed a values --------- Co-authored-by: James Maslek * Feature/us-treasury-prices: Adds Treasury Prices to Fixed Income (#5776) * add treasury prices endpoint to fixed income router * adds tests * black * ruff * import statements * standard model imports * black * some cleanup * black * async router * make async * str outpuot * bytes object not string * docstring typo * multi-line f-string * encoding * duplicated conditional * black --------- Co-authored-by: James Maslek * feature/sec-etf-holdings: Adds ETF holdings from SEC provider (#5757) * add ETF holdings from SEC provider * black * helper function params * edge cases * ruff * add validator in company filings * remove xml field * update import * cleanup parsing * missing datetime import in company_filings * black * unused import * add missing py.typed files * feature/nasdaq-equity-search: Adds Nasdaq provider for `obb.equity.search()` (#5790) * add nasdaq to equity search * black * unused import * make async --------- Co-authored-by: James Maslek * Excel docs (#5870) * first test * remove old reference * bring this file back * generate sidebar and write empty mds * generate index.mdx * get description from cmd_lib * fix reference card error * rename file * generate markdown * regen * add last+hist * update pages with seo metadata * format types * small fix * css sux * add usage placeholder * set hidden by default * nah * add cmds and menus to reference * lint * fix/Users/diogosousa/opt/anaconda3/envs/platform/bin/python /Users/diogosousa/OpenBB/OpenBBTerminal/website/generate_excel_markdown.py * format mds * remove space * fix commands heading * redo folder structure * add back cmd description * move card to var * different main folder * clean * move vars * refer to editor * rename var * done * recreate folder structure * add section: syntax + minor adjustments * remove return type * remove return type * rename api to library * minor fix * remove api folder * remove api folder * formatting * improve basics * basics * fetch functions.json from website * complete basic * change syntax to use semi-colon * basics * basics * remove space in sig * remove sections * add metadata * Update formula builder * add tabs * Update index.md * complete basics and formula_builder * Update index.md * add windows screenshots * restructure folders * regenerate with latest add-in version * move Excel sidebar * rename function and add comment * now it's working * logic * rename folder * Update formula_builder.md * fix * hide excel for now * some explicit typing --------- Co-authored-by: tehcoderer * Make Pro Fetchers async by replacing `ThreadPoolExecutor` with `asyncio.gather` (#5822) * init * Update helpers.py * filter URL on raise * polygon, fmp done, update cassettes * updates * cleanup * revert tests for now * Update discovery_filings.py * Update helpers.py * add `async` overload to `Fetcher.extract_data` * update merged fred models * tests, improve fred series * Update insider_trading.py * insider * tests * intrinio * Update equity_historical.py * implement abstract async extract on Fetcher, with simple switch * cleanup * Update helpers.py * Update helpers.py * fix fmp historical deprecated urls * Revert "fix fmp historical deprecated urls" This reverts commit 1a760a24737ed3d1439472bdb4c47aa778bcce8b. * fix fmp `index.market` 1day url missing query params * Update test_fmp_market_indices_fetcher.yaml * field fixes * `extract_data_async` -> `aextract_data`, `async_request` -> `amake_request` * `async_requests` -> `amake_requests` * Update company_news.py * add sort to index `integration` params * add `client.py` tests * Update equity_search.py * Add lost v in platform api version string * Resolve linter errors here and there --------- Co-authored-by: Theodore Aptekarev * Allow this to be run in parallel (#5872) * Limit mypy v3 linting to only the diff of the PR (#5878) * Use custom parametrize from news menu tests (#5873) * Use custom parametrize from news menu tests * Update Ultima unit test cassettes * Command Schema (#5874) * POC * Filter by provider * pass base_app as parameter * add typing + TODO * fix some typing * Fix unit tests --------- Co-authored-by: Diogo Sousa * Parameterize `obbject.to_df` with `index` and `sort_by` (#5877) * Parameterize obbject.to_df with index and sort_by * unit tests for obbject * keep using the date as default to use on basemode_to_df() --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Changes to the `obb.fixedincome.corporate.hqm()` output (#5876) * changes to the hqm output * typo --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Refactor method in RegistryMap (#5879) * refactor extract_info * add comment --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * remove Literal from providers in OBBject (#5882) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix version (#5883) * Fix version * Fix linter on terminal * Refactor package builder (#5880) * breakdown builder + remove black * rebuild * rebuild * rebuild * rename method * format built code without black * we still lint if it's available * fix existing tests * add linter tests * add black to dev deps * auto_build as instance method * reorder methods * typing --------- Co-authored-by: Henrique Joaquim * small refactor for simplification (#5886) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix bug. Add router test. (#5888) * Fix bug. Add router test. * Simplify * separate pylint between platform + terminal (#5892) * separate pylint b/w platform + terminal * Explicitly set pylint check scope to files in the diff --------- Co-authored-by: Theodore Aptekarev * sync descriptions (#5893) * Add REST API docs page with advanced settings configuration (#5890) * Don't mention docker in a list of python envs * Create a REST API page * Update docs to get api keys from the hub * Update installation instructions * Mention requirement of poetry and toml in source installation section * move rest page up to the top. and add url to google colab example notebook --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix a v3 syntax example (#5891) * Adds federal reserve data points (#5885) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * Check if outdated (#5898) * Add econometrics API tests (#5899) * Docs/excel update (#5889) * update xl docs * update syntax line * update again * Fix pylint scope (#5895) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring * Debug pylint * Adjust the fetch depth --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix `from openbb import obb` asyncio lock in python REPL (#5896) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/financials - PR for working on structure of financial statements. (#5794) * balance sheet draft * balance_sheet draft * cash_flow draft * income_statement draft * intrinio financials * description * period field * ruff * income statement * field * label - gross profit ratio * cash flow statement * investing order * add option for caching to cashflow * add caching to balance and income * typos and update order for financial institutions * replace 0 values with None * add financial ratios from intrinio * black * missing test params * balance cassette * query param description * symbol list warning * black * handle BRK-A and symbols with a dash for Intrinio * fix typo error * add free cash flow to bottom of cash flow statement * amortization_expense * dev_install.py * undo dev_install.. wrong branch * cash flow order things * standardized cash flow * fields * integration tests * cash flow model validator * more polygon cash * black * black * Delete openbb_sdk/providers/polygon/openbb_polygon/utils/definitions.py wrong file * balance sheet * some cleanup * ruff * income statement * black * test params * financial ratios async update * recapture fmp and polygon tests * yFinance financials * yfinance tests * delete financial_statements standard model * intrinio balance sheet order * fiscal year standard param * remove file accidentally committed * add reported_financials end point * fiscal_year param for reported_financials * fix url * fmp test cassette * add safe-guard with warning for fiscal year before 2008 * periods can only be annual and quarter * url in docstring correction * add fiscal_year param to intrinio standardized financials and ratios * fix fmp ratios * black * rename fields as per Minh * rogue field * black * Fix typo in a docstring * Resolve linting errors * type ignore * disable=unused-argument * changing the arg name cc @minhhoang1023 --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev Co-authored-by: hjoaquim * docs/legacy-install: Add warning at top of page - Instructions on this page are for installing the Terminal (#5904) * add warning at top of page - instructions are for installing the Terminal app * pip install openbb-nightly * hotfix/financials-field-maps: Updates A Couple FMP/Polygon Income Statement Fields (#5907) * update income statement fields * another polygon field * ratio -> margin * black * explicit fmp fields * add reported_currency for standardized intrinio * # pylint: disable=unused-argument * another unused-argument * black.. * patch tests * polygon income: eps -> basic earnings per share * re-capture terminal portfolio menu test --------- Co-authored-by: hjoaquim * Fix test (#5916) * Fix test * Skip ultima integration tests --------- Co-authored-by: Pratyush Shukla * hotfix/fmp-price-performance-zeros: Replace returned zero with None and normalize percent values. (#5918) * replace zeros with none and normalize percents * pylint unused argument * Update index.md (#5906) * Release/4.1.0 (#5901) * Hotfix/terminal tests (#5919) * skip supressed arguments * silent way of customly load on quote * specify source for call_load * docs/platform-faq: Start Platform FAQ page with bullet points on Platform vs SDK (#5914) * platform vs sdk faq page * add data and data providers faq section and some style cards * typo * makes changes as per reviews * openbb-nightly as a way to install everything * jupyter-lab instead of jupyter --------- Co-authored-by: Henrique Joaquim * hotfix/backend - Initialize OpenBBFigure (#5912) * create backend * openbb_figure * black * pylint * pylint again --------- Co-authored-by: Henrique Joaquim * hotfix/yf-futures-historical: yfinance historical futures multi-ticker support and symbol parsing (#5923) * multi-ticker support for yfinance futures historical * raise-missing-from * integration test params * equity_historical adjusted kwargs * pylint unused argument * Docs/excel examples (#5920) * regen excel md * add syntax + basic example * fix example * create json with docs map * update docs to latest functions.json + remove tiingo * remove space from examples * minor fix * remove spaces * remove spaces * bug fix: remove folder before generating * fix typo * add link to appsource * fix * Update templates.md * regenerate content * change docs colors * fix light mode * add back tiingo * update functions.json * templates go later * remove Library from reference * Make the excel markdown being generated at runtime * fix reference cards having commands under menu * remove excel/reference folder since this is built at runtime by gh-pages action * black formatting * improve title * add excel to the main page * add excel image bg * make excel sidebar show up next to pro * improve main page * small fix for platform page title * update basics page * add tip to autocomplete --------- Co-authored-by: DidierRLopes * Re-record tests and fix symbol bug (#5924) * Re-record tests and fix symbol bug * nordvpn us ftw * @IgorWounds says "SPY >> IOO" --------- Co-authored-by: Pratyush Shukla * Docs/bug fix (#5926) * fix pro link * fix wrong example * Introduces a limit argument for the `equity.fundamental.trailing_dividend_yield` endpoint (#5925) * introduces a limit argument for the equity.fundamental.trailing_dividend_yield endpoint * add default args to test * Add json_schema_extra to openapi.json (#5930) Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * feature/standardize-quote: Proposal to Standardize EquityQuote (#5922) * standardize EquityQuote * intrinio reference * rogue comma * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * hotfix/fmp-rev-segments: Adds Fiscal Period to busines/geographic segments revenue. (#5921) * add fiscal_period to revenue by geography and business line * data description and unused imports * update test cassette * Allow multiple symbols `equity.profile` (#5929) * allow multiple symbols * pylint * pylint ignore position * change callback to helper func --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim * Add filtering to AV historical price (#5928) * add filtering to av historical price * lints --------- Co-authored-by: Pratyush Shukla * Fix vwap FMP error (#5936) * Fix vwap FMP error * Linting * Painlint * Add date filter + symbols to comp (#5931) * add date filter + symbols to comp * make sure year is in d * tests fix * Improving Platform's import time (#5894) * missing decorator * missing optional statements * us-gov to optional and right position * removing redundant call * lazy load mappings * docstrings * introducing the extension loader class * misleading docstring * using the extension loader on the router * using the extension loader on the credentials * docstrings * lazy load of entry points * checkout dev_install * using the extension loader to get the entry points instead of recalling the function * improved auth service and charting service * using the extension loader on the registry * typos * adding properties to extension loader for easy access * using the extension loader on the package builder * avoiding circular imports by using forward references * fix charting service tests * test for the extension loader * Update openbb_platform/core/openbb_core/app/model/credentials.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/app/router.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/provider/registry.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * adjustments --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Disable auto_build on test run (#5937) * Disable auto_build on test run * Move to conftest * Update excel docs (#5940) * update basics * update reference generator * Categorize release notes based on labels for OpenBB Platform (#5943) * Categorize release notes based on labels for OpenBB Platform * Add environment variable for GitHub token in labels-PR.yml * Update labeler.yml to use "enhancement" label for feature branches --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Custom deprecation message in API endpoints and Python commands (#5942) * add custom deprecation message feature in routers * add custom deprecation message feature in package builder * using an actual DeprecationWarning instead * fix tests --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: hjoaquim * Hotfix/remove unused workflow (#5945) * Disable auto_build on test run * Remove unused workflow * Revert * Hotfix/fix typo (#5948) * Disable auto_build on test run * Fix typo * Revert * docs/data-models-url: Fix URLs on Development Page (#5944) * fix url to the standard models * github links * `equity.fundamental.dividends`: allow filter by date (#5932) * allow filter by date * ruff * pylint * fix tests --------- Co-authored-by: Pratyush Shukla * Create Excel templates page (#5947) * create templates page * Update index.mdx * fix description * update card * remove clsx * Update index.mdx * Update index.mdx * Update index.mdx * Update index.mdx * min height * min height * improve excel docs and point towards hub --------- Co-authored-by: DidierRLopes * hotfix/intrinio-dividends-limit: Fix Limit Param Alias (#5951) * fix limit param * pylint unused argument, recapture test cassette --------- Co-authored-by: Pratyush Shukla * Docs/remove core refs (#5957) * remove references to core: PathHandler + ProviderInterface * remove unused function * add comment * regenerate * fix a few examples * add comment * rename file * Excel tutorials on the docs (#5956) * update workflows name to tutorial * update title * get barebones to bring in Excel videos * tutorial excel videos in * hotfix/float-values: Convert Intrinio balance sheet values to float type (#5961) * convert intrinio balance sheet values to float type * unused import * typo in alias dict * Update to OpenBB Add-in for Excel (#5965) * Log custom headers (#5966) * add custom headers * fix: send on startup and defaults * pylint * unittests * move government-us to community in dev_install (#5963) * fix: adds logic to check whther user is logged in on hub (#5941) Co-authored-by: Luqman * hotfix/fix-company-filings: Fixes too many mandatory fields. (#5909) * Fixes too many mandatory fields. * black * black again --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: James Maslek * `equity.estimates.price_target` - Integrate with Benzinga (#5946) * deprecation message * fix lints * adding equity.estimates.ratings and fmp as its provider * unit tests for fmp * removing unused file * typos * add benzinga to AnalystRatings * revert changes to estimates router * moving it to price target instead * reverting changes * fmp support for multiple ticker * benzinga price target * ruffy * unused argument * fix type hints * tests for the new fetcher * new integration tests * fixing tests * missing std arg --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [DEPRECATION] `index.market` renamed to `index.price.historical` (#5962) * deprecate index.market and add index.price.historical * add index.historical standard model * add index.historical provider models * index extension tests * provider tests * linting * bug fix (#5969) * Uppercase excel reference (#5958) * uppercase reference * fix name header * add tab title * remove reference excel folder * add to gitignore excel reference files --------- Co-authored-by: DidierRLopes * move templates (#5970) * Release 4.1.1. (#5964) * update dev_install * fix effr test * Update dev_install.py * fix fundamental balance test * fix equity price historical test * fix price target model * black * rebuild static files * update publish.md * fixed dev_install * update publishing doc * updated `openbb-core` to 1.1.1 * updated extensions * updated providers * updated `openbb` package * updated static extension map * updated publishing doc * fixed toml for `openbb-finra` * @jmaslek yfinance IS DEFAULT * updated static --------- Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim * Fix link to discord channel (#5910) Co-authored-by: James Maslek * Fixing Posthog handler for thread safety (#5968) * fixing posthog handler for thread safety * removing loggging init from the global scope - per sensei juan --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update labeler.yml and labels-PR.yml (#5974) * hotfix/ allow multiple `identify` calls (#5976) * allow multiple `identify` calls * Update posthog_handler.py * regex out any invisible control character from sales_conditions field (#5977) * docs/http-requests: Contributor Guide For Building HTTP Requests (#5973) * contributor guide for http requests * add a docstring * add section on get_querystring * extra space * add note for people installing PyPI in a zsh terminal shell --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/add-yfinance-functions: Add equity.profile for yFinance (#5978) * equity profile for yFinance * pylint * equity quote * unused imports * remove yfinance from extras in toml (#5982) * Release OpenBB Platform v`4.1.3` (#5983) * fixing pyproject.toml * adding pandas-ta to technical package for publishing * bumping technical * test for pyproject toml * feature/cboe-async: Refactor Cboe for Async (#5900) * refactor cboe for async * codespell * unused imports * pylint * more pylint * platform metadata * classmethod decorator * test params * intrinio quote * test param names * date in test needs to be a datetime.date not string * make fmp unix timestamp tz-aware and normalize percent change * different way of parsing datetime string * recapture cboe equity historical test * unused import * index snapshot update * black * extension map * pylint * cboe pyproject.toml * proposal to standardize equity_quote * one more file * removing changes on static assets * index_historical * index_historical again * last_time -> last_timestamp * obsolete router path * fix tests * test param * restore market index deprecation that I forgot about * fixing tests --------- Co-authored-by: hjoaquim * Fix typo in website/README.md (#5980) * Fix typo in website/README.md * Update linting.yml * Update linting.yml * Update linting.yml * Change ref conditions * Update linting.yml --------- Co-authored-by: Luqman Co-authored-by: Luqman * Hotfix/th etfs (#5959) * added etf trading hours * black formatter --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: Luqman * feature/finviz-provider: Adds Community Finviz Provider Extension (#5952) * add finviz provider * recapture tests * recapture tests again? * invalid test param * static packages * units_measurement -> unit_measurement * static packages as core only * openbb_core version bump in pyproject.toml * try adding user-agent to test response * fix tests * linting * provider model cosmetic changes * fix install script and typo in openbb toml * static * fix: re-record unittests * empty data error * definitions as a file --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla Co-authored-by: Diogo Sousa * Add support for multiple symbols on `obb.equity.price.historical` (#5984) * av - support for multiple symbols * tiingo - support for multiple symbols * include symbol only if necessary * update extension descriptions page (#5985) * remove useless file (#5991) * added symbol to headers (#5981) Co-authored-by: Pratyush Shukla * Fixing Docs Typos (#5955) * fixed typo * fixed stocka typo --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: James Maslek Co-authored-by: DidierRLopes * fix nasdaq test cassettes (#5989) * don't include `custom_headers` in openapi schema (#5994) * hotfix/intrinio-index: Drop None Rows From intrinio Historical Index (#5987) * drop None rows from intrinio historical indexes * add empty data error * static assets * hotfix/insider-trading: Fix #5988 (#5990) * fix validation errors * empty strings * validator --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: teh_coderer * CI listing quick fix (#6002) * BIGGGG LINTING * fixing lints * fixing lints * black * very ruff * no export * fix hedge_view again * lints * platform lints * lints * black * black it @hjoaquim * fix some more linting --------- Co-authored-by: hjoaquim * Release `openbb-finviz` `1.0.0` to the public (#6000) * set version to `1.0.0` * Set correct dep version in main package * Add `finviz` to table * Auto Labelling for OpenBB Excel Docs Changes (#5998) * Update pull request labels * Update labeler.yml with new label for Excel files --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Support for custom examples in router commands (#5993) * Disable auto_build on test run * Add support for custom router examples * Revert odd file change * Fix API pollution * Refactor examples with @montezdesousa * Check if model is inside the PI * Fix * feat: add & fix examples (#6001) * feat: add & fix examples * fix: ruff + comment * feat: read parameter pool from file * feat: typing + unit test * Disable auto_build on test run * Add field order to OBBject * Revert * lint and revert * fix test --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Diogo Sousa * hotfix/intrinio-options-date: Fix comparing values between str and datetime (#5997) * fix compare between str and datetime * unused argument * get_weekday * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Field order added to the OBBject extra as preference (#5999) * Disable auto_build on test run * Add field order to OBBject * Improvements * Remove noxfile * Disable auto_build on test run * Add field order to OBBject * Revert * lint * Add docs * Not sure how this happened * lint * Update `openbb-devtools` (#6008) * update deps * unpinned package versions from gh linting action * codespell * updated black dependency * linting * linting * linting * pin codespell version * black * black again * install devtools in linting action * format w new black (#6009) * format w new black * format w new black * black again * black the terminal * ignoring unused arguments --------- Co-authored-by: Pratyush Shukla * remove reviewpad (#6010) * Remove Ultima provider (#6012) * Add OECD unemployment (+more) + data cache idea (#5917) * Add OECD unemployment + data cache idea * Docstring edits * Tests * Add composite leading indicator * i truested ruff --fix too much * Add short + long term interest rates * pylint * pylint2 * was not committing. my b * add csv cache + make it default. remove pyarrow from poetry * Clean up * Didnt run on this file. My bad * Why was this ignored /shrug * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/improved pr template (#6018) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * better pr templates * developer template * [Feature] - Custom deprecation (#6005) * custom deprecation * custom deprecation * using the new deprecation * custom deprecation on the package builder * remove comment * ruff * black * static assets * tests * using parametrization instead * test for deprecated endpoints (#6014) * Deprecation warning on the reference docs (#6015) * typo/fix * bring back methods needed for markdown generation * add deprecation warning to docs * contributor docs for deprecating endpoints - tks @deeleeramone * small changes on publishing procedure per @the-praxs * moving the deprecation summary class to deprecation file instead * explanation on class variables * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update openbb_platform/openbb/package/index.py Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * deprecating on 4.3 instead @the-praxs --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla * [BugFix] Fix package builder (#6022) * fix: remove specific imports * adjustments for correct deprecation * static assets --------- Co-authored-by: hjoaquim * [Feature] Add support for multiple tags in `historical_attributes` and `latest_attributes` (#6013) * historical attributes standard model - * add support multiple tags * add `tag` field in data * add support for multiple tags in historical attributes * set correct return type in `callback` function * latest attributes standard model - * add support for multiple tags * add `tag` field in data * add support for multiple tags in latest attributes * add test params for the attributes endpoints * add support for multiple `symbol` and add `symbol` field in the data * modified code to fetch data from multiple symbols and throw warning as per @deeleeramone * add params for testing multiple symbols * linting * fix test params * fixed condition to check if its a `Dict` type * updated intrinio fetcher tests for the statements * updated static * [feature]: feature/overview-to-profile: Deprecate `equity.fundamental.overview()` and move to `equity.profile()` (#6011) * fmp overview to equity profile * deprecation warning * urls * wrangle fields * black * pylint unused argument * insert additional securityID fields to standard model * custom deprecation using OpenBBDeprecationWarning * typo - need to have the deprecated=True flag * static assets * fix non related test * minor adjustment - removing the need for the try/except block - using the get and pop removes the need for key existance checking. cc @deeleeramone --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim * [BugFix] - Remove duplicate code (#6025) Co-authored-by: Pratyush Shukla * remove `SectorNews` from router and standard models (#6026) * feature/more-yfinance: Adds some more to openbb-yfinance (#5979) * equity profile for yFinance * pylint * equity quote * unused imports * price target consensus * add currency field * add share_statistics * don't append empty result to results * key executives * missing definition in key_executives * pylint * key metrics * add currency to key metrics * add etf_info * rename trailing_annual_dividend -> dividend_rate_ttm * add institutions count to share_statistics * add historical dividends * add logic for start-end dates to historical_dividends * recapture the test..? * funny test * filter on tests? * record test with clean cache..? * year_price_change -> price_return_1y in key_metrics * black * make descriptions clear for beta and dividend_yield fields * add description field to standard model * updated static * clear description of shares_implied_outstanding field * updated static for equity * clean descriptions --------- Co-authored-by: Pratyush Shukla * feature/commodities-lbma-fixing: Adds Commodity Extension and LBMA Gold/Silver daily fixing levels (#5760) * add commodity extension and add lbma fixing endpoint * dev_install.py * readme url * renovate the standard model * makes a query_params model for nasdaq data link * literal not optional * unused imports * missing test params * test cassette * DataLink query param description * test file import * actually fix import * from openbb_core.provider..... * ruff * another import statement * black * async router * move query_params * update version * version numbers * extension_map * satisfy pylint? * pylint * Update pyproject.toml * black * poetry lock * Update extension_map.json * Update __extensions__.py * Update module_map.json * clean descriptions --------- Co-authored-by: Pratyush Shukla * Improve UX for `obb.news` (#5986) * adding date,start_date and end_date to std params * add date to special params which should've another type * change types to dateType * change helper to accomadate changes in types * date filtering * using the date filtering for all providers * date params on the std model instead * adding the right type * filtering dates on world news * integration tests * fix descriptions * static assets * black * Revert "black" This reverts commit 7288b59f87e1b0816733a96ce77fb96e13dcf0e3. * lint * addressing @montezdesousa suggestion: removing qua 31 jan 2024 15:01:20 WET from standard models and using it only on benzing * tests accordingly * static assets * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Improve Standardization - `IndexHistorical` (#6030) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * fix tests * keep the skip * fix test * [Feature] - Refactor Response Model (#6024) * Start refactor with @montezdesousa * feat: add response model inside openapi_extra * feat: find+replace return types * fix: ruff * Feature/api response by provider (#6029) * init * Update router.py * Update registry_map.py * check dicts * lint * exclude provider on data model for package build * `results_type_repr` logic for `Annotated`, ignore provider field in `_extract_data` --------- Co-authored-by: Diogo Sousa Co-authored-by: teh_coderer * [BugFix] - Improve Standardization - `CotSearch` (#6031) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * keep the skip * fix test * adding missing param * fix tests accordingly * Docs/byod (#5996) * add byod to reference * fix: rename add-in name * feat: add data conectors page * fix: additional notes * tiny tweaks * update functions.json and openapi.json * fix: fix bug in hedge controller * fix: another bug hedgecontroller * black --------- Co-authored-by: DidierRLopes * Feature/ex-dividend: Renames "date" columns as "ex_dividend_date" for Dividend Calendar and Historical Dividends (#6006) * date -> ex_dividend_date * nasdaq historical dividends * black * pylint * intrinio alias_dict * dividend_currency -> currency * yfinance field name --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Adds a timezone to the Unix timestamp conversion to correct localization errors. (#6023) * fix: remove specific imports * make polygon historical tz-aware * undo including that commit * that PR wasn't supposed to be there. * pylint unused argument * fix polygon crypto historical intervals * pylint * new cassette * fix the rest of the polygon historical price query params * black * pylint.. * integration test param * appease daylight savings handling * paginate for crypto currency and index * black * raise EmptyDataError when no results instead of returning an empty list * ruff --------- Co-authored-by: Diogo Sousa * Hotfix/wrong pydantic validator (#6037) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * Use field_validator instead * fix openapi schema fields `to_snake` (#6036) * Fix data connectors link typo (#6038) * [BugFix] - Improve Standardization - `EquitySearch` (#6033) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * use_cache as std * adjust tests * keep the skip * re-record test * black * Docs / only display results for current platform (#6017) * Update index.js * Update index.js * yfinance * tzcache no longer exists * fixxy * ruff --------- Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek Co-authored-by: Andrew * Improve the docstrings (#6040) * Improve the docstrings (#6041) Co-authored-by: Henrique Joaquim * dont run base tests with v4 label (#6046) * Sync excel reference (#6039) * sync excel reference * fix: change delimiter to comma * feat: update data connectors * test skipping wf * Update unit-test.yml * Update unit-test.yml * test skipping wf * watch label changes * Update unit-test.yml * [Enhancement] - Improve `news` router docs and examples (#6047) * better docs * static assets * Feature/platform standardization notebook (#6049) * Add platform standardization overview notebook to examples * Add py.typed marker to openbb-fred * [Enhancement] - Improve `currency` router docs and examples (#6045) * currency search * reference rates * historical price * static assets --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * display warnings based on preference (#6051) * [Enhancement] - Improve `crypto` router docs and examples (#6048) * crypto search add validation for '-'-separated pairs * set default query value to None * improve /crypto description with custom examples * improve /crypto/price/historical description with custom examples * updated static for crypto menu * ignore line too long * linting --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Final Implementation of Changelog V2 (#6050) * Updated the release drafter to process the released changelog for OpenBB Platform * Update release drafter configuration * Add OpenBB Documentation Changes and Create Release * Update process_changelog.py path in draft-release.yml * Update release-drafter version and save changelog * Copy changelog with python * Update draft-release.yml to save Changelog * Update draft-release.yml * Encode and save Changelog to Base64 * Update Changelog saving method * Update Changelog format * Update CHANGELOG.md with release notes * Fix draft release workflow * Add cat command to print CHANGELOG.md * Add platform-drafter.yml and update release-drafter.yml and draft-release.yml * Commented out config-name in release-drafter step * Update branch name validation and process_changelog.py * Refactor process_changelog.py to improve readability and maintainability * Refactor process_changelog.py to handle file I/O errors and remove duplicate PR entries --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * improve discriminator logic, fix package return type docs (#6052) * improve discriminator logic, fix package return type docs * Update registry_map.py * build package * Update registry_map.py * defaults * Update registry_map.py --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add LLM tools example notebook (#6053) * Add LLM tools example notebook * Update README, rename example notebook --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Remove the preference (#6055) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * [Feature] - Standardise multiple symbols input (#6056) * feat: remove list of str * fix: update cpi * package builder + cpi * build * fix: update unittests * fix: check_item * fix: unittests * Improve the docstrings (#6057) * update economy router docstrings (#6058) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix OECD Long Term Interest Rate (#6060) * fix long term interest rate * pylint unused argument * [Bugfix] - Fix economic calendar country (#6059) * fix economic calendar country * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [HotFix] Index Router Docstrings & `sp500_multiples()` Cleanup (#6063) * sp500 multiples cleanup * remove dict from standard model * static pacakge * pylint * [Feature] FMP Current Holdings (#6043) * add fmp current holdings to etf holdings * pylint unused argument --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Replace symbols in company/news (#6061) * feat: replace symbols in /news * fix: integration tests * fix: integration tests api * fix: typo * Update test_intrinio_fetchers.py * [Enhancement] Add function examples to router. (#6042) * options router * fixedincome router * futures router * missing comma * static assets * futures router --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] Add function examples to Regulators Router (#6054) * options router * fixedincome router * futures router * missing comma * static assets * futures router * sec router * cftc router * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix World News (#6064) * fix fmp * fix intrinio * fix biztoc * actually commit intrinio fix * fix tiingo * unused import * fix tests * black * ruff * benzinga empty strings * codespell * fix test? * more empty strings --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - remove unused validators from standard models (#6067) * update standard models * lint * Update USD Liquidity Example Notebook for V4 (#5902) * Update USD Liquidity Example Notebook for V4 * delete some v3 text in the copperToGold * Update README.md * findSymbols preview image * Google Colab preview image * financialStatements preview * content tsx file * ### title * convert tsx to json * indent size * double quote keys.json * trailing commas * Update content.json * patch --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix QA Examples (#6072) * [Feature] - Ensure Bugfix branches can only do PRs to `develop` branches (#6073) * bugfix branch name checks and few fixes on the linting not to run on pushes to branches outside PRs * Update branch naming guidelines link --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/charting obbject (#5938) * fix circular import issues on the obbject extension framework * settings available on the obbject * extension init * charting assets and code * introduce to_chart functionality * removes the to_chart method from obbject in detriment of the one from the obbject extension * Update openbb_platform/obbject_extensions/charting/charting/__init__.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * fix on the show method * adding the example to the to_chart docstring * copying the exsting README from charting extension - needs to be revamped * moving to openbb_charting instead * update the pyproject.toml file * pydocstyle * versions * better docstrings * making accessors public * removing unnecessary credentials variable cc @montezdesousa * removing access to extra/metadata and use designated private attrs instead * Fixes linting for the logging service (#5992) * lints * typing.Type instead * deprecating ChartingService to use the new extension instead - adding function discovery capabilities using it * tests for the obbject charting extension * removing charting service from command runner * filter functions not implemented in the module * remove charting service tests * removing charting service on the tests for int tests * charting integration tests * removing charting service file * removing old charting extension code * revamp builder * fix obbject tests * fix command_runner tests * removing openbb_figure_table * better website docs * reviewed readme * unsetting api key for posthog (pywry) windows * added debug_mode to the system settings * removing api key * update nightly script * fix tests * black * black * Revert "black" This reverts commit 21d76ad689087b4ad38cec55667186263363c89f. * Revert "black" This reverts commit 0904653fd73518c0d345a82f91f4cb06cfa84cb6. * black for henrique * returning a list instead * better docstrings * removing unnecessary indicators docstring * typo * black * intentional access to protected member * changes to publish script * filtering deleted files * black * adding render argument * fixing the df_to_basemodel function: it should include the index in the columns either if flagged or if the index is named * adding the hability to add you own data to to_chart method * tests * black * disable protected access * accept kwargs to eg. save image * adjustment cc Igor * add if statement for protection * remove unused return typing * fix technical charting views * better error message cc @IgorWounds * better structure and fix test * Revert "better structure and fix test" This reverts commit 612ea6117ce064d5e41f74e72e171646be614408. * Revert "better error message cc @IgorWounds" This reverts commit 3d7ee53878b7742d187e83f7e5d4c27438aa40ef. --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix CAPM example (#6075) * Start removing dead v3 commands for deprecation (#6070) * Yeet tokenterminal * Yeet crypto/onchain/hr and gwei * yeet luna * yeet coinglass * yeet dps/ctb * yeet reddit * yeet covid * actually not yeeting hide yfinance future warning * yeet options/hedge * not yeeting. i18n words * something happened on accident * still fixing * git reset/git checkout -f 2516cfbc72d23a7656715314ea94cc34d4c994ee website/content * still not sure whats going on * Edit workflow to not look at deleted files + change bootup message * Dont pin the workflow to my branch always lol * Remove askobb * [Feature] - Comma separated string and list inputs (#6062) * feat: balancesheet * feat: income statement * fix: cash flow statement * feat: financial ratios * feat: reported financials * feat: revenue business line * feat: revenue per geography * fix: warnings * Update balance_sheet.py * fix: remove warning imports * feat: balance sheet growth * feat: calendar ipo * feat: cashflow growth * feat: __validators__ * fix: typing * fix: validator msg * feat: trailing dividend_yield * feat: short volume * feat: share statistics * feat: price target + consensus * fix: update validator * feat: historical dividends * feat: key executives * fix: getattr directly * fix: type hint validator * fix: add default to getattr * typo * feat: otc * feat: options chains * fix: remove list validators * feat: add validator dict to fetchers * lint * update standard models * lint * feat: rename validator * fix: ownership * feat: query params description * fix: balance yfinance * key execs, income statement * remove change * fix: revenue geographic * fix: disable pylint * fix: unusual + balance * unit test validator * minor fix * explicit validators * update test * feat: multiple items allowed * rebuild * move check_single_value * crypto historical * order providers * fix typing * rename extra dict * marking multiple items allowed * Revert "marking multiple items allowed" This reverts commit 7da04817e18b2c9e373ffde9134f3949d11f58dd. * error msg * fix: default provider runtime vs configuration * minor fix * docstring * revert default changes * get provider before executing cmd * fix container bug * clean filter * add comment * prevent bad defaults * update docstring * typing * fix * black * fix docstring generation * [Feature] - Mark multiple item fetchers (#6074) * feat: price target * bezinga company news * equity quote * marking multiple items allowed * more multiple items * black * rebuild * another batch * rebuild * another * cpi * move prop * rebuild --------- Co-authored-by: hjoaquim * rename var * update msg * rename func * fix test * mypy * ruff --------- Co-authored-by: hjoaquim * [Feature] Add Regional Data Endpoint from FRED (#6071) * add regional data endpoint from FRED * codespell * ruff * sort imports * add provder='fred' to integration test * thought I already sorted those imports.. * pylint.. * more test params.... * even more test params... * even more test params.... * static assets * reconfigure params * ruff * alias dict * recapture cassette * router doctstring --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Fix most integration tests (#6082) * Fix most integration tests * Lint * Fix price_target column for Benzinga (#6083) * Release/4.1.4 (#6081) * static assets * patch version increase * core update * bumping versions * bump finviz version * bump versions * bump versions on package.extension --------- Co-authored-by: James Maslek * Add dates to /quantitative as needed. (#6078) * Add dates to /quantitative as needed. Run new black * Fix tests * Pycharm is weird sometimes * uncommit * Add default window + error handling + mistake --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add end point: `etf.equity_exposure()` with FMP provider (#6079) * add etf.equity_exposure from FMP * empty data error * recapture cassette * pylint unused argument * Fix router example typo * fix test...? * static file to fix test? * fix test..? * __json_schema_extra__ * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [BugFix] Fix Equity Integration Tests (#6086) * fix equity integration tests * black * pylint * black * black * move df_apply to helpers * unused import * remove file that shouldn't have been added * oops. didn't remove a couple lines * [Enhancement] Add `analyst_search` to the Equity/Estimates Router (#6088) * standardize price_target * add analyst search * black * more black * ruff * linter, test parmas * last missing param * get rid of convert to upper * ruff * pylint * [BugFix] - Fix POST docstring examples (#6095) * Fix POST docstring examples. * Move router examples to command decorator * [BugFix] Fix `treasury_rates()` (#6092) * fix treasury_rates * drop rows with no data --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * clean up the remains from my yeeting (#6089) * clean up the remains from my yeeting * was not careful * Add ETF examples (#6102) Co-authored-by: Pratyush Shukla * [BugFix] Fix integration tests (#6100) * fix int tests * fix obbject int tests * fix quant tests * fix index tests * use python 3.10 instead * remove cache * end_date < start_date * [Enhancement]: Add TMX data provider extension. (#5913) * dev install * add TMX provider extension * normalize ytm and coupopn_rate values * black * codespell * ruff * black again * pylint * ftw * undo what Pylint thinks is best * more black * renovate insider_trading standard model * fix tests * typo * tests * empty string * pylint unused argument * nans for some reason * black * static files * static files with openbb-tmx installed this time * yfinance TypeError..? * NA -> N/A * update for version bump * list exchange-calendars as tmx dependency * eod chains date -> eod_date * new line * not that file * more black * one more black * fix weird merge thing * ruff * index constituents params * insider trading * fixing things * black * black AGAIN * news integration params * the other missing param * ruff * historical dividends field update * add json_schema_extra * gainers * symbols -> symbol * company news symbol * unit test param * review items * wrangle a rogue field * index router example * company news thing - symbols -> symbol * field name map --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek * [Feature] - OBB.GET (#6097) * create OBB.GET and data slicer page * remove quotes * format description * wording * functions.json * sidebar position * remove if stamente * [Docs] Remove Reference to `to_chart` in OBBject. (#6096) * remove reference to to_chart in OBBject. * put chart description back in OBBject properties * [Feature] - Create openbb assets folder (#6101) * create openbb assets folder * fix unittest * rebuild --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fixes to_df() where the date series contains multiple TZ-offsets. (#6099) * allow mixed utc offset in a tz-aware date column * enforce ascending from all providers for price.historical * fix tests * add comments and apply treatment to basemodel_from_df before JSON output * yfinance consistency * add unit test * add unit test * better test * ruff --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update the quantitative extension to make more sense (#6087) * Split out a rolling submenu for the rolling functions * Make a performance and a stats submenu. * Test the statistics functions * lint * lint * dupe test * pylint * ruff * Try tests quick * black magic signature funcs * fix my custom tests * Fix the existing imports/urls * push the api update * okay I figured out whats going on * this should be all of them * Correct docstringing examples --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Fix ECB Yield Curve (#6108) * fix ecb yield curve * standard model update * Update unit-test workflow to check for changes to openbb_platform (#6109) * [Bug fix] - Fix package mypy (#6110) * fix: package mypy * types * black * [Feature] - Equity router descriptions & examples (#6103) * feat: equity/calendar * feat: compare router * fix descriptions * darkpool + discovery * fix paragraph issues * fix descriptions * fundamental part 1 * fundamental part2 * transcipts * ownership * fix * price * shorts * Update darkpool_router.py * minor fix * shorts examples * examples * ruff * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Add `exceptio… * [BugFix] - Json schema extra broken in standard models (#6212) * Separate standard models in registry map * fix --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [Enhancement] Sync `reference.json` and Platform function docstring (#6211) * obbject params stored as a list of dict platform markdown generator processes obbject returns into a string * process field types further * process field type correctly * fixed models * mypy suggestion was sus * updated assets and packages --------- Co-authored-by: Henrique Joaquim Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Release/3.2.5 (#6218) * remove ultima + althub * move twitter keys * [Critical] Sync `main` with `develop` (#6202) * feature/intrinio-equity-search: Adds Intrinio to `obb.equity.search()` (#5863) * intrinio equity search * integration tests * test --------- Co-authored-by: James Maslek * feature/yfinance-multi-ticker: Adds support to openbb-yfinance for multi-ticker download. (#5845) * yfinance multi-ticker support * multi-ticker support for market indices * crypto multi-ticker support * recapture tests * yfinance cache and tests * currency historical multi-ticker support * style things * black * missed a values --------- Co-authored-by: James Maslek * Feature/us-treasury-prices: Adds Treasury Prices to Fixed Income (#5776) * add treasury prices endpoint to fixed income router * adds tests * black * ruff * import statements * standard model imports * black * some cleanup * black * async router * make async * str outpuot * bytes object not string * docstring typo * multi-line f-string * encoding * duplicated conditional * black --------- Co-authored-by: James Maslek * feature/sec-etf-holdings: Adds ETF holdings from SEC provider (#5757) * add ETF holdings from SEC provider * black * helper function params * edge cases * ruff * add validator in company filings * remove xml field * update import * cleanup parsing * missing datetime import in company_filings * black * unused import * add missing py.typed files * feature/nasdaq-equity-search: Adds Nasdaq provider for `obb.equity.search()` (#5790) * add nasdaq to equity search * black * unused import * make async --------- Co-authored-by: James Maslek * Excel docs (#5870) * first test * remove old reference * bring this file back * generate sidebar and write empty mds * generate index.mdx * get description from cmd_lib * fix reference card error * rename file * generate markdown * regen * add last+hist * update pages with seo metadata * format types * small fix * css sux * add usage placeholder * set hidden by default * nah * add cmds and menus to reference * lint * fix/Users/diogosousa/opt/anaconda3/envs/platform/bin/python /Users/diogosousa/OpenBB/OpenBBTerminal/website/generate_excel_markdown.py * format mds * remove space * fix commands heading * redo folder structure * add back cmd description * move card to var * different main folder * clean * move vars * refer to editor * rename var * done * recreate folder structure * add section: syntax + minor adjustments * remove return type * remove return type * rename api to library * minor fix * remove api folder * remove api folder * formatting * improve basics * basics * fetch functions.json from website * complete basic * change syntax to use semi-colon * basics * basics * remove space in sig * remove sections * add metadata * Update formula builder * add tabs * Update index.md * complete basics and formula_builder * Update index.md * add windows screenshots * restructure folders * regenerate with latest add-in version * move Excel sidebar * rename function and add comment * now it's working * logic * rename folder * Update formula_builder.md * fix * hide excel for now * some explicit typing --------- Co-authored-by: tehcoderer * Make Pro Fetchers async by replacing `ThreadPoolExecutor` with `asyncio.gather` (#5822) * init * Update helpers.py * filter URL on raise * polygon, fmp done, update cassettes * updates * cleanup * revert tests for now * Update discovery_filings.py * Update helpers.py * add `async` overload to `Fetcher.extract_data` * update merged fred models * tests, improve fred series * Update insider_trading.py * insider * tests * intrinio * Update equity_historical.py * implement abstract async extract on Fetcher, with simple switch * cleanup * Update helpers.py * Update helpers.py * fix fmp historical deprecated urls * Revert "fix fmp historical deprecated urls" This reverts commit 1a760a24737ed3d1439472bdb4c47aa778bcce8b. * fix fmp `index.market` 1day url missing query params * Update test_fmp_market_indices_fetcher.yaml * field fixes * `extract_data_async` -> `aextract_data`, `async_request` -> `amake_request` * `async_requests` -> `amake_requests` * Update company_news.py * add sort to index `integration` params * add `client.py` tests * Update equity_search.py * Add lost v in platform api version string * Resolve linter errors here and there --------- Co-authored-by: Theodore Aptekarev * Allow this to be run in parallel (#5872) * Limit mypy v3 linting to only the diff of the PR (#5878) * Use custom parametrize from news menu tests (#5873) * Use custom parametrize from news menu tests * Update Ultima unit test cassettes * Command Schema (#5874) * POC * Filter by provider * pass base_app as parameter * add typing + TODO * fix some typing * Fix unit tests --------- Co-authored-by: Diogo Sousa * Parameterize `obbject.to_df` with `index` and `sort_by` (#5877) * Parameterize obbject.to_df with index and sort_by * unit tests for obbject * keep using the date as default to use on basemode_to_df() --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Changes to the `obb.fixedincome.corporate.hqm()` output (#5876) * changes to the hqm output * typo --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Refactor method in RegistryMap (#5879) * refactor extract_info * add comment --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * remove Literal from providers in OBBject (#5882) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix version (#5883) * Fix version * Fix linter on terminal * Refactor package builder (#5880) * breakdown builder + remove black * rebuild * rebuild * rebuild * rename method * format built code without black * we still lint if it's available * fix existing tests * add linter tests * add black to dev deps * auto_build as instance method * reorder methods * typing --------- Co-authored-by: Henrique Joaquim * small refactor for simplification (#5886) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix bug. Add router test. (#5888) * Fix bug. Add router test. * Simplify * separate pylint between platform + terminal (#5892) * separate pylint b/w platform + terminal * Explicitly set pylint check scope to files in the diff --------- Co-authored-by: Theodore Aptekarev * sync descriptions (#5893) * Add REST API docs page with advanced settings configuration (#5890) * Don't mention docker in a list of python envs * Create a REST API page * Update docs to get api keys from the hub * Update installation instructions * Mention requirement of poetry and toml in source installation section * move rest page up to the top. and add url to google colab example notebook --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix a v3 syntax example (#5891) * Adds federal reserve data points (#5885) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * Check if outdated (#5898) * Add econometrics API tests (#5899) * Docs/excel update (#5889) * update xl docs * update syntax line * update again * Fix pylint scope (#5895) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring * Debug pylint * Adjust the fetch depth --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix `from openbb import obb` asyncio lock in python REPL (#5896) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/financials - PR for working on structure of financial statements. (#5794) * balance sheet draft * balance_sheet draft * cash_flow draft * income_statement draft * intrinio financials * description * period field * ruff * income statement * field * label - gross profit ratio * cash flow statement * investing order * add option for caching to cashflow * add caching to balance and income * typos and update order for financial institutions * replace 0 values with None * add financial ratios from intrinio * black * missing test params * balance cassette * query param description * symbol list warning * black * handle BRK-A and symbols with a dash for Intrinio * fix typo error * add free cash flow to bottom of cash flow statement * amortization_expense * dev_install.py * undo dev_install.. wrong branch * cash flow order things * standardized cash flow * fields * integration tests * cash flow model validator * more polygon cash * black * black * Delete openbb_sdk/providers/polygon/openbb_polygon/utils/definitions.py wrong file * balance sheet * some cleanup * ruff * income statement * black * test params * financial ratios async update * recapture fmp and polygon tests * yFinance financials * yfinance tests * delete financial_statements standard model * intrinio balance sheet order * fiscal year standard param * remove file accidentally committed * add reported_financials end point * fiscal_year param for reported_financials * fix url * fmp test cassette * add safe-guard with warning for fiscal year before 2008 * periods can only be annual and quarter * url in docstring correction * add fiscal_year param to intrinio standardized financials and ratios * fix fmp ratios * black * rename fields as per Minh * rogue field * black * Fix typo in a docstring * Resolve linting errors * type ignore * disable=unused-argument * changing the arg name cc @minhhoang1023 --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev Co-authored-by: hjoaquim * docs/legacy-install: Add warning at top of page - Instructions on this page are for installing the Terminal (#5904) * add warning at top of page - instructions are for installing the Terminal app * pip install openbb-nightly * hotfix/financials-field-maps: Updates A Couple FMP/Polygon Income Statement Fields (#5907) * update income statement fields * another polygon field * ratio -> margin * black * explicit fmp fields * add reported_currency for standardized intrinio * # pylint: disable=unused-argument * another unused-argument * black.. * patch tests * polygon income: eps -> basic earnings per share * re-capture terminal portfolio menu test --------- Co-authored-by: hjoaquim * Fix test (#5916) * Fix test * Skip ultima integration tests --------- Co-authored-by: Pratyush Shukla * hotfix/fmp-price-performance-zeros: Replace returned zero with None and normalize percent values. (#5918) * replace zeros with none and normalize percents * pylint unused argument * Update index.md (#5906) * Release/4.1.0 (#5901) * Hotfix/terminal tests (#5919) * skip supressed arguments * silent way of customly load on quote * specify source for call_load * docs/platform-faq: Start Platform FAQ page with bullet points on Platform vs SDK (#5914) * platform vs sdk faq page * add data and data providers faq section and some style cards * typo * makes changes as per reviews * openbb-nightly as a way to install everything * jupyter-lab instead of jupyter --------- Co-authored-by: Henrique Joaquim * hotfix/backend - Initialize OpenBBFigure (#5912) * create backend * openbb_figure * black * pylint * pylint again --------- Co-authored-by: Henrique Joaquim * hotfix/yf-futures-historical: yfinance historical futures multi-ticker support and symbol parsing (#5923) * multi-ticker support for yfinance futures historical * raise-missing-from * integration test params * equity_historical adjusted kwargs * pylint unused argument * Docs/excel examples (#5920) * regen excel md * add syntax + basic example * fix example * create json with docs map * update docs to latest functions.json + remove tiingo * remove space from examples * minor fix * remove spaces * remove spaces * bug fix: remove folder before generating * fix typo * add link to appsource * fix * Update templates.md * regenerate content * change docs colors * fix light mode * add back tiingo * update functions.json * templates go later * remove Library from reference * Make the excel markdown being generated at runtime * fix reference cards having commands under menu * remove excel/reference folder since this is built at runtime by gh-pages action * black formatting * improve title * add excel to the main page * add excel image bg * make excel sidebar show up next to pro * improve main page * small fix for platform page title * update basics page * add tip to autocomplete --------- Co-authored-by: DidierRLopes * Re-record tests and fix symbol bug (#5924) * Re-record tests and fix symbol bug * nordvpn us ftw * @IgorWounds says "SPY >> IOO" --------- Co-authored-by: Pratyush Shukla * Docs/bug fix (#5926) * fix pro link * fix wrong example * Introduces a limit argument for the `equity.fundamental.trailing_dividend_yield` endpoint (#5925) * introduces a limit argument for the equity.fundamental.trailing_dividend_yield endpoint * add default args to test * Add json_schema_extra to openapi.json (#5930) Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * feature/standardize-quote: Proposal to Standardize EquityQuote (#5922) * standardize EquityQuote * intrinio reference * rogue comma * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * hotfix/fmp-rev-segments: Adds Fiscal Period to busines/geographic segments revenue. (#5921) * add fiscal_period to revenue by geography and business line * data description and unused imports * update test cassette * Allow multiple symbols `equity.profile` (#5929) * allow multiple symbols * pylint * pylint ignore position * change callback to helper func --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim * Add filtering to AV historical price (#5928) * add filtering to av historical price * lints --------- Co-authored-by: Pratyush Shukla * Fix vwap FMP error (#5936) * Fix vwap FMP error * Linting * Painlint * Add date filter + symbols to comp (#5931) * add date filter + symbols to comp * make sure year is in d * tests fix * Improving Platform's import time (#5894) * missing decorator * missing optional statements * us-gov to optional and right position * removing redundant call * lazy load mappings * docstrings * introducing the extension loader class * misleading docstring * using the extension loader on the router * using the extension loader on the credentials * docstrings * lazy load of entry points * checkout dev_install * using the extension loader to get the entry points instead of recalling the function * improved auth service and charting service * using the extension loader on the registry * typos * adding properties to extension loader for easy access * using the extension loader on the package builder * avoiding circular imports by using forward references * fix charting service tests * test for the extension loader * Update openbb_platform/core/openbb_core/app/model/credentials.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/app/router.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/provider/registry.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * adjustments --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Disable auto_build on test run (#5937) * Disable auto_build on test run * Move to conftest * Update excel docs (#5940) * update basics * update reference generator * Categorize release notes based on labels for OpenBB Platform (#5943) * Categorize release notes based on labels for OpenBB Platform * Add environment variable for GitHub token in labels-PR.yml * Update labeler.yml to use "enhancement" label for feature branches --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Custom deprecation message in API endpoints and Python commands (#5942) * add custom deprecation message feature in routers * add custom deprecation message feature in package builder * using an actual DeprecationWarning instead * fix tests --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: hjoaquim * Hotfix/remove unused workflow (#5945) * Disable auto_build on test run * Remove unused workflow * Revert * Hotfix/fix typo (#5948) * Disable auto_build on test run * Fix typo * Revert * docs/data-models-url: Fix URLs on Development Page (#5944) * fix url to the standard models * github links * `equity.fundamental.dividends`: allow filter by date (#5932) * allow filter by date * ruff * pylint * fix tests --------- Co-authored-by: Pratyush Shukla * Create Excel templates page (#5947) * create templates page * Update index.mdx * fix description * update card * remove clsx * Update index.mdx * Update index.mdx * Update index.mdx * Update index.mdx * min height * min height * improve excel docs and point towards hub --------- Co-authored-by: DidierRLopes * hotfix/intrinio-dividends-limit: Fix Limit Param Alias (#5951) * fix limit param * pylint unused argument, recapture test cassette --------- Co-authored-by: Pratyush Shukla * Docs/remove core refs (#5957) * remove references to core: PathHandler + ProviderInterface * remove unused function * add comment * regenerate * fix a few examples * add comment * rename file * Excel tutorials on the docs (#5956) * update workflows name to tutorial * update title * get barebones to bring in Excel videos * tutorial excel videos in * hotfix/float-values: Convert Intrinio balance sheet values to float type (#5961) * convert intrinio balance sheet values to float type * unused import * typo in alias dict * Update to OpenBB Add-in for Excel (#5965) * Log custom headers (#5966) * add custom headers * fix: send on startup and defaults * pylint * unittests * move government-us to community in dev_install (#5963) * fix: adds logic to check whther user is logged in on hub (#5941) Co-authored-by: Luqman * hotfix/fix-company-filings: Fixes too many mandatory fields. (#5909) * Fixes too many mandatory fields. * black * black again --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: James Maslek * `equity.estimates.price_target` - Integrate with Benzinga (#5946) * deprecation message * fix lints * adding equity.estimates.ratings and fmp as its provider * unit tests for fmp * removing unused file * typos * add benzinga to AnalystRatings * revert changes to estimates router * moving it to price target instead * reverting changes * fmp support for multiple ticker * benzinga price target * ruffy * unused argument * fix type hints * tests for the new fetcher * new integration tests * fixing tests * missing std arg --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [DEPRECATION] `index.market` renamed to `index.price.historical` (#5962) * deprecate index.market and add index.price.historical * add index.historical standard model * add index.historical provider models * index extension tests * provider tests * linting * bug fix (#5969) * Uppercase excel reference (#5958) * uppercase reference * fix name header * add tab title * remove reference excel folder * add to gitignore excel reference files --------- Co-authored-by: DidierRLopes * move templates (#5970) * Release 4.1.1. (#5964) * update dev_install * fix effr test * Update dev_install.py * fix fundamental balance test * fix equity price historical test * fix price target model * black * rebuild static files * update publish.md * fixed dev_install * update publishing doc * updated `openbb-core` to 1.1.1 * updated extensions * updated providers * updated `openbb` package * updated static extension map * updated publishing doc * fixed toml for `openbb-finra` * @jmaslek yfinance IS DEFAULT * updated static --------- Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim * Fix link to discord channel (#5910) Co-authored-by: James Maslek * Fixing Posthog handler for thread safety (#5968) * fixing posthog handler for thread safety * removing loggging init from the global scope - per sensei juan --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update labeler.yml and labels-PR.yml (#5974) * hotfix/ allow multiple `identify` calls (#5976) * allow multiple `identify` calls * Update posthog_handler.py * regex out any invisible control character from sales_conditions field (#5977) * docs/http-requests: Contributor Guide For Building HTTP Requests (#5973) * contributor guide for http requests * add a docstring * add section on get_querystring * extra space * add note for people installing PyPI in a zsh terminal shell --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/add-yfinance-functions: Add equity.profile for yFinance (#5978) * equity profile for yFinance * pylint * equity quote * unused imports * remove yfinance from extras in toml (#5982) * Release OpenBB Platform v`4.1.3` (#5983) * fixing pyproject.toml * adding pandas-ta to technical package for publishing * bumping technical * test for pyproject toml * feature/cboe-async: Refactor Cboe for Async (#5900) * refactor cboe for async * codespell * unused imports * pylint * more pylint * platform metadata * classmethod decorator * test params * intrinio quote * test param names * date in test needs to be a datetime.date not string * make fmp unix timestamp tz-aware and normalize percent change * different way of parsing datetime string * recapture cboe equity historical test * unused import * index snapshot update * black * extension map * pylint * cboe pyproject.toml * proposal to standardize equity_quote * one more file * removing changes on static assets * index_historical * index_historical again * last_time -> last_timestamp * obsolete router path * fix tests * test param * restore market index deprecation that I forgot about * fixing tests --------- Co-authored-by: hjoaquim * Fix typo in website/README.md (#5980) * Fix typo in website/README.md * Update linting.yml * Update linting.yml * Update linting.yml * Change ref conditions * Update linting.yml --------- Co-authored-by: Luqman Co-authored-by: Luqman * Hotfix/th etfs (#5959) * added etf trading hours * black formatter --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: Luqman * feature/finviz-provider: Adds Community Finviz Provider Extension (#5952) * add finviz provider * recapture tests * recapture tests again? * invalid test param * static packages * units_measurement -> unit_measurement * static packages as core only * openbb_core version bump in pyproject.toml * try adding user-agent to test response * fix tests * linting * provider model cosmetic changes * fix install script and typo in openbb toml * static * fix: re-record unittests * empty data error * definitions as a file --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla Co-authored-by: Diogo Sousa * Add support for multiple symbols on `obb.equity.price.historical` (#5984) * av - support for multiple symbols * tiingo - support for multiple symbols * include symbol only if necessary * update extension descriptions page (#5985) * remove useless file (#5991) * added symbol to headers (#5981) Co-authored-by: Pratyush Shukla * Fixing Docs Typos (#5955) * fixed typo * fixed stocka typo --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: James Maslek Co-authored-by: DidierRLopes * fix nasdaq test cassettes (#5989) * don't include `custom_headers` in openapi schema (#5994) * hotfix/intrinio-index: Drop None Rows From intrinio Historical Index (#5987) * drop None rows from intrinio historical indexes * add empty data error * static assets * hotfix/insider-trading: Fix #5988 (#5990) * fix validation errors * empty strings * validator --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: teh_coderer * CI listing quick fix (#6002) * BIGGGG LINTING * fixing lints * fixing lints * black * very ruff * no export * fix hedge_view again * lints * platform lints * lints * black * black it @hjoaquim * fix some more linting --------- Co-authored-by: hjoaquim * Release `openbb-finviz` `1.0.0` to the public (#6000) * set version to `1.0.0` * Set correct dep version in main package * Add `finviz` to table * Auto Labelling for OpenBB Excel Docs Changes (#5998) * Update pull request labels * Update labeler.yml with new label for Excel files --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Support for custom examples in router commands (#5993) * Disable auto_build on test run * Add support for custom router examples * Revert odd file change * Fix API pollution * Refactor examples with @montezdesousa * Check if model is inside the PI * Fix * feat: add & fix examples (#6001) * feat: add & fix examples * fix: ruff + comment * feat: read parameter pool from file * feat: typing + unit test * Disable auto_build on test run * Add field order to OBBject * Revert * lint and revert * fix test --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Diogo Sousa * hotfix/intrinio-options-date: Fix comparing values between str and datetime (#5997) * fix compare between str and datetime * unused argument * get_weekday * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Field order added to the OBBject extra as preference (#5999) * Disable auto_build on test run * Add field order to OBBject * Improvements * Remove noxfile * Disable auto_build on test run * Add field order to OBBject * Revert * lint * Add docs * Not sure how this happened * lint * Update `openbb-devtools` (#6008) * update deps * unpinned package versions from gh linting action * codespell * updated black dependency * linting * linting * linting * pin codespell version * black * black again * install devtools in linting action * format w new black (#6009) * format w new black * format w new black * black again * black the terminal * ignoring unused arguments --------- Co-authored-by: Pratyush Shukla * remove reviewpad (#6010) * Remove Ultima provider (#6012) * Add OECD unemployment (+more) + data cache idea (#5917) * Add OECD unemployment + data cache idea * Docstring edits * Tests * Add composite leading indicator * i truested ruff --fix too much * Add short + long term interest rates * pylint * pylint2 * was not committing. my b * add csv cache + make it default. remove pyarrow from poetry * Clean up * Didnt run on this file. My bad * Why was this ignored /shrug * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/improved pr template (#6018) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * better pr templates * developer template * [Feature] - Custom deprecation (#6005) * custom deprecation * custom deprecation * using the new deprecation * custom deprecation on the package builder * remove comment * ruff * black * static assets * tests * using parametrization instead * test for deprecated endpoints (#6014) * Deprecation warning on the reference docs (#6015) * typo/fix * bring back methods needed for markdown generation * add deprecation warning to docs * contributor docs for deprecating endpoints - tks @deeleeramone * small changes on publishing procedure per @the-praxs * moving the deprecation summary class to deprecation file instead * explanation on class variables * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update openbb_platform/openbb/package/index.py Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * deprecating on 4.3 instead @the-praxs --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla * [BugFix] Fix package builder (#6022) * fix: remove specific imports * adjustments for correct deprecation * static assets --------- Co-authored-by: hjoaquim * [Feature] Add support for multiple tags in `historical_attributes` and `latest_attributes` (#6013) * historical attributes standard model - * add support multiple tags * add `tag` field in data * add support for multiple tags in historical attributes * set correct return type in `callback` function * latest attributes standard model - * add support for multiple tags * add `tag` field in data * add support for multiple tags in latest attributes * add test params for the attributes endpoints * add support for multiple `symbol` and add `symbol` field in the data * modified code to fetch data from multiple symbols and throw warning as per @deeleeramone * add params for testing multiple symbols * linting * fix test params * fixed condition to check if its a `Dict` type * updated intrinio fetcher tests for the statements * updated static * [feature]: feature/overview-to-profile: Deprecate `equity.fundamental.overview()` and move to `equity.profile()` (#6011) * fmp overview to equity profile * deprecation warning * urls * wrangle fields * black * pylint unused argument * insert additional securityID fields to standard model * custom deprecation using OpenBBDeprecationWarning * typo - need to have the deprecated=True flag * static assets * fix non related test * minor adjustment - removing the need for the try/except block - using the get and pop removes the need for key existance checking. cc @deeleeramone --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim * [BugFix] - Remove duplicate code (#6025) Co-authored-by: Pratyush Shukla * remove `SectorNews` from router and standard models (#6026) * feature/more-yfinance: Adds some more to openbb-yfinance (#5979) * equity profile for yFinance * pylint * equity quote * unused imports * price target consensus * add currency field * add share_statistics * don't append empty result to results * key executives * missing definition in key_executives * pylint * key metrics * add currency to key metrics * add etf_info * rename trailing_annual_dividend -> dividend_rate_ttm * add institutions count to share_statistics * add historical dividends * add logic for start-end dates to historical_dividends * recapture the test..? * funny test * filter on tests? * record test with clean cache..? * year_price_change -> price_return_1y in key_metrics * black * make descriptions clear for beta and dividend_yield fields * add description field to standard model * updated static * clear description of shares_implied_outstanding field * updated static for equity * clean descriptions --------- Co-authored-by: Pratyush Shukla * feature/commodities-lbma-fixing: Adds Commodity Extension and LBMA Gold/Silver daily fixing levels (#5760) * add commodity extension and add lbma fixing endpoint * dev_install.py * readme url * renovate the standard model * makes a query_params model for nasdaq data link * literal not optional * unused imports * missing test params * test cassette * DataLink query param description * test file import * actually fix import * from openbb_core.provider..... * ruff * another import statement * black * async router * move query_params * update version * version numbers * extension_map * satisfy pylint? * pylint * Update pyproject.toml * black * poetry lock * Update extension_map.json * Update __extensions__.py * Update module_map.json * clean descriptions --------- Co-authored-by: Pratyush Shukla * Improve UX for `obb.news` (#5986) * adding date,start_date and end_date to std params * add date to special params which should've another type * change types to dateType * change helper to accomadate changes in types * date filtering * using the date filtering for all providers * date params on the std model instead * adding the right type * filtering dates on world news * integration tests * fix descriptions * static assets * black * Revert "black" This reverts commit 7288b59f87e1b0816733a96ce77fb96e13dcf0e3. * lint * addressing @montezdesousa suggestion: removing qua 31 jan 2024 15:01:20 WET from standard models and using it only on benzing * tests accordingly * static assets * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Improve Standardization - `IndexHistorical` (#6030) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * fix tests * keep the skip * fix test * [Feature] - Refactor Response Model (#6024) * Start refactor with @montezdesousa * feat: add response model inside openapi_extra * feat: find+replace return types * fix: ruff * Feature/api response by provider (#6029) * init * Update router.py * Update registry_map.py * check dicts * lint * exclude provider on data model for package build * `results_type_repr` logic for `Annotated`, ignore provider field in `_extract_data` --------- Co-authored-by: Diogo Sousa Co-authored-by: teh_coderer * [BugFix] - Improve Standardization - `CotSearch` (#6031) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * keep the skip * fix test * adding missing param * fix tests accordingly * Docs/byod (#5996) * add byod to reference * fix: rename add-in name * feat: add data conectors page * fix: additional notes * tiny tweaks * update functions.json and openapi.json * fix: fix bug in hedge controller * fix: another bug hedgecontroller * black --------- Co-authored-by: DidierRLopes * Feature/ex-dividend: Renames "date" columns as "ex_dividend_date" for Dividend Calendar and Historical Dividends (#6006) * date -> ex_dividend_date * nasdaq historical dividends * black * pylint * intrinio alias_dict * dividend_currency -> currency * yfinance field name --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Adds a timezone to the Unix timestamp conversion to correct localization errors. (#6023) * fix: remove specific imports * make polygon historical tz-aware * undo including that commit * that PR wasn't supposed to be there. * pylint unused argument * fix polygon crypto historical intervals * pylint * new cassette * fix the rest of the polygon historical price query params * black * pylint.. * integration test param * appease daylight savings handling * paginate for crypto currency and index * black * raise EmptyDataError when no results instead of returning an empty list * ruff --------- Co-authored-by: Diogo Sousa * Hotfix/wrong pydantic validator (#6037) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * Use field_validator instead * fix openapi schema fields `to_snake` (#6036) * Fix data connectors link typo (#6038) * [BugFix] - Improve Standardization - `EquitySearch` (#6033) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * use_cache as std * adjust tests * keep the skip * re-record test * black * Docs / only display results for current platform (#6017) * Update index.js * Update index.js * yfinance * tzcache no longer exists * fixxy * ruff --------- Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek Co-authored-by: Andrew * Improve the docstrings (#6040) * Improve the docstrings (#6041) Co-authored-by: Henrique Joaquim * dont run base tests with v4 label (#6046) * Sync excel reference (#6039) * sync excel reference * fix: change delimiter to comma * feat: update data connectors * test skipping wf * Update unit-test.yml * Update unit-test.yml * test skipping wf * watch label changes * Update unit-test.yml * [Enhancement] - Improve `news` router docs and examples (#6047) * better docs * static assets * Feature/platform standardization notebook (#6049) * Add platform standardization overview notebook to examples * Add py.typed marker to openbb-fred * [Enhancement] - Improve `currency` router docs and examples (#6045) * currency search * reference rates * historical price * static assets --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * display warnings based on preference (#6051) * [Enhancement] - Improve `crypto` router docs and examples (#6048) * crypto search add validation for '-'-separated pairs * set default query value to None * improve /crypto description with custom examples * improve /crypto/price/historical description with custom examples * updated static for crypto menu * ignore line too long * linting --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Final Implementation of Changelog V2 (#6050) * Updated the release drafter to process the released changelog for OpenBB Platform * Update release drafter configuration * Add OpenBB Documentation Changes and Create Release * Update process_changelog.py path in draft-release.yml * Update release-drafter version and save changelog * Copy changelog with python * Update draft-release.yml to save Changelog * Update draft-release.yml * Encode and save Changelog to Base64 * Update Changelog saving method * Update Changelog format * Update CHANGELOG.md with release notes * Fix draft release workflow * Add cat command to print CHANGELOG.md * Add platform-drafter.yml and update release-drafter.yml and draft-release.yml * Commented out config-name in release-drafter step * Update branch name validation and process_changelog.py * Refactor process_changelog.py to improve readability and maintainability * Refactor process_changelog.py to handle file I/O errors and remove duplicate PR entries --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * improve discriminator logic, fix package return type docs (#6052) * improve discriminator logic, fix package return type docs * Update registry_map.py * build package * Update registry_map.py * defaults * Update registry_map.py --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add LLM tools example notebook (#6053) * Add LLM tools example notebook * Update README, rename example notebook --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Remove the preference (#6055) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * [Feature] - Standardise multiple symbols input (#6056) * feat: remove list of str * fix: update cpi * package builder + cpi * build * fix: update unittests * fix: check_item * fix: unittests * Improve the docstrings (#6057) * update economy router docstrings (#6058) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix OECD Long Term Interest Rate (#6060) * fix long term interest rate * pylint unused argument * [Bugfix] - Fix economic calendar country (#6059) * fix economic calendar country * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [HotFix] Index Router Docstrings & `sp500_multiples()` Cleanup (#6063) * sp500 multiples cleanup * remove dict from standard model * static pacakge * pylint * [Feature] FMP Current Holdings (#6043) * add fmp current holdings to etf holdings * pylint unused argument --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Replace symbols in company/news (#6061) * feat: replace symbols in /news * fix: integration tests * fix: integration tests api * fix: typo * Update test_intrinio_fetchers.py * [Enhancement] Add function examples to router. (#6042) * options router * fixedincome router * futures router * missing comma * static assets * futures router --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] Add function examples to Regulators Router (#6054) * options router * fixedincome router * futures router * missing comma * static assets * futures router * sec router * cftc router * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix World News (#6064) * fix fmp * fix intrinio * fix biztoc * actually commit intrinio fix * fix tiingo * unused import * fix tests * black * ruff * benzinga empty strings * codespell * fix test? * more empty strings --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - remove unused validators from standard models (#6067) * update standard models * lint * Update USD Liquidity Example Notebook for V4 (#5902) * Update USD Liquidity Example Notebook for V4 * delete some v3 text in the copperToGold * Update README.md * findSymbols preview image * Google Colab preview image * financialStatements preview * content tsx file * ### title * convert tsx to json * indent size * double quote keys.json * trailing commas * Update content.json * patch --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix QA Examples (#6072) * [Feature] - Ensure Bugfix branches can only do PRs to `develop` branches (#6073) * bugfix branch name checks and few fixes on the linting not to run on pushes to branches outside PRs * Update branch naming guidelines link --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/charting obbject (#5938) * fix circular import issues on the obbject extension framework * settings available on the obbject * extension init * charting assets and code * introduce to_chart functionality * removes the to_chart method from obbject in detriment of the one from the obbject extension * Update openbb_platform/obbject_extensions/charting/charting/__init__.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * fix on the show method * adding the example to the to_chart docstring * copying the exsting README from charting extension - needs to be revamped * moving to openbb_charting instead * update the pyproject.toml file * pydocstyle * versions * better docstrings * making accessors public * removing unnecessary credentials variable cc @montezdesousa * removing access to extra/metadata and use designated private attrs instead * Fixes linting for the logging service (#5992) * lints * typing.Type instead * deprecating ChartingService to use the new extension instead - adding function discovery capabilities using it * tests for the obbject charting extension * removing charting service from command runner * filter functions not implemented in the module * remove charting service tests * removing charting service on the tests for int tests * charting integration tests * removing charting service file * removing old charting extension code * revamp builder * fix obbject tests * fix command_runner tests * removing openbb_figure_table * better website docs * reviewed readme * unsetting api key for posthog (pywry) windows * added debug_mode to the system settings * removing api key * update nightly script * fix tests * black * black * Revert "black" This reverts commit 21d76ad689087b4ad38cec55667186263363c89f. * Revert "black" This reverts commit 0904653fd73518c0d345a82f91f4cb06cfa84cb6. * black for henrique * returning a list instead * better docstrings * removing unnecessary indicators docstring * typo * black * intentional access to protected member * changes to publish script * filtering deleted files * black * adding render argument * fixing the df_to_basemodel function: it should include the index in the columns either if flagged or if the index is named * adding the hability to add you own data to to_chart method * tests * black * disable protected access * accept kwargs to eg. save image * adjustment cc Igor * add if statement for protection * remove unused return typing * fix technical charting views * better error message cc @IgorWounds * better structure and fix test * Revert "better structure and fix test" This reverts commit 612ea6117ce064d5e41f74e72e171646be614408. * Revert "better error message cc @IgorWounds" This reverts commit 3d7ee53878b7742d187e83f7e5d4c27438aa40ef. --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix CAPM example (#6075) * Start removing dead v3 commands for deprecation (#6070) * Yeet tokenterminal * Yeet crypto/onchain/hr and gwei * yeet luna * yeet coinglass * yeet dps/ctb * yeet reddit * yeet covid * actually not yeeting hide yfinance future warning * yeet options/hedge * not yeeting. i18n words * something happened on accident * still fixing * git reset/git checkout -f 2516cfbc72d23a7656715314ea94cc34d4c994ee website/content * still not sure whats going on * Edit workflow to not look at deleted files + change bootup message * Dont pin the workflow to my branch always lol * Remove askobb * [Feature] - Comma separated string and list inputs (#6062) * feat: balancesheet * feat: income statement * fix: cash flow statement * feat: financial ratios * feat: reported financials * feat: revenue business line * feat: revenue per geography * fix: warnings * Update balance_sheet.py * fix: remove warning imports * feat: balance sheet growth * feat: calendar ipo * feat: cashflow growth * feat: __validators__ * fix: typing * fix: validator msg * feat: trailing dividend_yield * feat: short volume * feat: share statistics * feat: price target + consensus * fix: update validator * feat: historical dividends * feat: key executives * fix: getattr directly * fix: type hint validator * fix: add default to getattr * typo * feat: otc * feat: options chains * fix: remove list validators * feat: add validator dict to fetchers * lint * update standard models * lint * feat: rename validator * fix: ownership * feat: query params description * fix: balance yfinance * key execs, income statement * remove change * fix: revenue geographic * fix: disable pylint * fix: unusual + balance * unit test validator * minor fix * explicit validators * update test * feat: multiple items allowed * rebuild * move check_single_value * crypto historical * order providers * fix typing * rename extra dict * marking multiple items allowed * Revert "marking multiple items allowed" This reverts commit 7da04817e18b2c9e373ffde9134f3949d11f58dd. * error msg * fix: default provider runtime vs configuration * minor fix * docstring * revert default changes * get provider before executing cmd * fix container bug * clean filter * add comment * prevent bad defaults * update docstring * typing * fix * black * fix docstring generation * [Feature] - Mark multiple item fetchers (#6074) * feat: price target * bezinga company news * equity quote * marking multiple items allowed * more multiple items * black * rebuild * another batch * rebuild * another * cpi * move prop * rebuild --------- Co-authored-by: hjoaquim * rename var * update msg * rename func * fix test * mypy * ruff --------- Co-authored-by: hjoaquim * [Feature] Add Regional Data Endpoint from FRED (#6071) * add regional data endpoint from FRED * codespell * ruff * sort imports * add provder='fred' to integration test * thought I already sorted those imports.. * pylint.. * more test params.... * even more test params... * even more test params.... * static assets * reconfigure params * ruff * alias dict * recapture cassette * router doctstring --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Fix most integration tests (#6082) * Fix most integration tests * Lint * Fix price_target column for Benzinga (#6083) * Release/4.1.4 (#6081) * static assets * patch version increase * core update * bumping versions * bump finviz version * bump versions * bump versions on package.extension --------- Co-authored-by: James Maslek * Add dates to /quantitative as needed. (#6078) * Add dates to /quantitative as needed. Run new black * Fix tests * Pycharm is weird sometimes * uncommit * Add default window + error handling + mistake --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add end point: `etf.equity_exposure()` with FMP provider (#6079) * add etf.equity_exposure from FMP * empty data error * recapture cassette * pylint unused argument * Fix router example typo * fix test...? * static file to fix test? * fix test..? * __json_schema_extra__ * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [BugFix] Fix Equity Integration Tests (#6086) * fix equity integration tests * black * pylint * black * black * move df_apply to helpers * unused import * remove file that shouldn't have been added * oops. didn't remove a couple lines * [Enhancement] Add `analyst_search` to the Equity/Estimates Router (#6088) * standardize price_target * add analyst search * black * more black * ruff * linter, test parmas * last missing param * get rid of convert to upper * ruff * pylint * [BugFix] - Fix POST docstring examples (#6095) * Fix POST docstring examples. * Move router examples to command decorator * [BugFix] Fix `treasury_rates()` (#6092) * fix treasury_rates * drop rows with no data --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * clean up the remains from my yeeting (#6089) * clean up the remains from my yeeting * was not careful * Add ETF examples (#6102) Co-authored-by: Pratyush Shukla * [BugFix] Fix integration tests (#6100) * fix int tests * fix obbject int tests * fix quant tests * fix index tests * use python 3.10 instead * remove cache * end_date < start_date * [Enhancement]: Add TMX data provider extension. (#5913) * dev install * add TMX provider extension * normalize ytm and coupopn_rate values * black * codespell * ruff * black again * pylint * ftw * undo what Pylint thinks is best * more black * renovate insider_trading standard model * fix tests * typo * tests * empty string * pylint unused argument * nans for some reason * black * static files * static files with openbb-tmx installed this time * yfinance TypeError..? * NA -> N/A * update for version bump * list exchange-calendars as tmx dependency * eod chains date -> eod_date * new line * not that file * more black * one more black * fix weird merge thing * ruff * index constituents params * insider trading * fixing things * black * black AGAIN * news integration params * the other missing param * ruff * historical dividends field update * add json_schema_extra * gainers * symbols -> symbol * company news symbol * unit test param * review items * wrangle a rogue field * index router example * company news thing - symbols -> symbol * field name map --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek * [Feature] - OBB.GET (#6097) * create OBB.GET and data slicer page * remove quotes * format description * wording * functions.json * sidebar position * remove if stamente * [Docs] Remove Reference to `to_chart` in OBBject. (#6096) * remove reference to to_chart in OBBject. * put chart description back in OBBject properties * [Feature] - Create openbb assets folder (#6101) * create openbb assets folder * fix unittest * rebuild --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fixes to_df() where the date series contains multiple TZ-offsets. (#6099) * allow mixed utc offset in a tz-aware date column * enforce ascending from all providers for price.historical * fix tests * add comments and apply treatment to basemodel_from_df before JSON output * yfinance consistency * add unit test * add unit test * better test * ruff --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update the quantitative extension to make more sense (#6087) * Split out a rolling submenu for the rolling functions * Make a performance and a stats submenu. * Test the statistics functions * lint * lint * dupe test * pylint * ruff * Try tests quick * black magic signature funcs * fix my custom tests * Fix the existing imports/urls * push the api update * okay I figured out whats going on * this should be all of them * Correct docstringing examples --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Fix ECB Yield Curve (#6108) * fix ecb yield curve * standard model update * Update unit-test workflow to check for changes to openbb_platform (#6109) * [Bug fix] - Fix package mypy (#6110) * fix: package mypy * types * black * [Feature] - Equity router descriptions & examples (#6103) * feat: equity/calendar * feat: compare router * fix descriptions * darkpool + discovery * fix paragraph issues * fix descriptions * fundamental part 1 * fundamental part2 * transcipts * ownership * fix * price * shorts * Update darkpool_router.py * minor fix * shorts examples * examples * ruff * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github… * [Docs] - Update BYOD page (#6217) * [Critical] Sync `main` with `develop` (#6202) * feature/intrinio-equity-search: Adds Intrinio to `obb.equity.search()` (#5863) * intrinio equity search * integration tests * test --------- Co-authored-by: James Maslek * feature/yfinance-multi-ticker: Adds support to openbb-yfinance for multi-ticker download. (#5845) * yfinance multi-ticker support * multi-ticker support for market indices * crypto multi-ticker support * recapture tests * yfinance cache and tests * currency historical multi-ticker support * style things * black * missed a values --------- Co-authored-by: James Maslek * Feature/us-treasury-prices: Adds Treasury Prices to Fixed Income (#5776) * add treasury prices endpoint to fixed income router * adds tests * black * ruff * import statements * standard model imports * black * some cleanup * black * async router * make async * str outpuot * bytes object not string * docstring typo * multi-line f-string * encoding * duplicated conditional * black --------- Co-authored-by: James Maslek * feature/sec-etf-holdings: Adds ETF holdings from SEC provider (#5757) * add ETF holdings from SEC provider * black * helper function params * edge cases * ruff * add validator in company filings * remove xml field * update import * cleanup parsing * missing datetime import in company_filings * black * unused import * add missing py.typed files * feature/nasdaq-equity-search: Adds Nasdaq provider for `obb.equity.search()` (#5790) * add nasdaq to equity search * black * unused import * make async --------- Co-authored-by: James Maslek * Excel docs (#5870) * first test * remove old reference * bring this file back * generate sidebar and write empty mds * generate index.mdx * get description from cmd_lib * fix reference card error * rename file * generate markdown * regen * add last+hist * update pages with seo metadata * format types * small fix * css sux * add usage placeholder * set hidden by default * nah * add cmds and menus to reference * lint * fix/Users/diogosousa/opt/anaconda3/envs/platform/bin/python /Users/diogosousa/OpenBB/OpenBBTerminal/website/generate_excel_markdown.py * format mds * remove space * fix commands heading * redo folder structure * add back cmd description * move card to var * different main folder * clean * move vars * refer to editor * rename var * done * recreate folder structure * add section: syntax + minor adjustments * remove return type * remove return type * rename api to library * minor fix * remove api folder * remove api folder * formatting * improve basics * basics * fetch functions.json from website * complete basic * change syntax to use semi-colon * basics * basics * remove space in sig * remove sections * add metadata * Update formula builder * add tabs * Update index.md * complete basics and formula_builder * Update index.md * add windows screenshots * restructure folders * regenerate with latest add-in version * move Excel sidebar * rename function and add comment * now it's working * logic * rename folder * Update formula_builder.md * fix * hide excel for now * some explicit typing --------- Co-authored-by: tehcoderer * Make Pro Fetchers async by replacing `ThreadPoolExecutor` with `asyncio.gather` (#5822) * init * Update helpers.py * filter URL on raise * polygon, fmp done, update cassettes * updates * cleanup * revert tests for now * Update discovery_filings.py * Update helpers.py * add `async` overload to `Fetcher.extract_data` * update merged fred models * tests, improve fred series * Update insider_trading.py * insider * tests * intrinio * Update equity_historical.py * implement abstract async extract on Fetcher, with simple switch * cleanup * Update helpers.py * Update helpers.py * fix fmp historical deprecated urls * Revert "fix fmp historical deprecated urls" This reverts commit 1a760a24737ed3d1439472bdb4c47aa778bcce8b. * fix fmp `index.market` 1day url missing query params * Update test_fmp_market_indices_fetcher.yaml * field fixes * `extract_data_async` -> `aextract_data`, `async_request` -> `amake_request` * `async_requests` -> `amake_requests` * Update company_news.py * add sort to index `integration` params * add `client.py` tests * Update equity_search.py * Add lost v in platform api version string * Resolve linter errors here and there --------- Co-authored-by: Theodore Aptekarev * Allow this to be run in parallel (#5872) * Limit mypy v3 linting to only the diff of the PR (#5878) * Use custom parametrize from news menu tests (#5873) * Use custom parametrize from news menu tests * Update Ultima unit test cassettes * Command Schema (#5874) * POC * Filter by provider * pass base_app as parameter * add typing + TODO * fix some typing * Fix unit tests --------- Co-authored-by: Diogo Sousa * Parameterize `obbject.to_df` with `index` and `sort_by` (#5877) * Parameterize obbject.to_df with index and sort_by * unit tests for obbject * keep using the date as default to use on basemode_to_df() --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Changes to the `obb.fixedincome.corporate.hqm()` output (#5876) * changes to the hqm output * typo --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Refactor method in RegistryMap (#5879) * refactor extract_info * add comment --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * remove Literal from providers in OBBject (#5882) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix version (#5883) * Fix version * Fix linter on terminal * Refactor package builder (#5880) * breakdown builder + remove black * rebuild * rebuild * rebuild * rename method * format built code without black * we still lint if it's available * fix existing tests * add linter tests * add black to dev deps * auto_build as instance method * reorder methods * typing --------- Co-authored-by: Henrique Joaquim * small refactor for simplification (#5886) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix bug. Add router test. (#5888) * Fix bug. Add router test. * Simplify * separate pylint between platform + terminal (#5892) * separate pylint b/w platform + terminal * Explicitly set pylint check scope to files in the diff --------- Co-authored-by: Theodore Aptekarev * sync descriptions (#5893) * Add REST API docs page with advanced settings configuration (#5890) * Don't mention docker in a list of python envs * Create a REST API page * Update docs to get api keys from the hub * Update installation instructions * Mention requirement of poetry and toml in source installation section * move rest page up to the top. and add url to google colab example notebook --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix a v3 syntax example (#5891) * Adds federal reserve data points (#5885) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * Check if outdated (#5898) * Add econometrics API tests (#5899) * Docs/excel update (#5889) * update xl docs * update syntax line * update again * Fix pylint scope (#5895) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring * Debug pylint * Adjust the fetch depth --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix `from openbb import obb` asyncio lock in python REPL (#5896) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/financials - PR for working on structure of financial statements. (#5794) * balance sheet draft * balance_sheet draft * cash_flow draft * income_statement draft * intrinio financials * description * period field * ruff * income statement * field * label - gross profit ratio * cash flow statement * investing order * add option for caching to cashflow * add caching to balance and income * typos and update order for financial institutions * replace 0 values with None * add financial ratios from intrinio * black * missing test params * balance cassette * query param description * symbol list warning * black * handle BRK-A and symbols with a dash for Intrinio * fix typo error * add free cash flow to bottom of cash flow statement * amortization_expense * dev_install.py * undo dev_install.. wrong branch * cash flow order things * standardized cash flow * fields * integration tests * cash flow model validator * more polygon cash * black * black * Delete openbb_sdk/providers/polygon/openbb_polygon/utils/definitions.py wrong file * balance sheet * some cleanup * ruff * income statement * black * test params * financial ratios async update * recapture fmp and polygon tests * yFinance financials * yfinance tests * delete financial_statements standard model * intrinio balance sheet order * fiscal year standard param * remove file accidentally committed * add reported_financials end point * fiscal_year param for reported_financials * fix url * fmp test cassette * add safe-guard with warning for fiscal year before 2008 * periods can only be annual and quarter * url in docstring correction * add fiscal_year param to intrinio standardized financials and ratios * fix fmp ratios * black * rename fields as per Minh * rogue field * black * Fix typo in a docstring * Resolve linting errors * type ignore * disable=unused-argument * changing the arg name cc @minhhoang1023 --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev Co-authored-by: hjoaquim * docs/legacy-install: Add warning at top of page - Instructions on this page are for installing the Terminal (#5904) * add warning at top of page - instructions are for installing the Terminal app * pip install openbb-nightly * hotfix/financials-field-maps: Updates A Couple FMP/Polygon Income Statement Fields (#5907) * update income statement fields * another polygon field * ratio -> margin * black * explicit fmp fields * add reported_currency for standardized intrinio * # pylint: disable=unused-argument * another unused-argument * black.. * patch tests * polygon income: eps -> basic earnings per share * re-capture terminal portfolio menu test --------- Co-authored-by: hjoaquim * Fix test (#5916) * Fix test * Skip ultima integration tests --------- Co-authored-by: Pratyush Shukla * hotfix/fmp-price-performance-zeros: Replace returned zero with None and normalize percent values. (#5918) * replace zeros with none and normalize percents * pylint unused argument * Update index.md (#5906) * Release/4.1.0 (#5901) * Hotfix/terminal tests (#5919) * skip supressed arguments * silent way of customly load on quote * specify source for call_load * docs/platform-faq: Start Platform FAQ page with bullet points on Platform vs SDK (#5914) * platform vs sdk faq page * add data and data providers faq section and some style cards * typo * makes changes as per reviews * openbb-nightly as a way to install everything * jupyter-lab instead of jupyter --------- Co-authored-by: Henrique Joaquim * hotfix/backend - Initialize OpenBBFigure (#5912) * create backend * openbb_figure * black * pylint * pylint again --------- Co-authored-by: Henrique Joaquim * hotfix/yf-futures-historical: yfinance historical futures multi-ticker support and symbol parsing (#5923) * multi-ticker support for yfinance futures historical * raise-missing-from * integration test params * equity_historical adjusted kwargs * pylint unused argument * Docs/excel examples (#5920) * regen excel md * add syntax + basic example * fix example * create json with docs map * update docs to latest functions.json + remove tiingo * remove space from examples * minor fix * remove spaces * remove spaces * bug fix: remove folder before generating * fix typo * add link to appsource * fix * Update templates.md * regenerate content * change docs colors * fix light mode * add back tiingo * update functions.json * templates go later * remove Library from reference * Make the excel markdown being generated at runtime * fix reference cards having commands under menu * remove excel/reference folder since this is built at runtime by gh-pages action * black formatting * improve title * add excel to the main page * add excel image bg * make excel sidebar show up next to pro * improve main page * small fix for platform page title * update basics page * add tip to autocomplete --------- Co-authored-by: DidierRLopes * Re-record tests and fix symbol bug (#5924) * Re-record tests and fix symbol bug * nordvpn us ftw * @IgorWounds says "SPY >> IOO" --------- Co-authored-by: Pratyush Shukla * Docs/bug fix (#5926) * fix pro link * fix wrong example * Introduces a limit argument for the `equity.fundamental.trailing_dividend_yield` endpoint (#5925) * introduces a limit argument for the equity.fundamental.trailing_dividend_yield endpoint * add default args to test * Add json_schema_extra to openapi.json (#5930) Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * feature/standardize-quote: Proposal to Standardize EquityQuote (#5922) * standardize EquityQuote * intrinio reference * rogue comma * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * hotfix/fmp-rev-segments: Adds Fiscal Period to busines/geographic segments revenue. (#5921) * add fiscal_period to revenue by geography and business line * data description and unused imports * update test cassette * Allow multiple symbols `equity.profile` (#5929) * allow multiple symbols * pylint * pylint ignore position * change callback to helper func --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim * Add filtering to AV historical price (#5928) * add filtering to av historical price * lints --------- Co-authored-by: Pratyush Shukla * Fix vwap FMP error (#5936) * Fix vwap FMP error * Linting * Painlint * Add date filter + symbols to comp (#5931) * add date filter + symbols to comp * make sure year is in d * tests fix * Improving Platform's import time (#5894) * missing decorator * missing optional statements * us-gov to optional and right position * removing redundant call * lazy load mappings * docstrings * introducing the extension loader class * misleading docstring * using the extension loader on the router * using the extension loader on the credentials * docstrings * lazy load of entry points * checkout dev_install * using the extension loader to get the entry points instead of recalling the function * improved auth service and charting service * using the extension loader on the registry * typos * adding properties to extension loader for easy access * using the extension loader on the package builder * avoiding circular imports by using forward references * fix charting service tests * test for the extension loader * Update openbb_platform/core/openbb_core/app/model/credentials.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/app/router.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/provider/registry.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * adjustments --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Disable auto_build on test run (#5937) * Disable auto_build on test run * Move to conftest * Update excel docs (#5940) * update basics * update reference generator * Categorize release notes based on labels for OpenBB Platform (#5943) * Categorize release notes based on labels for OpenBB Platform * Add environment variable for GitHub token in labels-PR.yml * Update labeler.yml to use "enhancement" label for feature branches --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Custom deprecation message in API endpoints and Python commands (#5942) * add custom deprecation message feature in routers * add custom deprecation message feature in package builder * using an actual DeprecationWarning instead * fix tests --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: hjoaquim * Hotfix/remove unused workflow (#5945) * Disable auto_build on test run * Remove unused workflow * Revert * Hotfix/fix typo (#5948) * Disable auto_build on test run * Fix typo * Revert * docs/data-models-url: Fix URLs on Development Page (#5944) * fix url to the standard models * github links * `equity.fundamental.dividends`: allow filter by date (#5932) * allow filter by date * ruff * pylint * fix tests --------- Co-authored-by: Pratyush Shukla * Create Excel templates page (#5947) * create templates page * Update index.mdx * fix description * update card * remove clsx * Update index.mdx * Update index.mdx * Update index.mdx * Update index.mdx * min height * min height * improve excel docs and point towards hub --------- Co-authored-by: DidierRLopes * hotfix/intrinio-dividends-limit: Fix Limit Param Alias (#5951) * fix limit param * pylint unused argument, recapture test cassette --------- Co-authored-by: Pratyush Shukla * Docs/remove core refs (#5957) * remove references to core: PathHandler + ProviderInterface * remove unused function * add comment * regenerate * fix a few examples * add comment * rename file * Excel tutorials on the docs (#5956) * update workflows name to tutorial * update title * get barebones to bring in Excel videos * tutorial excel videos in * hotfix/float-values: Convert Intrinio balance sheet values to float type (#5961) * convert intrinio balance sheet values to float type * unused import * typo in alias dict * Update to OpenBB Add-in for Excel (#5965) * Log custom headers (#5966) * add custom headers * fix: send on startup and defaults * pylint * unittests * move government-us to community in dev_install (#5963) * fix: adds logic to check whther user is logged in on hub (#5941) Co-authored-by: Luqman * hotfix/fix-company-filings: Fixes too many mandatory fields. (#5909) * Fixes too many mandatory fields. * black * black again --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: James Maslek * `equity.estimates.price_target` - Integrate with Benzinga (#5946) * deprecation message * fix lints * adding equity.estimates.ratings and fmp as its provider * unit tests for fmp * removing unused file * typos * add benzinga to AnalystRatings * revert changes to estimates router * moving it to price target instead * reverting changes * fmp support for multiple ticker * benzinga price target * ruffy * unused argument * fix type hints * tests for the new fetcher * new integration tests * fixing tests * missing std arg --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [DEPRECATION] `index.market` renamed to `index.price.historical` (#5962) * deprecate index.market and add index.price.historical * add index.historical standard model * add index.historical provider models * index extension tests * provider tests * linting * bug fix (#5969) * Uppercase excel reference (#5958) * uppercase reference * fix name header * add tab title * remove reference excel folder * add to gitignore excel reference files --------- Co-authored-by: DidierRLopes * move templates (#5970) * Release 4.1.1. (#5964) * update dev_install * fix effr test * Update dev_install.py * fix fundamental balance test * fix equity price historical test * fix price target model * black * rebuild static files * update publish.md * fixed dev_install * update publishing doc * updated `openbb-core` to 1.1.1 * updated extensions * updated providers * updated `openbb` package * updated static extension map * updated publishing doc * fixed toml for `openbb-finra` * @jmaslek yfinance IS DEFAULT * updated static --------- Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim * Fix link to discord channel (#5910) Co-authored-by: James Maslek * Fixing Posthog handler for thread safety (#5968) * fixing posthog handler for thread safety * removing loggging init from the global scope - per sensei juan --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update labeler.yml and labels-PR.yml (#5974) * hotfix/ allow multiple `identify` calls (#5976) * allow multiple `identify` calls * Update posthog_handler.py * regex out any invisible control character from sales_conditions field (#5977) * docs/http-requests: Contributor Guide For Building HTTP Requests (#5973) * contributor guide for http requests * add a docstring * add section on get_querystring * extra space * add note for people installing PyPI in a zsh terminal shell --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/add-yfinance-functions: Add equity.profile for yFinance (#5978) * equity profile for yFinance * pylint * equity quote * unused imports * remove yfinance from extras in toml (#5982) * Release OpenBB Platform v`4.1.3` (#5983) * fixing pyproject.toml * adding pandas-ta to technical package for publishing * bumping technical * test for pyproject toml * feature/cboe-async: Refactor Cboe for Async (#5900) * refactor cboe for async * codespell * unused imports * pylint * more pylint * platform metadata * classmethod decorator * test params * intrinio quote * test param names * date in test needs to be a datetime.date not string * make fmp unix timestamp tz-aware and normalize percent change * different way of parsing datetime string * recapture cboe equity historical test * unused import * index snapshot update * black * extension map * pylint * cboe pyproject.toml * proposal to standardize equity_quote * one more file * removing changes on static assets * index_historical * index_historical again * last_time -> last_timestamp * obsolete router path * fix tests * test param * restore market index deprecation that I forgot about * fixing tests --------- Co-authored-by: hjoaquim * Fix typo in website/README.md (#5980) * Fix typo in website/README.md * Update linting.yml * Update linting.yml * Update linting.yml * Change ref conditions * Update linting.yml --------- Co-authored-by: Luqman Co-authored-by: Luqman * Hotfix/th etfs (#5959) * added etf trading hours * black formatter --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: Luqman * feature/finviz-provider: Adds Community Finviz Provider Extension (#5952) * add finviz provider * recapture tests * recapture tests again? * invalid test param * static packages * units_measurement -> unit_measurement * static packages as core only * openbb_core version bump in pyproject.toml * try adding user-agent to test response * fix tests * linting * provider model cosmetic changes * fix install script and typo in openbb toml * static * fix: re-record unittests * empty data error * definitions as a file --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla Co-authored-by: Diogo Sousa * Add support for multiple symbols on `obb.equity.price.historical` (#5984) * av - support for multiple symbols * tiingo - support for multiple symbols * include symbol only if necessary * update extension descriptions page (#5985) * remove useless file (#5991) * added symbol to headers (#5981) Co-authored-by: Pratyush Shukla * Fixing Docs Typos (#5955) * fixed typo * fixed stocka typo --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: James Maslek Co-authored-by: DidierRLopes * fix nasdaq test cassettes (#5989) * don't include `custom_headers` in openapi schema (#5994) * hotfix/intrinio-index: Drop None Rows From intrinio Historical Index (#5987) * drop None rows from intrinio historical indexes * add empty data error * static assets * hotfix/insider-trading: Fix #5988 (#5990) * fix validation errors * empty strings * validator --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: teh_coderer * CI listing quick fix (#6002) * BIGGGG LINTING * fixing lints * fixing lints * black * very ruff * no export * fix hedge_view again * lints * platform lints * lints * black * black it @hjoaquim * fix some more linting --------- Co-authored-by: hjoaquim * Release `openbb-finviz` `1.0.0` to the public (#6000) * set version to `1.0.0` * Set correct dep version in main package * Add `finviz` to table * Auto Labelling for OpenBB Excel Docs Changes (#5998) * Update pull request labels * Update labeler.yml with new label for Excel files --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Support for custom examples in router commands (#5993) * Disable auto_build on test run * Add support for custom router examples * Revert odd file change * Fix API pollution * Refactor examples with @montezdesousa * Check if model is inside the PI * Fix * feat: add & fix examples (#6001) * feat: add & fix examples * fix: ruff + comment * feat: read parameter pool from file * feat: typing + unit test * Disable auto_build on test run * Add field order to OBBject * Revert * lint and revert * fix test --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Diogo Sousa * hotfix/intrinio-options-date: Fix comparing values between str and datetime (#5997) * fix compare between str and datetime * unused argument * get_weekday * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Field order added to the OBBject extra as preference (#5999) * Disable auto_build on test run * Add field order to OBBject * Improvements * Remove noxfile * Disable auto_build on test run * Add field order to OBBject * Revert * lint * Add docs * Not sure how this happened * lint * Update `openbb-devtools` (#6008) * update deps * unpinned package versions from gh linting action * codespell * updated black dependency * linting * linting * linting * pin codespell version * black * black again * install devtools in linting action * format w new black (#6009) * format w new black * format w new black * black again * black the terminal * ignoring unused arguments --------- Co-authored-by: Pratyush Shukla * remove reviewpad (#6010) * Remove Ultima provider (#6012) * Add OECD unemployment (+more) + data cache idea (#5917) * Add OECD unemployment + data cache idea * Docstring edits * Tests * Add composite leading indicator * i truested ruff --fix too much * Add short + long term interest rates * pylint * pylint2 * was not committing. my b * add csv cache + make it default. remove pyarrow from poetry * Clean up * Didnt run on this file. My bad * Why was this ignored /shrug * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/improved pr template (#6018) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * better pr templates * developer template * [Feature] - Custom deprecation (#6005) * custom deprecation * custom deprecation * using the new deprecation * custom deprecation on the package builder * remove comment * ruff * black * static assets * tests * using parametrization instead * test for deprecated endpoints (#6014) * Deprecation warning on the reference docs (#6015) * typo/fix * bring back methods needed for markdown generation * add deprecation warning to docs * contributor docs for deprecating endpoints - tks @deeleeramone * small changes on publishing procedure per @the-praxs * moving the deprecation summary class to deprecation file instead * explanation on class variables * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update openbb_platform/openbb/package/index.py Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * deprecating on 4.3 instead @the-praxs --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla * [BugFix] Fix package builder (#6022) * fix: remove specific imports * adjustments for correct deprecation * static assets --------- Co-authored-by: hjoaquim * [Feature] Add support for multiple tags in `historical_attributes` and `latest_attributes` (#6013) * historical attributes standard model - * add support multiple tags * add `tag` field in data * add support for multiple tags in historical attributes * set correct return type in `callback` function * latest attributes standard model - * add support for multiple tags * add `tag` field in data * add support for multiple tags in latest attributes * add test params for the attributes endpoints * add support for multiple `symbol` and add `symbol` field in the data * modified code to fetch data from multiple symbols and throw warning as per @deeleeramone * add params for testing multiple symbols * linting * fix test params * fixed condition to check if its a `Dict` type * updated intrinio fetcher tests for the statements * updated static * [feature]: feature/overview-to-profile: Deprecate `equity.fundamental.overview()` and move to `equity.profile()` (#6011) * fmp overview to equity profile * deprecation warning * urls * wrangle fields * black * pylint unused argument * insert additional securityID fields to standard model * custom deprecation using OpenBBDeprecationWarning * typo - need to have the deprecated=True flag * static assets * fix non related test * minor adjustment - removing the need for the try/except block - using the get and pop removes the need for key existance checking. cc @deeleeramone --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim * [BugFix] - Remove duplicate code (#6025) Co-authored-by: Pratyush Shukla * remove `SectorNews` from router and standard models (#6026) * feature/more-yfinance: Adds some more to openbb-yfinance (#5979) * equity profile for yFinance * pylint * equity quote * unused imports * price target consensus * add currency field * add share_statistics * don't append empty result to results * key executives * missing definition in key_executives * pylint * key metrics * add currency to key metrics * add etf_info * rename trailing_annual_dividend -> dividend_rate_ttm * add institutions count to share_statistics * add historical dividends * add logic for start-end dates to historical_dividends * recapture the test..? * funny test * filter on tests? * record test with clean cache..? * year_price_change -> price_return_1y in key_metrics * black * make descriptions clear for beta and dividend_yield fields * add description field to standard model * updated static * clear description of shares_implied_outstanding field * updated static for equity * clean descriptions --------- Co-authored-by: Pratyush Shukla * feature/commodities-lbma-fixing: Adds Commodity Extension and LBMA Gold/Silver daily fixing levels (#5760) * add commodity extension and add lbma fixing endpoint * dev_install.py * readme url * renovate the standard model * makes a query_params model for nasdaq data link * literal not optional * unused imports * missing test params * test cassette * DataLink query param description * test file import * actually fix import * from openbb_core.provider..... * ruff * another import statement * black * async router * move query_params * update version * version numbers * extension_map * satisfy pylint? * pylint * Update pyproject.toml * black * poetry lock * Update extension_map.json * Update __extensions__.py * Update module_map.json * clean descriptions --------- Co-authored-by: Pratyush Shukla * Improve UX for `obb.news` (#5986) * adding date,start_date and end_date to std params * add date to special params which should've another type * change types to dateType * change helper to accomadate changes in types * date filtering * using the date filtering for all providers * date params on the std model instead * adding the right type * filtering dates on world news * integration tests * fix descriptions * static assets * black * Revert "black" This reverts commit 7288b59f87e1b0816733a96ce77fb96e13dcf0e3. * lint * addressing @montezdesousa suggestion: removing qua 31 jan 2024 15:01:20 WET from standard models and using it only on benzing * tests accordingly * static assets * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Improve Standardization - `IndexHistorical` (#6030) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * fix tests * keep the skip * fix test * [Feature] - Refactor Response Model (#6024) * Start refactor with @montezdesousa * feat: add response model inside openapi_extra * feat: find+replace return types * fix: ruff * Feature/api response by provider (#6029) * init * Update router.py * Update registry_map.py * check dicts * lint * exclude provider on data model for package build * `results_type_repr` logic for `Annotated`, ignore provider field in `_extract_data` --------- Co-authored-by: Diogo Sousa Co-authored-by: teh_coderer * [BugFix] - Improve Standardization - `CotSearch` (#6031) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * keep the skip * fix test * adding missing param * fix tests accordingly * Docs/byod (#5996) * add byod to reference * fix: rename add-in name * feat: add data conectors page * fix: additional notes * tiny tweaks * update functions.json and openapi.json * fix: fix bug in hedge controller * fix: another bug hedgecontroller * black --------- Co-authored-by: DidierRLopes * Feature/ex-dividend: Renames "date" columns as "ex_dividend_date" for Dividend Calendar and Historical Dividends (#6006) * date -> ex_dividend_date * nasdaq historical dividends * black * pylint * intrinio alias_dict * dividend_currency -> currency * yfinance field name --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Adds a timezone to the Unix timestamp conversion to correct localization errors. (#6023) * fix: remove specific imports * make polygon historical tz-aware * undo including that commit * that PR wasn't supposed to be there. * pylint unused argument * fix polygon crypto historical intervals * pylint * new cassette * fix the rest of the polygon historical price query params * black * pylint.. * integration test param * appease daylight savings handling * paginate for crypto currency and index * black * raise EmptyDataError when no results instead of returning an empty list * ruff --------- Co-authored-by: Diogo Sousa * Hotfix/wrong pydantic validator (#6037) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * Use field_validator instead * fix openapi schema fields `to_snake` (#6036) * Fix data connectors link typo (#6038) * [BugFix] - Improve Standardization - `EquitySearch` (#6033) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * use_cache as std * adjust tests * keep the skip * re-record test * black * Docs / only display results for current platform (#6017) * Update index.js * Update index.js * yfinance * tzcache no longer exists * fixxy * ruff --------- Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek Co-authored-by: Andrew * Improve the docstrings (#6040) * Improve the docstrings (#6041) Co-authored-by: Henrique Joaquim * dont run base tests with v4 label (#6046) * Sync excel reference (#6039) * sync excel reference * fix: change delimiter to comma * feat: update data connectors * test skipping wf * Update unit-test.yml * Update unit-test.yml * test skipping wf * watch label changes * Update unit-test.yml * [Enhancement] - Improve `news` router docs and examples (#6047) * better docs * static assets * Feature/platform standardization notebook (#6049) * Add platform standardization overview notebook to examples * Add py.typed marker to openbb-fred * [Enhancement] - Improve `currency` router docs and examples (#6045) * currency search * reference rates * historical price * static assets --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * display warnings based on preference (#6051) * [Enhancement] - Improve `crypto` router docs and examples (#6048) * crypto search add validation for '-'-separated pairs * set default query value to None * improve /crypto description with custom examples * improve /crypto/price/historical description with custom examples * updated static for crypto menu * ignore line too long * linting --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Final Implementation of Changelog V2 (#6050) * Updated the release drafter to process the released changelog for OpenBB Platform * Update release drafter configuration * Add OpenBB Documentation Changes and Create Release * Update process_changelog.py path in draft-release.yml * Update release-drafter version and save changelog * Copy changelog with python * Update draft-release.yml to save Changelog * Update draft-release.yml * Encode and save Changelog to Base64 * Update Changelog saving method * Update Changelog format * Update CHANGELOG.md with release notes * Fix draft release workflow * Add cat command to print CHANGELOG.md * Add platform-drafter.yml and update release-drafter.yml and draft-release.yml * Commented out config-name in release-drafter step * Update branch name validation and process_changelog.py * Refactor process_changelog.py to improve readability and maintainability * Refactor process_changelog.py to handle file I/O errors and remove duplicate PR entries --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * improve discriminator logic, fix package return type docs (#6052) * improve discriminator logic, fix package return type docs * Update registry_map.py * build package * Update registry_map.py * defaults * Update registry_map.py --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add LLM tools example notebook (#6053) * Add LLM tools example notebook * Update README, rename example notebook --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Remove the preference (#6055) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * [Feature] - Standardise multiple symbols input (#6056) * feat: remove list of str * fix: update cpi * package builder + cpi * build * fix: update unittests * fix: check_item * fix: unittests * Improve the docstrings (#6057) * update economy router docstrings (#6058) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix OECD Long Term Interest Rate (#6060) * fix long term interest rate * pylint unused argument * [Bugfix] - Fix economic calendar country (#6059) * fix economic calendar country * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [HotFix] Index Router Docstrings & `sp500_multiples()` Cleanup (#6063) * sp500 multiples cleanup * remove dict from standard model * static pacakge * pylint * [Feature] FMP Current Holdings (#6043) * add fmp current holdings to etf holdings * pylint unused argument --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Replace symbols in company/news (#6061) * feat: replace symbols in /news * fix: integration tests * fix: integration tests api * fix: typo * Update test_intrinio_fetchers.py * [Enhancement] Add function examples to router. (#6042) * options router * fixedincome router * futures router * missing comma * static assets * futures router --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] Add function examples to Regulators Router (#6054) * options router * fixedincome router * futures router * missing comma * static assets * futures router * sec router * cftc router * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix World News (#6064) * fix fmp * fix intrinio * fix biztoc * actually commit intrinio fix * fix tiingo * unused import * fix tests * black * ruff * benzinga empty strings * codespell * fix test? * more empty strings --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - remove unused validators from standard models (#6067) * update standard models * lint * Update USD Liquidity Example Notebook for V4 (#5902) * Update USD Liquidity Example Notebook for V4 * delete some v3 text in the copperToGold * Update README.md * findSymbols preview image * Google Colab preview image * financialStatements preview * content tsx file * ### title * convert tsx to json * indent size * double quote keys.json * trailing commas * Update content.json * patch --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix QA Examples (#6072) * [Feature] - Ensure Bugfix branches can only do PRs to `develop` branches (#6073) * bugfix branch name checks and few fixes on the linting not to run on pushes to branches outside PRs * Update branch naming guidelines link --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/charting obbject (#5938) * fix circular import issues on the obbject extension framework * settings available on the obbject * extension init * charting assets and code * introduce to_chart functionality * removes the to_chart method from obbject in detriment of the one from the obbject extension * Update openbb_platform/obbject_extensions/charting/charting/__init__.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * fix on the show method * adding the example to the to_chart docstring * copying the exsting README from charting extension - needs to be revamped * moving to openbb_charting instead * update the pyproject.toml file * pydocstyle * versions * better docstrings * making accessors public * removing unnecessary credentials variable cc @montezdesousa * removing access to extra/metadata and use designated private attrs instead * Fixes linting for the logging service (#5992) * lints * typing.Type instead * deprecating ChartingService to use the new extension instead - adding function discovery capabilities using it * tests for the obbject charting extension * removing charting service from command runner * filter functions not implemented in the module * remove charting service tests * removing charting service on the tests for int tests * charting integration tests * removing charting service file * removing old charting extension code * revamp builder * fix obbject tests * fix command_runner tests * removing openbb_figure_table * better website docs * reviewed readme * unsetting api key for posthog (pywry) windows * added debug_mode to the system settings * removing api key * update nightly script * fix tests * black * black * Revert "black" This reverts commit 21d76ad689087b4ad38cec55667186263363c89f. * Revert "black" This reverts commit 0904653fd73518c0d345a82f91f4cb06cfa84cb6. * black for henrique * returning a list instead * better docstrings * removing unnecessary indicators docstring * typo * black * intentional access to protected member * changes to publish script * filtering deleted files * black * adding render argument * fixing the df_to_basemodel function: it should include the index in the columns either if flagged or if the index is named * adding the hability to add you own data to to_chart method * tests * black * disable protected access * accept kwargs to eg. save image * adjustment cc Igor * add if statement for protection * remove unused return typing * fix technical charting views * better error message cc @IgorWounds * better structure and fix test * Revert "better structure and fix test" This reverts commit 612ea6117ce064d5e41f74e72e171646be614408. * Revert "better error message cc @IgorWounds" This reverts commit 3d7ee53878b7742d187e83f7e5d4c27438aa40ef. --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix CAPM example (#6075) * Start removing dead v3 commands for deprecation (#6070) * Yeet tokenterminal * Yeet crypto/onchain/hr and gwei * yeet luna * yeet coinglass * yeet dps/ctb * yeet reddit * yeet covid * actually not yeeting hide yfinance future warning * yeet options/hedge * not yeeting. i18n words * something happened on accident * still fixing * git reset/git checkout -f 2516cfbc72d23a7656715314ea94cc34d4c994ee website/content * still not sure whats going on * Edit workflow to not look at deleted files + change bootup message * Dont pin the workflow to my branch always lol * Remove askobb * [Feature] - Comma separated string and list inputs (#6062) * feat: balancesheet * feat: income statement * fix: cash flow statement * feat: financial ratios * feat: reported financials * feat: revenue business line * feat: revenue per geography * fix: warnings * Update balance_sheet.py * fix: remove warning imports * feat: balance sheet growth * feat: calendar ipo * feat: cashflow growth * feat: __validators__ * fix: typing * fix: validator msg * feat: trailing dividend_yield * feat: short volume * feat: share statistics * feat: price target + consensus * fix: update validator * feat: historical dividends * feat: key executives * fix: getattr directly * fix: type hint validator * fix: add default to getattr * typo * feat: otc * feat: options chains * fix: remove list validators * feat: add validator dict to fetchers * lint * update standard models * lint * feat: rename validator * fix: ownership * feat: query params description * fix: balance yfinance * key execs, income statement * remove change * fix: revenue geographic * fix: disable pylint * fix: unusual + balance * unit test validator * minor fix * explicit validators * update test * feat: multiple items allowed * rebuild * move check_single_value * crypto historical * order providers * fix typing * rename extra dict * marking multiple items allowed * Revert "marking multiple items allowed" This reverts commit 7da04817e18b2c9e373ffde9134f3949d11f58dd. * error msg * fix: default provider runtime vs configuration * minor fix * docstring * revert default changes * get provider before executing cmd * fix container bug * clean filter * add comment * prevent bad defaults * update docstring * typing * fix * black * fix docstring generation * [Feature] - Mark multiple item fetchers (#6074) * feat: price target * bezinga company news * equity quote * marking multiple items allowed * more multiple items * black * rebuild * another batch * rebuild * another * cpi * move prop * rebuild --------- Co-authored-by: hjoaquim * rename var * update msg * rename func * fix test * mypy * ruff --------- Co-authored-by: hjoaquim * [Feature] Add Regional Data Endpoint from FRED (#6071) * add regional data endpoint from FRED * codespell * ruff * sort imports * add provder='fred' to integration test * thought I already sorted those imports.. * pylint.. * more test params.... * even more test params... * even more test params.... * static assets * reconfigure params * ruff * alias dict * recapture cassette * router doctstring --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Fix most integration tests (#6082) * Fix most integration tests * Lint * Fix price_target column for Benzinga (#6083) * Release/4.1.4 (#6081) * static assets * patch version increase * core update * bumping versions * bump finviz version * bump versions * bump versions on package.extension --------- Co-authored-by: James Maslek * Add dates to /quantitative as needed. (#6078) * Add dates to /quantitative as needed. Run new black * Fix tests * Pycharm is weird sometimes * uncommit * Add default window + error handling + mistake --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add end point: `etf.equity_exposure()` with FMP provider (#6079) * add etf.equity_exposure from FMP * empty data error * recapture cassette * pylint unused argument * Fix router example typo * fix test...? * static file to fix test? * fix test..? * __json_schema_extra__ * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [BugFix] Fix Equity Integration Tests (#6086) * fix equity integration tests * black * pylint * black * black * move df_apply to helpers * unused import * remove file that shouldn't have been added * oops. didn't remove a couple lines * [Enhancement] Add `analyst_search` to the Equity/Estimates Router (#6088) * standardize price_target * add analyst search * black * more black * ruff * linter, test parmas * last missing param * get rid of convert to upper * ruff * pylint * [BugFix] - Fix POST docstring examples (#6095) * Fix POST docstring examples. * Move router examples to command decorator * [BugFix] Fix `treasury_rates()` (#6092) * fix treasury_rates * drop rows with no data --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * clean up the remains from my yeeting (#6089) * clean up the remains from my yeeting * was not careful * Add ETF examples (#6102) Co-authored-by: Pratyush Shukla * [BugFix] Fix integration tests (#6100) * fix int tests * fix obbject int tests * fix quant tests * fix index tests * use python 3.10 instead * remove cache * end_date < start_date * [Enhancement]: Add TMX data provider extension. (#5913) * dev install * add TMX provider extension * normalize ytm and coupopn_rate values * black * codespell * ruff * black again * pylint * ftw * undo what Pylint thinks is best * more black * renovate insider_trading standard model * fix tests * typo * tests * empty string * pylint unused argument * nans for some reason * black * static files * static files with openbb-tmx installed this time * yfinance TypeError..? * NA -> N/A * update for version bump * list exchange-calendars as tmx dependency * eod chains date -> eod_date * new line * not that file * more black * one more black * fix weird merge thing * ruff * index constituents params * insider trading * fixing things * black * black AGAIN * news integration params * the other missing param * ruff * historical dividends field update * add json_schema_extra * gainers * symbols -> symbol * company news symbol * unit test param * review items * wrangle a rogue field * index router example * company news thing - symbols -> symbol * field name map --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek * [Feature] - OBB.GET (#6097) * create OBB.GET and data slicer page * remove quotes * format description * wording * functions.json * sidebar position * remove if stamente * [Docs] Remove Reference to `to_chart` in OBBject. (#6096) * remove reference to to_chart in OBBject. * put chart description back in OBBject properties * [Feature] - Create openbb assets folder (#6101) * create openbb assets folder * fix unittest * rebuild --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fixes to_df() where the date series contains multiple TZ-offsets. (#6099) * allow mixed utc offset in a tz-aware date column * enforce ascending from all providers for price.historical * fix tests * add comments and apply treatment to basemodel_from_df before JSON output * yfinance consistency * add unit test * add unit test * better test * ruff --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update the quantitative extension to make more sense (#6087) * Split out a rolling submenu for the rolling functions * Make a performance and a stats submenu. * Test the statistics functions * lint * lint * dupe test * pylint * ruff * Try tests quick * black magic signature funcs * fix my custom tests * Fix the existing imports/urls * push the api update * okay I figured out whats going on * this should be all of them * Correct docstringing examples --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Fix ECB Yield Curve (#6108) * fix ecb yield curve * standard model update * Update unit-test workflow to check for changes to openbb_platform (#6109) * [Bug fix] - Fix package mypy (#6110) * fix: package mypy * types * black * [Feature] - Equity router descriptions & examples (#6103) * feat: equity/calendar * feat: compare router * fix descriptions * darkpool + discovery * fix paragraph issues * fix descriptions * fundamental part 1 * fundamental part2 * transcipts * ownership * fix * price * shorts * Update darkpool_router.py * minor fix * shorts examples * examples * ruff * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Add `except… * Remove terminal CI actions (#6221) * remove ultima + althub * move twitter keys * Build + remove v3 docs * Delete terminal lints * Remove builds + remove terminal nightly * more builds + website gen * more terminal actions * [Feature] Intrinio ETF Price Performance (#6220) * remap to etf router * add the intrinio files this time * update standard model * the rest of the changes * static files * black * pylint * test thing * black * fix test? * try another way? * ruff * maybe? * new cassette? * Remove old tests (#6222) * remove ultima + althub * move twitter keys * Remove old tests * add Intrinio ETF Holdings (#6208) * Update the main README (#6225) * remove ultima + althub * move twitter keys * README update * html was overkill * [Enhancement] Adding an interface to read the reference (#6224) * unused constant * reference loader class * making the reference loader available through the coverage * adding unit tests * using the setup and teardown --------- Co-authored-by: Pratyush Shukla Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Volatility Cones Chart (#6226) * add volatility cones to charting extension * test params * [Docs] Refactor Contributing Section Of Docs (#6173) * development index * refactor development section of documentation * codespell * add template zip file * fixing * update changed syntax * dependency thing * fix sentence * review edits, add_toolkit_extension * Add ZIp file * headtitle * couple more things * codespell * fix sentence * url fix * review updates * forgot one file in the commit * syntax updates * json file * more syntax things --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [Docs] Add Streamlit News Dashboard To Examples (#6158) * add streamlit news dashboard example * black * ruff * now black again * import block? * ruff puts it back to exactly how it was before * try running linters again * noqa it is --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [Feature] Add Charts For FRED Series (#6234) * add fred_series charts * pylint * [Feature] Add Intrinio to `obb.equity.market_snapshots()` (#6232) * add intrinio to equity market snapshots * field definitions * map date * static files * black * date check * test cassette * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Merge Fix FMP Intraday (#6229) From Main (#6235) * [Critical] Sync `main` with `develop` (#6202) * feature/intrinio-equity-search: Adds Intrinio to `obb.equity.search()` (#5863) * intrinio equity search * integration tests * test --------- Co-authored-by: James Maslek * feature/yfinance-multi-ticker: Adds support to openbb-yfinance for multi-ticker download. (#5845) * yfinance multi-ticker support * multi-ticker support for market indices * crypto multi-ticker support * recapture tests * yfinance cache and tests * currency historical multi-ticker support * style things * black * missed a values --------- Co-authored-by: James Maslek * Feature/us-treasury-prices: Adds Treasury Prices to Fixed Income (#5776) * add treasury prices endpoint to fixed income router * adds tests * black * ruff * import statements * standard model imports * black * some cleanup * black * async router * make async * str outpuot * bytes object not string * docstring typo * multi-line f-string * encoding * duplicated conditional * black --------- Co-authored-by: James Maslek * feature/sec-etf-holdings: Adds ETF holdings from SEC provider (#5757) * add ETF holdings from SEC provider * black * helper function params * edge cases * ruff * add validator in company filings * remove xml field * update import * cleanup parsing * missing datetime import in company_filings * black * unused import * add missing py.typed files * feature/nasdaq-equity-search: Adds Nasdaq provider for `obb.equity.search()` (#5790) * add nasdaq to equity search * black * unused import * make async --------- Co-authored-by: James Maslek * Excel docs (#5870) * first test * remove old reference * bring this file back * generate sidebar and write empty mds * generate index.mdx * get description from cmd_lib * fix reference card error * rename file * generate markdown * regen * add last+hist * update pages with seo metadata * format types * small fix * css sux * add usage placeholder * set hidden by default * nah * add cmds and menus to reference * lint * fix/Users/diogosousa/opt/anaconda3/envs/platform/bin/python /Users/diogosousa/OpenBB/OpenBBTerminal/website/generate_excel_markdown.py * format mds * remove space * fix commands heading * redo folder structure * add back cmd description * move card to var * different main folder * clean * move vars * refer to editor * rename var * done * recreate folder structure * add section: syntax + minor adjustments * remove return type * remove return type * rename api to library * minor fix * remove api folder * remove api folder * formatting * improve basics * basics * fetch functions.json from website * complete basic * change syntax to use semi-colon * basics * basics * remove space in sig * remove sections * add metadata * Update formula builder * add tabs * Update index.md * complete basics and formula_builder * Update index.md * add windows screenshots * restructure folders * regenerate with latest add-in version * move Excel sidebar * rename function and add comment * now it's working * logic * rename folder * Update formula_builder.md * fix * hide excel for now * some explicit typing --------- Co-authored-by: tehcoderer * Make Pro Fetchers async by replacing `ThreadPoolExecutor` with `asyncio.gather` (#5822) * init * Update helpers.py * filter URL on raise * polygon, fmp done, update cassettes * updates * cleanup * revert tests for now * Update discovery_filings.py * Update helpers.py * add `async` overload to `Fetcher.extract_data` * update merged fred models * tests, improve fred series * Update insider_trading.py * insider * tests * intrinio * Update equity_historical.py * implement abstract async extract on Fetcher, with simple switch * cleanup * Update helpers.py * Update helpers.py * fix fmp historical deprecated urls * Revert "fix fmp historical deprecated urls" This reverts commit 1a760a24737ed3d1439472bdb4c47aa778bcce8b. * fix fmp `index.market` 1day url missing query params * Update test_fmp_market_indices_fetcher.yaml * field fixes * `extract_data_async` -> `aextract_data`, `async_request` -> `amake_request` * `async_requests` -> `amake_requests` * Update company_news.py * add sort to index `integration` params * add `client.py` tests * Update equity_search.py * Add lost v in platform api version string * Resolve linter errors here and there --------- Co-authored-by: Theodore Aptekarev * Allow this to be run in parallel (#5872) * Limit mypy v3 linting to only the diff of the PR (#5878) * Use custom parametrize from news menu tests (#5873) * Use custom parametrize from news menu tests * Update Ultima unit test cassettes * Command Schema (#5874) * POC * Filter by provider * pass base_app as parameter * add typing + TODO * fix some typing * Fix unit tests --------- Co-authored-by: Diogo Sousa * Parameterize `obbject.to_df` with `index` and `sort_by` (#5877) * Parameterize obbject.to_df with index and sort_by * unit tests for obbject * keep using the date as default to use on basemode_to_df() --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Changes to the `obb.fixedincome.corporate.hqm()` output (#5876) * changes to the hqm output * typo --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Refactor method in RegistryMap (#5879) * refactor extract_info * add comment --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * remove Literal from providers in OBBject (#5882) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix version (#5883) * Fix version * Fix linter on terminal * Refactor package builder (#5880) * breakdown builder + remove black * rebuild * rebuild * rebuild * rename method * format built code without black * we still lint if it's available * fix existing tests * add linter tests * add black to dev deps * auto_build as instance method * reorder methods * typing --------- Co-authored-by: Henrique Joaquim * small refactor for simplification (#5886) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix bug. Add router test. (#5888) * Fix bug. Add router test. * Simplify * separate pylint between platform + terminal (#5892) * separate pylint b/w platform + terminal * Explicitly set pylint check scope to files in the diff --------- Co-authored-by: Theodore Aptekarev * sync descriptions (#5893) * Add REST API docs page with advanced settings configuration (#5890) * Don't mention docker in a list of python envs * Create a REST API page * Update docs to get api keys from the hub * Update installation instructions * Mention requirement of poetry and toml in source installation section * move rest page up to the top. and add url to google colab example notebook --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix a v3 syntax example (#5891) * Adds federal reserve data points (#5885) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * Check if outdated (#5898) * Add econometrics API tests (#5899) * Docs/excel update (#5889) * update xl docs * update syntax line * update again * Fix pylint scope (#5895) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring * Debug pylint * Adjust the fetch depth --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix `from openbb import obb` asyncio lock in python REPL (#5896) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/financials - PR for working on structure of financial statements. (#5794) * balance sheet draft * balance_sheet draft * cash_flow draft * income_statement draft * intrinio financials * description * period field * ruff * income statement * field * label - gross profit ratio * cash flow statement * investing order * add option for caching to cashflow * add caching to balance and income * typos and update order for financial institutions * replace 0 values with None * add financial ratios from intrinio * black * missing test params * balance cassette * query param description * symbol list warning * black * handle BRK-A and symbols with a dash for Intrinio * fix typo error * add free cash flow to bottom of cash flow statement * amortization_expense * dev_install.py * undo dev_install.. wrong branch * cash flow order things * standardized cash flow * fields * integration tests * cash flow model validator * more polygon cash * black * black * Delete openbb_sdk/providers/polygon/openbb_polygon/utils/definitions.py wrong file * balance sheet * some cleanup * ruff * income statement * black * test params * financial ratios async update * recapture fmp and polygon tests * yFinance financials * yfinance tests * delete financial_statements standard model * intrinio balance sheet order * fiscal year standard param * remove file accidentally committed * add reported_financials end point * fiscal_year param for reported_financials * fix url * fmp test cassette * add safe-guard with warning for fiscal year before 2008 * periods can only be annual and quarter * url in docstring correction * add fiscal_year param to intrinio standardized financials and ratios * fix fmp ratios * black * rename fields as per Minh * rogue field * black * Fix typo in a docstring * Resolve linting errors * type ignore * disable=unused-argument * changing the arg name cc @minhhoang1023 --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev Co-authored-by: hjoaquim * docs/legacy-install: Add warning at top of page - Instructions on this page are for installing the Terminal (#5904) * add warning at top of page - instructions are for installing the Terminal app * pip install openbb-nightly * hotfix/financials-field-maps: Updates A Couple FMP/Polygon Income Statement Fields (#5907) * update income statement fields * another polygon field * ratio -> margin * black * explicit fmp fields * add reported_currency for standardized intrinio * # pylint: disable=unused-argument * another unused-argument * black.. * patch tests * polygon income: eps -> basic earnings per share * re-capture terminal portfolio menu test --------- Co-authored-by: hjoaquim * Fix test (#5916) * Fix test * Skip ultima integration tests --------- Co-authored-by: Pratyush Shukla * hotfix/fmp-price-performance-zeros: Replace returned zero with None and normalize percent values. (#5918) * replace zeros with none and normalize percents * pylint unused argument * Update index.md (#5906) * Release/4.1.0 (#5901) * Hotfix/terminal tests (#5919) * skip supressed arguments * silent way of customly load on quote * specify source for call_load * docs/platform-faq: Start Platform FAQ page with bullet points on Platform vs SDK (#5914) * platform vs sdk faq page * add data and data providers faq section and some style cards * typo * makes changes as per reviews * openbb-nightly as a way to install everything * jupyter-lab instead of jupyter --------- Co-authored-by: Henrique Joaquim * hotfix/backend - Initialize OpenBBFigure (#5912) * create backend * openbb_figure * black * pylint * pylint again --------- Co-authored-by: Henrique Joaquim * hotfix/yf-futures-historical: yfinance historical futures multi-ticker support and symbol parsing (#5923) * multi-ticker support for yfinance futures historical * raise-missing-from * integration test params * equity_historical adjusted kwargs * pylint unused argument * Docs/excel examples (#5920) * regen excel md * add syntax + basic example * fix example * create json with docs map * update docs to latest functions.json + remove tiingo * remove space from examples * minor fix * remove spaces * remove spaces * bug fix: remove folder before generating * fix typo * add link to appsource * fix * Update templates.md * regenerate content * change docs colors * fix light mode * add back tiingo * update functions.json * templates go later * remove Library from reference * Make the excel markdown being generated at runtime * fix reference cards having commands under menu * remove excel/reference folder since this is built at runtime by gh-pages action * black formatting * improve title * add excel to the main page * add excel image bg * make excel sidebar show up next to pro * improve main page * small fix for platform page title * update basics page * add tip to autocomplete --------- Co-authored-by: DidierRLopes * Re-record tests and fix symbol bug (#5924) * Re-record tests and fix symbol bug * nordvpn us ftw * @IgorWounds says "SPY >> IOO" --------- Co-authored-by: Pratyush Shukla * Docs/bug fix (#5926) * fix pro link * fix wrong example * Introduces a limit argument for the `equity.fundamental.trailing_dividend_yield` endpoint (#5925) * introduces a limit argument for the equity.fundamental.trailing_dividend_yield endpoint * add default args to test * Add json_schema_extra to openapi.json (#5930) Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * feature/standardize-quote: Proposal to Standardize EquityQuote (#5922) * standardize EquityQuote * intrinio reference * rogue comma * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * hotfix/fmp-rev-segments: Adds Fiscal Period to busines/geographic segments revenue. (#5921) * add fiscal_period to revenue by geography and business line * data description and unused imports * update test cassette * Allow multiple symbols `equity.profile` (#5929) * allow multiple symbols * pylint * pylint ignore position * change callback to helper func --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim * Add filtering to AV historical price (#5928) * add filtering to av historical price * lints --------- Co-authored-by: Pratyush Shukla * Fix vwap FMP error (#5936) * Fix vwap FMP error * Linting * Painlint * Add date filter + symbols to comp (#5931) * add date filter + symbols to comp * make sure year is in d * tests fix * Improving Platform's import time (#5894) * missing decorator * missing optional statements * us-gov to optional and right position * removing redundant call * lazy load mappings * docstrings * introducing the extension loader class * misleading docstring * using the extension loader on the router * using the extension loader on the credentials * docstrings * lazy load of entry points * checkout dev_install * using the extension loader to get the entry points instead of recalling the function * improved auth service and charting service * using the extension loader on the registry * typos * adding properties to extension loader for easy access * using the extension loader on the package builder * avoiding circular imports by using forward references * fix charting service tests * test for the extension loader * Update openbb_platform/core/openbb_core/app/model/credentials.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/app/router.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/provider/registry.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * adjustments --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Disable auto_build on test run (#5937) * Disable auto_build on test run * Move to conftest * Update excel docs (#5940) * update basics * update reference generator * Categorize release notes based on labels for OpenBB Platform (#5943) * Categorize release notes based on labels for OpenBB Platform * Add environment variable for GitHub token in labels-PR.yml * Update labeler.yml to use "enhancement" label for feature branches --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Custom deprecation message in API endpoints and Python commands (#5942) * add custom deprecation message feature in routers * add custom deprecation message feature in package builder * using an actual DeprecationWarning instead * fix tests --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: hjoaquim * Hotfix/remove unused workflow (#5945) * Disable auto_build on test run * Remove unused workflow * Revert * Hotfix/fix typo (#5948) * Disable auto_build on test run * Fix typo * Revert * docs/data-models-url: Fix URLs on Development Page (#5944) * fix url to the standard models * github links * `equity.fundamental.dividends`: allow filter by date (#5932) * allow filter by date * ruff * pylint * fix tests --------- Co-authored-by: Pratyush Shukla * Create Excel templates page (#5947) * create templates page * Update index.mdx * fix description * update card * remove clsx * Update index.mdx * Update index.mdx * Update index.mdx * Update index.mdx * min height * min height * improve excel docs and point towards hub --------- Co-authored-by: DidierRLopes * hotfix/intrinio-dividends-limit: Fix Limit Param Alias (#5951) * fix limit param * pylint unused argument, recapture test cassette --------- Co-authored-by: Pratyush Shukla * Docs/remove core refs (#5957) * remove references to core: PathHandler + ProviderInterface * remove unused function * add comment * regenerate * fix a few examples * add comment * rename file * Excel tutorials on the docs (#5956) * update workflows name to tutorial * update title * get barebones to bring in Excel videos * tutorial excel videos in * hotfix/float-values: Convert Intrinio balance sheet values to float type (#5961) * convert intrinio balance sheet values to float type * unused import * typo in alias dict * Update to OpenBB Add-in for Excel (#5965) * Log custom headers (#5966) * add custom headers * fix: send on startup and defaults * pylint * unittests * move government-us to community in dev_install (#5963) * fix: adds logic to check whther user is logged in on hub (#5941) Co-authored-by: Luqman * hotfix/fix-company-filings: Fixes too many mandatory fields. (#5909) * Fixes too many mandatory fields. * black * black again --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: James Maslek * `equity.estimates.price_target` - Integrate with Benzinga (#5946) * deprecation message * fix lints * adding equity.estimates.ratings and fmp as its provider * unit tests for fmp * removing unused file * typos * add benzinga to AnalystRatings * revert changes to estimates router * moving it to price target instead * reverting changes * fmp support for multiple ticker * benzinga price target * ruffy * unused argument * fix type hints * tests for the new fetcher * new integration tests * fixing tests * missing std arg --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [DEPRECATION] `index.market` renamed to `index.price.historical` (#5962) * deprecate index.market and add index.price.historical * add index.historical standard model * add index.historical provider models * index extension tests * provider tests * linting * bug fix (#5969) * Uppercase excel reference (#5958) * uppercase reference * fix name header * add tab title * remove reference excel folder * add to gitignore excel reference files --------- Co-authored-by: DidierRLopes * move templates (#5970) * Release 4.1.1. (#5964) * update dev_install * fix effr test * Update dev_install.py * fix fundamental balance test * fix equity price historical test * fix price target model * black * rebuild static files * update publish.md * fixed dev_install * update publishing doc * updated `openbb-core` to 1.1.1 * updated extensions * updated providers * updated `openbb` package * updated static extension map * updated publishing doc * fixed toml for `openbb-finra` * @jmaslek yfinance IS DEFAULT * updated static --------- Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim * Fix link to discord channel (#5910) Co-authored-by: James Maslek * Fixing Posthog handler for thread safety (#5968) * fixing posthog handler for thread safety * removing loggging init from the global scope - per sensei juan --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update labeler.yml and labels-PR.yml (#5974) * hotfix/ allow multiple `identify` calls (#5976) * allow multiple `identify` calls * Update posthog_handler.py * regex out any invisible control character from sales_conditions field (#5977) * docs/http-requests: Contributor Guide For Building HTTP Requests (#5973) * contributor guide for http requests * add a docstring * add section on get_querystring * extra space * add note for people installing PyPI in a zsh terminal shell --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/add-yfinance-functions: Add equity.profile for yFinance (#5978) * equity profile for yFinance * pylint * equity quote * unused imports * remove yfinance from extras in toml (#5982) * Release OpenBB Platform v`4.1.3` (#5983) * fixing pyproject.toml * adding pandas-ta to technical package for publishing * bumping technical * test for pyproject toml * feature/cboe-async: Refactor Cboe for Async (#5900) * refactor cboe for async * codespell * unused imports * pylint * more pylint * platform metadata * classmethod decorator * test params * intrinio quote * test param names * date in test needs to be a datetime.date not string * make fmp unix timestamp tz-aware and normalize percent change * different way of parsing datetime string * recapture cboe equity historical test * unused import * index snapshot update * black * extension map * pylint * cboe pyproject.toml * proposal to standardize equity_quote * one more file * removing changes on static assets * index_historical * index_historical again * last_time -> last_timestamp * obsolete router path * fix tests * test param * restore market index deprecation that I forgot about * fixing tests --------- Co-authored-by: hjoaquim * Fix typo in website/README.md (#5980) * Fix typo in website/README.md * Update linting.yml * Update linting.yml * Update linting.yml * Change ref conditions * Update linting.yml --------- Co-authored-by: Luqman Co-authored-by: Luqman * Hotfix/th etfs (#5959) * added etf trading hours * black formatter --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: Luqman * feature/finviz-provider: Adds Community Finviz Provider Extension (#5952) * add finviz provider * recapture tests * recapture tests again? * invalid test param * static packages * units_measurement -> unit_measurement * static packages as core only * openbb_core version bump in pyproject.toml * try adding user-agent to test response * fix tests * linting * provider model cosmetic changes * fix install script and typo in openbb toml * static * fix: re-record unittests * empty data error * definitions as a file --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla Co-authored-by: Diogo Sousa * Add support for multiple symbols on `obb.equity.price.historical` (#5984) * av - support for multiple symbols * tiingo - support for multiple symbols * include symbol only if necessary * update extension descriptions page (#5985) * remove useless file (#5991) * added symbol to headers (#5981) Co-authored-by: Pratyush Shukla * Fixing Docs Typos (#5955) * fixed typo * fixed stocka typo --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: James Maslek Co-authored-by: DidierRLopes * fix nasdaq test cassettes (#5989) * don't include `custom_headers` in openapi schema (#5994) * hotfix/intrinio-index: Drop None Rows From intrinio Historical Index (#5987) * drop None rows from intrinio historical indexes * add empty data error * static assets * hotfix/insider-trading: Fix #5988 (#5990) * fix validation errors * empty strings * validator --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: teh_coderer * CI listing quick fix (#6002) * BIGGGG LINTING * fixing lints * fixing lints * black * very ruff * no export * fix hedge_view again * lints * platform lints * lints * black * black it @hjoaquim * fix some more linting --------- Co-authored-by: hjoaquim * Release `openbb-finviz` `1.0.0` to the public (#6000) * set version to `1.0.0` * Set correct dep version in main package * Add `finviz` to table * Auto Labelling for OpenBB Excel Docs Changes (#5998) * Update pull request labels * Update labeler.yml with new label for Excel files --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Support for custom examples in router commands (#5993) * Disable auto_build on test run * Add support for custom router examples * Revert odd file change * Fix API pollution * Refactor examples with @montezdesousa * Check if model is inside the PI * Fix * feat: add & fix examples (#6001) * feat: add & fix examples * fix: ruff + comment * feat: read parameter pool from file * feat: typing + unit test * Disable auto_build on test run * Add field order to OBBject * Revert * lint and revert * fix test --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Diogo Sousa * hotfix/intrinio-options-date: Fix comparing values between str and datetime (#5997) * fix compare between str and datetime * unused argument * get_weekday * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Field order added to the OBBject extra as preference (#5999) * Disable auto_build on test run * Add field order to OBBject * Improvements * Remove noxfile * Disable auto_build on test run * Add field order to OBBject * Revert * lint * Add docs * Not sure how this happened * lint * Update `openbb-devtools` (#6008) * update deps * unpinned package versions from gh linting action * codespell * updated black dependency * linting * linting * linting * pin codespell version * black * black again * install devtools in linting action * format w new black (#6009) * format w new black * format w new black * black again * black the terminal * ignoring unused arguments --------- Co-authored-by: Pratyush Shukla * remove reviewpad (#6010) * Remove Ultima provider (#6012) * Add OECD unemployment (+more) + data cache idea (#5917) * Add OECD unemployment + data cache idea * Docstring edits * Tests * Add composite leading indicator * i truested ruff --fix too much * Add short + long term interest rates * pylint * pylint2 * was not committing. my b * add csv cache + make it default. remove pyarrow from poetry * Clean up * Didnt run on this file. My bad * Why was this ignored /shrug * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/improved pr template (#6018) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * better pr templates * developer template * [Feature] - Custom deprecation (#6005) * custom deprecation * custom deprecation * using the new deprecation * custom deprecation on the package builder * remove comment * ruff * black * static assets * tests * using parametrization instead * test for deprecated endpoints (#6014) * Deprecation warning on the reference docs (#6015) * typo/fix * bring back methods needed for markdown generation * add deprecation warning to docs * contributor docs for deprecating endpoints - tks @deeleeramone * small changes on publishing procedure per @the-praxs * moving the deprecation summary class to deprecation file instead * explanation on class variables * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update openbb_platform/openbb/package/index.py Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * deprecating on 4.3 instead @the-praxs --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla * [BugFix] Fix package builder (#6022) * fix: remove specific imports * adjustments for correct deprecation * static assets --------- Co-authored-by: hjoaquim * [Feature] Add support for multiple tags in `historical_attributes` and `latest_attributes` (#6013) * historical attributes standard model - * add support multiple tags * add `tag` field in data * add support for multiple tags in historical attributes * set correct return type in `callback` function * latest attributes standard model - * add support for multiple tags * add `tag` field in data * add support for multiple tags in latest attributes * add test params for the attributes endpoints * add support for multiple `symbol` and add `symbol` field in the data * modified code to fetch data from multiple symbols and throw warning as per @deeleeramone * add params for testing multiple symbols * linting * fix test params * fixed condition to check if its a `Dict` type * updated intrinio fetcher tests for the statements * updated static * [feature]: feature/overview-to-profile: Deprecate `equity.fundamental.overview()` and move to `equity.profile()` (#6011) * fmp overview to equity profile * deprecation warning * urls * wrangle fields * black * pylint unused argument * insert additional securityID fields to standard model * custom deprecation using OpenBBDeprecationWarning * typo - need to have the deprecated=True flag * static assets * fix non related test * minor adjustment - removing the need for the try/except block - using the get and pop removes the need for key existance checking. cc @deeleeramone --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim * [BugFix] - Remove duplicate code (#6025) Co-authored-by: Pratyush Shukla * remove `SectorNews` from router and standard models (#6026) * feature/more-yfinance: Adds some more to openbb-yfinance (#5979) * equity profile for yFinance * pylint * equity quote * unused imports * price target consensus * add currency field * add share_statistics * don't append empty result to results * key executives * missing definition in key_executives * pylint * key metrics * add currency to key metrics * add etf_info * rename trailing_annual_dividend -> dividend_rate_ttm * add institutions count to share_statistics * add historical dividends * add logic for start-end dates to historical_dividends * recapture the test..? * funny test * filter on tests? * record test with clean cache..? * year_price_change -> price_return_1y in key_metrics * black * make descriptions clear for beta and dividend_yield fields * add description field to standard model * updated static * clear description of shares_implied_outstanding field * updated static for equity * clean descriptions --------- Co-authored-by: Pratyush Shukla * feature/commodities-lbma-fixing: Adds Commodity Extension and LBMA Gold/Silver daily fixing levels (#5760) * add commodity extension and add lbma fixing endpoint * dev_install.py * readme url * renovate the standard model * makes a query_params model for nasdaq data link * literal not optional * unused imports * missing test params * test cassette * DataLink query param description * test file import * actually fix import * from openbb_core.provider..... * ruff * another import statement * black * async router * move query_params * update version * version numbers * extension_map * satisfy pylint? * pylint * Update pyproject.toml * black * poetry lock * Update extension_map.json * Update __extensions__.py * Update module_map.json * clean descriptions --------- Co-authored-by: Pratyush Shukla * Improve UX for `obb.news` (#5986) * adding date,start_date and end_date to std params * add date to special params which should've another type * change types to dateType * change helper to accomadate changes in types * date filtering * using the date filtering for all providers * date params on the std model instead * adding the right type * filtering dates on world news * integration tests * fix descriptions * static assets * black * Revert "black" This reverts commit 7288b59f87e1b0816733a96ce77fb96e13dcf0e3. * lint * addressing @montezdesousa suggestion: removing qua 31 jan 2024 15:01:20 WET from standard models and using it only on benzing * tests accordingly * static assets * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Improve Standardization - `IndexHistorical` (#6030) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * fix tests * keep the skip * fix test * [Feature] - Refactor Response Model (#6024) * Start refactor with @montezdesousa * feat: add response model inside openapi_extra * feat: find+replace return types * fix: ruff * Feature/api response by provider (#6029) * init * Update router.py * Update registry_map.py * check dicts * lint * exclude provider on data model for package build * `results_type_repr` logic for `Annotated`, ignore provider field in `_extract_data` --------- Co-authored-by: Diogo Sousa Co-authored-by: teh_coderer * [BugFix] - Improve Standardization - `CotSearch` (#6031) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * keep the skip * fix test * adding missing param * fix tests accordingly * Docs/byod (#5996) * add byod to reference * fix: rename add-in name * feat: add data conectors page * fix: additional notes * tiny tweaks * update functions.json and openapi.json * fix: fix bug in hedge controller * fix: another bug hedgecontroller * black --------- Co-authored-by: DidierRLopes * Feature/ex-dividend: Renames "date" columns as "ex_dividend_date" for Dividend Calendar and Historical Dividends (#6006) * date -> ex_dividend_date * nasdaq historical dividends * black * pylint * intrinio alias_dict * dividend_currency -> currency * yfinance field name --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Adds a timezone to the Unix timestamp conversion to correct localization errors. (#6023) * fix: remove specific imports * make polygon historical tz-aware * undo including that commit * that PR wasn't supposed to be there. * pylint unused argument * fix polygon crypto historical intervals * pylint * new cassette * fix the rest of the polygon historical price query params * black * pylint.. * integration test param * appease daylight savings handling * paginate for crypto currency and index * black * raise EmptyDataError when no results instead of returning an empty list * ruff --------- Co-authored-by: Diogo Sousa * Hotfix/wrong pydantic validator (#6037) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * Use field_validator instead * fix openapi schema fields `to_snake` (#6036) * Fix data connectors link typo (#6038) * [BugFix] - Improve Standardization - `EquitySearch` (#6033) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * use_cache as std * adjust tests * keep the skip * re-record test * black * Docs / only display results for current platform (#6017) * Update index.js * Update index.js * yfinance * tzcache no longer exists * fixxy * ruff --------- Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek Co-authored-by: Andrew * Improve the docstrings (#6040) * Improve the docstrings (#6041) Co-authored-by: Henrique Joaquim * dont run base tests with v4 label (#6046) * Sync excel reference (#6039) * sync excel reference * fix: change delimiter to comma * feat: update data connectors * test skipping wf * Update unit-test.yml * Update unit-test.yml * test skipping wf * watch label changes * Update unit-test.yml * [Enhancement] - Improve `news` router docs and examples (#6047) * better docs * static assets * Feature/platform standardization notebook (#6049) * Add platform standardization overview notebook to examples * Add py.typed marker to openbb-fred * [Enhancement] - Improve `currency` router docs and examples (#6045) * currency search * reference rates * historical price * static assets --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * display warnings based on preference (#6051) * [Enhancement] - Improve `crypto` router docs and examples (#6048) * crypto search add validation for '-'-separated pairs * set default query value to None * improve /crypto description with custom examples * improve /crypto/price/historical description with custom examples * updated static for crypto menu * ignore line too long * linting --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Final Implementation of Changelog V2 (#6050) * Updated the release drafter to process the released changelog for OpenBB Platform * Update release drafter configuration * Add OpenBB Documentation Changes and Create Release * Update process_changelog.py path in draft-release.yml * Update release-drafter version and save changelog * Copy changelog with python * Update draft-release.yml to save Changelog * Update draft-release.yml * Encode and save Changelog to Base64 * Update Changelog saving method * Update Changelog format * Update CHANGELOG.md with release notes * Fix draft release workflow * Add cat command to print CHANGELOG.md * Add platform-drafter.yml and update release-drafter.yml and draft-release.yml * Commented out config-name in release-drafter step * Update branch name validation and process_changelog.py * Refactor process_changelog.py to improve readability and maintainability * Refactor process_changelog.py to handle file I/O errors and remove duplicate PR entries --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * improve discriminator logic, fix package return type docs (#6052) * improve discriminator logic, fix package return type docs * Update registry_map.py * build package * Update registry_map.py * defaults * Update registry_map.py --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add LLM tools example notebook (#6053) * Add LLM tools example notebook * Update README, rename example notebook --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Remove the preference (#6055) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * [Feature] - Standardise multiple symbols input (#6056) * feat: remove list of str * fix: update cpi * package builder + cpi * build * fix: update unittests * fix: check_item * fix: unittests * Improve the docstrings (#6057) * update economy router docstrings (#6058) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix OECD Long Term Interest Rate (#6060) * fix long term interest rate * pylint unused argument * [Bugfix] - Fix economic calendar country (#6059) * fix economic calendar country * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [HotFix] Index Router Docstrings & `sp500_multiples()` Cleanup (#6063) * sp500 multiples cleanup * remove dict from standard model * static pacakge * pylint * [Feature] FMP Current Holdings (#6043) * add fmp current holdings to etf holdings * pylint unused argument --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Replace symbols in company/news (#6061) * feat: replace symbols in /news * fix: integration tests * fix: integration tests api * fix: typo * Update test_intrinio_fetchers.py * [Enhancement] Add function examples to router. (#6042) * options router * fixedincome router * futures router * missing comma * static assets * futures router --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] Add function examples to Regulators Router (#6054) * options router * fixedincome router * futures router * missing comma * static assets * futures router * sec router * cftc router * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix World News (#6064) * fix fmp * fix intrinio * fix biztoc * actually commit intrinio fix * fix tiingo * unused import * fix tests * black * ruff * benzinga empty strings * codespell * fix test? * more empty strings --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - remove unused validators from standard models (#6067) * update standard models * lint * Update USD Liquidity Example Notebook for V4 (#5902) * Update USD Liquidity Example Notebook for V4 * delete some v3 text in the copperToGold * Update README.md * findSymbols preview image * Google Colab preview image * financialStatements preview * content tsx file * ### title * convert tsx to json * indent size * double quote keys.json * trailing commas * Update content.json * patch --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix QA Examples (#6072) * [Feature] - Ensure Bugfix branches can only do PRs to `develop` branches (#6073) * bugfix branch name checks and few fixes on the linting not to run on pushes to branches outside PRs * Update branch naming guidelines link --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/charting obbject (#5938) * fix circular import issues on the obbject extension framework * settings available on the obbject * extension init * charting assets and code * introduce to_chart functionality * removes the to_chart method from obbject in detriment of the one from the obbject extension * Update openbb_platform/obbject_extensions/charting/charting/__init__.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * fix on the show method * adding the example to the to_chart docstring * copying the exsting README from charting extension - needs to be revamped * moving to openbb_charting instead * update the pyproject.toml file * pydocstyle * versions * better docstrings * making accessors public * removing unnecessary credentials variable cc @montezdesousa * removing access to extra/metadata and use designated private attrs instead * Fixes linting for the logging service (#5992) * lints * typing.Type instead * deprecating ChartingService to use the new extension instead - adding function discovery capabilities using it * tests for the obbject charting extension * removing charting service from command runner * filter functions not implemented in the module * remove charting service tests * removing charting service on the tests for int tests * charting integration tests * removing charting service file * removing old charting extension code * revamp builder * fix obbject tests * fix command_runner tests * removing openbb_figure_table * better website docs * reviewed readme * unsetting api key for posthog (pywry) windows * added debug_mode to the system settings * removing api key * update nightly script * fix tests * black * black * Revert "black" This reverts commit 21d76ad689087b4ad38cec55667186263363c89f. * Revert "black" This reverts commit 0904653fd73518c0d345a82f91f4cb06cfa84cb6. * black for henrique * returning a list instead * better docstrings * removing unnecessary indicators docstring * typo * black * intentional access to protected member * changes to publish script * filtering deleted files * black * adding render argument * fixing the df_to_basemodel function: it should include the index in the columns either if flagged or if the index is named * adding the hability to add you own data to to_chart method * tests * black * disable protected access * accept kwargs to eg. save image * adjustment cc Igor * add if statement for protection * remove unused return typing * fix technical charting views * better error message cc @IgorWounds * better structure and fix test * Revert "better structure and fix test" This reverts commit 612ea6117ce064d5e41f74e72e171646be614408. * Revert "better error message cc @IgorWounds" This reverts commit 3d7ee53878b7742d187e83f7e5d4c27438aa40ef. --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix CAPM example (#6075) * Start removing dead v3 commands for deprecation (#6070) * Yeet tokenterminal * Yeet crypto/onchain/hr and gwei * yeet luna * yeet coinglass * yeet dps/ctb * yeet reddit * yeet covid * actually not yeeting hide yfinance future warning * yeet options/hedge * not yeeting. i18n words * something happened on accident * still fixing * git reset/git checkout -f 2516cfbc72d23a7656715314ea94cc34d4c994ee website/content * still not sure whats going on * Edit workflow to not look at deleted files + change bootup message * Dont pin the workflow to my branch always lol * Remove askobb * [Feature] - Comma separated string and list inputs (#6062) * feat: balancesheet * feat: income statement * fix: cash flow statement * feat: financial ratios * feat: reported financials * feat: revenue business line * feat: revenue per geography * fix: warnings * Update balance_sheet.py * fix: remove warning imports * feat: balance sheet growth * feat: calendar ipo * feat: cashflow growth * feat: __validators__ * fix: typing * fix: validator msg * feat: trailing dividend_yield * feat: short volume * feat: share statistics * feat: price target + consensus * fix: update validator * feat: historical dividends * feat: key executives * fix: getattr directly * fix: type hint validator * fix: add default to getattr * typo * feat: otc * feat: options chains * fix: remove list validators * feat: add validator dict to fetchers * lint * update standard models * lint * feat: rename validator * fix: ownership * feat: query params description * fix: balance yfinance * key execs, income statement * remove change * fix: revenue geographic * fix: disable pylint * fix: unusual + balance * unit test validator * minor fix * explicit validators * update test * feat: multiple items allowed * rebuild * move check_single_value * crypto historical * order providers * fix typing * rename extra dict * marking multiple items allowed * Revert "marking multiple items allowed" This reverts commit 7da04817e18b2c9e373ffde9134f3949d11f58dd. * error msg * fix: default provider runtime vs configuration * minor fix * docstring * revert default changes * get provider before executing cmd * fix container bug * clean filter * add comment * prevent bad defaults * update docstring * typing * fix * black * fix docstring generation * [Feature] - Mark multiple item fetchers (#6074) * feat: price target * bezinga company news * equity quote * marking multiple items allowed * more multiple items * black * rebuild * another batch * rebuild * another * cpi * move prop * rebuild --------- Co-authored-by: hjoaquim * rename var * update msg * rename func * fix test * mypy * ruff --------- Co-authored-by: hjoaquim * [Feature] Add Regional Data Endpoint from FRED (#6071) * add regional data endpoint from FRED * codespell * ruff * sort imports * add provder='fred' to integration test * thought I already sorted those imports.. * pylint.. * more test params.... * even more test params... * even more test params.... * static assets * reconfigure params * ruff * alias dict * recapture cassette * router doctstring --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Fix most integration tests (#6082) * Fix most integration tests * Lint * Fix price_target column for Benzinga (#6083) * Release/4.1.4 (#6081) * static assets * patch version increase * core update * bumping versions * bump finviz version * bump versions * bump versions on package.extension --------- Co-authored-by: James Maslek * Add dates to /quantitative as needed. (#6078) * Add dates to /quantitative as needed. Run new black * Fix tests * Pycharm is weird sometimes * uncommit * Add default window + error handling + mistake --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add end point: `etf.equity_exposure()` with FMP provider (#6079) * add etf.equity_exposure from FMP * empty data error * recapture cassette * pylint unused argument * Fix router example typo * fix test...? * static file to fix test? * fix test..? * __json_schema_extra__ * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [BugFix] Fix Equity Integration Tests (#6086) * fix equity integration tests * black * pylint * black * black * move df_apply to helpers * unused import * remove file that shouldn't have been added * oops. didn't remove a couple lines * [Enhancement] Add `analyst_search` to the Equity/Estimates Router (#6088) * standardize price_target * add analyst search * black * more black * ruff * linter, test parmas * last missing param * get rid of convert to upper * ruff * pylint * [BugFix] - Fix POST docstring examples (#6095) * Fix POST docstring examples. * Move router examples to command decorator * [BugFix] Fix `treasury_rates()` (#6092) * fix treasury_rates * drop rows with no data --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * clean up the remains from my yeeting (#6089) * clean up the remains from my yeeting * was not careful * Add ETF examples (#6102) Co-authored-by: Pratyush Shukla * [BugFix] Fix integration tests (#6100) * fix int tests * fix obbject int tests * fix quant tests * fix index tests * use python 3.10 instead * remove cache * end_date < start_date * [Enhancement]: Add TMX data provider extension. (#5913) * dev install * add TMX provider extension * normalize ytm and coupopn_rate values * black * codespell * ruff * black again * pylint * ftw * undo what Pylint thinks is best * more black * renovate insider_trading standard model * fix tests * typo * tests * empty string * pylint unused argument * nans for some reason * black * static files * static files with openbb-tmx installed this time * yfinance TypeError..? * NA -> N/A * update for version bump * list exchange-calendars as tmx dependency * eod chains date -> eod_date * new line * not that file * more black * one more black * fix weird merge thing * ruff * index constituents params * insider trading * fixing things * black * black AGAIN * news integration params * the other missing param * ruff * historical dividends field update * add json_schema_extra * gainers * symbols -> symbol * company news symbol * unit test param * review items * wrangle a rogue field * index router example * company news thing - symbols -> symbol * field name map --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek * [Feature] - OBB.GET (#6097) * create OBB.GET and data slicer page * remove quotes * format description * wording * functions.json * sidebar position * remove if stamente * [Docs] Remove Reference to `to_chart` in OBBject. (#6096) * remove reference to to_chart in OBBject. * put chart description back in OBBject properties * [Feature] - Create openbb assets folder (#6101) * create openbb assets folder * fix unittest * rebuild --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fixes to_df() where the date series contains multiple TZ-offsets. (#6099) * allow mixed utc offset in a tz-aware date column * enforce ascending from all providers for price.historical * fix tests * add comments and apply treatment to basemodel_from_df before JSON output * yfinance consistency * add unit test * add unit test * better test * ruff --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update the quantitative extension to make more sense (#6087) * Split out a rolling submenu for the rolling functions * Make a performance and a stats submenu. * Test the statistics functions * lint * lint * dupe test * pylint * ruff * Try tests quick * black magic signature funcs * fix my custom tests * Fix the existing imports/urls * push the api update * okay I figured out whats going on * this should be all of them * Correct docstringing examples --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Fix ECB Yield Curve (#6108) * fix ecb yield curve * standard model update * Update unit-test workflow to check for changes to openbb_platform (#6109) * [Bug fix] - Fix package mypy (#6110) * fix: package mypy * types * black * [Feature] - Equity router descriptions & examples (#6103) * feat: equity/calendar * feat: compare router * fix descriptions * darkpool + discovery * fix paragraph issues * fix descriptions * fundamental part 1 * fundamental part2 * transcipts * ownership * fix * price * shorts * Update darkpool_router.py * minor fix * shorts examples * examples * ruff * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * … * fix: broken signature typing (#6238) * [Feature] - Warn if inexistent kwargs (#6236) * feat: warn if wrong kwargs * fix: remove query test * fix: add tests and fix bug --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Allow kwargs on POST endpoints (#6240) * [BugFix] Return FMP Error Messages (#6237) * response callback and equity quote * merge branch develop * fix some more * static files * test param * executive comp * some more fetchers * test cassette * black * another one * some more * etf equity exposure * price_performance * black * ruff * test params * more test params --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] No event loop when exporting images (#6249) * duplicated warning * if the event loop was closed - create a new one to process the image * [BugFix] - Bring back mypy (#6242) * first batch * another * another * another batch unyped defs * final untyped defs * update yml * pylint * remove unecessary __init__.py files * Revert "remove unecessary __init__.py files" This reverts commit 5977eccfee7e2f536d7f2d039ba7a753d4c66695. * fix company_news typing * rename func * fix tests * tests * [BugFix] - Fix integration tests workflow file (#6251) * update wf file * Update platform-api-integration-test.yml * [BugFix] - Untyped variadic keyword arguments break during execution (#6250) * fix: ensure var_kw args come last in signatures * remove package builder change * Update package_builder.py * fix: warn only when ExtraParams * track VAR_KEYWORD * minor fix * type Any if no type provided * minor fix * fix test * fix: _as_dict * ruff * update reorder_params unit test * update func default and tests * typing * update comment * update comment * rename var * Update command_runner.py --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * update website to remove the main menu from pro level (#6244) Co-authored-by: Andrew * [Enhancement] - Cleanup docs (#6254) * Delete reference and data_models contents * Update gitignore * update contributing section (#6255) * Build the static assets before generating markdown files (#6257) * [Docs] Break Out Usage Section In Docs Pages (#6258) * break out the Usage section in docs pages * codespell * fix: move extra_params warning to query.py (#6259) * [BugFix] - multiple items allowed in provider parameters (#6256) * fix extra multiple items in extra parameters * fix: integration test + parametrized typing * rebuild * fix charting tests (#6262) * [Bugfix] - Test parametrize skips charting tests (#6264) * don't skipt charting tests * multiples does not have a charting implementation * fix list index out of range * mypy * mypy * mypy ta class + base * indicators mypy * sync precommit with ci * sync ci with precommit * revert * revert * mypy indicators * fix mypy * fix hastype * type ignore * mypy * mypy * mypy * does this work? * remove post inits * this * this * and this --------- Co-authored-by: hjoaquim * [Bugfix] Removes Charting Integration Test For Chart That Doesn't Exist (#6265) * Remove a test for a chart that doesn't exist. * black * [BugFix] yFinance ETF Info: Try Different Field When Missing fundInceptionDate (#6260) * try different field when missing the inceptionDate * wrap that in try-except * pylint * make Excel templates downloadable from docs (#6270) * [Release] 4.1.6 (#6266) * fixing integration tests * adding reference to the docstring * fix: docstring examples test + mypy * remove spaces * parse Volume column to float do avoid sorting issues * rebuild * release changes * lock openbb * remove unused script * fix broken links --------- Co-authored-by: Diogo Sousa * [Git] - Sync main dev (#6276) * [Critical] Sync `main` with `develop` (#6202) * feature/intrinio-equity-search: Adds Intrinio to `obb.equity.search()` (#5863) * intrinio equity search * integration tests * test --------- Co-authored-by: James Maslek * feature/yfinance-multi-ticker: Adds support to openbb-yfinance for multi-ticker download. (#5845) * yfinance multi-ticker support * multi-ticker support for market indices * crypto multi-ticker support * recapture tests * yfinance cache and tests * currency historical multi-ticker support * style things * black * missed a values --------- Co-authored-by: James Maslek * Feature/us-treasury-prices: Adds Treasury Prices to Fixed Income (#5776) * add treasury prices endpoint to fixed income router * adds tests * black * ruff * import statements * standard model imports * black * some cleanup * black * async router * make async * str outpuot * bytes object not string * docstring typo * multi-line f-string * encoding * duplicated conditional * black --------- Co-authored-by: James Maslek * feature/sec-etf-holdings: Adds ETF holdings from SEC provider (#5757) * add ETF holdings from SEC provider * black * helper function params * edge cases * ruff * add validator in company filings * remove xml field * update import * cleanup parsing * missing datetime import in company_filings * black * unused import * add missing py.typed files * feature/nasdaq-equity-search: Adds Nasdaq provider for `obb.equity.search()` (#5790) * add nasdaq to equity search * black * unused import * make async --------- Co-authored-by: James Maslek * Excel docs (#5870) * first test * remove old reference * bring this file back * generate sidebar and write empty mds * generate index.mdx * get description from cmd_lib * fix reference card error * rename file * generate markdown * regen * add last+hist * update pages with seo metadata * format types * small fix * css sux * add usage placeholder * set hidden by default * nah * add cmds and menus to reference * lint * fix/Users/diogosousa/opt/anaconda3/envs/platform/bin/python /Users/diogosousa/OpenBB/OpenBBTerminal/website/generate_excel_markdown.py * format mds * remove space * fix commands heading * redo folder structure * add back cmd description * move card to var * different main folder * clean * move vars * refer to editor * rename var * done * recreate folder structure * add section: syntax + minor adjustments * remove return type * remove return type * rename api to library * minor fix * remove api folder * remove api folder * formatting * improve basics * basics * fetch functions.json from website * complete basic * change syntax to use semi-colon * basics * basics * remove space in sig * remove sections * add metadata * Update formula builder * add tabs * Update index.md * complete basics and formula_builder * Update index.md * add windows screenshots * restructure folders * regenerate with latest add-in version * move Excel sidebar * rename function and add comment * now it's working * logic * rename folder * Update formula_builder.md * fix * hide excel for now * some explicit typing --------- Co-authored-by: tehcoderer * Make Pro Fetchers async by replacing `ThreadPoolExecutor` with `asyncio.gather` (#5822) * init * Update helpers.py * filter URL on raise * polygon, fmp done, update cassettes * updates * cleanup * revert tests for now * Update discovery_filings.py * Update helpers.py * add `async` overload to `Fetcher.extract_data` * update merged fred models * tests, improve fred series * Update insider_trading.py * insider * tests * intrinio * Update equity_historical.py * implement abstract async extract on Fetcher, with simple switch * cleanup * Update helpers.py * Update helpers.py * fix fmp historical deprecated urls * Revert "fix fmp historical deprecated urls" This reverts commit 1a760a24737ed3d1439472bdb4c47aa778bcce8b. * fix fmp `index.market` 1day url missing query params * Update test_fmp_market_indices_fetcher.yaml * field fixes * `extract_data_async` -> `aextract_data`, `async_request` -> `amake_request` * `async_requests` -> `amake_requests` * Update company_news.py * add sort to index `integration` params * add `client.py` tests * Update equity_search.py * Add lost v in platform api version string * Resolve linter errors here and there --------- Co-authored-by: Theodore Aptekarev * Allow this to be run in parallel (#5872) * Limit mypy v3 linting to only the diff of the PR (#5878) * Use custom parametrize from news menu tests (#5873) * Use custom parametrize from news menu tests * Update Ultima unit test cassettes * Command Schema (#5874) * POC * Filter by provider * pass base_app as parameter * add typing + TODO * fix some typing * Fix unit tests --------- Co-authored-by: Diogo Sousa * Parameterize `obbject.to_df` with `index` and `sort_by` (#5877) * Parameterize obbject.to_df with index and sort_by * unit tests for obbject * keep using the date as default to use on basemode_to_df() --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Changes to the `obb.fixedincome.corporate.hqm()` output (#5876) * changes to the hqm output * typo --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Refactor method in RegistryMap (#5879) * refactor extract_info * add comment --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * remove Literal from providers in OBBject (#5882) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix version (#5883) * Fix version * Fix linter on terminal * Refactor package builder (#5880) * breakdown builder + remove black * rebuild * rebuild * rebuild * rename method * format built code without black * we still lint if it's available * fix existing tests * add linter tests * add black to dev deps * auto_build as instance method * reorder methods * typing --------- Co-authored-by: Henrique Joaquim * small refactor for simplification (#5886) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix bug. Add router test. (#5888) * Fix bug. Add router test. * Simplify * separate pylint between platform + terminal (#5892) * separate pylint b/w platform + terminal * Explicitly set pylint check scope to files in the diff --------- Co-authored-by: Theodore Aptekarev * sync descriptions (#5893) * Add REST API docs page with advanced settings configuration (#5890) * Don't mention docker in a list of python envs * Create a REST API page * Update docs to get api keys from the hub * Update installation instructions * Mention requirement of poetry and toml in source installation section * move rest page up to the top. and add url to google colab example notebook --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix a v3 syntax example (#5891) * Adds federal reserve data points (#5885) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Theodore Aptekarev * Check if outdated (#5898) * Add econometrics API tests (#5899) * Docs/excel update (#5889) * update xl docs * update syntax line * update again * Fix pylint scope (#5895) * Allow optional input for 2-month treasury rates and add FederalReserve rates model The commit includes two main changes. One being the modification to the standard treasury rate models, where the 2-month input field is now optional, and a default value is set to none. The other main change is the addition of a new module for the FederalReserve treasury rates model, which includes query parameters, a data model, and a data fetcher. * Add Money Measures models and commands This commit introduces new Money Measures models to handle money-related data, defines Money Measures commands in the economy router, and implements the Federal Reserve Money Measures model. The core model includes fields like start_date, end_date, and various components of the money supply. The new command added to the economy router allows the querying of these data. * Add Federal Reserve Money Measures test file This commit adds a test case file for the Federal Reserve Money Measures fetcher in the Federal Reserve module. The test case includes simulating a GET request and the corresponding expected response from the server. * Cleanup * Sneaky unformatted integration tests * its a dawg life for me ...... ruff * add the fed funds rate * didnt mean to commmit this * black * this is why we should pre commit kids * change install name * add providers to int tests * review comments + commit static * replace nan with None * fix float on None * get rid of nans for nulls for json handling * change `_` to `-` in readme pip install. * Update __init__.py docstring * Debug pylint * Adjust the fetch depth --------- Co-authored-by: James Maslek Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * fix `from openbb import obb` asyncio lock in python REPL (#5896) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/financials - PR for working on structure of financial statements. (#5794) * balance sheet draft * balance_sheet draft * cash_flow draft * income_statement draft * intrinio financials * description * period field * ruff * income statement * field * label - gross profit ratio * cash flow statement * investing order * add option for caching to cashflow * add caching to balance and income * typos and update order for financial institutions * replace 0 values with None * add financial ratios from intrinio * black * missing test params * balance cassette * query param description * symbol list warning * black * handle BRK-A and symbols with a dash for Intrinio * fix typo error * add free cash flow to bottom of cash flow statement * amortization_expense * dev_install.py * undo dev_install.. wrong branch * cash flow order things * standardized cash flow * fields * integration tests * cash flow model validator * more polygon cash * black * black * Delete openbb_sdk/providers/polygon/openbb_polygon/utils/definitions.py wrong file * balance sheet * some cleanup * ruff * income statement * black * test params * financial ratios async update * recapture fmp and polygon tests * yFinance financials * yfinance tests * delete financial_statements standard model * intrinio balance sheet order * fiscal year standard param * remove file accidentally committed * add reported_financials end point * fiscal_year param for reported_financials * fix url * fmp test cassette * add safe-guard with warning for fiscal year before 2008 * periods can only be annual and quarter * url in docstring correction * add fiscal_year param to intrinio standardized financials and ratios * fix fmp ratios * black * rename fields as per Minh * rogue field * black * Fix typo in a docstring * Resolve linting errors * type ignore * disable=unused-argument * changing the arg name cc @minhhoang1023 --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Theodore Aptekarev Co-authored-by: hjoaquim * docs/legacy-install: Add warning at top of page - Instructions on this page are for installing the Terminal (#5904) * add warning at top of page - instructions are for installing the Terminal app * pip install openbb-nightly * hotfix/financials-field-maps: Updates A Couple FMP/Polygon Income Statement Fields (#5907) * update income statement fields * another polygon field * ratio -> margin * black * explicit fmp fields * add reported_currency for standardized intrinio * # pylint: disable=unused-argument * another unused-argument * black.. * patch tests * polygon income: eps -> basic earnings per share * re-capture terminal portfolio menu test --------- Co-authored-by: hjoaquim * Fix test (#5916) * Fix test * Skip ultima integration tests --------- Co-authored-by: Pratyush Shukla * hotfix/fmp-price-performance-zeros: Replace returned zero with None and normalize percent values. (#5918) * replace zeros with none and normalize percents * pylint unused argument * Update index.md (#5906) * Release/4.1.0 (#5901) * Hotfix/terminal tests (#5919) * skip supressed arguments * silent way of customly load on quote * specify source for call_load * docs/platform-faq: Start Platform FAQ page with bullet points on Platform vs SDK (#5914) * platform vs sdk faq page * add data and data providers faq section and some style cards * typo * makes changes as per reviews * openbb-nightly as a way to install everything * jupyter-lab instead of jupyter --------- Co-authored-by: Henrique Joaquim * hotfix/backend - Initialize OpenBBFigure (#5912) * create backend * openbb_figure * black * pylint * pylint again --------- Co-authored-by: Henrique Joaquim * hotfix/yf-futures-historical: yfinance historical futures multi-ticker support and symbol parsing (#5923) * multi-ticker support for yfinance futures historical * raise-missing-from * integration test params * equity_historical adjusted kwargs * pylint unused argument * Docs/excel examples (#5920) * regen excel md * add syntax + basic example * fix example * create json with docs map * update docs to latest functions.json + remove tiingo * remove space from examples * minor fix * remove spaces * remove spaces * bug fix: remove folder before generating * fix typo * add link to appsource * fix * Update templates.md * regenerate content * change docs colors * fix light mode * add back tiingo * update functions.json * templates go later * remove Library from reference * Make the excel markdown being generated at runtime * fix reference cards having commands under menu * remove excel/reference folder since this is built at runtime by gh-pages action * black formatting * improve title * add excel to the main page * add excel image bg * make excel sidebar show up next to pro * improve main page * small fix for platform page title * update basics page * add tip to autocomplete --------- Co-authored-by: DidierRLopes * Re-record tests and fix symbol bug (#5924) * Re-record tests and fix symbol bug * nordvpn us ftw * @IgorWounds says "SPY >> IOO" --------- Co-authored-by: Pratyush Shukla * Docs/bug fix (#5926) * fix pro link * fix wrong example * Introduces a limit argument for the `equity.fundamental.trailing_dividend_yield` endpoint (#5925) * introduces a limit argument for the equity.fundamental.trailing_dividend_yield endpoint * add default args to test * Add json_schema_extra to openapi.json (#5930) Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * feature/standardize-quote: Proposal to Standardize EquityQuote (#5922) * standardize EquityQuote * intrinio reference * rogue comma * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * hotfix/fmp-rev-segments: Adds Fiscal Period to busines/geographic segments revenue. (#5921) * add fiscal_period to revenue by geography and business line * data description and unused imports * update test cassette * Allow multiple symbols `equity.profile` (#5929) * allow multiple symbols * pylint * pylint ignore position * change callback to helper func --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: hjoaquim * Add filtering to AV historical price (#5928) * add filtering to av historical price * lints --------- Co-authored-by: Pratyush Shukla * Fix vwap FMP error (#5936) * Fix vwap FMP error * Linting * Painlint * Add date filter + symbols to comp (#5931) * add date filter + symbols to comp * make sure year is in d * tests fix * Improving Platform's import time (#5894) * missing decorator * missing optional statements * us-gov to optional and right position * removing redundant call * lazy load mappings * docstrings * introducing the extension loader class * misleading docstring * using the extension loader on the router * using the extension loader on the credentials * docstrings * lazy load of entry points * checkout dev_install * using the extension loader to get the entry points instead of recalling the function * improved auth service and charting service * using the extension loader on the registry * typos * adding properties to extension loader for easy access * using the extension loader on the package builder * avoiding circular imports by using forward references * fix charting service tests * test for the extension loader * Update openbb_platform/core/openbb_core/app/model/credentials.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/app/router.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Update openbb_platform/core/openbb_core/provider/registry.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * adjustments --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * Disable auto_build on test run (#5937) * Disable auto_build on test run * Move to conftest * Update excel docs (#5940) * update basics * update reference generator * Categorize release notes based on labels for OpenBB Platform (#5943) * Categorize release notes based on labels for OpenBB Platform * Add environment variable for GitHub token in labels-PR.yml * Update labeler.yml to use "enhancement" label for feature branches --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Custom deprecation message in API endpoints and Python commands (#5942) * add custom deprecation message feature in routers * add custom deprecation message feature in package builder * using an actual DeprecationWarning instead * fix tests --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: hjoaquim * Hotfix/remove unused workflow (#5945) * Disable auto_build on test run * Remove unused workflow * Revert * Hotfix/fix typo (#5948) * Disable auto_build on test run * Fix typo * Revert * docs/data-models-url: Fix URLs on Development Page (#5944) * fix url to the standard models * github links * `equity.fundamental.dividends`: allow filter by date (#5932) * allow filter by date * ruff * pylint * fix tests --------- Co-authored-by: Pratyush Shukla * Create Excel templates page (#5947) * create templates page * Update index.mdx * fix description * update card * remove clsx * Update index.mdx * Update index.mdx * Update index.mdx * Update index.mdx * min height * min height * improve excel docs and point towards hub --------- Co-authored-by: DidierRLopes * hotfix/intrinio-dividends-limit: Fix Limit Param Alias (#5951) * fix limit param * pylint unused argument, recapture test cassette --------- Co-authored-by: Pratyush Shukla * Docs/remove core refs (#5957) * remove references to core: PathHandler + ProviderInterface * remove unused function * add comment * regenerate * fix a few examples * add comment * rename file * Excel tutorials on the docs (#5956) * update workflows name to tutorial * update title * get barebones to bring in Excel videos * tutorial excel videos in * hotfix/float-values: Convert Intrinio balance sheet values to float type (#5961) * convert intrinio balance sheet values to float type * unused import * typo in alias dict * Update to OpenBB Add-in for Excel (#5965) * Log custom headers (#5966) * add custom headers * fix: send on startup and defaults * pylint * unittests * move government-us to community in dev_install (#5963) * fix: adds logic to check whther user is logged in on hub (#5941) Co-authored-by: Luqman * hotfix/fix-company-filings: Fixes too many mandatory fields. (#5909) * Fixes too many mandatory fields. * black * black again --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: James Maslek * `equity.estimates.price_target` - Integrate with Benzinga (#5946) * deprecation message * fix lints * adding equity.estimates.ratings and fmp as its provider * unit tests for fmp * removing unused file * typos * add benzinga to AnalystRatings * revert changes to estimates router * moving it to price target instead * reverting changes * fmp support for multiple ticker * benzinga price target * ruffy * unused argument * fix type hints * tests for the new fetcher * new integration tests * fixing tests * missing std arg --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [DEPRECATION] `index.market` renamed to `index.price.historical` (#5962) * deprecate index.market and add index.price.historical * add index.historical standard model * add index.historical provider models * index extension tests * provider tests * linting * bug fix (#5969) * Uppercase excel reference (#5958) * uppercase reference * fix name header * add tab title * remove reference excel folder * add to gitignore excel reference files --------- Co-authored-by: DidierRLopes * move templates (#5970) * Release 4.1.1. (#5964) * update dev_install * fix effr test * Update dev_install.py * fix fundamental balance test * fix equity price historical test * fix price target model * black * rebuild static files * update publish.md * fixed dev_install * update publishing doc * updated `openbb-core` to 1.1.1 * updated extensions * updated providers * updated `openbb` package * updated static extension map * updated publishing doc * fixed toml for `openbb-finra` * @jmaslek yfinance IS DEFAULT * updated static --------- Co-authored-by: Pratyush Shukla Co-authored-by: hjoaquim * Fix link to discord channel (#5910) Co-authored-by: James Maslek * Fixing Posthog handler for thread safety (#5968) * fixing posthog handler for thread safety * removing loggging init from the global scope - per sensei juan --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update labeler.yml and labels-PR.yml (#5974) * hotfix/ allow multiple `identify` calls (#5976) * allow multiple `identify` calls * Update posthog_handler.py * regex out any invisible control character from sales_conditions field (#5977) * docs/http-requests: Contributor Guide For Building HTTP Requests (#5973) * contributor guide for http requests * add a docstring * add section on get_querystring * extra space * add note for people installing PyPI in a zsh terminal shell --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * feature/add-yfinance-functions: Add equity.profile for yFinance (#5978) * equity profile for yFinance * pylint * equity quote * unused imports * remove yfinance from extras in toml (#5982) * Release OpenBB Platform v`4.1.3` (#5983) * fixing pyproject.toml * adding pandas-ta to technical package for publishing * bumping technical * test for pyproject toml * feature/cboe-async: Refactor Cboe for Async (#5900) * refactor cboe for async * codespell * unused imports * pylint * more pylint * platform metadata * classmethod decorator * test params * intrinio quote * test param names * date in test needs to be a datetime.date not string * make fmp unix timestamp tz-aware and normalize percent change * different way of parsing datetime string * recapture cboe equity historical test * unused import * index snapshot update * black * extension map * pylint * cboe pyproject.toml * proposal to standardize equity_quote * one more file * removing changes on static assets * index_historical * index_historical again * last_time -> last_timestamp * obsolete router path * fix tests * test param * restore market index deprecation that I forgot about * fixing tests --------- Co-authored-by: hjoaquim * Fix typo in website/README.md (#5980) * Fix typo in website/README.md * Update linting.yml * Update linting.yml * Update linting.yml * Change ref conditions * Update linting.yml --------- Co-authored-by: Luqman Co-authored-by: Luqman * Hotfix/th etfs (#5959) * added etf trading hours * black formatter --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: Luqman * feature/finviz-provider: Adds Community Finviz Provider Extension (#5952) * add finviz provider * recapture tests * recapture tests again? * invalid test param * static packages * units_measurement -> unit_measurement * static packages as core only * openbb_core version bump in pyproject.toml * try adding user-agent to test response * fix tests * linting * provider model cosmetic changes * fix install script and typo in openbb toml * static * fix: re-record unittests * empty data error * definitions as a file --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla Co-authored-by: Diogo Sousa * Add support for multiple symbols on `obb.equity.price.historical` (#5984) * av - support for multiple symbols * tiingo - support for multiple symbols * include symbol only if necessary * update extension descriptions page (#5985) * remove useless file (#5991) * added symbol to headers (#5981) Co-authored-by: Pratyush Shukla * Fixing Docs Typos (#5955) * fixed typo * fixed stocka typo --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: James Maslek Co-authored-by: DidierRLopes * fix nasdaq test cassettes (#5989) * don't include `custom_headers` in openapi schema (#5994) * hotfix/intrinio-index: Drop None Rows From intrinio Historical Index (#5987) * drop None rows from intrinio historical indexes * add empty data error * static assets * hotfix/insider-trading: Fix #5988 (#5990) * fix validation errors * empty strings * validator --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: teh_coderer * CI listing quick fix (#6002) * BIGGGG LINTING * fixing lints * fixing lints * black * very ruff * no export * fix hedge_view again * lints * platform lints * lints * black * black it @hjoaquim * fix some more linting --------- Co-authored-by: hjoaquim * Release `openbb-finviz` `1.0.0` to the public (#6000) * set version to `1.0.0` * Set correct dep version in main package * Add `finviz` to table * Auto Labelling for OpenBB Excel Docs Changes (#5998) * Update pull request labels * Update labeler.yml with new label for Excel files --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Support for custom examples in router commands (#5993) * Disable auto_build on test run * Add support for custom router examples * Revert odd file change * Fix API pollution * Refactor examples with @montezdesousa * Check if model is inside the PI * Fix * feat: add & fix examples (#6001) * feat: add & fix examples * fix: ruff + comment * feat: read parameter pool from file * feat: typing + unit test * Disable auto_build on test run * Add field order to OBBject * Revert * lint and revert * fix test --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Diogo Sousa * hotfix/intrinio-options-date: Fix comparing values between str and datetime (#5997) * fix compare between str and datetime * unused argument * get_weekday * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Field order added to the OBBject extra as preference (#5999) * Disable auto_build on test run * Add field order to OBBject * Improvements * Remove noxfile * Disable auto_build on test run * Add field order to OBBject * Revert * lint * Add docs * Not sure how this happened * lint * Update `openbb-devtools` (#6008) * update deps * unpinned package versions from gh linting action * codespell * updated black dependency * linting * linting * linting * pin codespell version * black * black again * install devtools in linting action * format w new black (#6009) * format w new black * format w new black * black again * black the terminal * ignoring unused arguments --------- Co-authored-by: Pratyush Shukla * remove reviewpad (#6010) * Remove Ultima provider (#6012) * Add OECD unemployment (+more) + data cache idea (#5917) * Add OECD unemployment + data cache idea * Docstring edits * Tests * Add composite leading indicator * i truested ruff --fix too much * Add short + long term interest rates * pylint * pylint2 * was not committing. my b * add csv cache + make it default. remove pyarrow from poetry * Clean up * Didnt run on this file. My bad * Why was this ignored /shrug * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/improved pr template (#6018) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * better pr templates * developer template * [Feature] - Custom deprecation (#6005) * custom deprecation * custom deprecation * using the new deprecation * custom deprecation on the package builder * remove comment * ruff * black * static assets * tests * using parametrization instead * test for deprecated endpoints (#6014) * Deprecation warning on the reference docs (#6015) * typo/fix * bring back methods needed for markdown generation * add deprecation warning to docs * contributor docs for deprecating endpoints - tks @deeleeramone * small changes on publishing procedure per @the-praxs * moving the deprecation summary class to deprecation file instead * explanation on class variables * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update openbb_platform/openbb/package/index.py Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * Update website/content/platform/development/contributor-guidelines/deprecating_endpoints.md Co-authored-by: Pratyush Shukla * deprecating on 4.3 instead @the-praxs --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Pratyush Shukla * [BugFix] Fix package builder (#6022) * fix: remove specific imports * adjustments for correct deprecation * static assets --------- Co-authored-by: hjoaquim * [Feature] Add support for multiple tags in `historical_attributes` and `latest_attributes` (#6013) * historical attributes standard model - * add support multiple tags * add `tag` field in data * add support for multiple tags in historical attributes * set correct return type in `callback` function * latest attributes standard model - * add support for multiple tags * add `tag` field in data * add support for multiple tags in latest attributes * add test params for the attributes endpoints * add support for multiple `symbol` and add `symbol` field in the data * modified code to fetch data from multiple symbols and throw warning as per @deeleeramone * add params for testing multiple symbols * linting * fix test params * fixed condition to check if its a `Dict` type * updated intrinio fetcher tests for the statements * updated static * [feature]: feature/overview-to-profile: Deprecate `equity.fundamental.overview()` and move to `equity.profile()` (#6011) * fmp overview to equity profile * deprecation warning * urls * wrangle fields * black * pylint unused argument * insert additional securityID fields to standard model * custom deprecation using OpenBBDeprecationWarning * typo - need to have the deprecated=True flag * static assets * fix non related test * minor adjustment - removing the need for the try/except block - using the get and pop removes the need for key existance checking. cc @deeleeramone --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim * [BugFix] - Remove duplicate code (#6025) Co-authored-by: Pratyush Shukla * remove `SectorNews` from router and standard models (#6026) * feature/more-yfinance: Adds some more to openbb-yfinance (#5979) * equity profile for yFinance * pylint * equity quote * unused imports * price target consensus * add currency field * add share_statistics * don't append empty result to results * key executives * missing definition in key_executives * pylint * key metrics * add currency to key metrics * add etf_info * rename trailing_annual_dividend -> dividend_rate_ttm * add institutions count to share_statistics * add historical dividends * add logic for start-end dates to historical_dividends * recapture the test..? * funny test * filter on tests? * record test with clean cache..? * year_price_change -> price_return_1y in key_metrics * black * make descriptions clear for beta and dividend_yield fields * add description field to standard model * updated static * clear description of shares_implied_outstanding field * updated static for equity * clean descriptions --------- Co-authored-by: Pratyush Shukla * feature/commodities-lbma-fixing: Adds Commodity Extension and LBMA Gold/Silver daily fixing levels (#5760) * add commodity extension and add lbma fixing endpoint * dev_install.py * readme url * renovate the standard model * makes a query_params model for nasdaq data link * literal not optional * unused imports * missing test params * test cassette * DataLink query param description * test file import * actually fix import * from openbb_core.provider..... * ruff * another import statement * black * async router * move query_params * update version * version numbers * extension_map * satisfy pylint? * pylint * Update pyproject.toml * black * poetry lock * Update extension_map.json * Update __extensions__.py * Update module_map.json * clean descriptions --------- Co-authored-by: Pratyush Shukla * Improve UX for `obb.news` (#5986) * adding date,start_date and end_date to std params * add date to special params which should've another type * change types to dateType * change helper to accomadate changes in types * date filtering * using the date filtering for all providers * date params on the std model instead * adding the right type * filtering dates on world news * integration tests * fix descriptions * static assets * black * Revert "black" This reverts commit 7288b59f87e1b0816733a96ce77fb96e13dcf0e3. * lint * addressing @montezdesousa suggestion: removing qua 31 jan 2024 15:01:20 WET from standard models and using it only on benzing * tests accordingly * static assets * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: teh_coderer Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Improve Standardization - `IndexHistorical` (#6030) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * fix tests * keep the skip * fix test * [Feature] - Refactor Response Model (#6024) * Start refactor with @montezdesousa * feat: add response model inside openapi_extra * feat: find+replace return types * fix: ruff * Feature/api response by provider (#6029) * init * Update router.py * Update registry_map.py * check dicts * lint * exclude provider on data model for package build * `results_type_repr` logic for `Annotated`, ignore provider field in `_extract_data` --------- Co-authored-by: Diogo Sousa Co-authored-by: teh_coderer * [BugFix] - Improve Standardization - `CotSearch` (#6031) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * keep the skip * fix test * adding missing param * fix tests accordingly * Docs/byod (#5996) * add byod to reference * fix: rename add-in name * feat: add data conectors page * fix: additional notes * tiny tweaks * update functions.json and openapi.json * fix: fix bug in hedge controller * fix: another bug hedgecontroller * black --------- Co-authored-by: DidierRLopes * Feature/ex-dividend: Renames "date" columns as "ex_dividend_date" for Dividend Calendar and Historical Dividends (#6006) * date -> ex_dividend_date * nasdaq historical dividends * black * pylint * intrinio alias_dict * dividend_currency -> currency * yfinance field name --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Adds a timezone to the Unix timestamp conversion to correct localization errors. (#6023) * fix: remove specific imports * make polygon historical tz-aware * undo including that commit * that PR wasn't supposed to be there. * pylint unused argument * fix polygon crypto historical intervals * pylint * new cassette * fix the rest of the polygon historical price query params * black * pylint.. * integration test param * appease daylight savings handling * paginate for crypto currency and index * black * raise EmptyDataError when no results instead of returning an empty list * ruff --------- Co-authored-by: Diogo Sousa * Hotfix/wrong pydantic validator (#6037) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * Use field_validator instead * fix openapi schema fields `to_snake` (#6036) * Fix data connectors link typo (#6038) * [BugFix] - Improve Standardization - `EquitySearch` (#6033) * format w new black * Revert "format w new black" This reverts commit 74b9619cc6b565f85aef1e89fc01900b86c8b991. * small adjustment on the test * index historical * adjust tests accordingly * keep the test skipped * match tests w python * use cache as std field * fix tests * fix tests * use_cache as std * adjust tests * keep the skip * re-record test * black * Docs / only display results for current platform (#6017) * Update index.js * Update index.js * yfinance * tzcache no longer exists * fixxy * ruff --------- Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek Co-authored-by: Andrew * Improve the docstrings (#6040) * Improve the docstrings (#6041) Co-authored-by: Henrique Joaquim * dont run base tests with v4 label (#6046) * Sync excel reference (#6039) * sync excel reference * fix: change delimiter to comma * feat: update data connectors * test skipping wf * Update unit-test.yml * Update unit-test.yml * test skipping wf * watch label changes * Update unit-test.yml * [Enhancement] - Improve `news` router docs and examples (#6047) * better docs * static assets * Feature/platform standardization notebook (#6049) * Add platform standardization overview notebook to examples * Add py.typed marker to openbb-fred * [Enhancement] - Improve `currency` router docs and examples (#6045) * currency search * reference rates * historical price * static assets --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * display warnings based on preference (#6051) * [Enhancement] - Improve `crypto` router docs and examples (#6048) * crypto search add validation for '-'-separated pairs * set default query value to None * improve /crypto description with custom examples * improve /crypto/price/historical description with custom examples * updated static for crypto menu * ignore line too long * linting --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Final Implementation of Changelog V2 (#6050) * Updated the release drafter to process the released changelog for OpenBB Platform * Update release drafter configuration * Add OpenBB Documentation Changes and Create Release * Update process_changelog.py path in draft-release.yml * Update release-drafter version and save changelog * Copy changelog with python * Update draft-release.yml to save Changelog * Update draft-release.yml * Encode and save Changelog to Base64 * Update Changelog saving method * Update Changelog format * Update CHANGELOG.md with release notes * Fix draft release workflow * Add cat command to print CHANGELOG.md * Add platform-drafter.yml and update release-drafter.yml and draft-release.yml * Commented out config-name in release-drafter step * Update branch name validation and process_changelog.py * Refactor process_changelog.py to improve readability and maintainability * Refactor process_changelog.py to handle file I/O errors and remove duplicate PR entries --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * improve discriminator logic, fix package return type docs (#6052) * improve discriminator logic, fix package return type docs * Update registry_map.py * build package * Update registry_map.py * defaults * Update registry_map.py --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add LLM tools example notebook (#6053) * Add LLM tools example notebook * Update README, rename example notebook --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Remove the preference (#6055) Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * [Feature] - Standardise multiple symbols input (#6056) * feat: remove list of str * fix: update cpi * package builder + cpi * build * fix: update unittests * fix: check_item * fix: unittests * Improve the docstrings (#6057) * update economy router docstrings (#6058) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix OECD Long Term Interest Rate (#6060) * fix long term interest rate * pylint unused argument * [Bugfix] - Fix economic calendar country (#6059) * fix economic calendar country * lint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [HotFix] Index Router Docstrings & `sp500_multiples()` Cleanup (#6063) * sp500 multiples cleanup * remove dict from standard model * static pacakge * pylint * [Feature] FMP Current Holdings (#6043) * add fmp current holdings to etf holdings * pylint unused argument --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Replace symbols in company/news (#6061) * feat: replace symbols in /news * fix: integration tests * fix: integration tests api * fix: typo * Update test_intrinio_fetchers.py * [Enhancement] Add function examples to router. (#6042) * options router * fixedincome router * futures router * missing comma * static assets * futures router --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] Add function examples to Regulators Router (#6054) * options router * fixedincome router * futures router * missing comma * static assets * futures router * sec router * cftc router * black --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix World News (#6064) * fix fmp * fix intrinio * fix biztoc * actually commit intrinio fix * fix tiingo * unused import * fix tests * black * ruff * benzinga empty strings * codespell * fix test? * more empty strings --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - remove unused validators from standard models (#6067) * update standard models * lint * Update USD Liquidity Example Notebook for V4 (#5902) * Update USD Liquidity Example Notebook for V4 * delete some v3 text in the copperToGold * Update README.md * findSymbols preview image * Google Colab preview image * financialStatements preview * content tsx file * ### title * convert tsx to json * indent size * double quote keys.json * trailing commas * Update content.json * patch --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix QA Examples (#6072) * [Feature] - Ensure Bugfix branches can only do PRs to `develop` branches (#6073) * bugfix branch name checks and few fixes on the linting not to run on pushes to branches outside PRs * Update branch naming guidelines link --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Feature/charting obbject (#5938) * fix circular import issues on the obbject extension framework * settings available on the obbject * extension init * charting assets and code * introduce to_chart functionality * removes the to_chart method from obbject in detriment of the one from the obbject extension * Update openbb_platform/obbject_extensions/charting/charting/__init__.py Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> * fix on the show method * adding the example to the to_chart docstring * copying the exsting README from charting extension - needs to be revamped * moving to openbb_charting instead * update the pyproject.toml file * pydocstyle * versions * better docstrings * making accessors public * removing unnecessary credentials variable cc @montezdesousa * removing access to extra/metadata and use designated private attrs instead * Fixes linting for the logging service (#5992) * lints * typing.Type instead * deprecating ChartingService to use the new extension instead - adding function discovery capabilities using it * tests for the obbject charting extension * removing charting service from command runner * filter functions not implemented in the module * remove charting service tests * removing charting service on the tests for int tests * charting integration tests * removing charting service file * removing old charting extension code * revamp builder * fix obbject tests * fix command_runner tests * removing openbb_figure_table * better website docs * reviewed readme * unsetting api key for posthog (pywry) windows * added debug_mode to the system settings * removing api key * update nightly script * fix tests * black * black * Revert "black" This reverts commit 21d76ad689087b4ad38cec55667186263363c89f. * Revert "black" This reverts commit 0904653fd73518c0d345a82f91f4cb06cfa84cb6. * black for henrique * returning a list instead * better docstrings * removing unnecessary indicators docstring * typo * black * intentional access to protected member * changes to publish script * filtering deleted files * black * adding render argument * fixing the df_to_basemodel function: it should include the index in the columns either if flagged or if the index is named * adding the hability to add you own data to to_chart method * tests * black * disable protected access * accept kwargs to eg. save image * adjustment cc Igor * add if statement for protection * remove unused return typing * fix technical charting views * better error message cc @IgorWounds * better structure and fix test * Revert "better structure and fix test" This reverts commit 612ea6117ce064d5e41f74e72e171646be614408. * Revert "better error message cc @IgorWounds" This reverts commit 3d7ee53878b7742d187e83f7e5d4c27438aa40ef. --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * Fix CAPM example (#6075) * Start removing dead v3 commands for deprecation (#6070) * Yeet tokenterminal * Yeet crypto/onchain/hr and gwei * yeet luna * yeet coinglass * yeet dps/ctb * yeet reddit * yeet covid * actually not yeeting hide yfinance future warning * yeet options/hedge * not yeeting. i18n words * something happened on accident * still fixing * git reset/git checkout -f 2516cfbc72d23a7656715314ea94cc34d4c994ee website/content * still not sure whats going on * Edit workflow to not look at deleted files + change bootup message * Dont pin the workflow to my branch always lol * Remove askobb * [Feature] - Comma separated string and list inputs (#6062) * feat: balancesheet * feat: income statement * fix: cash flow statement * feat: financial ratios * feat: reported financials * feat: revenue business line * feat: revenue per geography * fix: warnings * Update balance_sheet.py * fix: remove warning imports * feat: balance sheet growth * feat: calendar ipo * feat: cashflow growth * feat: __validators__ * fix: typing * fix: validator msg * feat: trailing dividend_yield * feat: short volume * feat: share statistics * feat: price target + consensus * fix: update validator * feat: historical dividends * feat: key executives * fix: getattr directly * fix: type hint validator * fix: add default to getattr * typo * feat: otc * feat: options chains * fix: remove list validators * feat: add validator dict to fetchers * lint * update standard models * lint * feat: rename validator * fix: ownership * feat: query params description * fix: balance yfinance * key execs, income statement * remove change * fix: revenue geographic * fix: disable pylint * fix: unusual + balance * unit test validator * minor fix * explicit validators * update test * feat: multiple items allowed * rebuild * move check_single_value * crypto historical * order providers * fix typing * rename extra dict * marking multiple items allowed * Revert "marking multiple items allowed" This reverts commit 7da04817e18b2c9e373ffde9134f3949d11f58dd. * error msg * fix: default provider runtime vs configuration * minor fix * docstring * revert default changes * get provider before executing cmd * fix container bug * clean filter * add comment * prevent bad defaults * update docstring * typing * fix * black * fix docstring generation * [Feature] - Mark multiple item fetchers (#6074) * feat: price target * bezinga company news * equity quote * marking multiple items allowed * more multiple items * black * rebuild * another batch * rebuild * another * cpi * move prop * rebuild --------- Co-authored-by: hjoaquim * rename var * update msg * rename func * fix test * mypy * ruff --------- Co-authored-by: hjoaquim * [Feature] Add Regional Data Endpoint from FRED (#6071) * add regional data endpoint from FRED * codespell * ruff * sort imports * add provder='fred' to integration test * thought I already sorted those imports.. * pylint.. * more test params.... * even more test params... * even more test params.... * static assets * reconfigure params * ruff * alias dict * recapture cassette * router doctstring --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] - Fix most integration tests (#6082) * Fix most integration tests * Lint * Fix price_target column for Benzinga (#6083) * Release/4.1.4 (#6081) * static assets * patch version increase * core update * bumping versions * bump finviz version * bump versions * bump versions on package.extension --------- Co-authored-by: James Maslek * Add dates to /quantitative as needed. (#6078) * Add dates to /quantitative as needed. Run new black * Fix tests * Pycharm is weird sometimes * uncommit * Add default window + error handling + mistake --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add end point: `etf.equity_exposure()` with FMP provider (#6079) * add etf.equity_exposure from FMP * empty data error * recapture cassette * pylint unused argument * Fix router example typo * fix test...? * static file to fix test? * fix test..? * __json_schema_extra__ * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek * [BugFix] Fix Equity Integration Tests (#6086) * fix equity integration tests * black * pylint * black * black * move df_apply to helpers * unused import * remove file that shouldn't have been added * oops. didn't remove a couple lines * [Enhancement] Add `analyst_search` to the Equity/Estimates Router (#6088) * standardize price_target * add analyst search * black * more black * ruff * linter, test parmas * last missing param * get rid of convert to upper * ruff * pylint * [BugFix] - Fix POST docstring examples (#6095) * Fix POST docstring examples. * Move router examples to command decorator * [BugFix] Fix `treasury_rates()` (#6092) * fix treasury_rates * drop rows with no data --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * clean up the remains from my yeeting (#6089) * clean up the remains from my yeeting * was not careful * Add ETF examples (#6102) Co-authored-by: Pratyush Shukla * [BugFix] Fix integration tests (#6100) * fix int tests * fix obbject int tests * fix quant tests * fix index tests * use python 3.10 instead * remove cache * end_date < start_date * [Enhancement]: Add TMX data provider extension. (#5913) * dev install * add TMX provider extension * normalize ytm and coupopn_rate values * black * codespell * ruff * black again * pylint * ftw * undo what Pylint thinks is best * more black * renovate insider_trading standard model * fix tests * typo * tests * empty string * pylint unused argument * nans for some reason * black * static files * static files with openbb-tmx installed this time * yfinance TypeError..? * NA -> N/A * update for version bump * list exchange-calendars as tmx dependency * eod chains date -> eod_date * new line * not that file * more black * one more black * fix weird merge thing * ruff * index constituents params * insider trading * fixing things * black * black AGAIN * news integration params * the other missing param * ruff * historical dividends field update * add json_schema_extra * gainers * symbols -> symbol * company news symbol * unit test param * review items * wrangle a rogue field * index router example * company news thing - symbols -> symbol * field name map --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: James Maslek * [Feature] - OBB.GET (#6097) * create OBB.GET and data slicer page * remove quotes * format description * wording * functions.json * sidebar position * remove if stamente * [Docs] Remove Reference to `to_chart` in OBBject. (#6096) * remove reference to to_chart in OBBject. * put chart description back in OBBject properties * [Feature] - Create openbb assets folder (#6101) * create openbb assets folder * fix unittest * rebuild --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fixes to_df() where the date series contains multiple TZ-offsets. (#6099) * allow mixed utc offset in a tz-aware date column * enforce ascending from all providers for price.historical * fix tests * add comments and apply treatment to basemodel_from_df before JSON output * yfinance consistency * add unit test * add unit test * better test * ruff --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Update the quantitative extension to make more sense (#6087) * Split out a rolling submenu for the rolling functions * Make a performance and a stats submenu. * Test the statistics functions * lint * lint * dupe test * pylint * ruff * Try tests quick * black magic signature funcs * fix my custom tests * Fix the existing imports/urls * push the api update * okay I figured out whats going on * this should be all of them * Correct docstringing examples --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Fix ECB Yield Curve (#6108) * fix ecb yield curve * standard model update * Update unit-test workflow to check for changes to openbb_platform (#6109) * [Bug fix] - Fix package mypy (#6110) * fix: package mypy * types * black * [Feature] - Equity router descriptions & examples (#6103) * feat: equity/calendar * feat: compare router * fix descriptions * darkpool + discovery * fix paragraph issues * fix descriptions * fundamental part 1 * fundamental part2 * transcipts * ownership * fix * price * shorts * Update darkpool_router.py * minor fix * shorts examples * examples * ruff * black --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Add `exception_h… * [Feature] - Auto-build test (#6271) * Auto-build test * Mark * [BugFix] Typo on `openbb-quantitative` readme (#6272) * typo on qa readme * typo on qa readme --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add pull_request trigger for release branches in API Integration Tests workflow (#6278) * fix: serialize response before fastapi (#6279) * [Feature] - Annotated results (#6282) * feat: pass metadata through AnnotatedData * fix: typing * fix: rename AnnotatedData to AnnotatedResult * fix: mypy * [Feature] - Merge reference.json and extension_map.json, plus documentation generator fixes (#6268) * Merge reference.json and extension_map.json * feat: check all packages are built and installed * rebuild * fix * small fix * Update package_builder.py * move core into info * move extensions into info * fix test --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * update example notebook syntax for metadata change (#6287) Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] Add Forward Sales and EPS Estimates (#6269) * add intrinio forward estimates * decorators * mypy * better sentence for descriptions * black * mypy * review things * update field --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Feature] - Router descriptions (#6288) * First try * add routers to reference.json * fix apploader * add some router descriptions * rebuild * remove pydocstyle fixes * minor fix * docstring * new descriptions * undo sub routers --------- Co-authored-by: Henrique Joaquim * Updated docs again (#6289) * [BugFix] - Fix nested router descriptions (#6292) * fix: get_routers * keep previous structure * rebuild * opt * rename var * simpler * ^ * [Feature] Adding interactive tables (#6290) * fix table html for charting extension * handling tables * fixes and maing linting happy * reset index and route as default title * drop "index" column and temp workaround for "provider" column that breaks charts. * text overload * only drop range index * better to do it on table.html --------- Co-authored-by: hjoaquim Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Fix the multiple items check (#6294) * check for multiple items when no info * check for , and ; only if it's a str --------- Co-authored-by: hjoaquim * [HotFix] Add ETF holdings data param to Intrinio (#6293) * add etf holdings date param * static files --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [Enhancement] - PyDocstyle Compliant (#6284) * PyDocstyle Compliant batch 1 * Batch 2 * Batch 3 * Batch 4 * Batch 5 * Batch 6 * Batch 7 * Linting * MyPy * mypy things * black * more mypy * black * fix that * black again * undo that * Fix error message * pylint --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [BugFix] Handling negative timestamps on Windows (#6298) * safe fromtimestamp * sage timestamp convertion on equity profile --------- Co-authored-by: hjoaquim * [Enhancement] Improve Charting Extension Plots and Indicators (#6243) * improve historical prices charts * ruff * correction in docstring. * forgot crypto in the router * pylint * that one shouldn't have changed. * pylint again * and black * add flag for heikin_ashi * better kwarg * ruff * tests * update warnings catch * ruff * pylint * don't cast warning when parameter is 'chart_params' * chart params * start backend only when the chart is about the be created * get_params * add generic line chart method for unsupported endpoints and external data * return None when render * query params * don't add volume to candle legend * better moving averages * commit some updates * add the __init__ file.. * exception handling * generic charts style * forgot to remove that print statement * codespell * generic bar charts * group bar charts * don't raise params warning when 'chart_params' in extra_params * price performance chart * black * ruff * typing things * etf price performance chart * don't warn when 'chart_params' exists * black * pylint * pylint * pylint * mypy * black * etf holdings chart * mypy * bar charts for fred * pylint * some review things * codespell * pylint * apply metadata update * unused import * typing things * ruff * weird title thing * docstring * backend syntax * black * pylint * duplicated imports outside of top level * start backend in constructor * more linters * now black * more linter * update warning ignore line * Charting class doctstring * indicator edge case * pylint * that was annoying * forgot macd indicators query params * kc default setting --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim * [BugFix] `json_schema_extra` getting overridden (#6300) * fix json_schema_extra getting overriden * keeping it as it was --------- Co-authored-by: hjoaquim Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * undocumented benzinga fields in response (#6304) * [BugFix] Fix yFinance end_date filter when not intraday. (#6302) * fix filtering by date * timedelta as minutes --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Fix metadata creation (#6306) * fix metadata creation * fix metadata creation * adapt tests * adapt tests * adapt tests --------- Co-authored-by: hjoaquim * [BugFix] - Provider is added to every response item (#6305) * Exclude provider and don't model_dump * still missing docstrings * undo package changes * minor fix * mypy * minor fix * cleaner * private var * docstring * docstrings * add package builder tests * ruff * rename * rename * update tests * minor fix * fix test * handle docstring edge cases * test * [BugFix] Fixes the API (#6309) * stops the API from breaking. * black * whitespace. * [Feature] - Update credential filters to v4 (#5949) * update cred filters to v4 * ignore v3 key if v4 is there already * add comment + unit test * update hub state instead of replacing * remove unused file * fix unittests * ruff * add comment * remove lc * black * comment * comment * comment * comment * send warning if v3 keys found * tradier v3 * keep v3 intact * better * unit test + minor fixes * cleaner * comment * sorted * remove unecessary class * remove ultima from v3tov4 map * unit test v3tov4 map * unit test v3tov4 map * unit test v3tov4 map * providers.json * ^ --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Add single widgets public endpoints examples (#6312) * Add single widgets public endpoints examples * add couple more examples * imrpove documentation * update with video * [BugFix] Charts: Fix Legend & Title Crowding in Jupyter (#6316) * better jupyter legend * add that to the commit * [BugFix] Chunk FMP Price Performance URL For Large Lists (#6317) * chunk price performance url * black * recapture fmp tests * fix tests * type * remove terminal related artifacts from build folder (#6307) Co-authored-by: hjoaquim Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * [BugFix] Replace Platform Docker File. (#6321) * api.dockerfile * move Rust install * add rust to PATH * Install dev tools * no -e * Fix build failing for router-only extensions with no standard models (#6324) * fix charting test * [BugFix] Add Missing require_credentials=False In Nasdaq Fetchers (#6320) * missing require_credentials=False * pylint disable unused argument --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> * Fix tests * Fix Intrinio fetcher * available indices fetcher * [BugFix] Adding safe timestamp conversion everywhere (#6299) * safe fromtimestamp * sage timestamp convertion on equity profile * safe fromtimestamp * fix imports * Lint * Force UTC Currency Snapshots * Add that to market_snapshots too. * black * ignoring some typing * ignoring some typing * typing * typing * typing --------- Co-authored-by: hjoaquim Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> * [Docs] Charting Documentation (#6303) * start to charting docs * Add images to landing page * Add images to indicators * codespell * add some examples * Add screenshots * codespell * missing image * [Feature] - LLM mode (#6308) * LLM mode * Docstring truncation * Preferences * Output type * use settings instead? (#6314) * Refactor with @montezdesousa * fix test * fix: max length type * field descriptions * try with FieldInfo * ugly... * partial * override FieldInfo __repr__ * typing * separate model_config * rename OpenBBCustomParameter to OpenBBField * lint * pydocstyle * don't include choices if no choices --------- Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: Diogo Sousa * pylint unused argument * [Feature] Add Relative Rotation To `openbb-technical` and `openbb-charting` (#6277) * add relative rotation * router examples * docstring * test params * black * name of test functions * router example description * fix NoneType is not iterable * clear print * linting * black * revert that one place, it can stay None * forgot that file in the commit * some cleanup * improving the get_type_name funciton a bit * query_params types * pylint --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim Co-authored-by: hjoaquim * core * extensions and providers * update dependencies on the openbb platform package * bumping commodity * bumping commodity * static * commodity version * Update __extensions__.py * extension map * more files * clear merge conflicts * forgot to clear check artifact * more linting stuff apparently --------- Co-authored-by: Henrique Joaquim Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: James Maslek Co-authored-by: Pratyush Shukla Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com> Co-authored-by: teh_coderer Co-authored-by: Diogo Sousa Co-authored-by: DidierRLopes Co-authored-by: Andrew Co-authored-by: Theodore Aptekarev Co-authored-by: Luqman Co-authored-by: Michael Struwig Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com> Co-authored-by: capital0 <72140796+capital0@users.noreply.github.com> Co-authored-by: Ben Van Doren Co-authored-by: Adi Sai Co-authored-by: Sandip Saha Co-authored-by: Adwait <111136306+AdwaitSalankar@users.noreply.github.com> Co-authored-by: Abhishek Amar <66067391+abhishek-amar@users.noreply.github.com> Co-authored-by: professssor <62937125+professssor@users.noreply.github.com> Co-authored-by: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Co-authored-by: MAX SHESTOV <57421753+maxxsh@users.noreply.github.com> Co-authored-by: jose-donato Co-authored-by: Mohamad Fadil Co-authored-by: Ramazan Co-authored-by: joshuabuildsthings Co-authored-by: wojda <114031148+polooner@users.noreply.github.com> Co-authored-by: Bim Phomthong <118195204+bimbolimbo@users.noreply.github.com> Co-authored-by: Ramazan Co-authored-by: omahs <73983677+omahs@users.noreply.github.com> Co-authored-by: minhhoang1023 <40023817+minhhoang1023@users.noreply.github.com> Co-authored-by: Ayrton Parkinson Co-authored-by: northern-64bit <75195383+northern-64bit@users.noreply.github.com> Co-authored-by: Luqman Co-authored-by: Eric Li <38477812+EricLi-Dev@users.noreply.github.com> Co-authored-by: Colin Delahunty <72827203+colin99d@users.noreply.github.com> --- .github/workflows/linting.yml | 1 + .../platform-api-integration-test.yml | 3 + .gitignore | 6 + CONTRIBUTING.md | 2 - build/README.md | 69 - build/docker/api.dockerfile | 20 +- build/docker/build.sh | 26 - build/docker/compose.env | 2 - build/docker/docker-compose.x11.yaml | 6 - build/docker/docker-compose.yaml | 12 - build/docker/openbb.dockerfile | 75 - build/nsis/assets/Installer_horizontal.bmp | Bin 57514 -> 0 bytes build/nsis/assets/Installer_horizontal2.png | Bin 18794 -> 0 bytes build/nsis/assets/Installer_horizontall.png | Bin 19275 -> 0 bytes build/nsis/assets/Installer_vertical#2.png | Bin 98181 -> 0 bytes build/nsis/assets/Installer_vertical.png | Bin 99496 -> 0 bytes build/nsis/assets/Installer_vertical2.bmp | Bin 357254 -> 0 bytes build/nsis/assets/Splashscreen #2.png | Bin 1510901 -> 0 bytes build/nsis/assets/Splashscreen.png | Bin 1572407 -> 0 bytes build/nsis/assets/openbb_icon.ico | Bin 19566 -> 0 bytes build/nsis/license.txt | 3 - build/nsis/setup.nsi | 277 - build/pyinstaller/.env | 26 - build/pyinstaller/build4mac.sh | 27 - build/pyinstaller/entitlements.plist | 18 - build/pyinstaller/hooks/hook-debugpy.py | 8 - build/pyinstaller/hooks/hook-pytrends.py | 3 - build/pyinstaller/hooks/hook-rich.py | 3 - build/pyinstaller/hooks/hook-streamlit.py | 3 - build/pyinstaller/hooks/hook-whisper.py | 35 - build/pyinstaller/hooks/hook-xgboost.py | 3 - build/pyinstaller/hooks/pyi_rth_inspect.py | 39 - build/pyinstaller/macOS/.gitignore | 1 - build/pyinstaller/macOS/build-macos.sh | 216 - build/pyinstaller/macOS/darwin/Distribution | 36 - .../macOS/darwin/Resources/LICENSE.txt | 21 - .../darwin/Resources/background-light.png | Bin 239545 -> 0 bytes .../macOS/darwin/Resources/background.png | Bin 885099 -> 0 bytes .../macOS/darwin/Resources/banner.png | Bin 14337 -> 0 bytes .../macOS/darwin/Resources/conclusion.html | 35 - .../macOS/darwin/Resources/uninstall.sh | 73 - .../macOS/darwin/Resources/welcome.html | 14 - .../macOS/darwin/scripts/postinstall | 3 - .../OpenBB Terminal/OpenBB Terminal | 31 - .../macOS_package_assets/README.TXT | 1 - build/pyinstaller/setup_icons.applescript | 20 - .../pyinstaller/setup_icons_post.applescript | 20 - build/pyinstaller/terminal.spec | 217 - build/pyinstaller/version.rc | 42 - build/pypi/openbb_terminal/build.sh | 9 - build/pypi/openbb_terminal/test_publish.sh | 9 - examples/usdLiquidityIndex.ipynb | 24 +- openbb_platform/assets/providers.json | 58 + .../core/integration/test_obbject.py | 2 + openbb_platform/core/openbb_core/__init__.py | 1 + .../core/openbb_core/api/app_loader.py | 18 + .../core/openbb_core/api/auth/user.py | 3 +- .../openbb_core/api/dependency/__init__.py | 1 + .../core/openbb_core/api/rest_api.py | 2 +- .../core/openbb_core/api/router/__init__.py | 1 + .../core/openbb_core/api/router/commands.py | 9 +- .../core/openbb_core/app/__init__.py | 1 + .../core/openbb_core/app/command_runner.py | 35 +- .../core/openbb_core/app/deprecation.py | 1 + .../formatters/formatter_with_exceptions.py | 28 +- .../handlers/path_tracking_file_handler.py | 11 +- .../openbb_core/app/logs/handlers_manager.py | 14 +- .../openbb_core/app/logs/logging_service.py | 15 +- .../app/logs/models/logging_settings.py | 5 + .../app/logs/utils/expired_files.py | 10 +- .../core/openbb_core/app/logs/utils/utils.py | 10 +- .../core/openbb_core/app/model/__init__.py | 1 + .../app/model/abstract/__init__.py | 1 + .../openbb_core/app/model/abstract/error.py | 3 + .../openbb_core/app/model/abstract/results.py | 2 + .../app/model/abstract/singleton.py | 5 + .../openbb_core/app/model/abstract/tagged.py | 4 + .../openbb_core/app/model/abstract/warning.py | 7 +- .../{fast_api_settings.py => api_settings.py} | 2 +- .../openbb_core/app/model/charts/chart.py | 7 + .../openbb_core/app/model/command_context.py | 4 + .../core/openbb_core/app/model/credentials.py | 2 +- .../openbb_core/app/model/custom_parameter.py | 35 - .../core/openbb_core/app/model/defaults.py | 3 + .../core/openbb_core/app/model/field.py | 28 + .../app/model/hub/features_keys.py | 37 - .../openbb_core/app/model/hub/hub_session.py | 6 + .../app/model/hub/hub_user_settings.py | 9 +- .../core/openbb_core/app/model/metadata.py | 171 +- .../core/openbb_core/app/model/obbject.py | 61 +- .../core/openbb_core/app/model/preferences.py | 24 +- .../core/openbb_core/app/model/profile.py | 5 + .../openbb_core/app/model/python_settings.py | 23 + .../openbb_core/app/model/results/__init__.py | 1 + .../openbb_core/app/model/results/empty.py | 4 +- .../openbb_core/app/model/system_settings.py | 11 +- .../openbb_core/app/provider_interface.py | 114 +- .../core/openbb_core/app/router.py | 121 +- .../openbb_core/app/service/auth_service.py | 10 +- .../openbb_core/app/service/hub_service.py | 90 +- .../openbb_core/app/service/system_service.py | 2 + .../openbb_core/app/service/user_service.py | 1 + .../core/openbb_core/app/static/__init__.py | 1 + .../core/openbb_core/app/static/account.py | 29 +- .../openbb_core/app/static/app_factory.py | 15 +- .../core/openbb_core/app/static/container.py | 1 + .../openbb_core/app/static/package_builder.py | 505 +- .../app/static/utils/decorators.py | 2 +- .../openbb_core/app/static/utils/filters.py | 11 + openbb_platform/core/openbb_core/app/utils.py | 2 +- .../core/openbb_core/app/version.py | 5 + openbb_platform/core/openbb_core/env.py | 19 +- .../provider/abstract/annotated_result.py | 20 + .../openbb_core/provider/abstract/fetcher.py | 15 +- .../core/openbb_core/provider/registry_map.py | 105 +- .../provider/standard_models/etf_holdings.py | 8 +- .../standard_models/forward_eps_estimates.py | 67 + .../forward_sales_estimates.py | 68 + .../standard_models/options_chains.py | 3 +- .../standard_models/price_target_consensus.py | 9 +- .../core/openbb_core/provider/utils/client.py | 4 + .../openbb_core/provider/utils/helpers.py | 12 +- openbb_platform/core/pyproject.toml | 2 +- .../tests/api/test_dependency/__init__.py | 1 + .../core/tests/api/test_router/__init__.py | 1 + openbb_platform/core/tests/app/__init__.py | 1 + .../core/tests/app/logs/__init__.py | 1 + .../tests/app/logs/formatters/__init__.py | 1 + .../test_formatter_with_exceptions.py | 21 + .../core/tests/app/logs/handlers/__init__.py | 1 + .../test_path_tracking_file_handler.py | 7 + .../app/logs/handlers/test_posthog_handler.py | 13 + .../tests/app/logs/test_handlers_manager.py | 15 + .../tests/app/logs/test_logging_service.py | 12 + .../core/tests/app/logs/utils/__init__.py | 1 + .../app/logs/utils/test_expired_files.py | 22 +- .../core/tests/app/logs/utils/test_utils.py | 11 +- .../core/tests/app/model/__init__.py | 1 + .../core/tests/app/model/abstract/__init__.py | 1 + .../tests/app/model/abstract/test_results.py | 5 +- .../app/model/abstract/test_singleton.py | 8 + .../tests/app/model/abstract/test_tagged.py | 4 + .../tests/app/model/abstract/test_warning.py | 5 + .../core/tests/app/model/charts/__init__.py | 1 + .../core/tests/app/model/charts/test_chart.py | 8 +- .../core/tests/app/model/hub/__init__.py | 1 + .../tests/app/model/hub/test_features_keys.py | 10 - .../tests/app/model/hub/test_hub_session.py | 4 + .../app/model/hub/test_hub_user_settings.py | 3 + .../tests/app/model/test_command_context.py | 4 + .../core/tests/app/model/test_credentials.py | 7 +- .../core/tests/app/model/test_defaults.py | 4 + .../core/tests/app/model/test_metadata.py | 43 +- .../core/tests/app/model/test_preferences.py | 3 + .../core/tests/app/model/test_profile.py | 3 + .../tests/app/model/test_system_settings.py | 8 + .../tests/app/model/test_user_settings.py | 3 + .../core/tests/app/results/__init__.py | 1 + .../core/tests/app/results/test_empty.py | 3 + .../core/tests/app/service/__init__.py | 1 + .../tests/app/service/test_hub_service.py | 145 +- .../core/tests/app/static/__init__.py | 1 + .../core/tests/app/static/test_app_factory.py | 7 + .../core/tests/app/static/test_filters.py | 1 + .../tests/app/static/test_package_builder.py | 67 +- .../tests/app/static/test_reference_loader.py | 5 + .../tests/app/static/utils/test_linters.py | 1 + .../core/tests/app/test_charting_manager.py | 1 + .../core/tests/app/test_command_runner.py | 19 +- .../core/tests/app/test_deprecation.py | 2 + openbb_platform/core/tests/app/test_utils.py | 14 + .../core/tests/provider/test_registry_map.py | 12 +- .../core/tests/provider/utils/test_client.py | 3 + .../core/tests/provider/utils/test_helpers.py | 12 +- openbb_platform/extensions/__init__.py | 1 + .../integration/test_commodity_api.py | 2 + .../integration/test_commodity_python.py | 1 + .../commodity/openbb_commodity/__init__.py | 1 + .../openbb_commodity/commodity_router.py | 2 +- .../extensions/commodity/poetry.lock | 482 +- .../extensions/commodity/pyproject.toml | 4 +- .../crypto/integration/test_crypto_api.py | 3 + .../crypto/integration/test_crypto_python.py | 2 + .../crypto/openbb_crypto/__init__.py | 1 + .../crypto/openbb_crypto/crypto_router.py | 2 +- .../crypto/openbb_crypto/price/__init__.py | 1 + openbb_platform/extensions/crypto/poetry.lock | 8 +- .../extensions/crypto/pyproject.toml | 4 +- .../currency/integration/test_currency_api.py | 5 + .../integration/test_currency_python.py | 4 + .../openbb_currency/currency_router.py | 4 +- .../extensions/currency/poetry.lock | 8 +- .../extensions/currency/pyproject.toml | 4 +- .../integration/test_derivatives_api.py | 5 + .../integration/test_derivatives_python.py | 4 + .../openbb_derivatives/derivatives_router.py | 2 +- .../extensions/derivatives/poetry.lock | 8 +- .../extensions/derivatives/pyproject.toml | 4 +- .../extensions/devtools/pyproject.toml | 2 +- .../integration/test_econometrics_api.py | 11 + .../integration/test_econometrics_python.py | 18 + .../openbb_econometrics/__init__.py | 1 + .../econometrics_router.py | 2 +- .../econometrics/openbb_econometrics/utils.py | 9 +- .../extensions/econometrics/poetry.lock | 8 +- .../extensions/econometrics/pyproject.toml | 4 +- .../economy/integration/test_economy_api.py | 18 + .../integration/test_economy_python.py | 15 + .../economy/openbb_economy/__init__.py | 1 + .../economy/openbb_economy/economy_router.py | 42 +- .../economy/openbb_economy/gdp/gdp_router.py | 6 +- .../extensions/economy/poetry.lock | 8 +- .../extensions/economy/pyproject.toml | 4 +- .../equity/integration/test_equity_api.py | 135 +- .../equity/integration/test_equity_python.py | 128 +- .../openbb_equity/compare/compare_router.py | 6 +- .../openbb_equity/darkpool/darkpool_router.py | 3 +- .../discovery/discovery_router.py | 10 +- .../equity/openbb_equity/equity_router.py | 8 +- .../estimates/estimates_router.py | 46 + .../ownership/ownership_router.py | 3 +- openbb_platform/extensions/equity/poetry.lock | 8 +- .../extensions/equity/pyproject.toml | 4 +- .../etf/integration/test_etf_api.py | 24 + .../etf/integration/test_etf_python.py | 21 + .../extensions/etf/openbb_etf/etf_router.py | 10 +- openbb_platform/extensions/etf/poetry.lock | 8 +- openbb_platform/extensions/etf/pyproject.toml | 4 +- .../integration/test_fixedincome_api.py | 30 +- .../integration/test_fixedincome_python.py | 23 + .../openbb_fixedincome/fixedincome_router.py | 2 +- .../extensions/fixedincome/poetry.lock | 8 +- .../extensions/fixedincome/pyproject.toml | 4 +- .../index/integration/test_index_api.py | 11 + .../index/integration/test_index_python.py | 8 + .../index/openbb_index/index_router.py | 12 +- openbb_platform/extensions/index/poetry.lock | 8 +- .../extensions/index/pyproject.toml | 4 +- .../news/integration/test_news_api.py | 5 + .../news/integration/test_news_python.py | 2 + .../extensions/news/openbb_news/__init__.py | 1 + .../news/openbb_news/news_router.py | 2 +- openbb_platform/extensions/news/poetry.lock | 8 +- .../extensions/news/pyproject.toml | 4 +- .../extensions/quantitative/README.md | 2 +- .../integration/test_quantitative_api.py | 27 +- .../integration/test_quantitative_python.py | 22 + .../performance/performance_router.py | 2 + .../quantitative_router.py | 2 +- .../rolling/rolling_router.py | 3 +- .../openbb_quantitative/statistics.py | 20 +- .../openbb_quantitative/stats/stats_router.py | 15 +- .../extensions/quantitative/poetry.lock | 8 +- .../extensions/quantitative/pyproject.toml | 4 +- .../tests/test_quantitative_helpers.py | 1 + .../quantitative/tests/test_statistics.py | 7 + .../integration/test_regulators_api.py | 11 + .../integration/test_regulators_python.py | 8 + .../regulators/openbb_regulators/__init__.py | 1 + .../openbb_regulators/cftc/cftc_router.py | 2 +- .../openbb_regulators/regulators_router.py | 2 +- .../openbb_regulators/sec/__init__.py | 1 + .../openbb_regulators/sec/sec_router.py | 4 +- .../extensions/regulators/poetry.lock | 8 +- .../extensions/regulators/pyproject.toml | 4 +- .../integration/test_technical_api.py | 41 + .../integration/test_technical_python.py | 71 + .../technical/openbb_technical/helpers.py | 34 +- .../openbb_technical/relative_rotation.py | 554 + .../openbb_technical/technical_router.py | 152 +- .../extensions/technical/poetry.lock | 8 +- .../extensions/technical/pyproject.toml | 4 +- .../technical/tests/test_technical_helpers.py | 1 + openbb_platform/extensions/tests/__init__.py | 1 + openbb_platform/extensions/tests/conftest.py | 2 +- .../extensions/tests/utils/__init__.py | 1 + .../extensions/tests/utils/helpers.py | 2 +- .../charting/integration/test_charting_api.py | 279 +- .../integration/test_charting_python.py | 211 +- .../charting/openbb_charting/__init__.py | 509 +- .../openbb_charting/charting_router.py | 1024 +- .../charting/openbb_charting/core/__init__.py | 1 + .../charting/openbb_charting/core/backend.py | 1 + .../openbb_charting/core/config/__init__.py | 1 + .../core/config/openbb_styles.py | 70 +- .../openbb_charting/core/dummy_backend.py | 12 +- .../openbb_charting/core/openbb_figure.py | 36 +- .../charting/openbb_charting/core/plotly.html | 14 +- .../core/plotly_ta/__init__.py | 1 + .../openbb_charting/core/plotly_ta/base.py | 6 +- .../core/plotly_ta/data_classes.py | 2 +- .../core/plotly_ta/plugins/__init__.py | 1 + .../plugins/custom_indicators_plugin.py | 25 +- .../core/plotly_ta/plugins/momentum_plugin.py | 93 +- .../core/plotly_ta/plugins/overlap_plugin.py | 9 +- .../plugins/trend_indicators_plugin.py | 5 +- .../plotly_ta/plugins/volatility_plugin.py | 16 +- .../core/plotly_ta/plugins/volume_plugin.py | 9 +- .../core/plotly_ta/ta_class.py | 140 +- .../core/plotly_ta/ta_helpers.py | 5 +- .../charting/openbb_charting/core/table.html | 2319 +- .../charting/openbb_charting/core/to_chart.py | 3 +- .../charting/openbb_charting/query_params.py | 833 +- .../openbb_charting/styles/__init__.py | 1 + .../charting/openbb_charting/styles/colors.py | 39 + .../styles/default/dark.pltstyle.json | 55 +- .../styles/default/light.pltstyle.json | 889 +- .../openbb_charting/utils/generic_charts.py | 606 + .../charting/openbb_charting/utils/helpers.py | 75 +- .../utils/relative_rotation.py | 582 + .../obbject_extensions/charting/poetry.lock | 8 +- .../charting/pyproject.toml | 4 +- .../charting/tests/__init__.py | 1 + .../charting/tests/test_charting.py | 63 +- .../openbb/assets/extension_map.json | 29 - openbb_platform/openbb/assets/reference.json | 53849 ++++++++-------- .../openbb/package/__extensions__.py | 44 +- openbb_platform/openbb/package/crypto.py | 6 +- .../openbb/package/crypto_price.py | 14 +- openbb_platform/openbb/package/currency.py | 12 +- .../openbb/package/currency_price.py | 14 +- .../openbb/package/derivatives_options.py | 14 +- openbb_platform/openbb/package/economy.py | 162 +- openbb_platform/openbb/package/economy_gdp.py | 46 +- openbb_platform/openbb/package/equity.py | 26 +- .../openbb/package/equity_calendar.py | 46 +- .../openbb/package/equity_compare.py | 9 +- .../openbb/package/equity_discovery.py | 50 +- .../openbb/package/equity_estimates.py | 331 +- .../openbb/package/equity_fundamental.py | 236 +- .../openbb/package/equity_ownership.py | 44 +- .../openbb/package/equity_price.py | 30 +- .../openbb/package/equity_shorts.py | 8 +- openbb_platform/openbb/package/etf.py | 70 +- openbb_platform/openbb/package/fixedincome.py | 12 +- .../openbb/package/fixedincome_corporate.py | 71 +- .../openbb/package/fixedincome_government.py | 19 +- .../openbb/package/fixedincome_rate.py | 76 +- .../openbb/package/fixedincome_spreads.py | 40 +- openbb_platform/openbb/package/index.py | 28 +- openbb_platform/openbb/package/news.py | 28 +- .../openbb/package/regulators_sec.py | 38 +- openbb_platform/providers/__init__.py | 1 + .../providers/alpha_vantage/__init__.py | 1 + .../openbb_alpha_vantage/models/__init__.py | 1 + .../models/equity_historical.py | 6 +- .../openbb_alpha_vantage/utils/__init__.py | 1 + .../openbb_alpha_vantage/utils/helpers.py | 7 +- .../providers/alpha_vantage/poetry.lock | 8 +- .../providers/alpha_vantage/pyproject.toml | 4 +- .../providers/alpha_vantage/tests/__init__.py | 1 + .../tests/test_alpha_vantage_fetchers.py | 5 + .../providers/benzinga/__init__.py | 1 + .../openbb_benzinga/models/__init__.py | 1 + .../openbb_benzinga/models/analyst_search.py | 86 +- .../openbb_benzinga/models/price_target.py | 13 +- .../openbb_benzinga/utils/__init__.py | 1 + .../providers/benzinga/poetry.lock | 8 +- .../providers/benzinga/pyproject.toml | 4 +- .../providers/benzinga/tests/__init__.py | 1 + .../benzinga/tests/test_benzinga_fetchers.py | 7 + openbb_platform/providers/biztoc/__init__.py | 1 + .../biztoc/openbb_biztoc/models/__init__.py | 1 + .../biztoc/openbb_biztoc/utils/__init__.py | 1 + .../biztoc/openbb_biztoc/utils/helpers.py | 19 +- openbb_platform/providers/biztoc/poetry.lock | 8 +- .../providers/biztoc/pyproject.toml | 4 +- .../providers/biztoc/tests/__init__.py | 1 + .../biztoc/tests/test_biztoc_fetchers.py | 4 + openbb_platform/providers/cboe/__init__.py | 1 + .../cboe/openbb_cboe/models/futures_curve.py | 3 +- .../cboe/openbb_cboe/utils/helpers.py | 29 +- openbb_platform/providers/cboe/poetry.lock | 8 +- openbb_platform/providers/cboe/pyproject.toml | 4 +- .../providers/cboe/tests/__init__.py | 1 + .../cboe/tests/test_cboe_fetchers.py | 11 + .../ecb/openbb_ecb/models/__init__.py | 1 + .../ecb/openbb_ecb/utils/__init__.py | 1 + openbb_platform/providers/ecb/poetry.lock | 8 +- openbb_platform/providers/ecb/pyproject.toml | 4 +- .../providers/federal_reserve/__init__.py | 1 + .../providers/federal_reserve/poetry.lock | 8 +- .../providers/federal_reserve/pyproject.toml | 4 +- .../tests/test_federal_reserve_fetchers.py | 5 + openbb_platform/providers/finra/__init__.py | 1 + .../finra/openbb_finra/utils/helpers.py | 19 +- openbb_platform/providers/finra/poetry.lock | 8 +- .../providers/finra/pyproject.toml | 4 +- .../finra/tests/test_finra_fetchers.py | 5 + openbb_platform/providers/finviz/__init__.py | 1 + .../finviz/openbb_finviz/models/__init__.py | 1 + .../openbb_finviz/models/compare_groups.py | 2 +- .../finviz/openbb_finviz/utils/__init__.py | 1 + openbb_platform/providers/finviz/poetry.lock | 8 +- .../providers/finviz/pyproject.toml | 4 +- .../providers/finviz/tests/__init__.py | 1 + .../finviz/tests/test_finviz_fetchers.py | 6 + openbb_platform/providers/fmp/__init__.py | 1 + .../providers/fmp/openbb_fmp/__init__.py | 2 + .../openbb_fmp/models/currency_snapshots.py | 11 +- .../fmp/openbb_fmp/models/equity_quote.py | 22 +- .../fmp/openbb_fmp/models/etf_holdings.py | 2 +- .../models/etf_holdings_performance.py | 2 +- .../models/forward_eps_estimates.py | 153 + .../fmp/openbb_fmp/models/key_executives.py | 16 +- .../fmp/openbb_fmp/models/market_indices.py | 2 + .../fmp/openbb_fmp/models/market_snapshots.py | 20 +- .../openbb_fmp/models/price_performance.py | 30 +- .../models/price_target_consensus.py | 15 +- .../fmp/openbb_fmp/utils/__init__.py | 1 + .../providers/fmp/openbb_fmp/utils/helpers.py | 3 +- openbb_platform/providers/fmp/poetry.lock | 8 +- openbb_platform/providers/fmp/pyproject.toml | 4 +- .../providers/fmp/tests/__init__.py | 1 + .../test_fmp_equity_forward_eps_fetcher.yaml | 269 + ..._fmp_etf_holdings_performance_fetcher.yaml | 299 +- .../test_fmp_price_performance_fetcher.yaml | 31 +- .../providers/fmp/tests/test_fmp_fetchers.py | 80 +- .../fred/openbb_fred/models/series.py | 41 +- openbb_platform/providers/fred/poetry.lock | 8 +- openbb_platform/providers/fred/pyproject.toml | 4 +- .../providers/government_us/__init__.py | 1 + .../models/treasury_prices.py | 7 +- .../openbb_government_us/utils/__init__.py | 1 + .../providers/government_us/poetry.lock | 8 +- .../providers/government_us/pyproject.toml | 4 +- .../providers/government_us/tests/__init__.py | 1 + .../providers/intrinio/__init__.py | 1 + .../intrinio/openbb_intrinio/__init__.py | 12 + .../openbb_intrinio/models/equity_info.py | 2 +- .../openbb_intrinio/models/etf_holdings.py | 15 +- .../models/forward_eps_estimates.py | 229 + .../models/forward_sales_estimates.py | 248 + .../models/historical_attributes.py | 38 +- .../models/latest_attributes.py | 5 +- .../models/market_snapshots.py | 8 +- .../models/price_target_consensus.py | 182 + .../openbb_intrinio/models/world_news.py | 2 +- .../intrinio/openbb_intrinio/utils/helpers.py | 2 +- .../providers/intrinio/poetry.lock | 8 +- .../providers/intrinio/pyproject.toml | 4 +- .../providers/intrinio/tests/__init__.py | 1 + ...ntrinio_forward_eps_estimates_fetcher.yaml | 48 + ...rinio_forward_sales_estimates_fetcher.yaml | 52 + ...trinio_price_target_consensus_fetcher.yaml | 38 + .../intrinio/tests/test_intrinio_fetchers.py | 74 + openbb_platform/providers/nasdaq/__init__.py | 1 + .../nasdaq/openbb_nasdaq/models/__init__.py | 1 + .../openbb_nasdaq/models/calendar_dividend.py | 1 + .../openbb_nasdaq/models/calendar_earnings.py | 4 + .../nasdaq/openbb_nasdaq/models/cot.py | 6 +- .../nasdaq/openbb_nasdaq/models/cot_search.py | 4 + .../models/historical_dividends.py | 14 +- .../nasdaq/openbb_nasdaq/utils/__init__.py | 1 + openbb_platform/providers/nasdaq/poetry.lock | 8 +- .../providers/nasdaq/pyproject.toml | 4 +- .../providers/nasdaq/tests/__init__.py | 1 + .../nasdaq/tests/test_nasdaq_fetchers.py | 14 + openbb_platform/providers/oecd/__init__.py | 1 + .../oecd/openbb_oecd/utils/helpers.py | 26 +- openbb_platform/providers/oecd/poetry.lock | 8 +- openbb_platform/providers/oecd/pyproject.toml | 4 +- .../oecd/tests/test_oecd_fetchers.py | 10 + openbb_platform/providers/polygon/__init__.py | 1 + .../polygon/openbb_polygon/models/__init__.py | 1 + .../models/crypto_historical.py | 18 +- .../models/currency_historical.py | 18 +- .../models/equity_historical.py | 18 +- .../openbb_polygon/models/index_historical.py | 14 +- .../openbb_polygon/models/market_indices.py | 8 +- .../polygon/openbb_polygon/utils/__init__.py | 1 + .../polygon/openbb_polygon/utils/helpers.py | 27 +- openbb_platform/providers/polygon/poetry.lock | 8 +- .../providers/polygon/pyproject.toml | 4 +- .../polygon/tests/test_polygon_fetchers.py | 15 + openbb_platform/providers/sec/__init__.py | 1 + .../sec/openbb_sec/models/__init__.py | 1 + .../sec/openbb_sec/models/company_filings.py | 10 +- .../sec/openbb_sec/models/equity_ftd.py | 4 +- .../sec/openbb_sec/utils/__init__.py | 1 + .../providers/sec/openbb_sec/utils/helpers.py | 31 +- .../sec/openbb_sec/utils/parse_13f.py | 8 +- openbb_platform/providers/sec/poetry.lock | 8 +- openbb_platform/providers/sec/pyproject.toml | 4 +- .../providers/sec/tests/__init__.py | 1 + .../providers/sec/tests/test_sec_fetchers.py | 14 + .../providers/seeking_alpha/poetry.lock | 8 +- .../providers/seeking_alpha/pyproject.toml | 4 +- .../providers/seeking_alpha/tests/__init__.py | 1 + .../tests/test_seeking_alpha_fetchers.py | 4 + .../providers/stockgrid/__init__.py | 1 + .../providers/stockgrid/poetry.lock | 8 +- .../providers/stockgrid/pyproject.toml | 4 +- .../tests/test_stockgrid_fetchers.py | 4 + openbb_platform/providers/tests/__init__.py | 1 + .../providers/tests/utils/__init__.py | 1 + openbb_platform/providers/tiingo/__init__.py | 1 + openbb_platform/providers/tiingo/poetry.lock | 8 +- .../providers/tiingo/pyproject.toml | 4 +- .../tiingo/tests/test_tiingo_fetchers.py | 9 + openbb_platform/providers/tmx/__init__.py | 1 + .../tmx/openbb_tmx/models/__init__.py | 1 + .../openbb_tmx/models/calendar_earnings.py | 8 +- .../tmx/openbb_tmx/models/company_news.py | 19 +- .../openbb_tmx/models/equity_historical.py | 6 +- .../tmx/openbb_tmx/models/equity_profile.py | 9 +- .../tmx/openbb_tmx/models/equity_quote.py | 11 +- .../tmx/openbb_tmx/models/gainers.py | 2 +- .../openbb_tmx/models/index_constituents.py | 5 +- .../tmx/openbb_tmx/models/index_snapshots.py | 6 +- .../tmx/openbb_tmx/models/insider_trading.py | 8 +- .../models/price_target_consensus.py | 12 +- .../tmx/openbb_tmx/utils/__init__.py | 1 + .../providers/tmx/openbb_tmx/utils/helpers.py | 116 +- openbb_platform/providers/tmx/poetry.lock | 8 +- openbb_platform/providers/tmx/pyproject.toml | 4 +- .../providers/tmx/tests/__init__.py | 2 +- .../providers/tmx/tests/test_tmx_fetchers.py | 24 + openbb_platform/providers/tradier/__init__.py | 1 + .../tradier/openbb_tradier/models/__init__.py | 1 + .../models/equity_historical.py | 9 +- .../openbb_tradier/models/equity_quote.py | 9 +- .../openbb_tradier/models/options_chains.py | 17 +- .../tradier/openbb_tradier/utils/__init__.py | 1 + openbb_platform/providers/tradier/poetry.lock | 8 +- .../providers/tradier/pyproject.toml | 4 +- .../providers/tradier/tests/__init__.py | 1 + .../tradier/tests/test_tradier_fetchers.py | 5 + .../providers/tradingeconomics/__init__.py | 1 + .../models/economic_calendar.py | 2 + .../utils/countries.py | 2 + .../utils/url_generator.py | 8 +- .../providers/tradingeconomics/poetry.lock | 8 +- .../providers/tradingeconomics/pyproject.toml | 4 +- .../tests/test_tradingeconomics_fetchers.py | 4 + .../tests/test_url_generator.py | 9 + openbb_platform/providers/wsj/__init__.py | 1 + openbb_platform/providers/wsj/poetry.lock | 8 +- openbb_platform/providers/wsj/pyproject.toml | 4 +- .../providers/wsj/tests/test_wsj_fetchers.py | 6 + .../providers/yfinance/__init__.py | 1 + .../models/available_indices.py | 5 +- .../openbb_yfinance/models/equity_profile.py | 10 +- .../openbb_yfinance/models/etf_info.py | 3 +- .../models/price_target_consensus.py | 12 +- .../yfinance/openbb_yfinance/utils/helpers.py | 32 +- .../providers/yfinance/poetry.lock | 8 +- .../providers/yfinance/pyproject.toml | 4 +- .../providers/yfinance/tests/__init__.py | 1 + .../yfinance/tests/test_yfinance_fetchers.py | 31 + .../yfinance/tests/test_yfinance_helpers.py | 2 + openbb_platform/pyproject.toml | 82 +- openbb_platform/tests/conftest.py | 3 + openbb_platform/tests/test_auto_build.py | 35 + openbb_platform/tests/test_extension_map.py | 16 +- poetry.lock | 7403 +-- website/.gitignore | 5 - website/content/excel/functions.json | 599 +- website/content/excel/openapi.json | 10726 +-- .../how-to/add_data_provider_extension.md | 3 +- .../extensions/charting/_category_.json | 4 + .../platform/extensions/charting/examples.md | 165 + .../platform/extensions/charting/index.md | 358 + .../extensions/charting/indicators.md | 384 + .../extensions/charting/installation.md | 71 + .../platform/extensions/toolkit_extensions.md | 50 +- website/content/pro/advanced-search.md | 2 +- .../index.md => architecture.md} | 6 +- website/content/pro/copilot/index.md | 6 +- .../content/pro/dashboards/_category_.json | 4 +- .../pro/data-connectors/_category_.json | 2 +- .../data-connectors/single-widget/examples.md | 23 + .../index.md} | 2 +- .../pro/getting-started/_category_.json | 4 - .../content/pro/getting-started/free-trial.md | 41 - website/content/pro/index.md | 49 +- website/content/pro/templates/_category_.json | 4 + website/content/pro/templates/excel.md | 28 + website/content/pro/templates/index.md | 34 + website/content/pro/templates/pro.md | 18 + website/content/pro/tutorials/_category_.json | 2 +- website/content/pro/tutorials/index.md | 2 +- website/content/pro/widgets/_category_.json | 2 +- website/generate_excel_markdown.py | 174 +- website/generate_platform_v4_markdown.py | 399 +- 585 files changed, 47289 insertions(+), 46102 deletions(-) delete mode 100644 build/README.md delete mode 100644 build/docker/build.sh delete mode 100644 build/docker/compose.env delete mode 100644 build/docker/docker-compose.x11.yaml delete mode 100644 build/docker/docker-compose.yaml delete mode 100644 build/docker/openbb.dockerfile delete mode 100644 build/nsis/assets/Installer_horizontal.bmp delete mode 100644 build/nsis/assets/Installer_horizontal2.png delete mode 100644 build/nsis/assets/Installer_horizontall.png delete mode 100644 build/nsis/assets/Installer_vertical#2.png delete mode 100644 build/nsis/assets/Installer_vertical.png delete mode 100644 build/nsis/assets/Installer_vertical2.bmp delete mode 100644 build/nsis/assets/Splashscreen #2.png delete mode 100644 build/nsis/assets/Splashscreen.png delete mode 100644 build/nsis/assets/openbb_icon.ico delete mode 100644 build/nsis/license.txt delete mode 100644 build/nsis/setup.nsi delete mode 100644 build/pyinstaller/.env delete mode 100755 build/pyinstaller/build4mac.sh delete mode 100644 build/pyinstaller/entitlements.plist delete mode 100644 build/pyinstaller/hooks/hook-debugpy.py delete mode 100644 build/pyinstaller/hooks/hook-pytrends.py delete mode 100644 build/pyinstaller/hooks/hook-rich.py delete mode 100644 build/pyinstaller/hooks/hook-streamlit.py delete mode 100644 build/pyinstaller/hooks/hook-whisper.py delete mode 100644 build/pyinstaller/hooks/hook-xgboost.py delete mode 100644 build/pyinstaller/hooks/pyi_rth_inspect.py delete mode 100644 build/pyinstaller/macOS/.gitignore delete mode 100755 build/pyinstaller/macOS/build-macos.sh delete mode 100644 build/pyinstaller/macOS/darwin/Distribution delete mode 100644 build/pyinstaller/macOS/darwin/Resources/LICENSE.txt delete mode 100644 build/pyinstaller/macOS/darwin/Resources/background-light.png delete mode 100644 build/pyinstaller/macOS/darwin/Resources/background.png delete mode 100644 build/pyinstaller/macOS/darwin/Resources/banner.png delete mode 100644 build/pyinstaller/macOS/darwin/Resources/conclusion.html delete mode 100644 build/pyinstaller/macOS/darwin/Resources/uninstall.sh delete mode 100644 build/pyinstaller/macOS/darwin/Resources/welcome.html delete mode 100644 build/pyinstaller/macOS/darwin/scripts/postinstall delete mode 100755 build/pyinstaller/macOS_package_assets/OpenBB Terminal/OpenBB Terminal delete mode 100644 build/pyinstaller/macOS_package_assets/README.TXT delete mode 100644 build/pyinstaller/setup_icons.applescript delete mode 100644 build/pyinstaller/setup_icons_post.applescript delete mode 100644 build/pyinstaller/terminal.spec delete mode 100644 build/pyinstaller/version.rc delete mode 100755 build/pypi/openbb_terminal/build.sh delete mode 100755 build/pypi/openbb_terminal/test_publish.sh create mode 100644 openbb_platform/assets/providers.json rename openbb_platform/core/openbb_core/app/model/{fast_api_settings.py => api_settings.py} (98%) delete mode 100644 openbb_platform/core/openbb_core/app/model/custom_parameter.py create mode 100644 openbb_platform/core/openbb_core/app/model/field.py delete mode 100644 openbb_platform/core/openbb_core/app/model/hub/features_keys.py create mode 100644 openbb_platform/core/openbb_core/app/model/python_settings.py create mode 100644 openbb_platform/core/openbb_core/provider/abstract/annotated_result.py create mode 100644 openbb_platform/core/openbb_core/provider/standard_models/forward_eps_estimates.py create mode 100644 openbb_platform/core/openbb_core/provider/standard_models/forward_sales_estimates.py delete mode 100644 openbb_platform/core/tests/app/model/hub/test_features_keys.py create mode 100644 openbb_platform/extensions/technical/openbb_technical/relative_rotation.py create mode 100644 openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly_ta/plugins/__init__.py create mode 100644 openbb_platform/obbject_extensions/charting/openbb_charting/styles/__init__.py create mode 100644 openbb_platform/obbject_extensions/charting/openbb_charting/styles/colors.py create mode 100644 openbb_platform/obbject_extensions/charting/openbb_charting/utils/generic_charts.py create mode 100644 openbb_platform/obbject_extensions/charting/openbb_charting/utils/relative_rotation.py delete mode 100644 openbb_platform/openbb/assets/extension_map.json create mode 100644 openbb_platform/providers/fmp/openbb_fmp/models/forward_eps_estimates.py create mode 100644 openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_forward_eps_fetcher.yaml create mode 100644 openbb_platform/providers/intrinio/openbb_intrinio/models/forward_eps_estimates.py create mode 100644 openbb_platform/providers/intrinio/openbb_intrinio/models/forward_sales_estimates.py create mode 100644 openbb_platform/providers/intrinio/openbb_intrinio/models/price_target_consensus.py create mode 100644 openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_eps_estimates_fetcher.yaml create mode 100644 openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_sales_estimates_fetcher.yaml create mode 100644 openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_price_target_consensus_fetcher.yaml create mode 100644 openbb_platform/tests/test_auto_build.py create mode 100644 website/content/platform/extensions/charting/_category_.json create mode 100644 website/content/platform/extensions/charting/examples.md create mode 100644 website/content/platform/extensions/charting/index.md create mode 100644 website/content/platform/extensions/charting/indicators.md create mode 100644 website/content/platform/extensions/charting/installation.md rename website/content/pro/{getting-started/index.md => architecture.md} (96%) create mode 100644 website/content/pro/data-connectors/single-widget/examples.md rename website/content/pro/data-connectors/{single-widget.md => single-widget/index.md} (98%) delete mode 100644 website/content/pro/getting-started/_category_.json delete mode 100644 website/content/pro/getting-started/free-trial.md create mode 100644 website/content/pro/templates/_category_.json create mode 100644 website/content/pro/templates/excel.md create mode 100644 website/content/pro/templates/index.md create mode 100644 website/content/pro/templates/pro.md diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index ff98d8e8f6e..2f068019a35 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -70,6 +70,7 @@ jobs: if [ -n "${{ env.platform_files }}" ]; then pylint ${{ env.platform_files }} mypy ${{ env.platform_files }} --ignore-missing-imports --scripts-are-modules --check-untyped-defs + pydocstyle ${{ env.platform_files }} else echo "No Python files changed in openbb_platform" fi diff --git a/.github/workflows/platform-api-integration-test.yml b/.github/workflows/platform-api-integration-test.yml index 92b7073045b..11b4c9c5d40 100644 --- a/.github/workflows/platform-api-integration-test.yml +++ b/.github/workflows/platform-api-integration-test.yml @@ -2,6 +2,9 @@ name: API Integration Tests on: workflow_dispatch: + pull_request: + branches: + - release/* concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/.gitignore b/.gitignore index e92f1407831..bdd736b86dc 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,9 @@ lightning_logs/ # Platform auto generated files openbb_platform/openbb/package/* + +# Reference files +website/content/excel/reference/* +website/content/excel/reference/*/* +website/content/platform/data_models/* +website/content/platform/reference/* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51e9141e239..62f9111ca92 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1716,8 +1716,6 @@ The `develop` branch is only merged to `main` right before a new release, but so 3. merge `docs/[my-update]` into `main` -> website deployment triggered 4. merge `docs/[my-update]` into `develop` -> NO website deployment, just to sync branches -The `docs/docs-name` branch is used to update documentation in-between releases, it will trigger the website deployment to GitHub pages. - ## Installers When implementing a new feature or fixing something within the codebase, it is necessary to ensure that it is working diff --git a/build/README.md b/build/README.md deleted file mode 100644 index 0d9dcc1b1b2..00000000000 --- a/build/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Building Installers -This guide serves to assist developers construct OpenBB Terminal installers on macOS and Windows. - -## Overview -Building an installer takes source code as input and produces deployable software as an output. For MacOS the output is a DMG while for Windows it is an EXE. This process utilizes two major modules: Pyinstaller & Create-dmg. Windows additionally recruits the service of NSIS. There are two ways to build an installer: locally or through Github. - -## Local -In this section we detail the steps necessary to construct an installer locally on a Windows machine and Mac machine. These steps can be performed on either one of these operating systems so long as they have the OpenBBTerminal repository codebase. This process assumes you already have a working conda environment. Building locally usually takes anywhere from 10-20 minutes. - -### MacOS Steps -1. `brew install create-dmg` - - This installs create-dmg and its dependencies onto your system through brew. - -1. `poetry install -E installer` - - This install pyinstaller and its dependencies onto your environment. - -3. `build/pyinstaller/build4mac.sh` - - This runs a shell script that auto-builds the DMG and stores it on the root of your repository. - -4. (Optional) `/Full/Path/To/OpenBB\ Terminal/.OpenBB/OpenBBTerminal /Full/Path/To/OpenBBTerminal/OpenBBTerminal/scripts/*.openbb -t` - - This runs integration tests on your newly created installer. - -### Windows Steps -1. `poetry install -E installer` - - This install pyinstaller and its dependencies onto your environment. - -2. `pyinstaller build/pyinstaller/terminal.spec` - - This runs a shell script that auto-builds the DMG and stores it on the root of your repository. - -3. `cp -r .\dist\OpenBBTerminal\ .\build\nsis\app\` - - This copies over the contents of the newly dist folder into the app folder so that NSIS can utilize them. - -4. Compile NSIS Scripts - - Open *NSIS*, click on the "Compile NSI scripts", and then drag the `setup.nsi` file in build\nsis to the window. This creates the EXE installer. - -4. (Optional) `Full\Path\To\OpenBBTerminal.exe Full\Path\To\OpenBBTerminal\OpenBBTerminal\scripts -t` - - This runs integration tests on your newly created installer. - - -## Github -In order to utilize the automated build workflow on the OpenBBTerminal repo, the branch in which you would like to build an installer from must already be a branch on the repo. You can also utilize the automated build workflow on a PR that is from a branch on the repo. You cannot run an automated build on a forked branch or even a PR from a forked branch. - -If you are using this method to create an installer, there is a limitation where only one build automation can occur at a time per workflow. For example if there is already an installer being created on the ‘Intel MacOS Build’ workflow, any subsequent requests for building will be queued. Additionally, the ‘Windows10 Build’ workflow runs relatively slowly because of the size of the EC2 instance it is currently on. As such, if you are interested in a quick build, then I would suggest building locally. Furthermore, building an installer this way also automatically runs integration tests on the installer. - -If you run into a circumstance where a requested build is queued for a long period of time, this might mean that the EC2 instance is not connected to github. If something like this arises, please create an issue. - -### Steps -1. Navigate to `Actions` -2. Navigate to your desired build system workflow -3. Choose your desired branch & click Run Workflow -4. Download your installer artifact - - Each build system produces a single installer which can be subsequently downloaded. - -5. Investigate the success/failure of your Build - - You can click on the build to delve into the steps it takes to construct an installer. This is where you can investigate the success of integration tests, identify if/where the build failed, etc. - - -Note: Intel Mac installers are signed and notarized. During this step you can identify if notarization has succeeded or failed and if all of the binaries have been signed in correctly. diff --git a/build/docker/api.dockerfile b/build/docker/api.dockerfile index 430b8511d5b..c384555f9f8 100644 --- a/build/docker/api.dockerfile +++ b/build/docker/api.dockerfile @@ -1,5 +1,5 @@ # ---- Base Python ---- -FROM python:3.10-slim-buster AS base +FROM python:3.11-slim-bullseye AS base # set work directory WORKDIR /openbb @@ -10,19 +10,33 @@ ENV PYTHONUNBUFFERED 1 # install dependencies RUN apt-get update \ - && apt-get install -y --no-install-recommends build-essential openssh-client \ + && apt-get install -y --no-install-recommends build-essential openssh-client curl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +# install toml and poetry +RUN pip install toml poetry + # ---- Copy Files/Build ---- FROM base AS builder WORKDIR /openbb +# install Rust +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ + && apt-get update \ + && apt-get install -y --no-install-recommends libwebkit2gtk-4.0-dev \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# add Rust to PATH +ENV PATH="/root/.cargo/bin:${PATH}" + COPY ./openbb_platform ./openbb_platform # Install the SDK -RUN pip install /openbb/openbb_platform +RUN pip install /openbb/openbb_platform[all] +RUN pip install openbb-devtools # ---- Copy Files ---- FROM base diff --git a/build/docker/build.sh b/build/docker/build.sh deleted file mode 100644 index a61148f313b..00000000000 --- a/build/docker/build.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -echo "Building docker release" - -if [ -z "$OPENBBTERMINAL_DOCKER_RELEASE_VERSION" ] -then - read -p "Version number (X.Y.Z format): " OPENBBTERMINAL_DOCKER_RELEASE_VERSION -fi - -# SET DEFAULT PARAMETERS IF EMPTY -OPENBBTERMINAL_DOCKER_REGISTRY="${OPENBBTERMINAL_DOCKER_REGISTRY:-ghcr.io}" -OPENBBTERMINAL_DOCKER_GITHUB_REPOSITORY="${OPENBBTERMINAL_DOCKER_GITHUB_REPOSITORY:-openbb-finance/openbbterminal}" -OPENBBTERMINAL_DOCKER_RELEASE_VERSION="${OPENBBTERMINAL_DOCKER_RELEASE_VERSION:-0.0.0}" -# SET IMAGES NAMES -OPENBBTERMINAL_DOCKER_POETRY_IMAGE=${OPENBBTERMINAL_DOCKER_REGISTRY,,}/${OPENBBTERMINAL_DOCKER_GITHUB_REPOSITORY,,}/openbb:${OPENBBTERMINAL_DOCKER_RELEASE_VERSION,,} -OPENBBTERMINAL_DOCKER_POETRY_IMAGE_LATEST=${OPENBBTERMINAL_DOCKER_REGISTRY,,}/${OPENBBTERMINAL_DOCKER_GITHUB_REPOSITORY,,}/openbb:latest - -# DISPLAY PARAMETERS -echo "OPENBBTERMINAL_DOCKER_REGISTRY = $OPENBBTERMINAL_DOCKER_REGISTRY" -echo "OPENBBTERMINAL_DOCKER_GITHUB_REPOSITORY = $OPENBBTERMINAL_DOCKER_GITHUB_REPOSITORY" -echo "OPENBBTERMINAL_DOCKER_RELEASE_VERSION = $OPENBBTERMINAL_DOCKER_RELEASE_VERSION" -# DISPLAY IMAGES NAMES -echo "OPENBBTERMINAL_DOCKER_POETRY_IMAGE = $OPENBBTERMINAL_DOCKER_POETRY_IMAGE" - -# Docker command to build image -docker build -f build/docker/openbb.dockerfile -t "${OPENBBTERMINAL_DOCKER_POETRY_IMAGE}" -t "${OPENBBTERMINAL_DOCKER_POETRY_IMAGE_LATEST}" . \ No newline at end of file diff --git a/build/docker/compose.env b/build/docker/compose.env deleted file mode 100644 index bc8a9bcb697..00000000000 --- a/build/docker/compose.env +++ /dev/null @@ -1,2 +0,0 @@ -OPENBBTERMINAL_DOCKER_REGISTRY="ghcr.io" -OPENBBTERMINAL_DOCKER_RELEASE_VERSION="3.2.5" diff --git a/build/docker/docker-compose.x11.yaml b/build/docker/docker-compose.x11.yaml deleted file mode 100644 index a10f5594d5a..00000000000 --- a/build/docker/docker-compose.x11.yaml +++ /dev/null @@ -1,6 +0,0 @@ -services: - openbb: - environment: - DISPLAY: ${DISPLAY} - volumes: - - /tmp/.X11-unix:/tmp/.X11-unix diff --git a/build/docker/docker-compose.yaml b/build/docker/docker-compose.yaml deleted file mode 100644 index c4193a96b7c..00000000000 --- a/build/docker/docker-compose.yaml +++ /dev/null @@ -1,12 +0,0 @@ -version: '3.8' -services: - openbb: - environment: - DISPLAY: host.docker.internal:0.0 - volumes: - - ~/OpenBBUserData:/home/python/OpenBBUserData - - ~/.openbb_terminal:/home/python/.openbb_terminal - platform: linux/amd64 - image: ghcr.io/openbb-finance/openbbterminal/openbb:latest - stdin_open: true # docker run -i - tty: true # docker run -t diff --git a/build/docker/openbb.dockerfile b/build/docker/openbb.dockerfile deleted file mode 100644 index 81731b5197a..00000000000 --- a/build/docker/openbb.dockerfile +++ /dev/null @@ -1,75 +0,0 @@ -# SETUP PYTHON IMAGE -FROM --platform=linux/amd64 python:3.10-slim-bullseye as python - -LABEL org.opencontainers.image.source https://github.com/OpenBB-finance/OpenBBTerminal - -# SETUP DEBIAN IMAGE -FROM python as debian - -RUN apt-get update - -RUN apt-get -y install --no-install-recommends \ - gcc \ - g++ \ - make - -RUN apt-get -y install --no-install-recommends \ - git - -RUN apt-get -y install --no-install-recommends \ - curl \ - wget - -RUN apt-get -y install --no-install-recommends \ - libsm6 \ - libxt6 \ - libgl1-mesa-glx \ - libpng16-16 \ - libwebkit2gtk-4.0-dev \ - build-essential \ - libssl-dev \ - librsvg2-dev \ - ffmpeg \ - python3-tk - -RUN apt-get clean - -RUN useradd --create-home --shell /bin/bash python - -USER python -WORKDIR /home/python - -# SETUP POETRY IMAGE -FROM debian as poetry - -ENV PATH="/home/python/.local/bin:${PATH}" - -RUN pip install --upgrade pip wheel -RUN pip install poetry==1.4.0 - -# SETUP OPENBB IMAGE -FROM poetry as repository - -COPY --chown=python:python pyproject.toml poetry.lock terminal.py ./ - -RUN mkdir openbb_terminal -COPY --chown=python:python openbb_terminal openbb_terminal - -RUN mkdir -p website/content/sdk -COPY --chown=python:python ./website/content/sdk/installation.md ./website/content/sdk - -RUN mkdir OpenBBUserData -RUN chown python:python OpenBBUserData - -RUN mkdir .openbb_terminal -RUN chown python:python .openbb_terminal - -# SETUP OPENBB IMAGE -FROM repository as dependencies - -RUN poetry install --no-root --no-dev --extras optimization --extras forecast - -# SETUP OPENBB IMAGE -FROM dependencies as openbb - -CMD ["poetry", "run", "python", "terminal.py"] diff --git a/build/nsis/assets/Installer_horizontal.bmp b/build/nsis/assets/Installer_horizontal.bmp deleted file mode 100644 index 7de270256996faa5063a43679935999e70b33187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57514 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%0D{;uZ(YbU$*ia8VGNs_pef3H}XknRbg@o6$g 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 IM6N<$f&=Ze*#H0l diff --git a/build/nsis/assets/Installer_vertical2.bmp b/build/nsis/assets/Installer_vertical2.bmp deleted file mode 100644 index 54f9b618845da81a4cc64a13763b832f7c98aca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357254 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 =(H~3st9_5_H%z?r{U_WU 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ð%>TzEX7b+-IuIMcY}Mk@69OW6L)R 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 z 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

W}r>x>Wfw5|0sv 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%0D6urXiIASXlEXc`7hUSqsi`RTQ=R8 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

JZE{mHc`t@ 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

    ~AG}wvU^0WqW{$1}sTGMY4%H{q?W` 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�yi<*K~V)UuI+ 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�yPFVfEhLZ9;b(CM4~kMNaHka=o?wq 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 diff --git a/build/nsis/assets/Splashscreen.png b/build/nsis/assets/Splashscreen.png deleted file mode 100644 index a0c18bd195f643c818f0623c1a9839b4c6dda825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1572407 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Μ&A+ zU&#^rq^XFIy0zrVfz?lhZdysbf37qQiLqXYfu0}Wzl^i>PqM`Eue@(b?U8~*%dYz4 z7uNsP*TEXQt@k;j9?vZ)H=lDF``FU7de`1?C*YOalGJcY|zQ@WWHi|ps{>L_aM6%Y_+N4Oo zYt~>*`@WnLM@TG+1zE#LY{$mvciB{Pfo_zdk4A4Y)p;^%RSu~DEe_#J4j(+Wr z9chVJ+7X!PH9XbFcuMN#YZs0GUUv!7Z5#fG|LwCqmudg1;J?9`+pK@_7x*GM0mrvq z8JjX!{D47=CuoN)#qmJ+#B92Tj$8PQl_o8jmxPT z>TzRZcc!qmed-$@Y2m-s!F8}gXYs#Xt%TO}2;27AZD(xC>+l~PI+d5=ScT53J677a zcAo(5?9KG)84~fY`dV>Zq_g3^!Vly&+9?FzBo;UBS^Y0tjC_?_u>$7GH} z_Xq9MS}64uVDGw6>ihsf`1y=�YR8oqy$9F)T!{W`hWE1j=Gju8qN7OdCfl7CN0c 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 z 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,SKxsI=WfIXAmu|dkNrwy1= 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 hMvJd()7^5P*DaiL&OB3p!UCnwwM_sYkR~Z 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

    dCs=tmPA=JBMbC1z^z6L197+fg?dV-KHaydh3 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⩽5>zgFqs@s~6;U7d5{Umle|C~j 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 z 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 Zx1$9Ifr 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

    D2QX)2B2hi2b-y>gl>j{%(0y%QFURcVc^y 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

    D1JLqm>b0m(Z4jhE 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 =WpcuXS&W%(lHayg{X_CS{u^(? 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

    q&mqVom|2i0<4YVVJrMo$~7YBFA1v#D+fK; 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 zianjb®6QDs=WM6`2Mx$~tu@kXPauCe8Zi|*GRi_F-h`a^8C?6x5?1`UQXs+S8|vQFcE!)CS(&cUmRX`1HqR98peA>!|_) z0;YkX*0}XknWOmzB}{`2Me=s)?)ll_4P zI+sAbN2&9j9F zj%I)UBi&Ox`ztud>yD_;HT&+ve^-b02X_BU-y_f;Vf|vK?bmunoqnNHa<3h1B4GTY z#}h9$z&Ooadn}K(sg17vECc7*Li-+m%)zTI z$9L4dAZpiNQl6XbYBD?9UfWw{vhodfe`1c)LHqGFt>I?zUIKj69IXStrgSTq9{6P} zDQKO`Rvqha31qrADI1v&a>x~w54V3Y$$^NG@q>>)xhGE%Ga6`4IVhjku%pX#VKF$q zhaFSs%e11no6uO3m7SdSreg?do)Tsu^?Buz?=h$$a+l6MTQ><9PTF&GPlg)xuIPS@!8ClOK@iC@;Iwo!$Q6;Pj{(hW1m= z)JvF+RI+_yfcwbr5A|gat@ru+Vf22lH*vl@=eu=iSmik4*;eGU{EhY{H~Z-ZMzF)2_KFy@d;{!`HR0> zMoZh`X7|NCuEltJTi$0u@WXQ1ob3=TmVWAC!fMa^I2{VhqC3}{Y;>c*(`?65m1+9T zNY3NL?*1YS>Z(ZOKfq|w+|SW+hd05eT-_mPFkGK+t2h>etjRSEyuoESl`jqkKalEM ze&gf%3E+f#SwloAwcN{C{JjDjP4I`O+m{h@DU>$~a<>`-Swt$xJ!NjR+QFgsF1Ov~ zLXO^W39KpV!3;z@OcB1q=fHUGk!ZLlVnK99@O+aTix<$ifm?65ZiYy!F+^oqNot3B zxAQ3KryCA2&Mi%4k)+NdaWZb~5Tn5x%;^4I-E4{YhQ}agCU!3Py$EE14~%a&saYYD z^P_=4_3=FzHftRGn%N6EsC+#?173oUn<)XG_~3`zAU;q5DU-i9|2MK|#8t(P_!&|4 z|IhW?^jjHdaccLKDFGH@!#yBM=MsTz2t#P|gZFIzBUg(^uZSjHxde-}F{8 zKel@tT7Mf@umF=dDF6E{E1Pk0+Vlq z@?YU&ftyhPNEZ=TT4TU=O8zeab2xZUtA0urWYZb~j9GKNX1Zms0i9gvv{a2J5B)iV zk$f~>jN_}5?|bsfCJb^Go#L(WsT@%mh{x~#!(FLJh>laSm*fc1de?WY*yqftzU z%w-7yHdv;Od0-3Ip=W10bxhJFwthZD-~97`A{%dW8eO*Y9W?l9tf~IL5UIwI_D*q# zj9PMaDTQRRW|Iv?tWIq?*{PL0y(=(7RK?OzOP5;ae*=+*ZFJ7}3Nqe!uAgeH8TGT1 zE_&VKO!`bUc(T=)bCO+9PH{Fxoq5hHZnT@ncYF9@jP~+RDJB--OWs0mv+K6!m!F9* z><}$JpN^(Lxgo%$(OY6T46%dc1IRtpxDh?&cOV+Tbig*6FTR?nxG&*aqpiqJ8kU-^ z=Zc`oy^*lHfoU{Zenmh1Dlj>SfC)o`bo-5}-gjA$&A(aR!7F%k%rcKvZlk(n5#`k9 z@w?OkgYYvy89QLc55-m9BxBBr-9Y$&)}o2SCH8wsMvPJ9yZ|`cm7Bz1_2C;3~#pyB_=)31-2Qy@D1{tO&0!3X%aYi9mj`Q8X}6 zXPb%}xnl8T>4Y)PS=VRV0gun(wy<$6_qmas9>^lOZ1j~xCU>cBuRKaz+^WX)g%SoR z>)4;X<36w|exPr72w1_mGc%xtqN5$FJ8B-T_RrvoZlx7(=GqXZyJ$g!8sAz6HrP_TQD1-(A65KSrlW9Prw~{e zec4hrPQaaYlVp0;ZlRYZpNZF7H!dN-g*U?Ei*7FX(f1M7_^AJvl;@x4HRI+_e8J@npIQk7 z+Ufqin+ps!C519+x=U!M(TsVX!yTF}vDJ1goxdlWV?Nw4hHD-jbbx$d!qD#zMVsJj zF?=(=Z1db>%wIQRSIr=ArEm|PKIglKaER)z>ztBVz#Jw_L)T6>(?O&maQJQ-Bz(+b z%|WwO)sVf0u=6|_<8$BSgl46~evhMp$ygeDV5@EVH4-l;}$clX2S;TA|= z9|7BQwb{Owd&(N*$Ws95j=sS&!ijT#KiFgrbMBu2w%vEPxgZ1Pjp&ED*yzWYL@+oD zCn6p%4+V7i4Q{~h<6c971H!fO-mb;0x=pz4U(VvfADAVFWw3m+%Lr}&o_@xc=;y0j zq>K&bZPeWd#k1(T-&A&A_x;+&(hYql%j)O4f_Ks^)D^KawB_2((BfQAa^6M~!7cbu zAMfDM&Z$4*a=jGg^Oaj+F?PFyhS@5L(Iz?l+M#feKH!@Us7S*eJyDdcBPO&OrW;dg7mp&02UF zIl8IS_bRBzp40`T(MdjLMt%g656iM5RgZNsEnXWOHwMMlKz7jJ3avy&t(_r1Pg!u| zVH`BtgBHJkt`7A8UZoKi{_lyt^VNc@OR;6m-aY9eHjE!m0{I#Lu{bm}g?&^XKU@_3 zU3MWRX#$Zbf@EB4u220g#UI4sSP)H)?u3)tQ=;qeeaRJP-9DS(_xLA}$Pi6+!Ypw9 z7aF0`>Yrii(V&aK`^dMM#stx^nN2q*Rg~I(n3AvwY{o%r?-&ARevE9^gOpUVO(Zx?4jbmwk^D4tyjK&NE1&Te-5|EfHC7MDiSJ4!nTga!j{;eK;`N{n z$Cr#>Vw`Hz3CdtYS`ThEwaHkPF{2p9XjHj9qu@7hpt>RubdTnjUs~FnT@O8Lj99f? z_`gBqQE|Z%1KJp7h12$6v=mqzv_fs3!-2othZ$h2#KKki`f<$UHW~=f!~-* zMhJFd6Q23acqNyzh4#c(;u0IV0hJSMu?%x;8*4$5?T`<89%p-s>MYI~WWM>7em0Tq z-r79yY^g0>=^5jyD;ullB^)dphGgSQAI>zR=N;&0t50&Gl^x#5Nq<2pw00I3@X{^U z4A(VOW-;w$ZJ!02BZ6PC5vEa~702q})@0phHK*A&5Z3f=AgA$mAgvs_%oGhrLoji9 zLSgAwD271wpJOIQM&M-8oi6nGlox)Wd&gzF0PWTA z4Cgi3&f4n3VSCaXK-wTbvj?Bp0MNOg`*4E)&@MRx(tM&OO|W;!Y4hv<&;w_g;qdua zaO7um_&=HcpK^rXPqu;GF2};I&H4Z3fgjucbnG91_&Z0B%iq-bGyZKgW9NwQa7^@} z^3Q;xByd|V+tvY@r*eqg3I>spEvM;)B_<@pa&^Qe1*pPt$WS%uK6~4x1 z0yLf{bhS-1jB3DHJ=Rpv=kc2Iq7^c?qrHcz9u2jY-)QQ3@D6OPg1qo!%zpztZUqp8 z*9Ja&-ejHR`k%&u_x}>(DCX0lWqa+-o!}G;<#W2f758I&u?*To=+U#jD7YE@W{@Qa z{KC*W=XLF$$VGVh>F`H7%%1Th@%{Nx+Q-8f`~YLG@5>z^J+SU7wCCnCete~U_oKZf z{Hjp}Gu}IxzEoZ<=it53=oNzaAt|<6##?QQughw}%)H(_B4bVLxk2K@oS(o#v3kfj z+MK%^vylBf9tY}g>th<<-FCMtnv);k!SXpSwZ5&t`q+tK{08!9v`={ttufx7ILwo@ zoce7rx7>LfWr}*m*9*L>=W?7SfQw<($X6iBgFy5w; zp&rN>G42)FM&Eeg+kpR!!`tV#;~S0N7iAdQcJ$=`5_h64e*LD~?`|oK=5BJ^8|`=b zV>`Jid;go^zy0&SczwfzI?a;sNkH)vy}FU?k__bmANN)lYjU#oglpnoiABCWv%y2s zY_=^^{^#O@$;YotKTuD@rvtg$o#W%C;uj~id}u%hiB|L z;o`XkGi!2bG`Ub!rNZ{}tDq z+ssJi16>`p+{dB$UtuC-5w9)Q_Aw(joSknMJP=w0)(e|m)Xn`BMa0ibqqhybcfk~O z#dYIttGi{t@Iqr1&Tb#M+X(TpUf}S4tFF5Pj z+0@%1&P;L|46rdq$YY`vBexy6_IQ=vYF0F+@CAJ;`D7$Kd~LnfnY}Z^SM#)t`*yz3D~`WAU;fD0)Ai zs6||~zg7&EK-o;0(Sc2zY%oiP=GQ5U!2$T?T3szd2f>iMgM&Ow*}3V(7>_zXoz}~y ztQN#~|NWF5>>RhkM+0zr^O}&p{6b4OjWA)zT6q8sJ#k8My&u#n!Lkfj6O~IEccOoJ z@m%-6gk#d@odhKHHC`YF67X<8&>B8#rMrl=-4!bHSj8hwKQ zds#^&$E%AIob<)=oAxtieV*u{P>+yoB1avp(mwm6wIH<*m@4L28zS zz36k1^>QYvQ{s)4TaDlA4gO5Mo7EGaO$sS=m;O3M!TOxNoF;Nig7ut{YhRucW4Z0M zdyBf|AiIeQFLH&!j(@;&cWKQ4%y_^J;uB_L(m&#FKc_79BhjBtVHb90WJAh~5S=HY zGOpO%FEsg~|H~l-Q-d)ov>)1z$@a&i<6_@#G^NZYcoFqYOQ(W^CzE0a{)V9frHvvYxlf(T5JObCgz_bJI6RvMG`(Y@J z9p&&%N0?##M57Jk-_$$&5pO#`eE1;u{fm$Dv1m#=cydxJ+Im|$=iB)4y_1{n@>4U8dt+NvYPkE{30set zdEM$2jlleFy2Bppn{l*zwKCft&u!udaer{(2dw`JjBT)j*8Bcr-BX4QcMC_l`~Ay| zH6!(b?+K3+Tr+)XK*@@wonKBKk7r+;aL*%%_t;mr*^|z@60ZI~z)lH8-trbNS7HtE2#j`QpM)zCjK8vH} zd)Jh?2LJ*{Lk545I>Q40$?mL~ze_Ocd!yVgV~lKVtI7L)b6Ya7CD!JX;MkOc-Q%h4 z{zByy_0-D=>d$QVAC0Jq$9EsBa~B9oOA+(ud;i;i zU*AV}G6~dJe%)q1XyTR|(H?z<^=VcQsPMNJ7T`@Z3vc50!f&R0yKT%sQm%_2yEgC&Uk><99z0KOAO+t$u`xi5K{IVf#qyhs|t_sVIjq~!>3%i$xZ z7ugBdvJy|luuK(MGb)6xHYnkG?)Srgs?X35BoFkuxoW8xw_*h9T~}bbn09Nr-5hiA z?aE&-4Afh+f%)FXnN>XVar$3ClamchX;ka5 z4F3eX34{2_{MXvA*pxoKk!xfwBQ1<`3%Nu_xU?I`@Ffe>n7F>XG=SW7Y~+rL5wR9B zB9p%@pS)n@!|=soNr+{3gD~;EzJ9vsa$`Zne$;0*{EE7Qa$oRc%kHi}4$ek;M%g3t zDRGMkMp2ycv0`p92{NdD)2VW`-7(cmF1(TJCStnziPQI@=hgfl9I7a1NUmPn=37BT z_}1*3ikI50d_rRSbd>0OPIqI~#-^b+TJN*^0%Mf{*0?B{bjpm0%U#z=B zPcdKOoNv7O8t>fdzR9e75~=eJD`*LQ)*2Hd{+c&cZ7>a_MMf56^@hZ7 zs@s8rf1!uPFC@bl?$t+_>nvQTLIk3zyjBkgyBFUZhST=Yg{MN?v z$8r8J&q%&_hK&Xf!yM5SJ6dbc(>>;O5=OaqdLu3+iR|b+pWC@D=z?Bn8;$iTmi9nm zHXAA0rztKw_;#mrJbWL*>r)Iiib+Sk&Y|(s{M?YkVf@K1S04xJiN~~$gO6DOlZzKuWSg1qjD#SVGm0EX#@4LYRHQ6{Hr`%MHnt_|+_y0^>R zkVLB|z2;D1K`7hCGFVbZ0YWh}0UtveXrP|E%k1V+}LvWRbY$9fDFJ_$w&+HA`w z86(yu!$8}Qj#_^$CY{Eavbvi+@A;E0YbdN5w{P7g72caE&V{^)CvQB$O#3{cQ2ifm z4A&0zKTOv|K_t-Y?1cU#dFa=FHI_X5M_1oBq20ygjCb&r` z$DYCn+a5N^Mi3}mw6$*c98jy<=|Jn(x|G{{r83c({IoD5U!0RQYWxf9RM6eVZ0mI7 zXdvgfPzIYdSp6=asu7;!R(9zdB-V}FaHqriLxdf_$(aje=B4D|D@L%cAQ(GcEK#*N z#T4A;KG5VF5@Vg6$^61005jPBWyV-#-Z=+)erHyo+jyPqU`yb}U_GzVPK`EN7Zu_kidg zrSTVML1Jd#bgTR4OuoxV^;0HM_v`j7phmZOd{Z!c{>glL&V4$%N#aT7Yv6Mx`)fzi zK{5Ip7Pmh;oFWd#Go=C}b=dm+Fn-y^u-=okRgMkEq4sUhg7Elqs(^)Nt2U5ht;-u} zQ}+5l|M_308gRo?@pe5N(FSXxESKvJ)YTC%1BoZ51&{Dm5}cFuPJDfyV#`L$)}|J^ z-3a$TG|+?ovhUYJ65umfrxOzO&VNg)TimuDK%DQFTn3AN<3faIv>|`bzaCaMHsrRwjVarW60ehuHrV-#&8B&ec|(Uw`bqi;S2TcNq&zq$ zx9g1t=67-enPjxaqQFG*^F}MHOzduORS{d$$!FfCI*O$s2S8;eGEl>1)HZ+Ps+?Nh zV3W33G0j;>Ox%FflP0IpXz-pRRTdhH>70E5eorA@_~DqbDV`IK@HKh#;>qjbwC)3( zJyTlhS>d<&hnw`mA_IAC2(K{L&W60<8dRm?Rg9jIog2Uzd2hYo%HZ>F} zFWkx2WLO!aykYp$B6=(ZZQgP;kd3H~?kP%K*Ms?}n$gCS|IcC)yt%mHO*z3t6k?)y zYSHRWzsXz%m~ZXrJbKVmr8@K3+3|QgvYW;ko2@Gjd9&sM%u&||KKFx&4>%D+Ubx>d|5$Gb#RO(1TTBG-$d4JqiEl6iuo3UbqTvmSL+|OsC^B=m=s{P z^?}jE-8T~FC`OJao}`p^`?;8 z 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

    a2?tF}*fkapNYJW~~f!a~lbb!6+1N)PLkz-s2 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 z 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� z8ytA$Sn)j+_Q>a^d{*XUQ$(Nfi4pPn{AJ`Da&8$w0S^L3(gd*H`u= zq?p!iOHqhT0!b(TanxO>?rvabOTBF8LPpmY+U6h&ba>xbYF$) zqAN9Jv;eVP&I8vM2jK_xt2WDfX;{{2n?*>U3d0BQPI@Co@9mR3sBf&U>&C;u4@Z~q zxyqY#3L+W9Gis0v0(2!Bl_%?M2CSq?#*g?XV2T)tM8NiC6>jm@r+MlKbf24+bM6JD z^F@4F#WYDNvKx+tCyn*Of$qst#F!_9=G2-}Gpl{-u@?@tdu6YtE%J=?-z z#B2KvZ>DnQIXwpS`cKjq3mmv%@wsC-Hfls%=i_ZDM_6<%r$H%mT|N0->4pd4p8mD z;LuOhixzV8+-61w_(na9%ohzK02vnu|5x1)dq<25f%I*;C=&tIzwihvBz|xC>gkEr z=$Afn(-`$#;y&m9$A{Sm+zB%R8@6z$JXtz1k`5ZIBwRd6GWB#_FEm`n5nYAs*7sf4 z_@S2G%7!gv7RZl`@}Qvt$D#2LPD}{B z(dDe`AoV0Z1kEt%xW2PJR z0wWWb5(5-(1S6m^{qSphgP@n+L)s1g!e8Rae)R^wdyk7(U!v6U93Q>@`9E?0+yDIQ z^MAqr`n3D=x&DHyik|Y#%L>y!S@TMqj4g1r$h$0ck&GJCpP#Q@&R_kd9Zgk29LA|-*nA5&ixYf^9UPjH@fJDjCD?- zCnv3meaaqGZ|0jKYO&UdtP%fq#d8$Zl%aZ<0-4S-$M{l_tEt;w#n4$ z=8f75F>4N31Utef=)BQ1x>~4I{RAW5dgvb=IJ#?=7#aezswdw;O*D?* z^VW~??}{~PGj^+LPzf+|g!N!M2cY=omK~%sYn>)$fNHE92IuQvLh6`zH~bv`_*Ecp z`lZ}j?v@l|6U8{?{vh0E^`hCyO!$}`M)5?bE-J>Wh5 z$)RcK`WNwUbNhIUe?ZqodONG7$u-Tjjb4KLMe%*j&u+W8*E(;MpFEF%&5P*)H>?OYaJ@N|L zy!i_#XH>{WcpV@w<~a3|o^1xtqUm-r=gD2mL8l~B+fP~8 z6aow#y1<%26pPy8?bZUJj2DZ?#%0(4_4?f);RS#ZAevy-KVfG{Je$GX5xx1jce3)3 zb$ep+WgSStf@n~e&*oytLyH~A$bU>fLk8b^z9lfAsPXxF>A*SJ;yT<*W+yX)TEBbW zD(t}&Ksj9(7(d5_O2t0V>l+VvBJdP#;>K}|P+Jc#HphSl!pEa{Y~1IqBO5Ww_OuMh*n|vBp6nbOgb)4IuJ@fUTrWQb z%Vs27^>dtg1Ty}k{U9UP_eP>8kMAIl&6gp2JmKmQoi@QBXgYd&+t|8qM%m;=^HqGi z7*dhyAbVyd)W!;kylJyEXIbywV43aFQ<91=YaBp$g?3*0Zs#geD^1#uu}@)7?K zoKD=kJ@GdCVOH1|gW2*3?RT&Ko99N4i}QbCn(`HW=kD~5GKX_a2baSBree_h?5o}z+Dk?0F?AvPL>9P_ zJjMc34VVMNLN&a()HukYxPZJ;SQNT~mrro5*mRo4DKdh$mDa7bre7@UQri}~v!s#w zN5wz)tL_YNpz_5&o_pT-v4qXq_@n(*)~_7RkCTQk8}|)NQ&o*0D>yKvFZm0r{~xaw zze!HsFdg|sCjFh-+Dd!!a|Jxb79@^uFKxuBd--yCR} zz?$<&zk#qmxJ~`GAzn)HY1pn{HW*OWg@A+;$nuPY#(Vf1_M9c(E2xY#ZSd z^Q5kxS72D?0=YjsJF+^*|RbD=YP#FctjmPm*RMWI%WUJJi`=uT zzEiNFrhTnvFS8@T2C$qnZGpS3ycjzX^CamK$D-_aSlD>tOvPFxxeb4y&{Y|q8l23>4hdbT^X zgBCkOJ5&4NFTJecJEryceJul{@pZLYeIDdZ%WEZs^Z|R{!_I3wE?t;JKNxmy>x|@| zk>Uq|xnvggFEqA>ddG@&;6uG{20a+559XxzNqPTyA45h6#5vD{mglPPmbznF`h>F@OjO3aXp?(3~$>; z!O0_YB(kA=(vRy-_jm)Iz3NJF@dZc+W{m#WR@^SH(Q%_4C&iXdy+j`x9x>>JU4v*i z_{lXBvIFPKP9t(*jd@6FiYsy1XxwSPSn|?+WAgx>XDgfvy$l*qCZmP@VR7!or!f5$ z$r$(z-!+YK-p>B(eg!Z;)g=;Di{-@|flL7N=eY0k8a5_ptjK?1U>lr60IsTT0X{~e zr-zZna-nKRe|7G+BW>Wmc_LayE8D~Y$RGeF`12TV>-Cn>*2P%me!*N0-% zPv{|e-Mp-Jivgv*+r&FxwGoMb_ez>cbc}To#>zuo4$%3E!-xCO@n`knhazIl4xa94aLoy7coDn;S_x-*;}MpXdHXn-T&yO*AG)TrEeDzB5lUfQ3)- z`;*ykcG=IB%188iT?9V+vp6xum(pa7$KcvaR*IA7HMpAxiGP6N;A%b(FfKXEjV52X zG*nlQ%{}-pZgXp{LGZi$1=5cUyMO+!^rtPGSw0Esc@-=e$65o%Qi1Z$_960hJxots z@5M%oKV2t6ijS>DE1Uy*{4;U>R2F*vO`fgAvcy*Kxys+}+M2k!r9I(7{=oT^&#YoQ zeGn4Qad2L*ej>F_a>{p8&v%L^_0}q|`ie9LYP|I15IO&Jfr`(ZI0$^ZI5$RdvR#Lo z^v8bEAvnCFznn9nL~Wd8>X zKbsb>e*zzoBaKw~`Evd9zy8JN9}QzH0o>0o(^aSom0NkgoH!$0ZZC zkMx*LHBc^4jEdJ&P&=sUxxxlp_Nq=m$-sHW^n2*@Id_P|@|tEEQ;ONcRx9|L85L( zn>dw%FR~xD^+sf>036!!xsnlNP(dm%v=@4EwYAFZ1*0f2Vy2Qx9lSFgh73*`0w-wM z-3R_L#Ka(5shjm!-|K!zcG8Iw&A} z2x+@-@vR*lX9o}-CU0r|$e&!kg9v_#kWJ8sHksTP3MYLZPhSIJr1)~*yAN6mIX`hv z>N_~Gci%qag7rAhac0zZx9MvA(RhsAMN|7B=)<>t-BY}BnN_&Q0a|Re=&u&rPmnyUz+w?kztYLhOJ11gBy&+pTfMnUTKwRIdL|eKF?Q*Zg_D z0{E}_*Z=uHKI;Njll+$I0rqw5zYbQRl=WnQtd-@;M@UU1Gj^LE%;O9rLt$D>lIHc&`>%6PuJDc z;fnXY6E_z6Js=ta;K5t@!scQCQKvx4!iYdONavEv82P*dviYwmA*D*71>Y>CnE*pT zyuT4&pqK-=7ZElt8(791Z(QKchX*IySK^uadz!21CG6P{- zV5%2i&GzZfreA=z?6s$@tyZ;x*-EVv{ueIrIr)mQSg@tXtZU zo*8j_UAS4U>U>merXLZ;dO&h*%qY@Z+N*L9V_C+PA0dR?7@1F!n&OWJL4-M(Q>pV8 z{fY3&D5smbFLBXzLf+m$u;hvFk^lE}a{6Fpgj;mviD6zMty24`c9s~6k_|0aSUF9W zGnCUw{8#vNjg~I6TIPi4x7v9`HQbQPYypD!+=bcQ-8!lpP>>b z+>iXmIGLs(U7tiD>B0C037Gl-xPS3fzag;|6HZItrN``_0+5a2>1>`DD$I}!$*#NP z|3-%5hO{2#BFGP`CXmVSX2jC-5cv31`>N|8$-7TIbt8qOY(E zUfkDpKYW!PM}17oJ$`fNs3D)KUwz_LdNsW_t?iut*#Pc;{y%@!|F`w|=f6GY`0MX} z&i`D0f1Q8IUsf^wVB@CGW0r^s&}Z;_dqrxB8OW75WEmTYj|@%NS;CPUU~5Qb8M~Ko zU?{k=j5FW38GjqP{*rU)>)w30X(U?w*uqO1r&wQ4HmttedhPgX<=VDg{lmh~J0=UW zpKIx&>|E}wJv|y~Q|$4Latxl2cqd%_;#?1*Ru-{rE62a-M0bm4A z1QJsnFZ*TvEsPI51&+UK6V#_Y1?R}DyhtV8)%((L;V8jQ`G(3@^lFSS@JR7M_9H7*+JHKf4L6U(`$WhV(TWs_lM@iPpR0XfYv0tKhFVVrzU)C^Ob#x z{k=0$?3uLiu1`Huhtj#QGbclFQR9I4G48ip;cz!a|IEJ@U&1GU_fbx7*UHCgPW)^X zn|B;hqgT4`*bAcujxQT{tl}nR=Kh_NZ?q0Y@ZEGc@p<&AhGUIcx)vdA#d+c*`!VcY zO)UUwm0Z}W^{yu0<=#jIMWZbIlAx5N#>ulB8bo7?G}y|gqFV;^_5X|fwQmjB?0{gOg8 z&LV@_;i;%o+Cly|m3&pzmb(W6!ZWCpw=|~kjxn~JWFZ2MiUT%trY$SZMnB00%D|rU z7oM1(!+9@k?<5kLoLFqOQzOM``Jzj~>iLBfj*;t5Qsc~~zRXg%4OB+i$h4X7jWCvA z!3OiiKkj{_08+|&2=AhbWnYIURw6%#~fK@e~N$6r(}%Q7BIyJmlRog2Mv_- z_ZQnB$@BUK#dxb5N=NW#8QrBoXH+q!Uw3o_aE>xSJt3=lyC3;*^%3H;=2=5E`DrT8 znR7P9CO>o5%Xb|DrE7I?uVCx?1;ntEZe0v9dH4G<{}AJ3tshsf7#nud5oy5@2**F& zH#efhD}dI;0;$FpPb$Vjz7Z{a<(B!O$n%SI~S z8^?^}zc#vLPO^$K?O5t@(>;0ZBx<6+d=uhj%sWS4@XPL|CgslIi7&~~7Ersz?X~oT zzdfg9+ommDhmEN;b#}A^>qXm7eoF5qq@ z&IP9&txuyHhO)lAVwhtq@WqO#Yo|XOG)TUbO z!nRQ|JMa#QZ;I>MT_o`oUQ&uMW&p9#!dgE-#sU=o{A}a!MRS}v!|FjgpL^GJowm4m z;9uIP{-0BbIwYJ>VwnPEmS5<;DOVgZJWG$ zz5u|4r$AR7$nRWo={3RF?Ocp~e(>nRrt_=S2~Q%Y^^oxHDTcGJ7q`5e)OENI)N1#J0PF_l&$l?i{yRd!L{+ySx*Md zV|S<^7M*;zUA*TL2Dfn1-!|^66#uJ9!U03t`=LeH%16abIeN+-eU!w9%{!;745VU_ z^DYHW+N;V9_6i<)uvqayj$X%j-5XsXw5d6o;@_Cu!Nqv|ri_-Se!jIaMe_w7KR3%Y zdQEn-W^2MLiaF|t2dezsv9<7sosbTGJX-#~NPrcV^<&64m z-kNA-dAM|tR&LIk6>)rRl>;{bfJGtO93YHC2X+nF;#b<1+V5VzFlQe30^ha=fY?Kn*PrS0bP zXVj^wKC(&q15T~6&m_I#Kl_KUH`i|Z-G8?AFF-QO{6@F#voD{1pM6Uwfou@aDi37; zjZD{i<#@G|{a~|EhEvXWD$Pg8#iZ}y0}%-UQ&N7m#GhU*Eo*PmPYY4xO+bn*QGon_Hg?*8F#my(!mfirewD`{_gyl^aNE z-(4|kXNoZwP1R@2B^q}OU_-yafPr@uYb9fmp)r`Lu;4K~V9ht9*Tjp}Z5T4j$vzf- zaO6%goz)mfi0o5)FZPCIzW?F;A9g$Dmk7_LO~R_bbJ#ma)R!89aCRE$KX~tw_qei` z&vwn)y(!yNt}dKmJsG%PT|c}Fc8uy-qscU0%r4hdY+5f&zx0M{4?Dk$vAmV|yV3cJ8m4n5-1f*{_h2JEJ#te|r^UaBwy%fTU*JIN9p@USe%z&R zLmQJxGpF}*ruSt1kFTSA$wfGtpFTLO?D7`>Ap^LitHqWXdA^`{wJuL{yk zS6DbIQ&63nFEKNmdqVV6_(W)6!lv@6^_y24?>SN7S#_J7&bm+3nzPQk21hQHJwK}t z0nGT>l)g!Xf4G+06Qyt6isZyal-4%chzqm||r1sQKM$L zKACgE6mN%Xj>%!44?5`Q$zRtfJ6i82@jZ(BN0#j*){|1xm>u6|zUuCmYws0d|LyY% zU?WBW)YId_S>hKBR51tmgJS4@Cg^8jAR?YO$aUq$0BwE#IXw0=I#ltLt8BM>{cgka z-F*d@$HpEYW#`3CPw(Q+8;HiL?X=>{n>9*vmK`&GVoAYIwH?lUcF2*=Ux_$)VI73L zd=qlbP=QMiwg7Kzh|=^B4$;;71!|hK5d5p{3*YJ~Hl-`Ha`}(e?A#28)OE~rcJybrv?ryD9vTfEeMQ(Fk zwN0lAj!Sdw9*H9@u+ynsZgYIZeQWl9{@;a{DZRx?#YwSN4TSwaPaFw|TsnWetHxdX zi6bcv`K<%lS^LQj)v25Fi8D^U4Whms4?`ci_kkS`7m2Th+tvQ|OU?_XHWPEUic@UJ zBogb$On6DwSq!1&g9q1}2*U<#6;#j)sErRCmnzCBi*V%>i}_Ak#inXUy}@_>|NIwE z;*tDM0(29H}>rH&p)zpuvFV+z_1QDH^eHB3`X{>XtEDjb{`K z$EB@fkpHy!XI>7wl1%6_TH3cZ8A&bj8zP&N&qUObPmUy|NIqda;o+X%Uq`;u6_G=b zui>TcZ(>G;L;}o?t2_NZ<7ofmj3a>N4-%ojx;yokzZTjpm=~5d-p{;I`M>97&D~I8 ztxar@QCVMIp8(k#)=9pkOSW3|$5IDi>{%B+8{ux(v5_|g9{p;LmvRf0$BKsodn2a3 z^>-P=h(2SN%DS8Wl#xJ8Ggs^_K`34+zN3+lL%)Li(cMsPjK+72jpA?6Q{9uK3U~gfzYx1esAiD+`>hH2qkAAPj9K}Gy{Jl2@V&gdiBXp@P z{tFE4zx$8d7LYe1W~{J$;@WNe0UH09YOm-!$!Coo z*Z?h_ty!e;>1ei%_;-ZQP>)=ns^YFsA@-o}4cq8Ed^2=Hj60QIeIKUVr%Rix1Bfoj9c)uRqIt*?{Vw&c%6{BjYk1&eI=YH} zQ*lzOk0qz^THOKs7{6J|#Wkl`i?!n8jWKJcgK+pur5wlKP$u4VdTQ+GXAbRHi)Gj# zxEJ2%U5Wp8t#LtL<~ZUSy*`;M&#$xI@3e2fy!Bf?_ zV}^qVqf!~-PUU;%+x-9NXYmuqvVHI2zpW`S!&axz%C31ZZoRlfM-aAa_Q1b89@+WE z>(RpD1PCfb_j}V~mnhKll8Yc}EC0^oR}5jcZ{<@;T4Vgpkj)^ojW!yZH$QzjzR4BQmHRf_2*XQAyW9XA(RCdjis#J%{&ZIy$&(oo$ zsytwDHP9OIH#&|V8YHrj7j~ZW-X@*fTbon)efRc;Z37EnZ<)yZ(L$$DrS2BPFGtEP zU)eSDzRuguYj^3lln`XCgAznWt~6Tp0)^gsO(%XVxuwL*xM0F!&5h-P5i8C%Ffj?< zrbUvgJ%^l{kUUOUF!0i2bL0~f@|=Av-P3T^QXDV*uQ#=vWmoQcSqE!AqMr_x2U3<5 z`qUW{Xv6tp3ZOS0X1ik8xM9uFZxWQ(J#fxpCl`Lep6Zgg*uKqmBED)(Ym1gKQsuHm zpIa-=f55;tX6xS2Z6tk0u1^NkwT%cKsO;AGc3|%O3=w{a@}*D8<)638`~mb=05iRt z7iYJTmVaFqHhKZ-ut9dXAS{#Kg?9#HuH3&ZBZ648FXJ0%hm*sFCl!?9Qqq+L+MaYo_h zA6ze9DQHK%XH&!e`Z=FAV2KYK1D2|KZTc#?Z;qE1JF)4o$eQXIl?=p(EP}3rPj`?z zalHQG^<2+WD`2JP*JIt}*IQ{M7D({IST2M$A7(HYV9xY-eg{ElE{tw{$LlJiUe&Fa zEMBIa<$Ley6_5e6J*{gOjFjN8(qUsrGGhRChg0FOJr(Xx52$16kc4quL6zjGzm;d;ISBZltTX>79 zoNx|1+TvU6V7x)X(l0*$Kd%M5YcY|-gclN-<>=&v=kl*YV=xEUVXxaMk-00)9}dnZ zFvX72Hp$TfK4Piv(Lu_KO)cK;xkYU5I0!7-#rWxhq5E(J6P~I}KTPrX`_WqXhPG*-4ZwfhP{#}Z5IX6+}Gitl^!m>bX9N@3=&ZR1+)u zm4{m!=y>%%(#J~Q?C+UlKlcf^o>x11<*KK=tH1Ju4G$FJ?t1&+-uQXD)QxgWzdir2 zgI|5@7P|2;1r1P_a2bQBO_@kpgD2Y>`+PpnR|5qNinwxPlxM|>!F}QN>71shQ}odv z_iM8sK$w&pM0Z0WpLcp&XV23CLGGWgQY<{WtmW_h#5Cs9ZyikJrm>9ycA$Ob|1kWO z`M*kSRwVD#y^;^Dj`sgo>o*D;ApMMr|ITGks|g)9Ql@(|d6`bAe#)*NTDUNmuQM%W z?b|D6?j8N%E17S}t*&@AC*|U3BgNSq+NNQGLxoYyTRCTHKlR`a9XF5y*ba~cnl zprTXbX%reDC)Blg#MU|U8nS_LVcW&Q$`$P5BT^2>fTxSD2?ztl+>Q&AI5x=SO|iGe z3eC56kZIYgSPg6pd1cd_V2dAqEB965nPY>`%ak8xEBo#lzvS<9JgT~zVkvJt`XgPX z51D}{grcvrUR{hVoc+u2HH00F_$;rDzxa{E({ws<#AR)OtWEW`YsCgX37?4eE95qQ zq5LcJw-r`pY;5{YeWNIn{O_E_^u^sE>50)<{4V&jv8`7=9MGACH^FCC^@p{*9D#w!bR!36s8T_t1S6`oDiN>;x7FjM>kNr zm1Kw%1zY;L6f~Xc^+wUYHQL(7P%_vM)emJ1v&!S}mv*Edu>X7uoBf?A8S!D|n-S;I z-$+cek>T<^Qz^fz=^sA^x@EJjIsHDD!&yEs*yj5cBQ16jvDadZ`3y3wUq4yUO6tNK z-*3V3|CjpT4$ptt_kh_BTZoWlzdPOHUdH`W&I(oazn|hv`h0JPO;UKq3y%ZWhe7+l zlOO%6q46j;c$03XlUOE>(W*6{IyrB0wa%4iJe)PBCchv5sCU|6*W$+p`Fot0y~l=$ zuX21F7aG~O!7q>FSBm1;iE1^ETrmS;HE^ksA$sfo(qHunR9@gan~rz=i+`jon$1kQ z0yW;`>WwlXZx*oRC#0!yuQfuGpBwWcbv!Bg3x(f${NZUfd=5n{{~>)-(oa;hXr&1D z{_i*53U5``Ws~2?*yh#a*t|xcu#ZPZKmyIp%GK|3C^z41MwdCi9{{oLGyjK;=wA8H z;Co{{o`(-C_IvEjh6A3@ig>w3xooU&gFWM>y|nxGo%=R38{oO2BGQyzLD9+?&T$To zcrf75na*Kgj6>!#ee>`IYaDb-Ro{sFh!W@IgE{39?OMk=^>OK@nIoD_&vU%W28oKYMuD6o%5i@mG`;$iy-GwP=;wIzwE!U5;ltqe472Yv{HON5 zA0~lmG-uY8c~l%OupgTgd+S2RF%4VJ_Dsrl4ENnowA^WpFlLy?J>;ggorUMQbFJem zc2)W0csFK^iCE{tfi)-DfyMkZsXO?8+!>VY?VP(>JdMKjbMFs--+olF>BzL`=h{}? zJo)K1Gr2dcGl=x3^|@cy<$Xgh6O8Na?au(;kmYDu53b*H{lg1S%EvuFdrvO^=*Gjz zKMuSMDjDwFv9e;}2#~kKT zYaQRWng~3||66sGm1jSfk_i7Q3e*NIopvRMW z+C7rj2rRYn9%>FzQu`K*YPzwD6yduJET4*&ls^A_7P74z&e4HnpHs~7(}f&3+U3P= zQ2pqr$HH0gAAqyUcx%rxe9wh>OW-`b=W}mg_7R~YDj<5QL5k;-j+__g*lB}42ESt2 zfdkXA=`z@Ma8_`QjZRiJ05WN^9wn}lUiS~uF_`aad+M|vJAHp6@6dv6Ch}=%5ole5 z$>@il`&r;S;%$FV639!bqqB3pY0^qp$UJ=}mbqFxH_JfN*5}(rwi%<>a4ha>ymK;d z_RZ1?xa=36f zGyZK64kGge&BKp@&;ZgI?)s1Ra|2moLKTuY1H^Hi;*|HgcmA*a^tx;kr-H&dpG^ce zD$jCiX5B^&ewI(@aSftQe-VuZBcIJK`3O&BLq~ZKwx0o9g@E#la|0-L%+%<8=K%1d^P zSpo-x<|*0cxC-zW(^*vsrp#3=;oGSW_%ldCH`XX&wt& z(~nv3YzNjBuCrg6>Vjnj*^qTgdW)xlRZI!Wtu#lN95ffM*JSS>|MV}o{`ue0c*W?6 zFvZWaP4N1o#b!gF&l8J%m^)A)DS4RZ7grQ~&S+B_^)HkkTd$Benimj#z_Seil`Fw{ zviayRXjm{92(YlK;-6y1hnR^5`8xB+K@;3&2pGWg9EmGXXNM@PyHz`gW47CY72T** z$Egv+5l5-t-f!>|Kc(|{(9+8jXWu2|{LQ{>Kh)kCzTCS-+{=%FdK@mNC;vXOTIb#{MYG3SQ#eZZ zUcE!-2;#EWM+Wa#0bv7mZOYrmb#GkwJcstH2&)>=R=<&O>%E1Oe&x08c}8=MAgn^D z#w$kLsaf`1o*Q9G%^5NI80kvfz;OWP&?kRWW8He!@$y$6@2Na|@5JKMwvZH9mv0;l zQ=Ar^9!36g-b?TCH`qQ^>QEQum}%{$bFnV^7@i#)MXwKSrLS}OlSJpKw(D~ZzQ_H( zNC~doy+$FA^?MsAf9_*5ZF2CU3c#~%wg=tm52I_0X8VG3FY-9f48^`N(;p0u9-_lN zyz|XCG>->`E)~AS&t`nR& zgB0jd?D$jAx6t}v&c1&$ScCL%}mZx=gB|o`?kv@B! zWCMjma*Z7tKdW9u7kqE9PBEwbV#20Ptge`d#&|mB|AViS`Q~;nn9XZ6cyrn0Wj+R5 zv3 zAccI$?bqg4_r(};;?s{yyv=*PF3kjG4&!xNtYq}fl`jng7|I5taT z-zFDMXcAk+HRH`aY9ncz?!ju4sxHnL=`tddeaDXscST3XARQA(bjPAMh>?(kLAG~@ z`Y>pfc^138PYRX5CrEDIcoACDNoWsc6SdE`!v)Z-ht63ZJjtrQw#>uEi>qH&x;D(n zQ#7+<40>|W%e8HL{|ZjndOruZ8k;!!&HZ!o{dtq>%VCzUA{8r!FRRBM5_PXRwfeKw z-xf6{3B1>8_GKn&6DGx->!ds%VUudpHs)VhHam-EI#4oQjL))%ExduhFhDZA`=__u zgrRuEwW4?_r!bEC8p5V0@z7fU|JppcHv>3zNChxS?v26qG~pJPo15T_WvN%zBFnIC z8i|rozC&{O&%U-ch*#Z>%NzF`kO`l@!3+QeuHgVNQ=YkNmxpl?YjGd164(CO$_)nI zU}{4LAO{>4o0^bva+%g4h(ZuybD|Bsi+Kw3tK$nITJ<$jCzI}p=XLucxwr|+n6{og zcHio=kFV1!J9$%_Vy4$uMW(`a84;!^ButUr?=&8C1OtYF3@QcwM9+}bDN z@`^3_#GvT+p!6O0`FqN`+nW2I)VBC!$sqUq<+`2RM}-mT5^t<9CT&(UdM-QKFy-xt z|LxO~&aB!E7dGni+PAinE=0z(=TJ|^nFpcb;VJUGLYVqOR((&6f4ni<+St)F<^R<{ zS_!NRFowit*=p~@XKbK-aOh&+E6jLkJaTPQ_=%J2DdLbZNAVvUYYnBQ+5p%$0B_4m zOvD>6{`p`3&*wgGu20vEaYVgKx-dG$@vSfFV};Dk9lI@hgrCz;+!!)qZm=ay!_S$X zUMrrepR{C3&q+cW|1s}_ImFUGDECRB2t>!3h*?%mJ+Dcd9Ygda3_%nT_hw_X0`!&1 z_a=jtEN(4_6P;}Hf`AUfe}HpL+%fsxi*`h#aU<*>qJ$c|%yz1&LF%h`c|P<*n1MGs z`R``Q)yawm@Qui9GYsFSBk9@?{=yZ8tM3f5E~hxuj-cFsTsJN zGxNgDFP+Hg?Fw_1@*$ZoqB>ggXyMfprbWCLE~)OeRq}HGGX5#q4Po-On0gF>{lw1v z?tYM8RQuD@n||MHW)NLhppz^BM#hu8&qm5n`G)2yWnuWc(IQ_>M=aV+`tQE0qPvtY zJ^+0rNVVS4h8o&u;n$AXnKS3n775-Mka@B9rR}3Hb(DyB@Xi3v&V$dso`ig8$hYg9 z!7;mCFEd+JW8$RES92aj#ursixuGL|ee0mUee^x+b)Hdw;vYwA=R7vu{9QS`w;^3k zvWHBee7J23@jr1r>Zf1rE@Y7T7rauL+5=)xR6m$dOd8jHF|@>fsgB?L)xVaJ`2P+6 zU+=eUJA@yXR15exwgOHFo@hpF7ZCD&E?AYc~Uy_rzn^j+8TkG#*A;mTpo?>UaSF0NzdH19+0 zW}eGPZoG#M9sX)BS_k#Hx6#m?uG?^R@nbq!LwM_>Jr;hPDKEx?(j{EQRR*iIx#>vz z4E?0?F^)af$-bAkSr32-A9OTKT*;t>x2A|HG|E3>?9mrS`_A56ujEGHxlQV!*xs*^ zIq-h}(_^&Q;yE;@RkqWYbevl{m$}tmQ*R&@&WCmS4!n5UbKGz7fL71Rd3T=;=Q_?r zV|)eh<461Nb6&5z+DmixHu>03=)3I@bmYc`Pbc1J0QHn0kBZalDn}1m!N=m&s6ul; zi^aY2Z)|yZlEqQrCA(Zhk%43KM~l-J*Yh;OlF!b-+q?+~1xOACEE(57c9|MIIl{JC zyzb6x8iJ~_pp}%2UL~~yz*;D4Js&$G-5pp340MH6&MK<%ZPoo2r4WV_gC z3sV`eeY-Z|p3o9LY8HI6e;V0VHyt3kaglMcVHuaPNhtJVrc=U`%_P1OIKpNXQ(^Jc zL-M5d3S{(GF?gfY)6Nj)}KYkPqs zvIyF;{SrO!anL=`e7y#IZ}ES2eu!@PAX+?FdBNdBXbX^Ej_?OvTt21pxw2qU;uk3X zQw(o-p*F76WBH0xh(s4;(?jIJkbm2pV{F>=m%L;?_9OnIqns*Ks0`g;G9cM;x0PVtS@lhu#zEjSu+#Z6*7T`KU4k? ziK$zi3sJu9>!stz#up;4MGnF?Ws2Hk9AUqqvU;}Vb>&tC#^^Vd51Xtz7JB@PknS&a z%cq@W`<#6?{}o=CV0H0W*CmD-=hB}ef2HRm`<3C;6hEv5XNIHMFuoTCMw`!%0*qrs zsWo=ypfYYiU>cr z&OGN^upAc=XSpTUi->c7jq-oCMh%8Y%iLBQ%K>SO<104=df`)!xx?l+#o1jrw1`>a z=Cxnpn|X2baZy`5hPC8o#U+^k{dYrCUxuz*^C=xqtwQCK1(7B>U*-@3qg>PtwKk6n z`Ht-?oFPn}5X_TVO!w1HWmmEnD876}oEh1F>z?BqUSD%U+1Nw2uEGydv25rE1Edjy zm7_BcSq9J$cVRqXrnTr<*Eldvra;bB-^X%9havBxcYOzh=KI~L;O&}Exh?58vtB{^ zQeWE<0Bi9I!uQN@#<{(TF#09QM}Kd5r(eqmC-b##*)BIVXkz+^x6XeyzCW!qN*B|g z+`vycUNPO{E*g*Xvps8{Z(_h+Qy@YEgG;^B1m&E(qTWzrmciDImVOH=tsJXoHrPQU zzjI6tZJpnzzmh_mC&wN5?i?Oz)@Y7{>o;fT{3K|c>>G2Fm%jN1hz`bxf-=DkX7HE> zQY(I_x3x9<9m`_9O5XFMMt703ov~6sQgPdtt@?+5KmKv3PK*hhePmM-B}?h0eoh$i zw(fh=#Efxv-iSOFpA3H7es?OiD}zGoZ>X+&oDa%sRlfDJ)z*_A6O-IoZiz(ZnHnik zgV1Kru;zbSfzL`>o4B0)mAEN>$hiz@|Kh6q%{zbU6Wzz{)Xi+RMz184aqY{eiImL; zlz8?t7OtAG+5O$WCN>{f-@GTTR>WmLrrG?b!`?2sa-tsb`-A5jx>=7d-)W^|Y!X~5pZ$8=`jqy#+smRN>lYjnvyMKP4e1FuL zPw{)k_)-OpYd-g!who!q(utYmCnNah{mu_hgp*0Ti`~lP@R^y}e)$R^-Z~PtrO6yM z;BvNaqJu|g4w<8fak0!>Xmg^soNqchRt=e60zKw_+~;+i;O}tFfmVIKMHTziRL%xE zzdPP=hDmz@OIcTC`?>w>euU~draKvHByo22I=k-@bKWfcN1kaw#5%i+1L0tizrPl; z!c-Hcw?bo1)h7a7W&^KN6P0YvTl1YAA6ohDDUFJK_tK0#FW5G^nLZF$MtD^cRi0ja zn=T0pjx%zeI^#Qrik-^;$ac`az4f_@uefS`35NL7qwt($2%NB*FLb)cjYiz~58)lW z_w@%b_h}%@HUiU<&W?xLXGP_@ocvt^9pH8F&^?aD0WbUM$y z?QKNCPd{@i9VI73*3TKW#`x!O;ANAXWaNujXsf2Z2EZUus**89H0jsJ5eCxNK9}PuD9JbYR{>>*W4AGC z;VnLs^{89#=urG{Mk++Vdu#(Bc zUr9~GW%qRW441V113Kn|CKq@UUP7W#5}@mgR&90*Cy0cV8}kgbh;;3a61A{x<0Oj> z@$W7E2k0e@w2g-D$#*_|kY6{~j>DR%uTR@I*&oF9fH%IbT+-Bctm@dqu^9aGLSOnx zXNKc!UqA47*S}9d)p#C!iQ5NbQdP9=UY8W z4<^?NlNd_0P0D5P;a>SZPQCyf-3~^6z~H>?a=Z(d za3I=NMTFj#-<(c*17e zekpiy_=r<%<;K0zf$9%nZ;5^dfj3w=i}r5a$Zx_G`4f-x+U1GzQ%6w;9y!NG5Xl* zcE!4eW7-!rQV=TcrH^CEGlMF?Mj<{TPE`|ceUH!)aa4M=-fPD}ml~DW5nsX3|A+e0 z+X86B^udDYL|Kyl2K8If+HRJ>iAM&_!Rw#033;dV7rH#$e>ZX6`oY2AztX?ZNfy_F z>)P>}31ims+Na2M_*I8>J9#N-a?aw>fT<3}uLx@X_?LgB{&&QZKO2g#fBN^ubI>EK z2p*Epk`COD?Fgi0w4a*!(>C5Y>Pd?!1C1v>d^OxD<*vM3b}r1Be7_2S5JkB@4oYCs zFBHpAf12}5_nFtW2#|)$d4BNJ%aP$Z@g`oGf-xX{;jWQ`-|ocL!RNxaqx!LD)g-rD zV?1V&M~gMFp6i#2zpfjJ!g1ZvxcMN;FY$)kQm&8aX8Wd`lk1U9tL>6ws<(7WRTFdFIbmaL1 zkKfcj&o|4^oFForXk2p6>lii(D;*vyDX@+$PXy2J8?!Q-B=OmMP8J)kNlWZAPS=sI zsS;a!YX=h1)%L!~^W7(jlShBM&zSDO$j<;EJZsfS(U1ywiKISXl9=phn!_NPt8xSY zn(ubl5N&ju1Nh>j-+V1|^LZm_9_V1(rfwor>5=p0aZ{W4EvE;dzt=RbW9s{M$k^+b zoo$A0yvG})wMNj|qcZkB@M?d6*GhhtaM=R z>mRIZn;c_RrVb-!{P5-0XVzPK&4{{lY+$ri;(?7B7J!}l3;t{=JGLYh}MA};HADN!|=JZwKd#{Y)m z&ku2*IS=a-60IHU=L0cSk?OqbMelVvXSe3>aW(K(Eb2X0&$4OZ#Ceu;!c1@d87}`W zgVTxThL@uY8y8!<(U#-{XI}!&wcDK|P$p*T z)_8@krS+O$QFHM`caEj5bjxe_*&cG)^*%I~q{1(s0Jz3%t^TCD!wi4v;rin<>7C!# zD}evYeg$wd^5=WKP75#EgLYc7(?JW>4C>Y#j6u!;-t>~M^0c;K>j2MqiYi(sE<^XZ zP;|s^F$e9Z{n)Ui;qWE2=1juH)7q*y0 zxg_yOtOQ&A<*qZg7&`at&6OyPzTf-)=SeW}sz4JzsQP^H>oP?qRIGfy-rfNqBMW`< zy(b#(KRDVZiBy*#vf7S=NKB>QH_*$%$xp@zAQ&w+MDdUtOGC5vvPo^AIURlshV)(l zz-eKndk<{_=jNWn4`Jsz6pn5dL@SKVP^=c8vaOA*HpeK_3ZC8u(V`!mdhK>wgSqlK zzL(`&oHq&*|M9BLV;~P4-kw;!uU)8DU`zSb<0Y{Y0v>r`bEY{ZZj!AsFMby6*Rx-) z>)P>8w#o^IGtSl%*PJE^I5tCJpZfKa0JRoO zA0PKG{=ry~zRkA^|BQH+K1}#0`Owr~5Kb!f=(HU$dy214Gwued9_c z*6d3B8RNcb|KGHq82VVTQTQ*fq=5;q{qSr*o1!QyCq*JdpsHdB`|${%Vme(}mbLiu3fz5O*`36VHr zEigBYco(m*WP-oxPy*Se%DBp+>AzE#LD@I$8hVMt*cO!6e%2(M9I=nXjqNaWNS%NaOasJ#E8=v+docIo7`Lrmnxe#?QPWKGJB^ zcN=u`61%9h(>H^Ew*;4ayY9^V;iGR{O+A3*)ut9z8l}(`)(qS{l+%~asWo1`(`x6` zY@h!)B^yXgr*ACU&4n8Mk z@w%=j%l?H&kE;6$B`GOq?fV#_`YhGKIrVkqPQPljkTCG?3m;OIaAN!^Mem!&|^QEC5%yfFjN%FPc zZ;pl;^n^Oz7_nTn#_ZmLBu8*LhUNb8EK<(@C9U_(B5@)v_tbBN0kMvbId>cAV`K+C zP8WSW@D$*bVd>5fq_!8+WqAQkycdq^B(B75FZYA}yH|DmGrW`NmycL_DIKXnFSK%J zc+_E(_Fl^3Qp>Fzndvp>mf zNQ&Kl-`lEKV?CZ`i)z-`>M_wcJ}|tS{ki77j<;sZIU1VHDlz0z-O`DR8}vS+;NVnjAe+ce|qJAy?`fOpTUn^PYqHj>tNYMZb)c^rHp^dkPpzUON9 z%r{wv#wMFU-!C9|ZOuC6woP}sUh$^i)7s~FJgjtFY&93PZUxt-B|g9PUC;LHrM=|Y z&v74H@N`DXn_ji#N9ac+dR^{;-{s~GK$d?|Mih_@fMcZ9y%A{q%vaq>>}pVoN@Qu<|3CWrQd z;jC8JdVGxuIBzJC@a0@JCTt05ymYgEE$0aePpO+aYY{73kIqh1O0G><>{A3-sRRd1 zY_-E`^Wfz3>5eow@{AWFJ(Or{$PbWRXEcD+o?o5xXv^H?JFHDB-uuQ8neOviki1=u zICUO%sxW}k^N0BX>In>Ol9WsVB6MUJasBmO5h|uk>fG+XKT$CB+ai?4gg35w6s0Jh_r5F(UsmmgeG{ z)mG%PPvD)C|3tetvDpSa+a4=6YQs$8x~nf#J+_&OT1}BpqWTNZ`F$rYutF(~O>e2L z*rkTOs*A-LWtQKs#q!Ibc7f)i9Jm|%!aP9tO16nX-sFy(e#iCgFZ6228YnE?;)0kk zRiQ+)UFW`rS1Tq@w2_b0(>25u+avl$Y%fc{vD|1GhA24-TM`l23VlMR%Wm8MjEFp&C7Z!+ zG8)@2eS+{H@Xsn4ZXXE!TJE1TBc|cURRtB8#cpajBS6vxi5(F5hvVDT%8{Dkgb*I;# zhC;UO@7&Nj99t1i39(FW3u923FVxErXf3cDY>$WtDq~^cs2_Usq-PPY#{HgjIO^YK zv->(EXeez$`v!!pLtokll_d;X@gn^MW-|q?v5wFzFe^J6mm!*a_m6XoTlv11Gm}lo zhKxs<|517nz8yGT7wkZbcb2#M|54=}t8p_amKV0>#k6Z}OpCa=y*%+wI}#S7UV$4G zbuukP%#4sqH&mWTy`nIXUBL#K>PG-23W)!x80R-RZp2&Uit^F;yI{#7^IY}Zt8V@% zW~=iS80G0Rqx@6O=uK8`hY!yZC2I-kLm8?`F>NUTBxm$mLMlOuxkM_%P{9`c()4A< zlZ}(LQ8pcCyJqQ8_+=d0-c_W4HR^=8RZlIbw&9$Pt@6*r=fs<-|M|uv zPd81fEx)C{1rr%3_e^yN8iNq;4mH@QKeI2KP4`Zucyk*2;!8|zt_-k9HD3kk|7RI? z&glN)_ig`zRlH-C{m_<`xqjKw8=bF6#Ql1JKy2ww)>gd6F?|iY@}O0}E2>rXJTebj z;c9gOH&%sDdU41);dvKtQBj-!%G+5ZXxD08Zqu^jUE~n|N;QdF7tT%xZ~g;*&OnC7 zGs!J{^MTbG zubpOZnXL;w7HKx+|-IOqiK{| z;2i(EF6VLL@r>7X!|dQL6{m2(mYFOu2s$+>w;eUE)Pmj#8>Fw;=aO|)r)RvL&iB04 zJaD7c;MptoIgUe#t)_Ruy;;DzFSSnDCaTB5iBJHb`K93qOdA53o&dNI;-Tpk1o2&? zZJ#DEuX_CzX0pqbwA(?H!LKG`K@*+yI?GRR#S=L0qUFgDvZFIOEQ4tlNjXG3NpZ|4 z@Jha9WS;(7bcwvp;3$d~CTio4tPX9ZWQe(OxDoH9f9~M!d&~=ir*443Ye!Fg!an5#eTK!fAmt1+7KT_`FZydK=m24KBcZ- z=xFl49*EU;efIceYGLnqjff;JKqpZ^zL$>cBz0WY7_TRbc_ptvV$|}ftT#B{ z6#MoHew!-@dYR=0plXkNZ&!=~%QbX#O8xH8LVw{ehYc3bpZ)^o5nQ4+?)w^`H-8B`ClLChg|n`(}8 z4$;uN?9d4cqLS7Z?HHP@n(EEdFB+y;`2@%Rx=4?=Odd=A*{rjTMQ^N)-XXE_2mLXTiL6eF zlpmrWycClcYU335U}Fp8>X%u*CYSLpDbhg5qy1<_d^RQ?eLXq%^ST6(Y|ob+h*a;7 zfB6rqtT!Ec+k@28E==Dhx7`09_HxcFSLMOgce&Bm&1$fI&Cog@f2&>QTFQhShRS0O z@$-HUO{SZ5I6Nq)zQupfVMNl+c^ft=$cUzJ|)lYEQGu5-MGrcbfFcW zxcY(6FAfLKaUEkSX_S-6Pk!a&{rpkp(S~DwdMRCsdNP;9{VO!>LOzT#tHT zADp_)ai~vmPkGKsI?*@zM@@Q^UL2I-23>YPVclmwo9Cz1Lr(hs)z$sT)%AVS1qS7D zJ>oeBotQ!R#uu(mreD2q0ARx;_g6*C^u8V4A>R~(b{ni;S>~s{8`SrCj$vr&i0`I) zW}^F|xLRZV^epAM`{T6cOQES)=Kek`!a=yYa5l$}(vEVKJ3oiblgNszLf1MAjj5=Q zA;WR0`dN}H=G|w0>4kX16M@;|Mg?u=;bcRcG>>ALoQ3;@*_fXgIKq?TOc<(z8ei1h z>zn5trt>qtx>eAcKaL4Q>`c2UMt-@a>Xci4KK_OW4E=UqFDy0pl}ZPZuXS4aG3IUeHj|6;>@F` zKle3ZJ0=c(I$YZ&8RX$3S@!e&o)N@9^NlXw#kn|NImGrFD-ByZ{x;A%@oDqzIu^zY zNZAQ|`$ntqhUeLK@jLqOQ1&>S@t?|5oCofd5k5Y6olgK<6&A5n8!0_I_4`Ztj>+Wb z?JTB)pNbQzcqR%rGfM``d&S3Y&r&R*or^*egmjN`WIT~46`yZ zl(aa{qX{^_DO(Gkja?2TIETr>~%u3gU*;vi|*>xp!wzu<%~SRzaKYuVDJ{- z5?m*w1L3JtxymuDkscWkO=#Tq`y5~C8)i}hs3B}zy|Zrb?4t3uTQj|S-yEA7r$Ax) zOl^P9PE&2>Saq*aW~bQ?kMGfbcVND>1<3ek9Hbas@qfd5=O|=*>3j+bW-fQx{1?34 z#4=@6K?w>}PWe1Lb{CH#? zBY*zX-A{t_WPlptz}^kblP4j`j&UozVBcH*Uom<6ot9yrc$yj@j~BTSem&y+lI`C9 z5a}rwhN_tKtvnPJH#7d1Po+9GPgle>%J&UuI#b*+*m1wYSaC1?F=9^(BR3;{z8cXs z(%a^fF~g2?-+o{^F>AVMJQio*J@_@27_+>C+zZBro#5W`kqu|(A(+AO6$X~WQ@=vD2qCf*j8F9!zqA?hk`nlM0i^@{(vykPM8Pxm-ZmOXItLhqYIkxBaE9YZ}gM*z`%R!Q>8YD zo4^VyvVlMUiiv;wtADos@cH}mbM3FcKmYCdTi25!T{_Sw8@4_ht?#sU31>cTXcoXrz>pk~f z^=MGV_2xJraN6bQ^o;?4cSq+VVtaSWP55vU*m0h{#F2dCV4?_#ww!CY2ArL=YCHyk zB5sblKQBDJ9d?%WhDFBlh_vPZj`#<;lw5A+_2y3OliZ&YqJg_c?h4l zAn{ZAU*3{fscYId=UYn~DN}b4_N#rK-G3`AaJ>8VYv#;m>{nU{U$!Zhoda>6WAkrn zB&X==i);M3xq(Q&9ZAEV?)~bRd}3<-y}rK`U7W^$RKt+{M&><->R$Dk7Jmsy%4}k! znanYy5}WgXes@1~U1c2|OPHASbp2%5I{5X&+DWuwi?5pd{${H$$Cn}ov$Xy|Nu* zT;8JpU_Z@aor9wFY+9F|)y6pDvE!?jKHK&$=M))3OxP(vCql(Uy`Xt0aJ=gLUtoh7 z&1utT(S3Kyjumy)slKx7bZ)H4=cdC)OV($&-O=~x$4mdYO-)wW?3fsiIS;e*d<*0K zdb~3<=XU@em|1j_>||eK6HO;jzE1nG?=~_`E+?Fl zeLY?_&-F_L%^|*h${CP)o^=`JhPmh?cfK4(ji-Lj3U7M#_{XP0EvZnREuT}(pJjSo zALUuQ1$M_|&CM9B=ggeQiQ?QuEhP0Pm1I)cJuCOam#I%@&qll)#yH6p#iIk|wLr)Y z6#!@)VC;;vI$TT4Sd;js6RW(b z%_)jH|5aY^#$v~+57ZN!kgt!+=(b8cPGn3Y>-jr2x9x(}MlqBD$$+$xHahCJEC?-q z<;J7InacBXxt($CpzV0~2bOuUQ0SJxjM|J<+1V(?)HRQKnQTDy zoxs=fwOLUwH;lN;fQUCb95GD55`kr{1M5JG|6RvG@z2^?pN&klWi=S9_6y9?pP~-M zHSgFDJ@6+)Mz6Bg_;a8-#{1mGn}i0_cDfU>?~RA)xKRm@H`sN$%)#C82-0@>h^Ge> z4r}LQ+xDuM)L+Dr?$H(=tU8(zqZ(`eMRM9KBRyFIZyJvFZdc3`O1a@}xJP~nt3?Vw z5_rYZ?OvQ4+pjQ&&th@V8!j;ay9iwekTgQqt}-yjyW(chE|qV~ep1%65szp*6)q$r zZ08isBo6aFUh@BbVr0aB_rb7Z$yj)l<#(Gr@d1ioL-}0Pxd?00Ppk$@AaUX|(Xjar zKS?xVBmHqhs>>`0#kjlVw_14j%9~EnX+iIF5>83&JiaPnol*1?`KJ z|G`Vg=@T};PEnWrEop_-F00K%tm_(tdDeEePpI|=G>NO|4W0h znajWvx0mEB=EF#{JxAOz$fPiRUNyYGKTqj$9S@vCN7CUwY7h&kA@=p;r^-bi+^KT7 zUa@Qxr(RF$$UZm77uSXAzgU*dO-8oU!spuF^;R+4{Eu{yQdrqKG1Mh(X^v@Xt7wAI z@*77!@r{$FMe}=j#ZfVA)|Ba51Z)TSMJwG8^5Iz_XJTuI84s*AA;kT`!u^y+;$N^N z+2?V$NP_4?`-X`!+|`)dlv}Rnzpwcpya9m>oHAl}+Hf44o1fE*WhdTt-OK8p5pOk? zuXwMgftI9B4r6IB%ct1p%^G|lw$M4M9UYfh;b{0lIkV(s_5adI#75-&?9V+nud^x& zJF<__T)^3(K@RHB$wM;2N4`t!$j-|gbZ#KJOYE?uKw!uuv>hj1RFD-$MeI8B?o^&~ za-3%mYR7^m!_I>q+z#J$F>1}z1b(G$K=P+gm+w|P+%u-Q6C8+%rta0q?5uacC^KHLTUYv?WG&<&cdtA3U7fh%uq zbs5+Nyp{2x+_!tFS46G_PiYJ;S{J!L*mL#|9lu7a{PjH|1`3^&S01EGL+!~nAZH^P zoN(6c6esFE_gibCc&l>zYuY&j!cuSApSD3EHa7KsIGu&TSFlw-*jitjTJrLbR12N6 zPlo6E3&(GEt{95%^q<+`$2>mgc;V0A$G;xs!kez4a(&_t+03+WU;P@Jnm=6w-Ct*H zIHj2Bf4|p?_3z&9+3}_PVK;MPi`s)g^`yCV8+~Z`K{r?y_K-#&m509SZIIUm@aS5` z`^LD?jeXaw=;FZ5(&HPS;%7U^tQE5|Lw(wtk8~d1j_>}$P#FEC7!y}qP@kZY=I;H` z|BhQ^1JL(r@%Yr}xBPFdu1TNgXeaF+%%l9=hQFTYQ_S*tkGtM>-0)a4 zCBpX3RpfwORj&VDlpf2R8FRR2-nr^NJG>LDs3;(0s;- zjc>l>he#&kIcn6Q^CkT6YM`5^vHSJfDLJ=|20?=XMBv_Fi#LGA|BIH1v}l~DH6q4G z7r+Z!$5mdZQa##XumO$OG1A7RmyDsP{?=*YV=_uFEANDE;NXt2lh3@w7q=5e?EF6Y z&btt&&dRsm=Qq>FcHTN-4=?JplWL3`avq8M`Cjp~iW2Ar6+6QEkZ|N z%~3^sJ-J8cszb~K?>#n;b2FhT9&Tl&sh^v;;X|x38PuHdwpy-{YTlqt$z*$tFJ$bK z5KyVhX6kKCr`BqcK6_aaEY?;>!~gx`$Y~S^xrc{h6g0PM;!{8KWB>L4`fsumClnM< z@Q6Ww83Z{nt6;I+!Ky$)mfMV($>er0=(M2t`M3pEH$+5T6!LK?1YMA0I5da6DPWi7 zckvvr!GwQTW$@(s1g47M)sT->OEzw$7Ipf4UNG$Cv4hXW25CF1%@SAZV2^s4k?%O? z?M+Ss_u@jzP?MM9J0V-ENcAuArDbRaar`0>Cz1FloslmPz?`~w1q?5}eCMNdrB~nU zada&FF&aa4iY|aFPy6DSPMNt}#s5Qzbq=!d{&3Pq#AOvxA7na-I&zJ4CpoB+1t>N- zVZe&lj6LVBm{XgqlijY_i{nlKQ|$%L@exldu~s|c1>4k#a2E`krF zlweLt#I=FqdY(RKl4k}S#e7(^IS$sdV$+jr&Ct z_`_-=68qSVvUS>Y7^uABJDN*<;kQd;O;-z8#WlI449~;Sb=x2=UB)gXdLzHrYdu>{EErHKGw4lX{)Z$E1@G zJ>^MtY?QLI3=EdUS;aa+R|;|1d58>5JWiD&s8T_TB=hJ}PF|uBiYpZeeZSLsQxC zEp!Rf*otB%K3?M{)_ceb^azp??h$aBfau~G5h~pZx`dt$yZz|S1~##U0oN>@hb72*Q{YeS)*{+%Dxu~ zi;AC;r^-}5sFFb7O~MAcg$nDf1WuDW6o1Mu^M z&dG$u_PTtNw4o!;J<)dyTYS`cM_fV2(Vxo;k1B82293a=E^~k43~$)GjQKV$RLSzM z(|`Jp{|VKfDupC>rW0T+YkCBkjK>7QKb%cxnuBfOKr)++7{*{7jw7$+4IFlp>qw@S zoHqxUXY8eLnIlWq9M65^`pBLAx{xdCQ={BzsemA1obZ&cb(ut7qC+&;UOrS86770< zLDbt`U^RyRc5vV1z^;~@nmMT0l4WWuX|f8NFvlxSBK`VGu|79NcV!a-g7ty z<)rODd?*Zh*=S^Kir*UL`FBTur{&;o!0u0=a+<(P>Cz7=e5QYVeP{G-9+PuPb~!*Z zd)~_s5`AggniSG9^@DseG1rPdnFBq!&GY|2w*jVPOXb`LT=`3VugHI1-e3Xh)M@^XYk=jWp7>sLHB%VuyQ=OnD zKHurP=wD$e=y5xKc;>+awJ{ysHwn2<-U4g64}a40 zmp(r8eNvyUXEnNa%eD1Mb8}ugA;It!05T=`*e{4O+D+88*~XB5b_a{GoWEF0;$Iq_ zl`{q4D6Zr5kZ(ulQyQ)N`&wTwT31g$f3Dv?HAk4%+p01>{JYGHkDa%3Ub)uwvv52K zanG?ueTj2ay#DquyswDelBW#)b=SN`8@?QMNgNvQy3T`@iyhdto;ZaUo?HB*A^t6Z@#0|R4UQPcLlh#-(1H<4Y*HuHVIOKGM{8cg_0 z+t4eHAN1ZV&X@N#vbB3UPB;O(|1v4&u+ujJr%lV3Jf$plh>-ghCJg;}o*<|kAe=fDOPObb z27G4I&08%>SzZgrkAVRvNR_{wmN)buc-iIeBl!K0AQ*h@KN>P&XDApT3tA{!)P@wW z1|Xfex0qlVz2qryKmz(=f}qTrOx^x0j@1|5Y!*B}@zHb_uTV?@Jm{V<5b?u4W^$j? z*!BnJk?O7|#wpMyXg8YDK3v-8L~a|zjC8oF=s+QMAxHRoi>)YcZMCeD^=^C93D74= zD^Mu(B!O(31TQQ%Z%zWYg-Ytx;ixoZ3>?w6*Cg=&EG3&qLvFh-M1#Q%eSP{(bTm` z(ftdu2xSKLS00Ge#t0LCWj)CUna-tQ%REHEDZH8lXW`#PxNh|7Dak?H>$RpwSn94~ zn)4RudvIcezl1F?8LY&sK4X(k;t=5&NWWr}qvM6dmp`5CO@HwOR-Ooq+!RkRyS?>? zg0HCXsB7;C+41R_Z!B%Kcq~5C=9KFeInVev6$KnIQHSN$P_4EjRouRH9DT~@6T+nO zii1UT;Z#kfyF7k6IWNs@IpLuEkL+uDzLZ;Ognd&R5&%m&OI}H5>62Co!`Vj2S5${w z&h2_2YHfB*y%OJrU&+qXT=v5QUgaT$dmv1H95gdb3`cAbd+CzBPm_Ijj?uig^<+FC zUPs_(ZZ4y6;!Q2sy5{Fw-K^`x0ct!?*M^V4r%M#KiX{$t`BUgQHjr{>Z~2sEe~Yz| z@n)25(zj`%sOi^*trl5qQee$b;pmbztxqn2Rh+qWVO1e?L1 zT(rUy-5`!+Qv1Chn|a}G`FN70)?73j(>hez?g+=z9h_oZc5w$`=1Yii zjHTZYvh6aC!YAAQ5>F|N{9FAbl*4bE#*#w%Uld^<&}#IGyV~p=|x<|Wd_FF zU4n>%>+a5px;C zrfiJ=2S!~5lH0c`J3!!vRl_2lN5qbyycOtkU1QCV*IOSR}FMlt496o)L6D0{#r+Q`UT_zj;wPsV+H0O{m zgVRZrN!CpBa`^}-FP@?n9c|SHpPc+!{l!E|#}}+uU(2u`lA@ihH?F!3D{dJZyX-$62J|6KigOHPrmsJF zCI$#=jb^!;U*WovOQ7}yOv=)Pls*H&CVRg8W7G&KTqu|b0Rj% z=9!{=5Ts*Nj+@hQwGpiHwOQp|mwDTUVy`CZ9yRk2+HmSYo-{Pq`-mvN=RYk;;e8z8 z>`lIe3(5P{=Upai8Xe-_Uz(J9!+D1o9A&rPS~ZqqDtDUG-=D7SggA*iHh)UHyQ%0; zFF&2~|G7r1?rhqJw0X`SHhEI58wl<&jTV3Eb0+-2AZbC?*1g$+bW@uIZP3-=w?i_m zc!+AXX4^59srIPyr1OGFpv`DhhRi6O8O2QLrp9P*u~a;$wSRjY@-_!#ivCjPAV$3A zoNnCmlIPki^VIfmM(1q(0dhVjmjqv4eAx*D}rHcDUAx$s_JCZ4+^ zA_v%?dKW#N=HS5!_|u~g#IGQ*jfxc*yUJx5OhMym+X&nN$c8S9nD(Y4=Jf=1cG0{y z_)(NCEHoS&w&*j->>w%-VZACJ3!sR6zwry^iAp+S1^cIRvGBYmjXEB2j2<==4tde>%{y97gFq?hCXsOY^r7{WqdGUj zUQIAi&<7(W+0DrI#+^6XU3Sg>Z* zfio+efBwC_{I_tSd6HEpI@`>0lvAzR%Zh9lD0qq4)18`&=^&LArg%|$E=)l2!#olXp!&}h)A+A@%v9Xpd751! zeAxr{ovD|ulOOF1g`b{!iAHw6JY+*F=jtB3G0={}B?%H=G>;@^q59{&9rncRCo)4X z+6#HZmife0(dXwo_hBsc%lV|@e^q4ulaqX%GQ~eAb|dBnU4^Vy#2KlLakVz`N_FzZ zb)oC|xq219mH$Z!JGD49QWMCsk}o7b^hR57o@Lrh<2cQBob1wn(YvKM z{GBMYGxlfHgb9Qp;Dx`yjliayq?4kh^TJf}Ww7VAo`^KH?&Z_{$hLTs&O&E_v4J_> zdNSK*Ou0(FD7REDE1C>DF&?|b397H0{#}XwubG#B!e_UdKO6Dy4LW~)-utIJ&u45b zj~{_VJLjTw8zLJB(e(*b}Bmd%fc#{CgP6wLDzcf^o<}xm&yD6*%m-u>vRIr>8L)ckZ_@68=pV)2Lb@`pC!*nPh;Vax;k z##a{s_D}vyo_hzQxND!K^zP?Mw;87orYHS&yZM_x{Z{TSlePF@>MprlV$OvEW($Xm zX`-n>=We*#Thfn09l#oe#5^Cc@0W*$o}qqK^G)Y|d>yT1uU}ru`PnwRWA8{k-(9fs zv{m_$4Hh^@XNF_9U;57;U%rCDH~iq387gtO#9ULC_ou@^7;n(|8-m=Q%$qc_>UbXC zdHpmVN)h9v30Eb5f-_WHt4x}7x%}3Z3{l?NvspIrlL3c*)=$^UF9YwFLHhe1l+6YF z{dQib{&V=mYr6vN+?(+C_U){@E74^e+9N}}(HNSP7#a(_-JsY!l;^)8f}fm5rV9Fb z#(&{W_DTA^i8jfQ`NCSmG|y7=g8cR!1#$C9HeSb#w%?@o87nr1#>TGr{+wAGr%{aa zSTbmV0IlOeFsAN9j^`(DlLZYYG_Z_Wm!a0D2shE4ztP>oMvRqy3TH>&>_lt>v~O!T zHcR$>E;C*`Dl#;uXy=34f$IJz?`4u}n#vYFg)9acZ*sh6SF@Y~8q=(isr_veJLi9Y zb=Y^fW4kY#G|d?8QK4>WZIkjN{#8^X`Zd>;_cpvPdv%H3_NSfCQvi2a|MTBIuK@nNk7MzZGTqZpe8R zT725LS>LG#A3HM97QbS+7OjeZLCJ1+zIDjb0>BuAmN0XBM4IY2&;Yfy5$#Iq8hnz0 zk?M*_-9Pvq6jb~1x&E;OzcRM#BR6CmLBxz0$?hW;l}gw5&-o3VR3VPhrCv|j;HPI8 z6`gRysNF&Eh8gv%1AX0NcOlRA&ihB;ff5gJ_$5!T2HEvGvf5k}3l)y8TkP;NYFDSJ zn(Jrd75|o*Ky9w->G`1h!qFGXSSjq#4KVez(2LEOau@x;_vg-4LB=qcJYdji>cABL z;{F&MG~vMk^ez6o_jAX?hWLlE1}V-U-gjWcF0a>0Qnk;yQH=+%>|-^!{amZ3k0n-T zhr+~Oi{_3Qip9Y6kguh!m4olL;mjLe6#%ccx3km}J6RP~L1@>u!oZn`y>m}R%K-2rfL z{GNHu#S+%VY?xw*en&{ueeKa-!;$6tCNv|zD;9G6N3858lp@uzXn;cdun)j7!cQlp z@Grie69*&)OP=MIC>+_}pMFZjzroE37a85 z4*fpY_N!WLE0i}|t@G=^nPYqtTKb4%G>+PFQ|fv%kkMt&V%#tBn{7s()&nw90n0t~ zjpK()3DqGpIR9I|CQE!$j$mAmY^j~07MVF??66QY^=WQq6Gc!qfU>4g`K zQR2wg!3UR#-=s$`{f62TFFHn(--XAY0tEBL%x=tfel*-n`MoDa;akQc~*uEw*;WTiW`s8X|prMe(0`V9c=Z4 zmxepOfpzu!xGv#uU?E67TLJu(y+QC`auu^XjiWiJwZYnj$bTz{SXN)&lepNq7-_w zTI9REGBuH4Ub3}L0yyQpW|8NE{P`E9r*f4o8$ZO?ftNV#&h!~iM1>wdqNseo=+}Z! z`VD;tUmN(8I?b+y?@-|*zM#1DX5}}zQ-2NrS{Ms$Z?(fe3U@g}5@!~=vJ|-Ul)`s? z$vr==i!6ArUinYQS=7K#o0NTM6kl4L4;}ABvhy&Gh(D}O` zY<0f`wcmY>kL+SPm9@IZv{ocm?YzSUd>sB!Ra zq4MEEc-`>Z|AQ7?tr}5b~2Z?k-N7KNS9wBIK0e?rPI+0i$H7b@03`?DO68->ds|%0H zz36ol9y0&p@Y1^-|FYjZWSra(2z<@;&d}tX7UaE|eZHT$+M3%6O+3uowq1zV-3wg! ztu^VAhyVT~#}|41OW7~*Hr3Jm91W18K0@7R`0sPh|Ec8`${k86EGaHu;!eQ`4X}Q9 zB$K}?Tn)btWVqaUm{ELozx%a2e4*d&^1cR%GN<(e!uXt9+5FX7N$FLy({GO(zZ1s~ zdE%_cDWKyk=~qJ6c%Hk~+tKlBlyNd+&wtDl!%xw!a!vt|I!CQx1=SWdn7AyOy*=Pq z!@#-jP_l(?pt_;PpS>~A`0NyW53k=t;*;LkWJevR ze_M`>eLz&9+qZm5`AFWpTM_7ZP!f_vI?((Q);^x%;LBQjfN<=MNEfKz$0^t3pK-?I z{Dx%iH_e!z_t0o6jVE0E z$he6-`p}r2A^H7loyY$8mn?Gsum7Z)(wIy9pfr?rWm^x_0gm66fWl1Jn#!7Q9HV}ETvh;ng1?FsT% zqO90vS{9@`3befAl_dIN&Y?J*n^x(9VL< zhuJYfQDsdMBQN%sEcN8a;Egv&eU8to2=`Jh0IeIc#=u)(Nft(Gp$Y<>oEQqAc!2Lj z_rr@*VlXi%VL)U~lhCQ_D9i|MKKi*fMlIjOfdl1MWrUj}ToiDeB=3H+j;Pycdx96V z7`_!1xb(cf(bvLvJVEUAz$#DSQns?vZ1^WX0g&UVAC}bXTWt2rGJ*B!z^#U@1>CZY z<>%dE*OMj$L*gs=^SOSJm#wS37?e+#1udL+OWVHIa3&i|8mPsS79XMERmCMAL@aXL zar_%mu>BuUHjNf?f}MP=I@wh}?xZ{%5rM&ZJ?bpEYx8f^1$wNz? zIB8p7yCb%7EU?>ze_lY@IBJFCng53b;qonX1?VDM#lO*$bJ$;Nli=1Z$W~H@@Nz$& zJMvC!8Ogl61XY4@;hI zlJBv_E%3r0DMIvRI9HqO&@seDpKRMx-B~R2Rm8cmAFXzly$O%JVVt0qAt5AvG-77g z4|&b@22-avw9EzKdRF<$y=-m+)c;~zj{ zHtyG%9qNgvN-0>EkJ$cvjOC}8@nNas74WM-eR*sM-* zWS~CP))JXfeM+&L12NGcas$z0>M7pN`^t0kiKYC2gSsY#%65#IV7zYaEMMYwApK_L zA^5E@OPMX6bG?oWR{xpWH{yTk(nO|3ZsYYHO2Y@Wo*g6>X z_G#@qPLi+XB(|*B%I~I?S=+XWd27gwZ0)2vtMQR-;?;KzTE)b|AxnQtOGKLh<59 z&C)SL@(})qFM@LmXON? zVtlVM3$eq);(DEjuQb04p|fK|_x3!%sEF5w+Tp#$lT$zLD_tIIv-n!?^q+OZM7-YT z_rMs64{3wIq1)Dp&(*$<{J&UdKJ5JB_+|Ae{tvSoe#g&zzw%8lGti9oIM^Mp0}ey1_ni|Oq3ia`>k zF&%RJmM{DWD54RE&#}k&$ob@q|I$#E)%LnRscDAL^&_TUAVeRGRr#tDw^_xe{_mI> z`%S!xZ^2%Z1()MY#d_ralN~XlREkGC@_#RBMLe&lY}}`%w$CIhbDt@VSNq{_Mt#{g zolM8yD5|Wz&`NsksjfcNG{uwqh%1zEW+0t8|>kC=E%WkYI-!T+=Hq{%=4TRs>5y~|t$cD@g9}@_1pmMQF#`S6i zO4sI7qh?J%+NKpDs`qx-`033SK@ZI*`|%sdQM;A_#phUv>c|`ovHtz==%tN*weFN2 zC(%rqt$Q+;Gst{EI?eMANAl-gRi@asJRWvPuuHeG)!YhFy~i9S@0&0j{ZIC-b5pF3 zekOUj9roY;%YXODVa{I=hH%R*@0Z3-8nwAVk~v#9(E)@^XISzAwAtt?RWP4G1ergH z0ctK}L#w6o^QsAgMSULV>UlSi5s3hfecjnfm{yc9`M%U*YttpYZi}Dtqfc^Je4oDr zEsBwF{yAS3i;<@nsVs>s%c>8~e``c#gksV76TVQpM6qX#}8Hc3L zZfpK$|82K#5w6Wl0Ba$^eNNr!uy}7hn=hG2ye@#rJfx8~bd%E%u_teE!Qb4B8CU*K zX29x6=5%3LJOHO==nHmy94bT&n{=S$@!hpQ!)w@8_t_I_=8 zEMPBVgLLcyVhOgF`yMmt&A#2smmkiyJn$;*-=nHwzYo6i!tJ{iFkEYK;w}aF z+KW$Es{Z|zCct+dlWfaQcf%q``gh`j@tqfa$qfpKcZz?`We2=dj?ZIg?4l@9UiJJu zVb^(o>q7nYTw!S3?4^{hV|T6P0tfP!dfU>Df4T-I6XZWln*$c6S`4yqh41U1_q0YWyh2c5K=HugWv3T&TN0kA|S%$NQg&%%~#y?xog|1#@6fOHs{g$5^ zOzJ`QL*9Cf@TLo#?Bw0HpYq$3Fxd$mEQ@)luL2c+`mm7~aFWlH0{dch9+R>hr2H?A z5DUaX|FTDAZPy@g`AYE_!EVIM@%GSmw`E}aVdEDov^yZ%!w4hEAElK+cS{y)=Spe5 z-@d7`#@jX*77(o}1#A<+02Cdtu> zcWb=R7=1xl-!eyU8bXD_f+rlZuY+(u(Lkvi`%{~+N?wzJhI1}|)R%9ZJA9RM=Jh0v{L5c$|Ap?)uM}DD;!4D4ZuMXP zC&WYj=ek>){9-N{`b>hcki=SFKYh7js0xiN6)t0KC%7#shMtuX^=93J^ez~i9g?H7%D{c?56 zF&$T4Xr|dJHrC;ZjrKM+r4|f4a?j%LoVQ|n>`s}sSXJJ}vhVr>I3IY6n3~u>WnkRF zIffCPtH(1|j$d~s;(ttL7N4F;2IfDc6hSM?JG zYgfx%syv0I=!L*Zl9r6-LZzmq_T$pe$8PdC9diK6pR zxI&S@H&zm-pM&`gF(O@>-CxI5!e{`1*_{rX@)+!+orFsl8z`nG8aTcApPX@T9p2(^_j>VPwyz13Z?vKlB#+2>42M2k9~!Fa{kvHB#^c0* zsiODka~|}x7syt6r4UTcxVEcd%WmF+h2QW*sb>AsT;AkglMk_vecxO{XPx4h`k}9k zO6R(+(HI-^%vS*4NpA=HLf7?;XB}Rx z^-D9mv|JU2V!sd3MZ&b?u{o!98WvGzYw9lhmm z7&}OR%VAHu&*y*t_}66j^9H~_{vZF#fBSb!fHPv8AM%+de^7f7V5@ESJBqEnfaA&m zPc+JhK9snPxMRB2zUfDO%a#hgK=LoI%bi0TrMiIlkE zA~cb=BW(Wq%KFJ>qFesO@KDeoN#c3Cij{s!--|za*llI&JSM&OKxU20WUR54V@$qQ z{jz{gy_(o6L4X0_7aNDVkiW`oy{7wM|dkNpYzvZ0G8UyR)U84M(0bvT@tTrpo=ocD$%K zTNy3(Md;6{KbJc_HUS39Z~-53EsZ!FpM8LH5wvL5k!yuc{nA34^hw@o@mBQa8;0>= z8^wPfdvO)=M?R^Cw#DB?`H214NrtdhX|9cBrB5Scn6+F&zM$A>#Vqre6G9y8kei{; z$$I#2Ek%c1Mu6mnHy7RJShL#B+xfOyilvx&l(JAG}@ryviQ@W*xMTmp#hH zDL+)->Z|o;s~*YgbH6(2Z=|=1YGdNy!YnXKZx*;tBI+a)=dp10>O&_!ZOO-CaZla? zZMScn!+fQ{|rT6l} z9;%RI!im5B_s8e0=b67l{u=R$*a8ntn8G>0&Ri7wq$HHOWBZpTK>QF>aAMGlNv}R8 z{FRD5YY-qmC+3?D>o<5Le-1G}yxdgF?AP(3#|Hbe(k+ElYTo;P-n)DbKe&)DX5Gvf zAbH187{j+|83#PRm->-;RNECZ?o%CGoNc8Q} zNldTd1g>-YYsS^@Kc8Rof9(Cw??0Yj{B`X6*!<7GnyvpnpAF6=EIz}sv4Eu|<9)Pt z$A0`#2>r&mX)Kh0tYcR4)Am9IPp53Lc zh%3bN-{7Yi|b z4HY<|@Z=}GNx&ZegIRAj4S2PrU~Zl#T_w)% z`wFr})doDbY%<_$=^sq|Q=84dZa;U4fu#r}zMsnj5QVZxqld+<{*ZgT7n*o+f0u{G zQk-dwnGVuLec#U59r5L*pB?Qt5BAR)*=(rsrr>zxg*(g&H*tK|d*iLkFJAPzeRFdY z_M>PVHZ541+jLak|JrXk+CvbIrsz}(X#It}59sxO*q-OnWUdsU-&q%a(9t%%U0q`z z(dSISyY0+y;A1>`vgWdNZ|qqY1d*kVxQ`~2QDU-}8-O)d+_Q(|et7SM0z;G?ZL)3X z1Q_)yc7~$BL^FMZ3fq`>_#WL_)7BU*uXSejzMxb3>RWD(5uM`0540o^5YLNR_!r5T zSGPWvkAB8nq<8F`6psn&i60F^{bYEWW8ueq4;`!hX|uP0GLB>Rh8IF{rQPV+f$>eE z4kYNu1Ss?jcq9p&K``<8ng9GO0t^y={^K)$UXXFe!(;5*K4zwuUB1tY!_{inGgXn> z30kJ-=1AFIZlYJ8&j|7M7(Dwo-6IfCSc;M~;@rAnc9ANBrv;ERE%%htHh{Yr$4Xn? z9=TXa=&l*VHp9VBj@{J6Z;-NJno!F{pD6tiy{kK%L!9u_<_@{?9NqZk!yKrB^E&No z^pbG2_|V99WUCy$Dbbi#Bvg`_?Sz(S6sJts=LA@vfAjiFZ_#zpv%KqqDw=$yZ=W-l z#bo+w^Lco5?|lzo-a}p_Zh^gJJH`^vO@Xv5=bncePCmX@D7OcgwMsDcTTPh3d zJUYHP$_-K~r0%TZX5&)CsFQAU!CM2}N?PR`{BYNs%_h~*<;B(p8mEV<@mWXdv-wRs zvVPdNB`28ZQLuLZ^4p(W2q43!^jQKp$*T{zq37(xuCboTv8Ty8Kib8_XrvdtwN?8q^ysdx5!q z#C72r-@JUT-4wg**Xlz6nX+t$%5m8y?48a-albX27=&8j7C4glwUTmSMe4&ue^tL| z{Ib6-(H;3m2DWfhe4&zO^D8~+;FL&Kj)%4NpZ+y z{0^^^1f1RxdrA0T66Q!`kIOM)4BytbgngHegvj&$6%YT>RNHmD7R@=u@aopJ@L^ z&yf6)nWTM&y=zjDh$8B9NKIg=-+v75#5Ja6 z$*+zb_)@mo`F}fvn=}*|byUwBv(A|0m*j&?z5D=YZujU_v6hQ5qWJVKH0A%0wX;a_ zXUa_19%>z^nXYYbH%JbW-0onIgh@_8%9Q!vmY*hzrL1C|WRZ2oq=WvKm6rLfWUiw4NIaPk3n`C}XI8+k&~Gbu^#%bM;DFJS^wv*edGR;Vw0j(%8-)W)%> z%LrPx)^4h=dQRf_=`!8!4QuG0$+J6XchiV`LA;tyCOY9dj3z^UJ*bZ`>3(r;toxhX zDmb#ES?(IeOJ`D67rDT6T^Nswve$A0G*FqHjc=n#gWk- z|F3-C#kQ0?a4x#A7a77DK5!Fai5QqSjbe>M|I&^z*%N01RX%UhUxT^yeO9@muXI+g1Ky zdKJ603^K2{v@+7L9dw!iKW|Pu9I*Spz*FnkcJ$xZzg<4?={K9b)B8OUsAbx@7BUfI zj1{71HZCBgGhW(cT6ZKq@xXkK+hc#7ciK0w*Hq-N@i1e*wK)5_slBc51bzfy%c6fB zxsTRyt#AGld!`3IU9f@qBWQmL64C+Pq?A9{t0rw4%4Xc~jIpIp;|?I7MEO$HI(CF+ zjZr?KnAFGbn50rzJ3C677|{UpV2XTZszEyw{OiN{U*UiW4#&AkF3Hh!?TxK-Bnc!KWXws%`$aTTl{#DFE;dsoX0@A0jg;IuhPiw13V2b*!vS-Vnjs z2MY^1wC5X*lhxPeM{E9_qs1g9Os;4W563HgztxU__KNDc5Nn8c};^o;9?2v}G+5%r7GR zN80S!M?OtaRW3CCj{Kho@6R5rh5vI+-S^y&Qv?}2ANNSTgDd~Ii?Al{H(9DVn%IU_ zBQX;2erNM7VvVomb4%^lb05=6ew(cgZ6K%*sH8Ej^n_M|FB@Z|H?%pN^&GRj!;*7( z{u5WcuBJ^vgP91~E-EeluOueC`tan6$x}=mI_VQItot~%v8=%;>B}UC2a{)9^?*=r zyiYW_H{7vPqOef~P$_=*v3aR&bBNT|;n zOY-4-F&IXn$L8P%{(j%d#zW`2MiA$1dMm>+B%83_p_Y?+Pa~83>`G!AVHxVUMot*V zhcmP-U7<}l^Y!O#68nf{_;lG{HkNb7C#`6w^S@OXV(Zf3+kTFR0x%<8Pk;3o!)K0Q zL6aUaVy#_kFT8X69WCB{j@r#Cuf-it8{^Nz6$xX;$RA9YsB521KL=Ie$#3#;C>(e3 zf|vSKmg}T+s*M&bnbjh@!Sr05w6Go87T^qDKN6bpmv*5OUM%7O`HGI|nr?Cc2lNwy zZPfU~K3P!Ax`As9Ctasls)>U z+}`9f!Gp=>C)Xx%o*gJxS!G%3+quS}+o1k;rf;XM`=I(<@zSB9`kyv%cYi_|xM!xm+ov!7$^@cmEh4I5poZ$Nov}s|e;@d~&_U%bi9?ENw zJQ$4|#pdm`0Aj@zB;VBdzTSEn#{=K#*U7$RZs!N)a)Xu_p*&}ffNq?>Qf%tyo2XsZ za^I$(&`8+jEngbprpSq6%GZLxl09TAY&i6SYF9xU43&keCPLEwT*)_Sm3rIxSWE}> zM-GA!pW{d%^jGN_Q)gmsMhF=|Awpo!^(%nmjy#*qh(lkZ{dwb(ad%@zfJ0`= z0ow)>4rd;1=M@W!X4=-YPU&qKhF9DD4nw1Ml&?5*4x5|dxg#> zntd$JZTs$a2fdVpY$G1Z@rtn~W#5QAVJw{Ok@$^!(IN6RcAfv!;zcVKa;}Bld>`!l zEuZX*%m0_4HAd+E^Rw;?HjRt$Bx?bn-!F(C*|y!&mV7O61=TL>GGiYqAMM?{Yuw03 zQ72vWuDR`kRfpyU2I*-&3Ks{e!h^NDI`WVsBk zKR4=8ebrH=dm|kLwTen3eIskbwC!j2U;m5b!V9&y_3^Y%?PHCH50?Cw{~2W&1Eagx zuDivwF-|&$7f|%x98A6O8+KJJbvojyR&T?Ukz11RxYurVdRmfw6bV8Vv&70IMe_GW zag0k%)JDb>xL&ZdYwqor`QtpwSjv@((Z6zU8c>Nh`3HF$me_CmmkH=Zqc7JXwXO~0 zk7K;_4TiJ6f8q+e=C|y?8eBGM6TCz>6r5N$F>{!W z#;3m4;=@l`UFO+j-!)MZ&GxQ0*x_rt+U$pRTd>|-_(A&N(T?=N_X083AWb4(qg~KU zT6VtW(#a=`v9Ija=?BSZ_wFP99@iB%zzYqwxuac}560el>?cDZ6m#2}{%$^aXy|qij9QAaG*MK#Vb?<+D@wvIpG>;uix`5~nN-3!hN3e%iM+V@ro>p!umFzE$Q^v^` zhRg{VX`GHnyl`dWE1C9}CVIjSzWq(K30X7ESOqHTrBJ(elDGXs@;|HQNdF{5s7Y}5 zS6k>-pZ6VO^nkj35R{lnUT!5d%241pL!FPG0KRH+dr!uYVfkia3Ac~8*DxX(pCNqF7+eyf>EZJ;QN zB*F2)&g|)syd?l|5I zd-9}boj45gx*#CvO}Y^go9r>M)lE>gHU%689wU;J5Y2d^mII(MxBY_uE80e%_M^u_ znUpjh*qmakNHpPtZQ_XiEOcl%r?xLT8{s}D#z@0SvP)gMg$Z8xe#BJ|BbWblD0E3| zk_o6FE3vYdJ7Lx~cV|J+y@dj&Gk$tOfuoX67$$*F$SbuSUqaQW$}ui zp(HS5fl&?_<2r~80^r#Cx=_Q@vfWpC^L|9wV>wO+Z0>rpQj0}$BEyRw!3cB#nCeS6 zgGxpmZsN4mJ6Yz>nlqKfuM^cC|Iu1wv_j7z6Y3;uH=vVz9KRgz;O}>e26&UiSGPFA5Cb0ND1meHK65g5yiJ z+X+i{EUvE0o^hSG)vx?7+FxV?2`!1^`h87HpIYTsugl_pCr!?+waA2gi_BYkr<0sx zq6!k|x+uk?jDE7Tx?;N4a z@*DT5_^+I_lzkcX@3aNq8p|Q$wf#0vnb2c>Cn7&xR*c3ckn?SOJAQYw%HOHkx{(Gd zx3Mmq(S&_v(~3UDnvqXd^~tV6BIP-?pvyJ!IlAD4Wvo-9+Awx9uUMQwNzX>90bm^C zWWSDS6(hBu_Uph%D3leZ4vWNU=!0VkOIr)xK=*s)-=1x{j^Z9Mb4}>hD6bg1fB8oE zf7FTW58h;~iougMtA^`*jz_ID&gCzC62D5ZI{zVc?Hd4&Q={*b%kpTH}LcMQ=CrI7h zV0<8be`47RPr@N>$F|tttYX8f&9g_gGd3WL?GRhK17~X6Hi$T;Kxs22sbBfvJ3FI4 zW}({0w>^;qUq(KgDzd!i_ka9<;eY=1-#`B2`R~tv{C{x&`5(CVaa_BfcK@-i-T!gQ z9$eeGaFg5ER*u!B2VAOAKE!$on*9JgAqWoF&fkoi_Cg74I=CZa=bJ$caQ` za?0G1BOB+!7?P?3n>jvQ-MBvrjI5Cn>>g-2=8fS35Ss+N#wn-Y&==!h*K{G`_KBor zW!9u?n_d^Vs7=e5n6E)JYH0Lh@Rzn)KNR7vN*_6CXNJD4+o*-YFCs?87Y!22NZpY< z2Kl3*uDQ;8*I9QNZ|A-BUHf)i*Acr<*voajn!05ipt+dr=}gImV$A(mQk?j&aAN*B zT;D=wUF%Y>dAluJ-SAETD>Hcq!Cqa50`WAowa#$02i@0?FT3la%K z1Zaa-?M!{XZ~kNZCb`6qz3^n^5H`?x0}W~_n9<@t@ziQR;{LJq=h#7Yq2(VKJT^CL zm{~NuIRyJJOE|E6h;-t7UCT~(#(!zkRJ{zU$+YQt;cyTF5QS>YbO}zXbF=bgt@-v? zS#wNmt_#k*iF?~=fOatEC!83ieiJ#uMtidFu+MW_2hKTzzBw|t2WP8h)fz2wx3PTe zq}1+EhZ2Dl%B%^A#UZY{Bj)Adf&r&Tuz%Wl$vRHFBB^wYYQA$FtQ}>ON%t05RvmHX zT)kITeogSM`P4woU*zfAn-*Tb9_!l^!v;gU<9`Fy8=R z718oXw9Hh5RdX$~X3qwBoEMr{M_h7>jVnB_FsWDW|I_b&3i6RqHcub55+Y$yz^M)6 zKKrzcaUfFd&K-VzI@!SYjYJ*J{&ur3r>wjB{z>6-jzT4Cq=Mm6m|6k4npJ{x6iod{X>pirvoabS>KeeF~Zs=GA}e zFWbB4Jm*0J3NN~hPUYfrA%Fj`*y6>Tfaqxp>xV}`xRNn9lL39zi@ zk?vdq2S>C=wp{kJ>LpHP$+$88l04EOo{1RV6n}0k5({%Qm`VB2JfDTfJ+bM$`@`z~ zPH^Zs^LgTBL2LMP`KXPUO$;a|Zhf1e+sn4&CHuCE{Jfpzv5wP*~M*wHG|3`A;f81U0jj`vq7)5o%#SxCa?baz}$+*C9~5pC%)oUFyR6GYwQE8?@AdUp4jvyH%3nl-a|LC$c6O9fp^$5 z9=OCrJ(^9Lp^aI0I%^85ah$yatmA}1`b2_ZS@}6o;vmV;{|cw>0}2vF-gX_bZ_!)Kj$%X@#&a01|)mU%xk2Ae0)9un~=A35#; zbZ8=!{cNAD_*b9FNt=Tk^0nP07j5K&BaKNeloKEJdE3A48ezp^VPCE`hc4pLPbN2x z4V0wvREBW0zxGM9(izi}%)Mz&8PrLLoJ=#|s^MofKIoJlWm_T(k7XGHP7k-aU=6gO^> z<7&dPurGWjHgA)dF}S5Zc)~;(x^G|%SX5mR?bX)_>p$0A$fkWmm-%VhY-K1E*Sr$$ z7>kYAA}QSdJu^T?`8v8ReJSwsZt)*IbJ3GW-4K4kWAa!?nRp_e+q<6~%y@j{O{xja zRAA~P+B+k?)xFJg-bk}qz^1x%N0JyQer)Hc@T;;*`QM4yfk5&ZT2vkNIeVq|hb)${ z8H}8Z!h%8mV+k6U@6{;&r&^rr!}7oKLl`$NpS5rVQf+Mfsd&C;63rOs9(8kTMsH?c z4Js!V58)1(t5z|dm=W(Gu6k{4*9Pe9liZ~D=)zk>eG&2JlxJ&EVEVJvXG8eJejqU~D55D6&#WyfUXNaTQ2FwTcFwK=XzzbOODx$nlQN=`xY?o&xAW+MdUFS6paxp zY%8E3a6lv62SRW6&u;enHuj=TuE+cxt8(*3&TuM~&pBGKF&-F2uX=aK!n9+=wAokR zNV7G&>waKe)zjUV)mu+oM;WzO7GtCr`QV-7rZ zzHGE)-|xp9`-8oFK26=%?l(vH7B*gyecsE&eD~_SbiW)rAEJY6C_Zm=kF|8V?(dec zJVow}&$`FLi#R56RA)B{Q-U1->OUQs`zRrw`pCOaE7d$O9CHvMC*RtQZo^5_-^Q6T z8h&E)jo7i-FV20%p|6zQFHdtJ{a9*OQi0{kXlLNJCLZem@;nH{4d+dWtKs%NrMPPh z!$2*0Y?k4DJ2F%5c`|;sE2gzqMZ9Lf_NZXPv56#I_>!G zS(~7?(;s}JAh;ljUBvSIE37^(72!T_g&7A#SH9tD8p}|S!9Z*;y{ZrF4XEF zd3P|?MFgM*GmRy$(X8O##1;>RdbsGcNUYzzHGP2Wz~Co0tPa#)chzFZ>HezQ*Y>$@ z`@$Mppm;sZ3m~l;rB>IEn|GU)ouA9rpxWC~rhPrxbRnI(>I=VKRG!}Aj0kqHoP2_~ zahzCrpWQ`wMt#xR`f!ZoPdLYSz{3%b%z4n{PZevQ&-n|r5V7p)Zv*{}jocfxs6+M2 z8y8yLPGUQBb_$Gx4*R#uL(&1ql2PHFVpT&@L|q6A zE=iluBf`mpJGF?dE05Bz1&d!qd_Mcg?}{<_Yl$&m8DJ{oFFsFiFL4}g<6Pf&8#)v_ z+JP^oULi@lFIp>KK(_V9&5RP0|I9vBf2}ejK==U1dHxEx9@>$S1JBQqTh2gy0@3$9 z1T9Jdr1m(}-tvFH#*0NV|A2IT#D5d1@24-nxv~jf06cl4zL{F<1uf=Hv3~Ga;@2sb z>p=;5l93$7pKLX%!)lnsDLaSd1FoHxjtVEcoWLn-eD*%6ay>vvKK<82k4`+G&#CP0 z2CgSWUnadF-}5^>_Vo3B!|(JjKd5?stlA&(9|GlZ_(+NlKfs3geq)uAMEM4Fah$dA zQCpklXIiY(u`77Yn>bkd+H>r2bH}Mv<#}?5L2J}!yH4@2(M4+6@*TB%pH}sX0SXnl z!F(jwv60X}G zgHRvhkBg|yC}-Or(H$^riJito~0E7|6AjE6dL}Jz9WaN6=?LeR`1KM)dp;h=;{RP=X{YnN_X+1?l6C9`_4$27I13C!nbvj0S%Nqv7tXFQN=^W_b>4x zn}9~S@8Ev?jO)NEIXC;6DW40p$!y$yv=cmoTJX;et^8e4JJJTldnD*pWDU;!4{nKI?$3!{LE;^{-*k`YLuy#d*Ym?!WF7N!S@PUA40q>p+Ff=PQrp8#P!7k##@rT%5H#)}L2)@`S_%x~c; z$!E&GgE+?lk3;g2%#QMt2BF#BT0geoWxCMt)HG6-utg*a?L>&Wx#*z-TG zwBvvE;BfG5m+(cs(T4fJpfmNRh#&7w?6j%(_*YbEtu5PrFn_7o$>--AlpeDtX|`_W zyB|(ETEDmQ)B3XK1p_8htj}L|`XH`K)h1&D8VCFv7n_H#(-kZrD3SPKe@$HS^4VVC zMjVv;o8VepPrhDm%JU|~N@x0DjD#bu5iy;g8r)!csq|sZ$`$YN?|rnL*9yn*jAxB| z_HF)z;bru}XD|GYc0gf9jLz68yoodNdGZA>3}E$VJW?*rf_~#k{Z)%dR{hKd>jCp( z+@lpW`Runi_prbA`8%+12)7|aFpxX)+*CZCD8xv6OG6VSW} zr2fLqX^{X{j@rA4-DJZMI`W84TzHKOzJ0ITGk%cFoI17S^JMU}LC(w73`zX~4awTK zXPofm$7d?G`y#^l3j2HdX56?JCJ6Q`Da51Vh`pPjHjpFmCHh;(0xwB( z;-Hw7Ur+yviNB(~;`2&8V0|b)wd{_|k53YgC8L48e(J?xTDJ#J4;JsCpOjY*(hb@kh)oyx>Ldi$Tn*U}16g)5HUL2SbSdOgW2cbhA3B$0#9rruF4Yc&zl2c3 zJ0v!dZ<1R`jPrk#4+^K66Bqo^Kc)=3vU3hZ+kr1XZ1&4`lS28P;kR@SmI*(H(>ZqM z!CX|}gNw$mSsyDdpaB>glyRbrz;|tEEOymTImCrEe-*LLZA^;%zt6-m*Bo8Uda&r? zT2<51=w@I9sQP7{o6{5V24Gap=ogcdo(=249Sy!2cek11u94(?Gdpp<2#%Mjkl97$p@pM%cj?sn|Gu}_y@`HQwX_tE;NUs6WOdn2wJOk)jg zpH(W(%o{6z?jyv`sPoFQ@<2nG4JW$~ z{zw^G=aIdloUi-PFHAXO2N3{ynhd0P6X+}{%{bX*zmT0;K2cy6Iy|}It32I zsU%ka+DXd4knc?R+3f3fBqolZ<08I#o#{^I%wFXGYWt0Mzx81KHiXW(Q0`Iu*1aS1 z?21iJc~=Kst)049tMh+$K_$fh@wp|;>|QjXU~~#3TD?4|4N2!rh{y4~)jg9p=zjMb zC(4UQa&|BK)fjER<-3rl?h)I3FNK#8a0G4`$!(2K4K<_s%f|N6$G+qjZ|xcFthM9H zGd;?fhJn{ntY6A38-v4d14d&SEOJ_oq3%Ar*)$GiwVDR8L)MB%eBHc_>#Bi}Jb5ks zm2$)eraEQGjOOBLnuNO{)&cO`N!8FUoS!mV@=l&kJ-#1PXl%K@Y-a5~s0>}tR$jVl zul1h-L;d7GTeiTSfyv+4+P_}i~xqN@xDjyI`;2`@^G^^)^pq>L37W9{a}x2`{Td5)#RTRzr|_z-|gKO>4Q9^xy?~URNs{rbtO0T(itqcakWA2xLNbelQV>$$&Eu zpL4#GH}TlzO=l)qN)jzdESb?ZC$J*<%S>7WsV@j|7J_|*vvG_T52?vlB(c%tqG7!0 zh&W>X*2HccqdsZ0gD)P2b*4EH)P5u(1&+^txI+h;I2ST~dR)!7rbQ-st?e^dT5kZ1 zbjoK!pRBfeaLdWA{J*^BLXR;FF~|PS5A=aIDbHBl{z`6h`eciLIp3BK5e-l3%C(CG zn}!uVv~j!5;^^v$#w_D8bikN+QR1>M$gH>&=W3}5J3~)&8y;ngho?o=20gC-9Mk8c zH&?Fubogl_IJ8(M-{2%`L*=z8NDRHI$%j!s=lJ1a=_u?`3xnb~s1+{8=PMKc8;`Mf zHQcQP%%Z6!jRDO}@XlzQdel<%`@|earM2-IQxMpN9Ecn|AS)Ggdf&-ItVy#dy%NVo=v47ecF@H!BzJ3 z9r9C2_DtXSBGQ+cC*lHVXjSdYwg*O#k9-#T-5%}IN+K&v^Fi?Kq#tbn0jgA;Gt15X z*7_YA@eGYWeo$Y2c2%@g*Yumj2=<%M0~8}H>9J38EOUGnzuiv+Gsv#8zvbW?(i}2> zOWyjlsEK|vA6nCs0cTAYi=v2ZrFw~RiS-7T-r2Cy5XZltD{RV77@<4r*qkQ9f}P{St>mJg-?`&O!aV+F6F*Jt7e{-n(%S*iMoUQDWi3ULa%}cTEJ`GUp$f zn)oDGH%9V4zqz6l?0}3joWoq&86Y{b{!sARZ6BUUhwGoK5Auu6{>C{YzDuZrlIH&s zd26d$b^qrjv)+?iwF{XaM>1uxhadS@);Ud_I3JkdgjGf&D%M&1)qfLz>@YNqUrbw1 z#_S`FVUxEE8;^*SNYxj$?3oRf1%*JkY$#IACl$)NybJ+I!uc{%g$W z8~`^^dn8M*1N4>=ZmxYZ=c3hQktG3fJhWP{wINd9rG6g08v_{KdUn3#-_Z(jt z1UdK{1;Z3=j1(CQ(L-XajjgATQQoA8g@kq}d@=$jFh?)=rqupjgHVia{=4i`v8*_< z{j-O!RokA0xQT|8#-@_1drfcsIVu)U>V%e5p}=Q&XO5uj)LrjDNl1WY2p%558ismP zZXdZRSafHl%{>crbYdSghU$HjVPR$)#s(vijgpzPoRr$yGv;KC+S{1e(I$%CE_@rh z-#^%J9$QM=^Dhh`q?`2ZJvPTc;8L+N+d=%x8aqco6|Mf{qOyRA8*+cn8kr+9EaJYU zFgQ6J>SKIyQ{acX?MuI6ezbH#y4l$+>x?OoUpCc~zg+(&JogK~Xgs_q!w&D*+?cbQ zz3Vz(m$J@ZN>}$XDQ&~Yx`j2mFZNOH z_&s?lRI1t)?U_4{eD6{pPZ-gW@7zDr|C|14E*^ykj0?P8BRk#W;<)|yCja`w zU`&sC^El*C1mW7iNBKuLHH_igb4l@UdfoV!Esfb!rkAA+`HgXd{s%X-_F|f25+R80 zwAs+K*E*JlBfkxs=Cfiia7~sX){(Hfnw&N5$q@)6^ts6>hiSh?YGXbl1qkZx#X0aR z9lqrpJNAB(;WJPBM^XLrAFzM>-~YP{9X}NrEU<~z<<+>~%rT3)kVm!fyumLXtbPo3 zv*%X(_`HxlT;G9uL5fLEa>7wEUJC}|_fXt%$_hn3*RHJ~o?w6%0Q$L7J>biGf_WCI z70+-#L7i@}3K&dKYNV<-PkvHJn2t>s9we!f0k9ptbLJe zpQne@Bm<9oZa>98G{GD+l#hxXIxi$^f_34NQ$G``@yYU=6HNFDkC8?nutmF}PiU3T zd6TEKT^Lk4sMfR?05t|bbPTfffX7p}^EOR36i?^0=Io*T(1w+9wyyDv&Z!m4PBwta zMB{9;wi9PHH~Id@wtw6W#=OB_6Fb|)U?P_*t}OkWn9ez&K`c(Qt+SjbPJ02OnUP=# zaQb6tsz<>-KZIuaH6zD$@b2<4K$XvT3~DYq26@hZ>V$j08S>h?ct*7PoTHO*GX79L z)?@OBJ;bDO`C)}WFBW^T8|!*E%33PhnZ&`EgPSASt~Z{y4Bg8YPG1=uIj&e(_e-6y z3+}|jZre@U%PjjwqU;v;5gje!Z0h1!P4qVD*>th%Ld9s%K!ryUpQXY9x3&;*?Gyj` z=3V+E?T5D;&PW|npx1DE-Xwl_vXexTdZf%|N1YObTo=8eZu4K*NrY8gbrQlRJr%%a zh=pvSkC@12AC;SQTf98^6l!l!oOQOMe=cxCEyhYw2xB-_OQ#XTY-c3Bc*B;)scp=- zf2jXSSy$bRF3h=FMlq2`>KbKA?p0DyKZktc(M~_E97(=>;mH3*Q01$I^AR_`FVhY8 zWl~RjGF+H;XZ&wWvoi*(mbq9|@E=K(2DP?irPV_!r|7c7y{qT*5z*&&edV=cK0dD- z>sglHMm@*%YLD~p@qhe*KWA$SU6;;oVo(sMis16~}8_uGvdt z9QrPKVCj-M6I9=O<-_Q?v3obp*WfcENf9jJl-3LV5$EygJuip2)a3I>U z4L&;P_(`#7qc)H}#G`rRG|BB6=AyVMItIQEu3BW(CzsIxFY&PScYzmn2and}iV;G_ z9$AD%8As0v(|fz@Px?T_dC}xM$mieH71#gte}CQx7`iWiu>91#vbF=ECC$PjmYn+U zwiVX|z!ALEj*<~%UdcE3{_V|v-_ojw|0mJ(udV5d1c9AYNXIqb0mvJHsH-0%lvFnH zVcM>h>Pjql@q={ddaU1%vGLLu?^}O>Y+MkT$^bg;5=WFf9OtLoy}LEVKgk?8$?@+& z;Pb{#iXjdar@SO8&U-N$f5%CeDfJ{S!UmZ;1imJkxg^Qgem?}p%l5lYlFQKT?_c}9 zU;Y~mQ~uLA-R8Yi#|a1n-}NNz?ib@@tg(y44Sx%cV!H=%fFUEb> zp-k`pE6!@pTJMp{2K1G&b?h|v%Wj_6k@hwX-aW!;%vrwJbD@o+=i5ft-WET6jX#%m zk9(n8W!_SLY@55N{d~`r-9wLSJx9#*jY+mEbV4SYj2q(V1g%!W2 z`xu!gzD(tjIcoa%Y23bynwJUZPaNt(evi%f3qRzCpNX8;{iOWaDzh^a{=#kjwc@L8_Z^we9T?uG=u&W%PY5QSL~|_wie?Q6x^4%#b&2UA>y3O~Atd}D zd8GRig>?Ph{?*oB;%4Z8IcId5dd`QspmL`xGpwXBMdv2%y^O&w!1RH!6C~X?qOnFE2 zHm{{Fn78Lz%QbH+5v+QEqJ7)D9fx9`@oxa8Jdn=HpZrUi=41XBND2E4Ix#uId?Z2T zuUKFA4vv%I9Y5Z4r}y-$V}5g5zRtb`yl}_Y!d8@59ni=;%~YVMXS>yhr-|UnKiG$odmYj!%hI{==#tk9`foDJUm?Ck@X<1l)j;tCx!hqMm+d>E70@dN9;RIeg=GIlBA*14j!Bx z(urE~OySQXBdT$LHJ@YN^Wpz63mCj?)31NL>4p07gD;>0dNp^ABj{M~S3qrGFJY-&AnRX03pJ5|_O35Q;D%NtsiBvgjmAB%?iSBd8 zwOz;%qPzI{gcpmqj|3Oxmx~k@3vz@PxjT=~{TiRDg$j}1&FHO`u6Ua<6CqXjay(oK zM+r(E^@*W$cVfrFDUBJ%lV#e6uH|+Ov2qVBPU$sAw%NJ_ ziEWD)CjekTpTC_)?!5LQp*xFrD9<=^N({@nxT8WXz|0e{Bd!K-Hq)pu%Xm?YL0-EP zyIgb>TrwswnyR(bj@$=;ENbJ87k-4sa#n?MpHT*^KH<;&J(s(V*5?A*Vvb&C2;V z!f=)2?7Eb~<}3U+9<<#80Luq%ijmB>mF%$cS_xj3U|R7IkQVE2QnPlhcY-{^W-wqw6S z9X{K|H1ZV(!|XvA*&RcL4iX)<`9K=9e{R zVp&_?Q2%mf%kPs#pp{iBZ`RDa$@6wU&Nn+>?$iKY%y29=5+7pkpmx@9z}aQ3usj}4 zmji$?tlD2h9r9NG^cyGI`+{9$@LlKS+YwV=<(GBbHT=8HesPAk8~=G5kHlEvuPtq) z;uK?6!8_AYqK*o*ddb}<(sC|hQ){^`5AfPi;_79q2)4r4&8HKs z{G*4smteV2YUt}It1YNr^X$X-WO+YN`ZU%nhYU-gVNiJNI!+u^-eM}nM8#ZYcIfP6 zF=j#!N1UUL^OHdwKW*Rq`@CX5w)p+lb@tPK;JxaAbwTF?vpA@I=xP`Oe>d#xec3X0 zG4R-Z`zz7+K`Y$-TX>IgN@Z65M!XMROMF@ef%CmF=~Cy2jOK|zwI`W@>NiS1DvK38 zmLahPYF6f3rTIAm&|{H$M@)|KH(|+0yD@qUJJ{UFM#hqyeqS{l+PT6)9K9xbEKr;t z^pZuEokU+YX_9}8qt~sCk~a=T;rV)g^YG3J18 zUF}Od8_${US@o8+(l3nX98mP_$BmJDnkYKF@l8X&3ZD1vH)-UcJK#3^ld#j`V6*Eq zkF`{k9*b{I(re`WL$&Z#N5#v`HvKYA<_r`lsEUO_wcq?n{+R5Cw$m6>-s_(UEtOWh z2mf4$+b~8vhg60t7d#_)LQQF9a+l`&FH=j z?QA&C_EwrR)QQNm+~0&&;d(9AGbx{K0I!(aOBFMzDvw8tepD5lSs4ezjlqguKs>B6W=80p+33@lZhJHF6047k2d?0u*D+yU{B+< zJt*c6;p|{UN(J5-am?rQ5o|+#*QSQ~-k$eP5M3Cfn?5m8N`WagpKwy1(w`svHXG#g z-oiZUj&CX2hI40&;=iYF34wvw`Xg!`Y;f=5w<+Ky{C|Btw&xSTYxD+HQH@zMxz{2T zyXwsj3}SV2p%3jIW4LSLvodZ>@Mq9aa6BgTdimaxk~I5SkayL??VL#BWMBk=c7jbj zVB;Kfnd&1FQ7md$i*&FZa$hCd-UBp(Z}VhBvS^lQTmn&~^WrA7HaV<)b7O8vddbPY z3d|KxWS9*edNWfxj>Sv7I4(dhZc1cPMF2T0eS%fbY_jQyT{$)ms69sbR`T0iVD-7u z&w!?TJ5PwN0V%*ZxuhL^u!*0+-$ArRp?tbk7Y^_O7)x6GyZr7Ff15X6z}x9q#YWpQ zX?Tl&0KAxheLMVG%OsY8Lg!_(betA9{dmWywY~>7fhMK5@qF9Qn>_q*HD3@4a?Vmc z=utMsKRI+OoOU;A1L#5?I|`YkVUXi$qt^FhJZo`RdI;ZK56vR^l|QWlr!XR@M_h^h zO^XowW?+ztPNSafNT(dB9Un@qCU2zUYoDz@ysG@7#U>Y}Y>n*IK?`Rbvfd$K@$V}AL!-R%Qi~c3sR@H9&qf^Z!jy|^0q`3)bz?uM91D?67r-18Qm^E) z+f7VjEye@!U2(3KkofoVSzbG2gDg3IG0&!~JOyU<7aQ9$Dh}iR<#EL;d*8V^DE>)@ z{C34>&4Tj+)VHFd)j=Aj=Ksx^q_OHdG&PkQRD;$=1U!bJzweuW3Yd)DXD4k+lbeAvc( z2ffgHpFb%gBpC(c^oFO>P~lMe!Dm0+ZtIJ{LwtziKL`MMf4@fX{qK$d(|e&D#q@rb z-9B2yvcUCL%0<(g|Kz)&ZAZxGFI4Y8|B~U)1rC4x`seum6YH&IfA#qMAT-E zT2%fxlZTcuo_k~6QIG4UM;TK+l^4hDTQqH6JpTbD&DM3F@8g++b6YV-b*is+l3$uE zhObi2$CRkGe{4kgNb2172e9s(I&-w8GLF4@6y8@ZJ?#(>!gW7r3~vz}vK@7u&AcSF zCd0&69ou-`$z_~lXxuuc*xcCYKNS7E_M44lmsy-2`+H-e-Stw521J=1I}2#_eC{!hSjMEx|1odfx5*d6MWrp#ki{B5ILhJbDH{QZHS5wPK4$uf zZN`H(e-vL-KkQqk85-xMX_0As>MtpPnExqLNPK;Rxy~>5Gd}Kr>_oBD;c8-p+kuF) zD|=m&8uP29-!}3u`WLbv4#4Lt2L9e?!FQe@a-Lru$V=hV?A+Gbc*hc{R~Z0|V}d&j z`(mFXAZmbI`Sxj|JpEQpM)TKyqZj$Y-`J?Ry(c%SZQ6d4VY#ba?)x+r5yzgx@LrSS zAYezVo08(~5J!EzS&t~Wj5cG=Jf>~m;*lh5hjE$CbEjvDE%URD9{MA&axGxt^1)f0TU;2GjwP@+&34_@WoLVOz{>M)M zZ>^o58T_2zpOImrvB=JfwRn3>JQY0qpe!tvW^tX5?$b6t}FPjo?L zrE!>MB_nG2)j@&dLC3d;p(493%IL2G?c|*f*uKoKH`hAc3`C3Q_qIV&$AHv-d|n?2 zBY`Lyx$s?b>h&0#9!9mcF=5XWP)$0V0A8ughgR&zJ}yl9?f~myp-#BsH4#lCpXWVY zFOtPD=|eo1c{ay`EXX!BVwWS{ZrTAi-%td7ER2Q~PUmi~2X?vesfiu!r2r6Bv_;1} zu37UBm3{fJjSm)21h~Lc!NBQ7csbvFiuD4tSd+f}Xf1r1J{x=DuzJx&KIj0t6}|D) z<$;s`OB{M#BT3`@)y{XnXWK=#sRbE??W3}nPw;2%6>u;p-wswLYqw}a6bMKBZwxwn zl`U5M#~UCm^PT2b&PQmqMhgGJDo zR*h)Fru#m|h4&u6AR$9fj5 zJ_Gr~*YXW$K7M#e_1k~r5H)admCZ1c4@$@wi20kMvFQJp{XQZE$ zG4ji$d5hva76wLW6~0`XFU88z)y5l2AJ3a`H(%?VwNC=4>T{9g9d8mhjUCEl=((W- zsCpf37vqf%5Ik5M(8hRrCqC_aaxl7?U_lbz_wjNbRC6t3A+f|rmcZY~_pR==`ln(W z&j^3{2=zzhETkW5JZ=Hk=j+m~jLAv-%WW`NuTlR?1Ja}IzjnXt&47E;m){xs{l-Q% zJ-*UOQT{AyfWE3?@#b3}8CTDFRs=alqg5)?IU`>9m$MaQn_$IUWkBZ2`j%?wiUtOM z6Z!g={~7i#|9aM!e|NKzhjWC74*DYd*jh?05G(Fm0;8x!yKcvs|D4TUcYi;Q{j$v$ zie|4=CO2ccT*GQ0wQR+4+*RD~rHE7;jxfQ->mZjnE{N#x8H6=yMG?^*N)Ut4Cpzlx8?hPU>dUe`-?57FdVl9+_kT)U{u@`#tQU*!<>OW zzv=Sc;yVo1#c7;*Z2#Wo7vsIl)M=aC52TeDAA0z2Js-~?h$_z+9vtj`djC)R$xidN z!24=NQgP;bd!OsBiO}86o4fHCR39-f)cg0Fzn|)Fl1nU1Z<3-S zlk}{obK4=~SN|II6V2+reksGSjdEHofBnGcUWzT1`fJp#K0Nn+%JZDv zpOcx&4JW$}<$poj6F-Y*`K;rMPC7SpCS^jHH`n>--)vvNFET#wQ+|O_@j@oiN*no8rU* z41LhYmUcYP4-vTjz+_X&=Mv$VEzB|JC*%38CX3dt#Mw<)xqqv!P(~*`JtTa_yLE!< zQ{!iXQzopj)zSL%`i9$*h#_;lV7{z$2b3+2`2qJscc%_{Jf5>I8VMViqcY?HXfdaw_ay`*-XNs|K=*kWahOs;6LC0t6!1S4fBm?>-~;*f?JeXCt^4EL;Qt5 z;Ztq&h*#pfJ!vP~o_uwAs%Q6nPpl=jFg?@H{g)iMXy2*;zAma}N%F8oJBD0t>xF&& z6Ts`CDL;5$1(-gdz^Zv^ZAn zj3Cfnig<6oTk_REZ5(tBXX@lFFh(iz2wn)E#}#ufzW!XlJ^h;LetY<1O$*U0FmGc! z>2Ez`*Cfz6*VnWMrsjF75-M&1K@H=i?3F>J)#9v*Q!P?u0d0#X%lM`wMjTrvR_=v1 zGWj;OGmplgD)>d%%l9`w#tYVZ1exsRqMw^AYh(|D3ND%@zCV3W*r35s2bC7&_flJ~@BkXjRu6fZ(?S(|J<#V2^55GaRVIq6nE zmb#i3NW*Cmm)NWv#kta{b)Ab(mU8VDc2_(%dHdbP^%2(F?6MZ#SX-r2-SUSj%D3tv zl_zzzCF4)j3JNr(&$^Y3_^(gihAV|$dC_rdj73JgMX?;NYGvd-VctuSYt`qK3wPLR zfk#X)WW8N0#=b?5$U&B8UECsa-_aSoUO4VIE&DJ<{tf zo$c!nNHt=fpg{wFbX_2`$Ksf?L(a#1eeoZwWUx28{7Jo+Zqd9fl%-*jz8&o~HBkdv(08S`nI&8c=4uDb3w8nYGzX@WrL%KL= zV>qwZf6$n0jvpEN+6u6*qj5@~WKl@ka&?>n#cE5<3Ao`j-f55?>5a?d=JJE`^7@zO zS{&>$tcPv^gCfAUt>dl#q7{atzq4@w(3XKX*n|Au#4nlVY0H{7w2`ELV~<0^hwE?K zoBMXNyv9E&-uty*Z9OjkSxedRpZ(GYzDMxSZSY&V66*t|Q-MV3yQav(Wt?i7CREmJM7|{sl)9Pu2K5G|jV7|u)l$~S$&FJ3F^&Hx| z1CyNZ8%e4(ccSnzZt+7tB`*}fshS#q+L3Ra+`Mo6hcA^|2*X+odZ%j&8$=l4oLOTt zo^l)v{M&c7Q@?%R4rWHBoSXeP7`4rUeF`oWj)GHUG**$99*K_cq0mC0-20TX?r#9~ zU?#n&WK=q7iN>4e(nJjuH+8RTBBO{TlLaxh6Zd)z(>b1_`Q z4}GPy(=wrH zx=yymW}fTUok%py>i3);1lZe5x>@V1aWCobh#c=KW4@po z?ETU94TYoGZU8rBo-jgkD%{kV^0p4u*wq&0v4 zvdNkar}a?E$l1|m@JYEQn?<}g<(W+#v`xR?aQM)A!lW}G80Xky#-5Ixzi%Z>weyYu zNSp(YWVGHT6~XwT)!Q`Iv@z%2IoYDJ8NC{dDL98szT>mE)pehEJC8+1ue0BzwtxFS z{=0)8V%T~&K{0L5L$-Jj5-s!L#}rIn3kv1Ni)f;?k-r#6OF;eDL4~redcJ*FX-q^u zhc^L8B1+?(4V+4Cze!dK!Fmu_53&Xa`n21V>qRqeHhA0~T%oToMum-mj6;Wu_k4&# z=dtBF-~I#~8WF%g{h=F>!BPAq^hEv<-AhkSHnUb^lP@*CRFBFN7fi>S95QojztofO z2QHs6uX^)=C%}0YU73vb&gVHoEU>ZAMe-Z%y<98xRbKYAJCd2t{z~=?kO&@mW4oXG z(FV}BAVJ`AafkzUy^YN=W6DJOgULB3lW43t9OuNJM$`FMhU(YM*X-?szCeD8t(Oh< z(Qm>;(Fk2Xt9YOzf}^nS#0G6&TeZv7VEpz*wu6ysTaG+3wDwr z(#t>YDkd2V(DJ{ZakJW@`A)#PC7EED@c#r7?6@p!eAl@XIbwY&6r5F^g z1KS`unq%3DNcx^fGZnz zMtjD!F9UTpxt=x|x{vbv?QgX1ta8xv+fBP3-xw>vjG#&SD>n3PUg9%ZR6%kc+xK9X z+dqN)C;9+6KRd)ttuM5;8TCcHac%^S_p&*lV;_#bk4ZPba)>boUIOAR-avX) zV1p`DJA91+HTbE^?_o1+^1j#6jPL#CE&ovBVXy1#7G@=W9dy6pb$@54ZvYr-`Ay`T zzYMYR({{`i%0)v-*@Fc8>@+t6^g1W_duPqRa*0Og^wf7bnA_-oU=`3}qJc^pV=xqe zGw)#LWEfk*=!+iMcWvJs@^pq_u#CClW!EKysD`r)PJVn)avfiE;R6t#y-(G7`AWA7 z33{k=cgQs~ zeYBzI_|0_F{C>Y>Jg!3`8XYf+wce83*pXit`@;{!>TJyTMT+QcKGV>q^Yc1q+tI zO0=AxXOTP&41D0tfDwA1{Z`BLlC00y$AR9v1l2n!ne_KohZP?>y5_0ZJ3?m6RKw{b zqaeVcpJ3Yf2wzPR*pA){H!MORY_*n5`;59*AcdvC_)Zb9Ooj!-Q`FXs3?0Ey= z^{;vU^9H~_{_Fqp-~K%Z;@8t|pzEO=-K4M4 z*`l4oQJZzH9{GHJulC@f_G|pa`)!~D-)Ow@m*F9XAp zk9G9lR0wm$=PdlI7BA#;UErACH&(Y*ziG_Rv3^FcBr4l)`XpP}J{}}RJn$l(=K(J0 zVH$gaQSr-hyXmYU%O|JJtUN3Wf*ilwqMd(0XP-A6$5^*$F^?+M^X?Fc?2T4eX%^KlFRzgSOikoBn98hE;9? zBTiXCx~Za~u*r=1GE9s2Vsi*0DF+h!=lHdduhaC|-kFrk-pqrx*2x#NaRsA>E$|)( zy*kp8sCEzROJ)lYRtyo>&R{|X2FjX2J9XZ3iZz8GO-&m89|oVK>A`odPrR5 z3r7FBMpDl|Jr0ZQja=@#Mk76$+9>|&FZ*A}$zyg;<9241AH>8AEOr_o_|2F-w~p6D ze3muFZLx?W!s~2b^j-@nwk?PoqwaRGzu6FL$jO6}#cJH$Cu+;3K6>zGSNg|uCP}UF zv@S2dcnh;-PfItH1r~HJ+%EduDBL(|Y95`GV;K|G;)DW|I%7g(w$JDwC_hHWRDs@x z)zy^P;kViTQtj;kvjGNHTs&Uh$wkZ1{Lxe|+yku#x zgla3jarGCyCJ?xa8L?5m?T+OUFKoPST^eyvR8^N%`&jqrn$OK}wz-(F=Fi1E7zdo~ zZS0-v+$H^rOH;Nh7A0=|&_mX0rrL^J8!tahOpm_Kab7z5=rQ~wdArgv;4(4R@H%$L z-yynai9ztcD*%ZDCIhIQjnCu|TL%|otvw5-{PW-EOA&wl+UKd=U%$717E=9n?(^&Q z3tw$xiE8wD7H8g{JL~(=gWu~NpwFV=y~q%UUI4r$#eS-sR@-C@A{|@wPpT0Uw($zv z1~4+fx-&8{xyE=#j7a`F9DC?n=WT5JZTn4|XllidIzGwwLY~iapGWVeHp;{OiQe@z z1eq~B-Wl8e^J*LaS;LR_8q|KnS~r?SjXL$~F&+7($3L~BKT^nEtO6z9 zA-qG1wxx4#_Z4w%#mjIFg)STY+BKsV10&hX8ol3H^P2}{NEn2xy7!a2i*ekt1IW!N z;CXU1uEji&xGMGGkw&F%V;t9PGCP>!ywQDr?_|AqXPo(}rbagl6RUCV1xcwd`G<8r z&i(VOqnAF+x(|KUIY0Wm-dmTbU~iw=v%mAAKl^5(@5X!S)0OKpoyQQ2;e<78>SFuk zjWOk&A;cV;9R$wET4aCHjkR8SkgUa+W@kGa*nUn-i;=q@+G}LUc$bjYy1hGMXO%tu#|MDg$Iut%oto^os^7P+1g7aZwoTnwX5w_! zGn?Pvx{;q|kp0b;c{8=QUuvIi>UMGmOk$q9N541gzR9{y1TQ|;yM+k; zep>@%-=<*x7NZL`)NG6$X!iTXEkerha?p-h34Zd~+hDSw>owEXkFKsi zs`a1$z~xxrn3dMFH@7YjLJgc#iA7jsNlv1y4~wdg99>&Sg0&_ zF2N3*>a`gYed%XqTKHHG@P)Edp~5TapJNBrl~gz|K<-|d9Jj3bxk<0&TbQ$bgmjlK z7wE{x%JfaxZ zT!o2y$loTAt{BHNV6Ab)zTe*(}+x9#eTXe~aht}o}iYSGwoBCH%m zul(lwv&>wt6HBBgT833)F#fRKjPD8RFF7?vD^9Df!;TNn$%8dkj17Tg>%Q=Wvlr8# zPusFxjHOdqt>wbcaebP4`A^kr>VGc2wa)D?qf^eRG4CB8m(|0O;*Ie{c`Nx#w-0Al zI$F0Z8HpAB)qP)~@##w4H+aUK)Xy8kts{V0E|jbLMjD58uK~aZh=^o6cfXF@RQF#> z!JBWnpKryq#OsX>w(aU=1t{v~SkD{U0eRz}tQ7(2V9Rj32ADT9XIi&d`b2v7RYN^= zNO|Fld>@NM{g4THFT;5u-pqMz8Q4F}Q2NNX#cky9_=GaF-rwqpzIK%yL02$5bksh@ zogJK*WE+p;e-z(+Jcu4-V)`^@MV!;a~*oSY@=n|)N zm@Ikmt$)BtLgdQF79fHj)_zfV5f7P!cimQ~qA7NoQ+>vx+gTBw4;iqCb;2Eo#s7(wFo4s8-XE3^sr=FrC=I1cL z%ec%wP<45f0?c-bXyAX1_LvWU8IIGkkFBV+4V^9Gq3Ey+e2&ih4Kd^~&$r5+MahW{ z4=#1PsiU$?a?JUrlSDgbB&4-|QG_w}d~=Mq&07btY3aLZD;s;ea%LwJ{OLZOv>OY3 zOmF+#xQ}k+`gTwx&aBNb37z^qaLayfBMk1}GfLi^VB7o_WEO_e`tN(u4DSUU%?bH*zeawFQPm z-?`=HMs;fO&(C_){slCG-)*4Nk4#0t>|bv-u6#rJ!$zbyAWN7c|11D7nfK!HFwm0t z-Zc4nr;~Y{=oeo`zg=&N0?}@{LD;U2*gXsy!;=c^iw}PbFUIKlck{yYgC1um1#VQc z!Z`6IKSzth2${(~GN&9^ZHubc?NZezTX8%G7PUokWEFfh@3`q(_*t93f`+H}^Jw|r zq4P^2OuD9teLel5X~@y)G34_OPW^ru*#;*ut^Yl+%=22G|I72Jc}W?AWPkIs>6$>N zr4{!$NNZ)x%nm=C)Bm&yInx{}1Lu9u4h+`V-RHk;HnsW~x<|csaDTaCGv@}y4Gux} z<)Wqh8;v_fJO*CuIJ1YGz~6||=D=@oaq{}xZS=m)8^ze*(=saO|D-k9Y+wC<{crzo zUr9HBVJ{N+6bA7bxsUue{Z+VFb#Z6Rm6d_>4G)_}j^%(X0w@vI8S=FZl9;?mBv!ey zxNE$uLc*l>sRq<{BVz=4PqzIgu2xJJT(ff~FAlodBX9laBK?bkAG)~kIkvV4C!R7n zb3{5Z6E9VOEI=c}qXM}vIP1>rWec2-J2D{~*`J0EKMTDR)s!va*7SVpt@mN>ycW8! zYRD;*4xi8YeX^-!f^ECwVcNtA_7(l*4{POwY_yo2f|6HTjDY8eK>7u!mr3uwFz@fzZhb{1?wW4F> z^CyPcTFgPt6VaZIv2|Dz0K46T$MwlDCz_or=Dq(`j~##Lenc}&O& zf7jrmYsiIKmyEm==N6mRWHHG=fQS;@{`-Ydp~%royT%9ik~zNA9l1{;*gvR z*8T|`88?JeoKG_Tt;eY~ofKDoT%biB7n)0P9BYwwHsccG2fu#y zVd~<6$ZSoS-sEGSAVs{CP@Al$ zVUt{f*-gn<3%ITr7d58EwXL*I>N(0yBg9iPfxc|JZ_sNIkYZTJ3`>lR9B6e>bB=l` z)k+Zg6>ADlrE;}y5uCx147WBQx(2$p+4iD%KDs9M^4OIB8S4oX(e$@)yB5S6<&EGc zVt0M^xN?v+&*A(H(NXalV}IISsD~9s=WaP$o2v9e-<%rNg4SdpsWt0o|9E>dU%R&k zD@Rx(K=}_S$4?aBpH)TtK@Z9F*u1i1`gjV&3-8xI@z&??hvz5uz2acO7}-6Y$M+}s zAU-E~lTGNsQ>%LsPmh*gPy!F0lA!PLSOiQUau|IGL2 z6SM1c4v^0o#|VtA4Qx{39ZyRz(^tVCTgxBDc^^j<1)0nGy^+!^R;|?O91oVboqXG2 z1;seVkUaq747N{pW~=^h8It@;*=HN{i}a~`6A80#MOV-ZTz~v4e%jPD9AL$3mWq?( zQd7K`*zhjvJAr8c;B}A#b+&Kb|55d4^BEUB#1EXAxVO|RP9*G&$1eknUU^mKMSy69V^Iy0vk<@}`kc{~_699WU`EGZMW#Q7 z{tKo|{(SalNip!e{`Hp2AUt)StHC;CIm<@$dda2U%5pa?JCBTw%`6SuqsEqT?%mSp z*$L)&(H!ApoTfP}YJ8d-2J2=yYv5hZH@TJvn^e#MDti*)^U-6eNEd= zak0<8y&E9f* zEwXtwx7Ls2SsriEURE#^OSSaUXq-kI&8K^;^!OJC#;Y1kQgyf0OQ((7MWe+9rik`0 z*g1^#R+9|Q{>&Kvi+%$5%D*;`#(RRE-$qvt7qA{=ikBBy$ik5}@q$f*8C(zZV=XPE z6h~`UI^l<(;&7x~dDy+jjV>|A{SAd z){&~D^tg+m+g*~1BrQiH3Yw=XIuUQegE7z84^Ex_x?=b9oj*z(!~+Z-nkSA!ton9) z#TUyFZd1PDXknMMd7i*&ycpA4K$$gN6MD}Nq&W*q;-1W=e^!^Du0ZWI4KgpFSQUvE#WM^v_Bd@bB9WKccv z1ei(UW1q26)5>bR*(|S{7SxKN>ufCI30_@jcAg=6&4!H;E?B!vfcg~U3omgjEdms5 zyH#L^LF2n(!Md`D1NH&ualrBHiC<-B8mBsd7c&I4z(~QCEm`=Fk=`tM8%F_PqUv>> zC)KIt_SLKM`DU=%HZK#dwKp0Qu}i%_79Vi_yEg5_Tm^`2J9;2SAp2QR5VrPId!c8>XuW`NnN`+o?N44hvcBOQ z&v9~Oz1>HpEOWc)8Kpy_S}ETXBcHctg7Lz@HJwqMYCY2sr!g1xA_Kr9lamd_ZZr-F z&g?L50pQyuI<}O>hny0AcvCz?9==_5`5_l??PHrUt;@&Py*A;ft-TIHyP31H_LulK($|Wk~KGB|U z2aGM(%TfKE3kg_u!iBBfoZ6xRpw$$Pki1#}aDgW0-6e*6^Jn`+$6gB_3EzT|0&k3u z=g;Gn4@xJQ)yg0_X_FD-`d?xHKECTW&k^m~rgJm5XuW>ge$(cEq&;tje{Op-@oQr? z{h>PYX>LQwDol`gbd+7n-0L_S9;zW zzM{KI<5A`0YyL8h2V)5QG8xMUI|}AFbh-%8xt?w+`W1H}9f8gt={Ehxigx#veKY41 zb~GL7BH5Sin}LZ|;+E05y`%S3_P%d6oaeR&P*7ix((Q%z+jw8Z6hQ!alha}Ri5kyY z8s20(7f7zQT66ru7z35qnPMf5e)0rs2ft6NyUG~uv8H;`y59=`kcs0BXQX#);MKae zl9U4xS-)8GRn?c`E$fp~gW%V+>D+hKeoO;DAgeV#7TxGK#qj>(Svp%{Fs43^!ANsa(Ozx!wo)q zk3YeWD7Fm*`5iDv-LxX#w4$ru-H0qBlDCW#IargDU{!SPYgvTs%l3 zW!E8HF1^^6@BxKZ$UfN&C|=>cZy$-ZC_9rKW#R)nxcaJocfyb^=(vwEsYe; zQ_?%eq=ncSj_PF~-{JT#UzHSGHZeQ%i&xx-&$3O`14=LbT~Ew~j(u)3hF44O&!IsC zFx?CTIf5%}&~antOY6Z7*KJ`QLz!opob(p6@t^CaZh&-#nxV zU9PY2-!UCI+K3(7eFtO49~X$99xiQ9VH|ZB%kGo|5^Z*$yfHw0!g9sNwehNlV&ZL4 z5+7!Ks#e6KhxT`c2P3BFN$MMM5?Ftmu+EewK29am_j7I5dIV8s%bt(ZX zp3@yQ8Z`H``UTxS#iNM6eSrIBWiH@tX|H6_NN6kmAAN%}9_z^olT!6r7YNfN=h}&} z{IGz?2~WIUm|yMduH(wgV9;0zorlW8f0t}=KW63MEq;TK;2~_D3->{B#XylhE5f&S zWnnQSX(8_eBPW~6(=<)w|I*g=2a2MTKatLz7g*}A@Qzv_7k-oNy%yP(7w4TU;fD8`prjhfoDWQT;ZXQIyl~iO?k3NR&!I=$mwnzS0HeRN^2NM@-ZW0p@^1T+ z%U^8^AK!aVQTRjR3gp+GBOhc(=NT9sCRZ zc6^wfOA(_GwKodHI2-3+G3p^dgR7HGk-us3#Wv7>$1wKYI>vQKo`d)jpYQ6h_M39Q zw5t~CwGjX~K*zruQm-6iC^B{*AF{^q8+LQSGR`ML(|*?B>wue4c{b&(d7S^u6J3J< zy)K5*j&{}+H|T$qf#H)jqQ3}@l$_Q=39@-`B3$Yo4s5gswr=Iz$f}%eh&Nq`yq!7^&Pp1MUA9# z2NqS{Hrm%w{AKi-5BIO_r?HIqw??n`4MFmLeG6!V^Y?kKs*_LYdWadx(qRZg?l2jb z>lM(m5}q?rUi;X3wQa8OXrWY|Z-V--%vlh`_Cc)u<}(%3@vF|0?#HvNxBMJ)P)-n3 z;Xt_xQz@a(>%(8`*_OA~Wfj){QEBaetUFEPUuKGs4it0QA$rPuGZIhkR25WdvO?W82Rx=@ke7`e2smcw93NF$U{W6#LWG9U>vK0)`R-zr9EXBb`+9ke6-V7#9cFTDfat zJ`W7UMF@crk@8s^x!~ax(S!OuHF)p%d>K9lQ^J97TaH9{P5!SsWN06-v2atK5w_r zb3x)wMu6onBZ&|GxDjn}&6+4^mx-khT`koD$e}m z1J-b(Y?E*1gMOm7`=cx-8T>XDil{W7Yj-XvVlRnU;y2<02jmc?Ij%Zl|G0I-@g>HL z;W}e%*S95YugOH|$b%au&(#S&jnDj)suf1LPqwUnK=>H#=fOtQU?!eD=5{7EzJ8y{JK?k?Vq+%MKSj1-9s-W*c&A1Y4XN>af%E8FrXXZ4Sjw(g$u zH)`?F;mOS>xz-^j(K15IR|iNa$Kbez(OCN+b@%`zi#V7 zbt%sXOe!VE=ViU=CJx@>zgb(AJ8r446>}*4ulj8J47#USju>ww=g*UKO)twM1a3@t zb{gcOI=X89;Ev+|y3*bm#7K7>ai?soRt+9>;>`+U_CK1ciT@yZhnym8`7L2ha1{#| z!!dm8{%UXW1OQ$-k)CKqx%kl_MrR;wSIN15=(6ml?i%$tl2>g*nlXy3e67wv_oLT8 zuA_#F7>|P|p8hb=y^lN=4Rzcz4l-{L-tj))Z+OGK^hMTHVxXnJ+&MQ;V@1qtW|6PB zO;u5i6=MehBVYHDBjpAtCw-THyk=jn^(*2hCawK!jKL^v9KJsWBn4{l=|COhI5AJ- zjZRZ~$1sE*hpY|bP#IDeju2nq`*9n!;jiNxeBf}70laVDgyeH^-p>7L%%lAaU4a{* zm!cTbx(2)bVtoH1$G3BMBT6Xe_Ri;UuK%hY%O|Sc-Mq&Sy67}f-q7zcFz^NL=S-{B zA5eTZyyNaW$3F0>KJcY;F$ug6Ds4IbTZeDVPewiZebKF>)pvg0R}BMKR6DrFslf2p z{=ar%@!#*)ztf1E{N@Q1pvPdlZFI>zulp_}JjsX;ZKpkbXwq-b;;7qyyh-YKgT`at zlg`VyJV!t`n8*D%d{$-n8{T-GZFah7r}1uU?}{FH!P_OepY@kO^B-&_*Jcvvcyja` zcI%)cGG2LnuJUK*TI*hdJkO{Aw6&{Jy2L`!x<-xTCu(8X5$(T$tw%rp*1B(6a}~|= z9CEIA%kHPF5#M9@2kp?u>g6CF8j@b?%m-9C|;*%=V~|X9_Lw-f-TFmc;RoTlwAE zo01Fm8^9-hbgvt(O$Ekt*nFOi(-U(aKHJ`}ZF;>x96`Th^(I3RRKMHjyLjLfQX{=% z!nB<@F~Xj4JT@;0KX$@;1I?)iUApHUbl#svzNUZX>3;Xmeyeow?h`>j8vEf(eLfcx zN(?S?+Hsvd^*W`%)w10io|!n6CHlr3bv!o4@vFT)Yk^FSC!Yctekeko!8o8(6og;E zfedTMF-~g$IbX)IeM8iN`Z4}9B_W;scq~VcC4$AOb$6a4E#eJRyFNIMOz57T!fR#l zF3skL=N#*~WqHzxV?ya`E!JDVv~@sgIy>_~&4q2&QF``tb-fq+&Wr9=pO}Q_2&v

    dVMDMV#ok<(34xa|Pb6UB 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

    DnNX{m7w14ZI7csU% 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 diff --git a/build/nsis/assets/openbb_icon.ico b/build/nsis/assets/openbb_icon.ico deleted file mode 100644 index ec1a7d484f45fe4167e76d75284938679bcb3aff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19566 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 0 - MessageBox MB_YESNO|MB_ICONSTOP "Failed to uninstall, continue anyway?" /SD IDYES IDYES +2 - Abort - ${EndIf} -${EndIf} -FunctionEnd - -;-------------------------------- -; Section - Install App - - Section "-hidden app" - SectionIn RO - ${StrContains} $0 "\OpenBB" "$INSTDIR" - ; Making sure here if user manually removes \openbb from their path that it still installs there - ; so we dont have issues with uninstaller later. - StrCmp $0 "" notfound - ; MessageBox MB_OK 'Found string $0 $INSTDIR' - SetOutPath "$INSTDIR" - Goto done - notfound: - ; MessageBox MB_OK "$INSTDIR is 'bla'" - SetOutPath "$INSTDIR\OpenBB" - StrCpy $InstDir "$INSTDIR\OpenBB" - ; MessageBox MB_OK 'Did not find string "$INSTDIR\OpenBB" "$installerPath"' - done: - - File /r "app\*.*" - WriteRegStr HKCU "Software\${NAME}" "" $INSTDIR - WriteUninstaller "$INSTDIR\Uninstall.exe" - WriteRegStr HKCU "Software\Software\Microsoft\Windows\CurrentVersion\Uninstall\${UninstId}" "OpenBBTerminal" "OpenBB" - WriteRegStr HKCU "Software\Software\Microsoft\Windows\CurrentVersion\Uninstall\${UninstId}" "UninstallString" '"$InstDir\Uninstall.exe"' - WriteRegStr HKCU "Software\Software\Microsoft\Windows\CurrentVersion\Uninstall\${UninstId}" "QuietUninstallString" '"$InstDir\Uninstall.exe" /S' - SectionEnd - - -;-------------------------------- -; Section - Shortcut - - Section "Desktop Shortcut" DeskShort - CreateShortCut "$DESKTOP\${NAME}.lnk" "$INSTDIR\${APPFILE}" - CreateDirectory '$SMPROGRAMS\${Company}\${NAME}' - CreateShortCut '$SMPROGRAMS\${Company}\${NAME}\${NAME}.lnk' '$INSTDIR\${APPFILE}' "" '$INSTDIR\${APPFILE}' 0 - CreateShortCut '$SMPROGRAMS\${Company}\${NAME}\Uninstall ${NAME}.lnk' '$INSTDIR\Uninstall.exe' "" '$INSTDIR\Uninstall.exe' 0 - SectionEnd - - -;-------------------------------- -; Remove empty parent directories - - Function un.RMDirUP - !define RMDirUP '!insertmacro RMDirUPCall' - - !macro RMDirUPCall _PATH - push '${_PATH}' - Call un.RMDirUP - !macroend - - ; $0 - current folder - ClearErrors - - Exch $0 - ;DetailPrint "ASDF - $0\.." - RMDir "$0\.." - - IfErrors Skip - ${RMDirUP} "$0\.." - Skip: - - Pop $0 - - FunctionEnd - -;-------------------------------- -; Section - Uninstaller - -Section "Uninstall" - - ;Delete Shortcut - Delete "$DESKTOP\${NAME}.lnk" - - ;Delete Directory - Delete '$SMPROGRAMS\${Company}\${NAME}' - - ;Delete Reg Key - DeleteRegKey HKCU "Software\Software\Microsoft\Windows\CurrentVersion\Uninstall\${UninstId}" - - ;Delete Uninstall - Delete "$INSTDIR\Uninstall.exe" - - - ;Delete Folder - RMDir /r "$INSTDIR" - ${RMDirUP} "$INSTDIR" - - DeleteRegKey /ifempty HKCU "Software\${NAME}" - -SectionEnd diff --git a/build/pyinstaller/.env b/build/pyinstaller/.env deleted file mode 100644 index 58e3640f467..00000000000 --- a/build/pyinstaller/.env +++ /dev/null @@ -1,26 +0,0 @@ -OPENBB_LOGGING_APP_NAME=gst_packaged -OPENBB_LOGGING_COMMIT_HASH=sha:a7c3d29 -OPENBB_ENABLE_PREDICT=false -OPENBB_ENABLE_CHECK_API=true -OPENBB_ENABLE_THOUGHTS_DAY=false -OPENBB_REMEMBER_CONTEXTS=true -OPENBB_USE_FLAIR=:openbb -OPENBB_USE_WATERMARK=true -OPENBB_USE_CMD_LOCATION_FIGURE=true -OPENBB_USE_PROMPT_TOOLKIT=true -OPENBB_USE_COLOR=true -OPENBB_USE_ION=true -OPENBB_USE_PLOT_AUTOSCALING=false -OPENBB_ENABLE_RICH=true -OPENBB_ENABLE_RICH_PANEL=true -OPENBB_MPLSTYLE=dark -OPENBB_MPFSTYLE=dark -OPENBB_RICHSTYLE=dark -OPENBB_DEBUG_MODE=false -OPENBB_USE_TABULATE_DF=true -OPENBB_USE_INTERACTIVE_DF=true -OPENBB_USE_CLEAR_AFTER_CMD=false -OPENBB_USE_DATETIME=true -OPENBB_OPEN_REPORT_AS_HTML=true -OPENBB_ENABLE_QUICK_EXIT=false -OPENBB_ENABLE_EXIT_AUTO_HELP=false diff --git a/build/pyinstaller/build4mac.sh b/build/pyinstaller/build4mac.sh deleted file mode 100755 index 5f6758be10f..00000000000 --- a/build/pyinstaller/build4mac.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -DISK_IMAGE_NAME="OpenBB Terminal" -SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" -BUNDLER_PATH="$SCRIPTPATH/macOS/build-macos.sh" - -# exit when any command fails -set -e - -# Clean Up artifacts from previous builds -rm -rf build/terminal && rm -rf dist && rm -rf DMG - -# Clean up local logging id -rm -rf openbb_terminal/logs - -# Running build -pyinstaller build/pyinstaller/terminal.spec # --clean - -# Assign icons to the built folder and launcher -osascript build/pyinstaller/setup_icons.applescript - -# Create the folder that is used for packaging -mkdir DMG - -# Copy relevant artifacts to the packaging folder -cp -r build/pyinstaller/macOS_package_assets/* DMG/ -mv dist/OpenBBTerminal DMG/"$DISK_IMAGE_NAME"/.OpenBB diff --git a/build/pyinstaller/entitlements.plist b/build/pyinstaller/entitlements.plist deleted file mode 100644 index 1d765f1a827..00000000000 --- a/build/pyinstaller/entitlements.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - com.apple.security.cs.disable-library-validation - - com.apple.security.cs.allow-dyld-environment-variables - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - com.apple.security.cs.disable-executable-page-protection - - com.apple.security.cs.debugger - - - diff --git a/build/pyinstaller/hooks/hook-debugpy.py b/build/pyinstaller/hooks/hook-debugpy.py deleted file mode 100644 index 42438ae0300..00000000000 --- a/build/pyinstaller/hooks/hook-debugpy.py +++ /dev/null @@ -1,8 +0,0 @@ -import os - -# This environment variable suppresses the warning: -# 0.00s - Debugger warning: The os.path.realpath.__code__.co_filename (posixpath.py) -# 0.00s - is not absolute, which may make the debugger miss breakpoints. -# 0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation. - -os.environ["PYDEVD_DISABLE_FILE_VALIDATION"] = "1" diff --git a/build/pyinstaller/hooks/hook-pytrends.py b/build/pyinstaller/hooks/hook-pytrends.py deleted file mode 100644 index 7209e9b024a..00000000000 --- a/build/pyinstaller/hooks/hook-pytrends.py +++ /dev/null @@ -1,3 +0,0 @@ -from PyInstaller.utils.hooks import collect_all - -datas, binaries, hiddenimports = collect_all("pytrends") diff --git a/build/pyinstaller/hooks/hook-rich.py b/build/pyinstaller/hooks/hook-rich.py deleted file mode 100644 index 392b324ac0f..00000000000 --- a/build/pyinstaller/hooks/hook-rich.py +++ /dev/null @@ -1,3 +0,0 @@ -from PyInstaller.utils.hooks import collect_data_files, copy_metadata - -datas = copy_metadata("rich") + collect_data_files("rich") diff --git a/build/pyinstaller/hooks/hook-streamlit.py b/build/pyinstaller/hooks/hook-streamlit.py deleted file mode 100644 index 05080f9a1fe..00000000000 --- a/build/pyinstaller/hooks/hook-streamlit.py +++ /dev/null @@ -1,3 +0,0 @@ -from PyInstaller.utils.hooks import copy_metadata - -datas = copy_metadata("streamlit") diff --git a/build/pyinstaller/hooks/hook-whisper.py b/build/pyinstaller/hooks/hook-whisper.py deleted file mode 100644 index 184d234339e..00000000000 --- a/build/pyinstaller/hooks/hook-whisper.py +++ /dev/null @@ -1,35 +0,0 @@ -import importlib - -import importlib_metadata -from PyInstaller.utils.hooks import copy_metadata - -datas = copy_metadata("transformers") -datas += copy_metadata("tokenizers") -datas += copy_metadata("tqdm") -datas += copy_metadata("regex") -datas += copy_metadata("requests") -datas += copy_metadata("packaging") -datas += copy_metadata("filelock") -datas += copy_metadata("numpy") -datas += copy_metadata("torch") - -candidates = [ - "tensorflow", - "tensorflow-cpu", - "tensorflow-gpu", - "tf-nightly", - "tf-nightly-cpu", - "tf-nightly-gpu", - "intel-tensorflow", - "intel-tensorflow-avx512", - "tensorflow-rocm", - "tensorflow-macos", - "tensorflow-aarch64", -] -for candidate in candidates: - try: - if importlib.util.find_spec(candidate): - datas += copy_metadata(candidate) - break - except importlib_metadata.PackageNotFoundError: - pass diff --git a/build/pyinstaller/hooks/hook-xgboost.py b/build/pyinstaller/hooks/hook-xgboost.py deleted file mode 100644 index 4274e6e0aa7..00000000000 --- a/build/pyinstaller/hooks/hook-xgboost.py +++ /dev/null @@ -1,3 +0,0 @@ -from PyInstaller.utils.hooks import collect_all - -datas, binaries, hiddenimports = collect_all("xgboost") diff --git a/build/pyinstaller/hooks/pyi_rth_inspect.py b/build/pyinstaller/hooks/pyi_rth_inspect.py deleted file mode 100644 index 718972baf50..00000000000 --- a/build/pyinstaller/hooks/pyi_rth_inspect.py +++ /dev/null @@ -1,39 +0,0 @@ -# Runtime hook copied from pyinstaller - - -import inspect -import os -import sys - -# pylint:disable=W0622,W0212,E1101 - -_orig_inspect_getsourcefile = inspect.getsourcefile - - -# Provide custom implementation of inspect.getsourcefile() for frozen applications that properly resolves relative -# filenames obtained from object (e.g., inspect stack-frames). See #5963. -def _pyi_getsourcefile(object): - filename = inspect.getfile(object) - if not os.path.isabs(filename): - # Check if given filename matches the basename of __main__'s __file__. - if hasattr(sys.modules["__main__"], "__file__"): - main_file = sys.modules["__main__"].__file__ - if filename == os.path.basename(main_file): - return main_file - - # If filename ends with .py suffix and does not correspond to frozen entry-point script, convert it to - # corresponding .pyc in sys._MEIPASS. - if filename.endswith(".py"): - filename = os.path.normpath(os.path.join(sys._MEIPASS, filename + "c")) - # Ensure the relative path did not try to jump out of sys._MEIPASS, just in case... - if filename.startswith(sys._MEIPASS): - return filename - elif filename.startswith(sys._MEIPASS) and filename.endswith(".pyc"): - # If filename is already PyInstaller-compatible, prevent any further processing (i.e., with original - # implementation). - return filename - # Use original implementation as a fallback. - return _orig_inspect_getsourcefile(object) - - -inspect.getsourcefile = _pyi_getsourcefile diff --git a/build/pyinstaller/macOS/.gitignore b/build/pyinstaller/macOS/.gitignore deleted file mode 100644 index 2f7896d1d13..00000000000 --- a/build/pyinstaller/macOS/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target/ diff --git a/build/pyinstaller/macOS/build-macos.sh b/build/pyinstaller/macOS/build-macos.sh deleted file mode 100755 index b187ee58fe7..00000000000 --- a/build/pyinstaller/macOS/build-macos.sh +++ /dev/null @@ -1,216 +0,0 @@ -#!/bin/bash - -#Parameters -SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" -TARGET_DIRECTORY="$SCRIPTPATH/target" -BASE_DIRECTORY="$( cd -- "$(dirname "$1")" >/dev/null 2>&1 ; pwd -P )" -APP_DIRECTORY="$BASE_DIRECTORY/DMG/OpenBB Terminal" -BINARIES="$BASE_DIRECTORY/DMG/OpenBB\ Terminal/.OpenBB" -ENTITLEMENTS="$BASE_DIRECTORY/build/pyinstaller/entitlements.plist" -PRODUCT=${1} -VERSION=${2} -DATE=`date +%Y-%m-%d` -TIME=`date +%H:%M:%S` -LOG_PREFIX="[$DATE $TIME]" - - -function printUsage() { - echo -e "\033[1mUsage:\033[0m" - echo "$0 [APPLICATION_NAME] [APPLICATION_VERSION]" - echo - echo -e "\033[1mOptions:\033[0m" - echo " -h (--help)" - echo - echo -e "\033[1mExample::\033[0m" - echo "$0 openbbpro 0.0.1" - -} - -#Argument validation -if [ -z "$APPLE_DEVELOPER_CERTIFICATE_ID" ]; then - echo "APPLE_DEVELOPER_CERTIFICATE_ID environment variable is not set" - echo "Please run 'security find-identity -v', and then use the value for" - echo "the developer ID Installer (and NOT the Developer ID Application)" - exit 1 -fi -if [[ "$1" == "-h" || "$1" == "--help" ]]; then - printUsage - exit 1 -fi -if [ -z "$1" ]; then - echo "Please enter a valid application name for your application" - echo - printUsage - exit 1 -else - echo "Application Name : $1" -fi -if [[ "$2" =~ [0-9]+.[0-9]+.[0-9]+ ]]; then - echo "Application Version : $2" -else - echo "Please enter a valid version for your application (format [0-9].[0-9].[0-9])" - echo - printUsage - exit 1 -fi -if [ -z "$APPLE_SIGNING_IDENTITY" ]; then - echo "Please set the APPLE_SIGNING_IDENTITY environment variable" - exit 1 -fi - -#Functions -go_to_dir() { - pushd $1 >/dev/null 2>&1 -} - -log_info() { - echo "${LOG_PREFIX}[INFO]" $1 -} - -log_warn() { - echo "${LOG_PREFIX}[WARN]" $1 -} - -log_error() { - echo "${LOG_PREFIX}[ERROR]" $1 -} - -deleteInstallationDirectory() { - log_info "Cleaning $TARGET_DIRECTORY directory." - rm -rf "$TARGET_DIRECTORY" - - if [[ $? != 0 ]]; then - log_error "Failed to clean $TARGET_DIRECTORY directory" $? - exit 1 - fi -} - -signFiles() { - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*.so - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*/*.so - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*/*/*.so - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*/*/*/*.so - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*/*/*/*/*.so - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*/*/*/*/*/*.so - echo "Code Signing DYLIB Files" - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*/*/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*/*/*/*/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/pyarrow/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/prophet/.dylibs/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/scipy/.dylibs/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/xgboost/.dylibs/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/prophet/stan_model/cmdstan-2.26.1/stan/lib/stan_math/lib/tbb/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/torch/.dylibs/*.dylib - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/sklearn/.dylibs/*.dylib - echo "Coce Signing LIB Files" - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/*.lib - echo "Code Signing Other Files" - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/prophet/stan_model/prophet_model.bin - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/prophet/stan_model/cmdstan-2.26.1/bin/diagnose - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/prophet/stan_model/cmdstan-2.26.1/bin/print - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/prophet/stan_model/cmdstan-2.26.1/bin/stanc - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/prophet/stan_model/cmdstan-2.26.1/bin/stansummary - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/pyarrow/plasma-store-server - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/torch/bin/protoc - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/torch/bin/protoc-3.13.0.0 - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/torch/bin/torch_shm_manager - echo "Code Sign OpenBB Executable File" - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/OpenBBTerminal - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/OpenBBPlotsBackend - codesign --deep --force --verify --verbose --options runtime --entitlements "$ENTITLEMENTS" -s "$APPLE_SIGNING_IDENTITY" build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/pywry -} - -createInstallationDirectory() { - if [ -d "${TARGET_DIRECTORY}" ]; then - deleteInstallationDirectory - fi - mkdir -pv "$TARGET_DIRECTORY" - - if [[ $? != 0 ]]; then - log_error "Failed to create $TARGET_DIRECTORY directory" $? - exit 1 - fi -} - -copyDarwinDirectory(){ - createInstallationDirectory - cp -r "$SCRIPTPATH/darwin" "${TARGET_DIRECTORY}/" - chmod -R 755 "${TARGET_DIRECTORY}/darwin/scripts" - chmod -R 755 "${TARGET_DIRECTORY}/darwin/Resources" - chmod 755 "${TARGET_DIRECTORY}/darwin/Distribution" -} - -# This creates the target/darwin folder which contains the contents for formatting the installer -# It also created the target/darkwinpkg folder which has the .app to install -copyBuildDirectory() { - sed -i '' -e 's/__VERSION__/'${VERSION}'/g' "${TARGET_DIRECTORY}/darwin/scripts/postinstall" - sed -i '' -e 's/__PRODUCT__/'${PRODUCT}'/g' "${TARGET_DIRECTORY}/darwin/scripts/postinstall" - chmod -R 755 "${TARGET_DIRECTORY}/darwin/scripts/postinstall" - - sed -i '' -e 's/__VERSION__/'${VERSION}'/g' "${TARGET_DIRECTORY}/darwin/Distribution" - sed -i '' -e 's/__PRODUCT__/'${PRODUCT}'/g' "${TARGET_DIRECTORY}/darwin/Distribution" - chmod -R 755 "${TARGET_DIRECTORY}/darwin/Distribution" - - sed -i '' -e 's/__VERSION__/'${VERSION}'/g' "${TARGET_DIRECTORY}"/darwin/Resources/*.html - sed -i '' -e 's/__PRODUCT__/'${PRODUCT}'/g' "${TARGET_DIRECTORY}"/darwin/Resources/*.html - chmod -R 755 "${TARGET_DIRECTORY}/darwin/Resources/" - - rm -rf "${TARGET_DIRECTORY}/darwinpkg" - mkdir -p "${TARGET_DIRECTORY}/darwinpkg" - - mkdir -p "${TARGET_DIRECTORY}"/darwinpkg/Applications - cp -a "${APP_DIRECTORY}" "${TARGET_DIRECTORY}"/darwinpkg/Applications - - rm -rf "${TARGET_DIRECTORY}/package" - mkdir -p "${TARGET_DIRECTORY}/package" - chmod -R 755 "${TARGET_DIRECTORY}/package" - - rm -rf "${TARGET_DIRECTORY}/pkg" - mkdir -p "${TARGET_DIRECTORY}/pkg" - chmod -R 755 "${TARGET_DIRECTORY}/pkg" -} - -# Creates the target/package folder. This includes a basic.pkg file with no formatting -function buildPackage() { - log_info "Application installer package building started.(1/3)" - # For now I removed the --identifier - pkgbuild --version "${VERSION}" \ - --scripts "${TARGET_DIRECTORY}/darwin/scripts" \ - --root "${TARGET_DIRECTORY}/darwinpkg" \ - --identifier "OpenBB Terminal" \ - --ownership preserve \ - "${TARGET_DIRECTORY}/package/${PRODUCT}.pkg" -} - -# Creates the target/pkg folder. This includes the finished pkg file to let users download -function buildProduct() { - log_info "Application installer product building started.(2/3)" - productbuild --distribution "${TARGET_DIRECTORY}/darwin/Distribution" \ - --resources "${TARGET_DIRECTORY}/darwin/Resources" \ - --package-path "${TARGET_DIRECTORY}/package" \ - --sign "${APPLE_DEVELOPER_CERTIFICATE_ID}" \ - "${TARGET_DIRECTORY}/pkg/$1" -} - -function createInstaller() { - log_info "Application installer generation process started.(3 Steps)" - buildPackage - chmod -R 754 "${TARGET_DIRECTORY}/darwinpkg" - buildProduct OpenBBTerminalM1.pkg - log_info "Application installer generation steps finished." -} - -#Main script -log_info "Installer generating process started." - -copyDarwinDirectory -copyBuildDirectory -signFiles -chmod 755 build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/.env -# chmod -R 755 build/pyinstaller/macOS/target/darwinpkg/Applications/OpenBB\ Terminal/.OpenBB/ -createInstaller - -log_info "Installer generating process finished" -exit 0 diff --git a/build/pyinstaller/macOS/darwin/Distribution b/build/pyinstaller/macOS/darwin/Distribution deleted file mode 100644 index 9e328d8662c..00000000000 --- a/build/pyinstaller/macOS/darwin/Distribution +++ /dev/null @@ -1,36 +0,0 @@ - - - __PRODUCT__ - - - - - - - - - - - - - - __PRODUCT__.pkg - - __PRODUCT__.pkg - diff --git a/build/pyinstaller/macOS/darwin/Resources/LICENSE.txt b/build/pyinstaller/macOS/darwin/Resources/LICENSE.txt deleted file mode 100644 index b86fa3e85d2..00000000000 --- a/build/pyinstaller/macOS/darwin/Resources/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021-2024 OpenBB Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/pyinstaller/macOS/darwin/Resources/background-light.png b/build/pyinstaller/macOS/darwin/Resources/background-light.png deleted file mode 100644 index 29b0d7c410a8c69c0f03afb9b130645d9e21b1e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239545 zcmV(-K-|BHP)HZIMk-5y=hx4Tr3l}WzU?{7)|7N$PA_#{A1VIML(xU&*|NH+nk@mm; zjMAVg6VM`|Rns6^K?wGIbl`xa&&06R`~wu)4Enj$Rqrc(3^b;t6>g@wI&cix{%x=e zwzOfsmHXDwLHZW*U$A&IjLP=kg0p!P1Tddd@cemW8-}jsQOhn`!p&a)YxfEr7%$Qdylrd%DQ+OI(wfq|{1a2Q{VqMk>p}LO8Kf_qN4e%UTq;46$C0kj>OH!8QELu*JW^jk{8Ll`j{Z+ z4+Suj6rH*?t(e96AVtS4H2=tEo*NB>`i<$|;bPQ!-9{Ufp8r#c!v$;Z2PA{+_FnX2g|nn&g{wNc$0Oiv9zB791S;t!M(3Yu0#BHKYG=DDxVNT}wB>7&N*N*n_{1&GiX z>i8$emN040`+Vorpqbt0=ei6~ipNp`G)_cH%}WLcl_QB%xBQDBn(Ectk;Em0Clb#zT*3u(ofP(7kv+Ct{VY@&cxbsu91|`SsCmb zLT{*49Pa?Qc4%bQKxY-6NL>KquY!R<`$cmqzGwmBj1jcoQCD^RlVi;rP_vMenokXf z7$a9ekml(r+3MHx=F_)N_NxYV;8LDHDC*QLg)14OU)0&4p>gZQRr~|CggD$Vi(tFf zu(n{Ez_8`b2@t!GNsv-?0IJO?7>f+*9~x`iKTmP2Oy0+qQxt*wxmD9f;&+Q;FT)|) zf!-`kJRskEA>@~Q9;nEh4F|p;fZ>=Gp~m60DL5Q#iGM@vGKE>2eJj$bcIdbVI2|dP zcQR;ALi4;gXfT+2ritNZJ!NpFle;i;^a1)Dv~ly%+f*31B(873;bAklg>XcK{>P@l zxA%aAt@=Ku4IY=MSQ|UihYs7+xLLTWu#**aXPLK>Ni|ibgA~ zYP+MD&}pimVnSdaeL&hC@p3<{Z6k(B7TImIH*lk*Zb0Ph>n2}~Ur>gNdJvkz&|Gjg3tFrnS6K+#@9 zuS0Oh3{}*qF!^?j47TPd+}Gm)oMTuezJH>$fIpH&d>IzrEM&|4F9gUj{dDNnwTD^q zBV+*U;tAMiH6IamZ>qYQV*x_OmFtKCIMGnJ(h{i);QWdGj-TpjzHSa7_e`?5RGB!@cCM1Y-k_b6XzpIX{a-P`Ho|W z9U}Y4KJIlkAql2y0~^Bxe~TyJ6gJ3g2pTP2)PasGGS&g+4;(NiFBmfkTO^$>^{hLcy>b&fWI|%wLrmC% z?`S(y3f7f=t#N!;8}ScOy)EO~hzV5O2E)Mtgjc#<%&RYtQCPX%!$fCcq)&c;i@M=j^30tj>z zqjL&6`u0B>dRKm@Z(~Jjyk%0QTwK&CfTjqDCdk%ET(E`B6E$=3GvhVha?7c9UKQFbU1XNB9S9BJ%^R4-vBgPp0wujPnbcW7sK)c8-hy2vtbGx?Xk4J|V1SAWTs zf&U71DdV?+r6xXgutpO2dpvbXQxlcVX4i3wE6D;K`ai%~H5y?P+ZrL9ZzRmdN<=9@ zdu9pHC=Dyr#|30mN`i^3?oC>~hht-?ATAIhqwksiy(?V)%BYF?5J5|!fSVnqN{*P5DI$6my?1+x}% zW>%0(303FJguRII9RRyGMIP&8$5qrnwB!+SXoGRmFb2rgB=tP>eJkROOP|6YAC*&< zK-BqnKK|}ao5Q7rgO|&RwYSUt9{}l(V=gx(Gc8JF)8{3 z91Bx0SkwMi&sV^KpO=PzW8~lqkci=vRD0#mAkhxNwBfo0W4}-wo9gk`xJ8hsxOhmN z?wz?eff(qk)C|D6W%$xRxDDaVVd*v~JBZTwIy@S8YI|cdyYayT=F0W43T2#^il)<7+JvItTAwV7^!E z;tLuy=Bb}_P)v@Ayd?>Jx5g9)nxX0Zu&WZgq}Cn3B1G)Y6-1*B*)9`HKqc_e?$m^0 zAk&uT>2TLifowldf^HhL06 zivLQnY^i358ZQIt=Q+->9*TSKAc%4v(lZ6h>p1|XZ8|3zq?1*6B6R_5f0TY9bQGc0 zi!g1|EKPikeOy;lJXr#-_WfoY8KVk-(5b2JU!}ne?AecnUT`Ou791b|vK=mHf4Lw{ z5fDuz&{PL4_saaSci|CQz2s$!jdyiOFf)Rc)ED(@SFlWroQu+^4cTK&NT z$bkuD=%h5~!@H5~O^9>%&xd>RE|HFi>SrgPTnI`vlx{*eKu_i2I08hxeumqi-XYt> zZ99RN!UR-$cT?4MI(B*t;})3{*LKp!Bj*9mhqdiyOXi~0Qd-`CdB`eO(k}_X4H##>cimQ(khT8Rr-&a&M~UnsTZ~GH2}>raSrKZ?E|al zyzuL!)4$4ey;GjxDBJ3vF~b-9?LGgW0B(6OywoFH*}#M<>PpJ7V_j2HN#RPXT0;=( zM&1u9Aq4i<1}Lb-l`~y;yEO!a`>>?Ek4t~WW_*+5uKCf@`@?jZZ%N+EkOCZ*oIZyjY#RpM!ezGlOH-@ zjaI#IiNZOk9$DmvwpJn9&xoCG{OG}zN>^w5T7#rCP7bMBxfT1!{rcqQL8=P%QNk=H zi70c|!<1$Kq3>o((r?jnv2J?C4cCK^ z9{bC)VvrhlU1cx4hwe=WIPvj&^E=wEide^o9Ua{b8Yn*;s`pFFY^D@)f0Xp7dFrF2 zGYE`b4~NJ3@+w`j>J_N7YPRz?7ESK^I!lJ?XoCM6il%~jf;g}77WE9U!jpWnX15#P z=@&CZ6@62nyq*K9#A#?-isl500E_;k?}|~dl8H6cu3l30RqdOUPC=Zh_f&ExaVqqC z=_A0Df3^_q?@~?%35wA1V?NeI$G9TgO7yMZrQT+njP?^b7@b;CQ%mQH|D~%86h^sw2_Dm zRou7pD}Cqii3l{FAu{AdjL>sMli)KeC3Zr>5n?lu^HDm#845rDgYRS;{DjBK)Vd{( z_#vA}cC7q))!s*6Y0xwUo$h^`km|t+=JFEL>!z<5Ef0_$+SV!;Z|J|bWUa?y$2ZNb z@b%WL?q0jkd|I;|HJ={}plcz`Tfbjv6JP$8wnH7oV4j-Q?h!zErN?Vm)wAiD5KaJl zo1E?cN>ut-=8O7Xqwgq-#Y;4wNf6D##w7P-^61*z;hG+sc>~hM{h_>W0AgFJ-Csmm zX#qf6^j{%`FMJ%-4A%qwD0{i$>Cv_;d0pv$1#z<)1jN3}DzzKtrt*9gPIDaD$8Rjq z(a*J^3FjR{o-ATfnggUJ_s+zI>D1?(6rO5W(&T{6DbAsRBN{=-4jL43K{&dW&>lZgQDTKrrO z$DfITP+aKqH|`)U{pf}3(2X)7Scj*M=)nR0{`C-fB;KY@?1-sLAGFC$8QX@aro*=D zPl?Obwm`u%+fs44!_u+oTzwzf=yec!u5E1Rc2e@+RQl*>0=z=4mS!^;)VL08Ws1{afi8KVU;Z;aUDW4%9On)_3sf+>jr9jg$ zTn{I{AS-Z9a*>wv7k_8i{1EqW0tpq=MEY9OiccjwCXj+0uKCJB7M*OO8bXYh2cl$B z_>+FAkKF=1T)1g^iXr*%Qs{uKUtIWAQ0W$^D8(CBwO7>>p?;Ncv_%@Ed>q03ng!B? zY+?PKQdRo7id!my4~up>jBNq(V&G#s$zefr@zO{d^bs45X?SaM9iZ@_(076rO}PHo z2wUhQ(q|V-KZhEFCiIUU&vH-tjZ70d#D3DFQ$zU&5TKmQ1?NJbJHqoh-Q2Xz42@=~_;<7&YBw63cVgdk0yI<4)=dmH*u{|Myt(GHMtijKNsx;$cvTZl z4PeuG1t@n`cF&LAAQ<#?-j}NX&lg2OO^gjn&^xLQ4zg&v@GXU!M?HadT-$7GTAsPL z+a`4-xo!fiv|8a;5n_xt+Ll;xj&tgNr zb=O8euN%ZyU!VhfOd9*Uz;8Cwp|LV-l9R74-q1hWDc8Fk^IjUv8a_mN`E$`8Na#E< za&?z&bdlv#}2TkEhPoyD;aR&&c zgt?)SMoNicXEg;dVWq~{Ko|A(_Oo!fMq@Ms6gX!b76gq+XdxBvqyo)JDj#>}GOCby zD`ZL@N(?vu4WYWt15{+y*@ ze2$UW_APxnjwmz4cdX^wqPa3KDYe)(l+Pu?qLLr7t>S4C7U6w`^07X)O{_b{ zf%%FUKMSwv&^XVh?VDVqa^kI^*V;X8>tt4BYKKTT=EQ|{^Y%sDOkH}a>lbL`e4J3q z`C|#!J6`WUHNLL6IckAjC0sq2Nr|FKU3cy6CN4*tn4OmfKyAK7bvmU{&k?kKuWVWC zABCIt=yEPv^j;TjQ@S@n9Rma22?V!7!&^vMFP~UVq|&O6fou<|AWA`YXr`6Y;%z*o zj|_m?fMZN67F?Sb&WBD?@Dp|M=|dL?+v6Y~A1DQq@nfO>+@zpg^tnOB&%Cj)nh>~E z4&Pj!S*=toS0EMTjP`Xk-;G0`NE4v4F;20zcJAl2nFuMtEee?%Z+JDIDth$iSUVp@ zfW}+OX_aqxscn0tMXM2vY7fxigVc$8+#TbtoH}F!=bbh@DC|H$adG`q^Nu?N%uMUS z8KVnBX0RfMmASS7@VqU0y>cH8wC&|$Kk?BiLJv^$09Wbe+_gH?Zh&C?xUduH&R+rZ zU@!$Z6voZ;JHR^}@3yx7AOk;WyKI4m)2`BqsI7XgE?`urM?`h#YX5rwx%sX`H+04s zdFPUin*liYMKT}G6p?MNHI<^tJ)-jzw#M4z3s(AN^IRXOJY#ryF>bclfyye^95}`F zKqIWHzwvH0TdX07ZU>~GwC^cx=(EOZU?bJ77-zpdUmX?VL04-q-!zw-478#D%H}*j+^`vXsHaR3WBWrN2l@daWFCoumsOWSbn zxjw(i&A77T+|WHAx9OPd9=PZ~h~Ped2vdlR05~sBif*;nTEEE058KwfCiFb19*Ab^ z`ud5{lYUaJ&#NQ-&&B;cZhaiV1o3#glIDVSU1*>t_j73mX0P?XSNbsZqoBe;DIf-w zs;-yi-DwZgFBh9Ura)69WL}GU7FFTxQwmpFqBvnH?bte4`-qro69Bcbmx2w|uwopX zb$=81&mt1c6LoI_++0ig`Nk26v*+U~{DzO7t#7KMKWKoCBZ!5Z&*8Rs8kM<|j6d&V zT#5Qudd80zq~52z7QsWSDTYqPJ9sfRvEXK?L6vTG8MkVQJQh^b#NpW&OqlNqsy69x z^XYh_eVu-cu+w4s`hG`Ltc7sqm>WTVaerW7#7&_1)-@czlZ`z|OY9DP*9v`?;KVw^ zTib&Am|{DW9)U#1!sQVa>gjN%+UExqoWqjmW-k^A&$J9|PI|sWiup+Hhg*UHHnve_ z*i6`|qdMa;&ze<(fQIZ!v=S$#Hf7rGHAnRZD29wgn6c@?6eu! zxCv?i6m8}k*XJ-3AOkv3@#--Sb}a@nDPUvQ+AEI0K~kQR4en=CJyKKhkS&1ueXW6A zqEyD}h9IKT$z61Fa%jWa08aEcoHJxf? z={#nd&<|CU9r&mZ?=_pNSC6FJOi4C7~r|0M;DOG0t>bcA`NTn{I` z$M(Z^G_81ma}a1v7gXTg*J+G1npp*)V<~AU&G{8V!J9-tG=QKsTGC4V)R!tjgvNP{ zZ>|-%C%I@%1STI!?_R8qe<+?#W++ANRDzC^ab)@%;jE7#uu!q|gR$plFauQjx>~An zM3NFLubG$m$PBvSY%obKynGbl4_+2MkZ8O3TaQKwymIZVO81BH^4;&nP0pD_imuZ2GY*V-GRtUOH z3$=09>yLOX6p;rGuz(F*Zi3UGeME4MBq27%L*+Rzf%i2P^5YzrZ#CA>680l4^971G zv&holU6q@=GoN|~SjlJ)Qb8n~qNX_|j}r54Ks%1;>?L^M7QG{f$#=6|?gdJtSVwIq z6`(`5PS2jnWwDIps7TVJaBf=d&cM@eW^7%Irek)57nm&0BGsW&dQD7R%7x8X1h%dZ z)iKRZRAV@jvha`jI9)zcwEKI8ed)98AyKxw#>^|*>nEgM6CKpqO&vz1;!?~uog(Te zdDh-)dFhe|42P;}wAs;sT~MeBq?#uKMmMWK#C~JS!$BdG4bw~uqBgLas{sZupEbrC zP&U@+cW{}gYK$wX3IdlSsogvfE(f%n>`)iA{Uzz7eS>-!UmuheK*PV&E)L(NEjd+W1fEWH*j}cI?<(}{5lL%?!a`k~&CR!%11R&tcS?gTZpV}^mGe6) z^}ZbHzf)AcQ@WN6b-!i*_sTSmwX1tq>-F5xfZ=J6`WuCSMgFC-AFOJ^nh>THssgFV z9hW3I1EJqtvsa;+c338YLLU61L zAXf2A8SLGihin#=U5JB$LgN|Z#*G_tuqc8bV7c#Xs%*T)GO4D7$u-Ps!Z|g9%0gfe zEfNO`_q7WDeQb#VGn1U|7s`OIp8rR5IF$-JCBo*mtwzc9Mk4uTNI$H+6R8yj$F zHJV}OYLUM0JDd6N4@u*>Q`bAi&m7W6$fOUy7dy;dS7kLh%nM6pK8{YPG2c?pqW9}@ z0MMGGKLF!UT)sN-h4oF)yee+yoD*`OMaNe)2)AtnX6My-lXs{*B*;{>`r$hX=T!FqY%KvD zi~~223nEyYM?4mg%J+EI*~gZpT``hs3qkAPHCF>0jrkq4(a~jMzQ$T} zJP1!?SM?V_?fGd7(fr4M%`~gj7;8Y$SfaD~bA9uf-OI5l%}sS2i!Jk+>o44Lt=;aE zc55zur5>~x@c6Ha9=a&SwRzb-bXh7e+d>qT^whwtH7bFwx#B32`w6(#VITU@gAi+b zUhZ#+d`ufm9)8Sz`dVgQ(uZsv?f_DUXGxOWwkI#*TbE2F^YQML0}A;Vh>h`(dt3U* zsG7Aw%_J0|#_dP%h!@!JgCB6;_cgwg?3kAnKW5(>4=9EZ$L~)Sm}sYGM1BmcZiNg2 zU1|(c1Hkmdt<)`J8v8-r)z|Bs`K%!HW3_YTJS~cnkCpm-V429&A?v-`vX{7_M%@fN z^SRIOF+}YI-Vd#7BC%SbqaM}59`EUT7|ZVDpXykBZeTk0D;`toe6H2>=C_I(73Z_^ zDMuh0g^@M46siKLrU|*kkyS8ab#E)~p}z#VUU?Oe$OSSZgh(TsN&Aa&5Tvw)xZmb* zr`5eluzihYxPTALk3Bzafr8r49Il-?u+Hh84&U#yEhgIq%(;{MxF*KOLQ?@%?FrG} zu|mwZBr5UnD~Ge71-kW$OeSXo7xDwi7h2YG%{E#Fr1l>>7$RL6;Tu`*a#~Umc7w!i z&?k*bEIT(*`{zF3nL{?E`@80+uVuLODO4;+2bmw^*uqV|@;PMHj?w|QHw8>q@{h)C zePs0NcM)s!Bl95MTs{78{Gs4-v*ONT9v2!puws4U{3G|H2l%ro@x>7KOZf2+!r>?K zW8|OG=z4aUS@zG9wcx^>z`ZllKZLRpVt8V5TD)Pt_vIe-XZZ_l* zyF^jvUgw%YpvFS??t{SRV|3XN4jdpYc0#vvO-`uo_f0v(kkl}Wi*!>~Hu z=ZnS$;s)6Z@?_`VQrfhV@e#(0mBZj6TSNF_2kApL&2694T@=86q=tt968UItt8zcX zCKy8a`==`N%i=Vg*?c@ZMdnBZjq8f<7ghG40O$rFHkVHM00xK6i`$ZYw@@4$%qQ~~ zv!)+woT0WD0JuLUrSn%vZ!ai@lV)_QcLo?+YVe3yBWk*z-)7cqB;g8H90Tff!Z_Rg zokgANxz2mdcondf`S7R8oX#QW%Rb})g%uU7LqN6W-}9fIw=!H%OjuyGAhL}DF z^Bb2qYf6pE-0rc-0DU|;0T(;I4(NoA>2urCNJ{h&7)$VAVrnX6U*-3{G=FmNeOIv^ z_Pg_4O_fe|eY9JN`Wd=136Y+^#x5935vwoJ*~}vXi{9@IDZiUd1Q`3eDmZggLf4a0 z&zyl9P}J_a0m6Q`>;)|N};)0im-3{PErR_ za4UBuaO?i1S9#ut|4O+ifwuQ{^TkL#;xn=fb{7=5CUj2){qnl&9jRUVk8@ z52f4V1C(UI+Yt1LgJ67T;;-cR(6j;(>DD;;^~1HIR(T$Df{f-sJ(gjQrFJ1~2SWV> zU7R4fQ^a%w3(+|sAO9|DyNqL^*yjW`JzyJH+|}LrFHG&31z>0k&^=vpN&{^IRDIrgH$XM>b=J)`BwwJWBqLjeSwVL64QoMZ+js4J9dyY{X zoY6ZKVf6xF;)&*ff+Tg@`?wKLjM)UlL}jZ@%iwCTkBfQ??QYoU3i-_VNTCC^Pm?pm z=XKepI?5?$2Ur)gw)RyE9JTLLoN$oZF z{nHNZs+oCr3B5B{nGQ{A%b(IT9`r}FsjHolnl)c}(7S*)fjdU+e!J$Y-uAKTe1 z3S9TqeG~8r<0@Zi!vkgNl^i4nxH)wi@O`l;;KB%2fGw&i6ncY!k?MUZRYs)+5kw(i zwe3odMTIM2G0>L0b>;7nGAlL42D(f?pzm7ZQ4vlTK;38GhOSisS|Fhk+UW3&{p=rD zd>$iZ^fT?Xg3tger^cqKf|D~lwh#djN?&aHh$j)<{XmiyQp#n4-@%4I6P#81<{=v@ zeAnX6CX}Cw=Qe{KT=B!e1`6V4>j412Ury}xXpB7%C=Lr>>vzPX0`-6c4qLirq8^R! zfbzX@QW3*ilDqq%a%ny^mKd6+KT^A3E#aZteYjFm``{S%?b}YH(;l98=hLY8OQUYZ zD6)NFTJ96;0d5iKD%>y7&I~OAG^+|TaJE6f{GQauw#aO9Z9&*3onD=J+7ZR&>NC9v z+Ic~)B<2z{cc0Tl_PdS1XtT93TVE>bydtHE{pLO^|ByuSy4|V=usZwH`_bbge~`L| zi!yRxGZ67uA)yGK=Dc`xn?$z(7DQ8E)$OG#H9~%(tS*tSi92KIT3=G57+u~Jk87TT+B8H3}=d+1`@Ireb)j`n2@FN{Jko0Gsv!>2WNx!2v*Q|GMxB9 zi;=jMm>hc4fu)G^E)P)I(1Q=z4qddV<-^sWeZK8csq_)Y#BRqf(Wx5LJ!+~>ggRIp zID<~$#t}B^*|B*sE;q=`W)XpLJ(0&D8;0lNyW(}Qdlfb(IxzD5=~>M%18qQK-&e_y zGY-p{--no)s% z8#3WwHCH79f%TEb_&}fOlkpvcxu&KSh-eKq?K6gi{Y@#WzJdx&PAEd8yD=?{1S&?l zEPVkD=O)4za@ql<`E1oZF*hZvt!f#41m-xP5@u26JJ@711jfeX5nhJ@<#hKaBF2GB z!r4HaX(nIJH>eV@f6o2jM*H#;ApSt|z%hMpV}m|V$b(cgu-rEbQh9g%@x5Vu1uTB9 zROolmAnYRjk;dn4*a0x(M z22)cPr+7=)2>h&m=tFJoX4f}=w>XOorcDf<5l3VNnTWJA!VJm5Khs&YkWNiz02akX zyO-(n$8DY@ILeO45EQ7bG{JLpXsC=o9ojk4T+N|0*@*dn<&mONEc0Zg^oo6eH3Lrh zrX>+swEHXD#7YYgNZt=sw}HLfgl?raLMGBSX|7HL0&9oncn84r$zX*TWA;sg9RzHY zQ+3DwLkTgR_ZN{Re`gkEHpsl&x)M@hcM?-6K z#ZDO$4Bs?Ga z&DXg7l;w=f$MP^o{JEXJG!HtU%xSO6<_ST1b*@he-&0HTTqQOMBWT3f zy7&BG$Ljx;a>mGtRgJJ?y1I1gcfx=cWvtRxnIgAS{YQW7t4+&vy{*MxW^T2g8RIh)CVFF6sp8?KA!gkb3H?RmNhHD9HF{ash2m zED_Tv)h?llC&doxSz2Tq^N)6%2zQ1ruhkbA@APB2mJsZ0&m$&-etO(lV=)y5QfZ0Yo z_Y)CyHhw07ZcmWyV;IErC%Do8nCt`jMXH><9a@| zj+T94E?DqZjgu-O;5deJd3|zRI^gq6B*~cxpxxD79iQfD2SewvLv^&UR9MJc=)xn_ z$UakaywQnd=VPS{y%=L|5%AnrXvQa#r|I0gv2M4pwbYNG%fixG*@*merGL_kj6Sh# zjQVT@b#c~6gWCc0ZK(E7NNnFeT9jl*$oOh~9l_scr6KiNJmZEq8Y9!3m$vloL z@6q;58$uPT0h(4IV&7TR|MI)mK9vDpAR&`0aGOXJ;wxpF=v;J6#`e1dWO70&<#|%M z$4NE-;uNz__ARkaz+&FW^gw&{m8T4$!!{+(2kaa@fX+Fm!_|2HAegtW2;Qdq%i<@r;S|)`5VQ*4HK4O*H=FUqfB1kZdZ-P%V*4m@kOa13 zH_oS3yI$yVKR6O#XHP2q-?{4_um&~NIGL_v9n5~$oru-1K-&T$eEvCFb~w#E2Sm7> z7$Fbj#zc<&>gejly9P9tHq`;#)%e7u9gLY)w7YI*g{1*MQAa)ln252W*PkN}w^vUe zxP4eRjh;DzS|DDQb z=C(+!kTtZQN1vSW?7**qVgF3WL~`F^^{fvU26T9VIeIBwb@dE5Y)Tw^d9!~KgZtuh zf?Uk4grNsfeO&FCCWcW$rgTPkRDb8!MSDHtrUJwI{&4ht#U3ss2Kr@rc8~%U*H57D zgU$&1$w*xh@COhM-SWHHt{{)L(!4T#Msh)}71TS+3BS*R9BPk{+*xWIoy~v_+SbF% zpFcw_+>QV+f%=F4s2dFAPOtI{q=N;W0LvHCok&GJTsbGO`Xan^E4*_Ye$GppY|i#0 z{Zw(WtE0Ga@HSstwDp!5E51pDmBGNMBPWmVyy*UjO-1aHic9-Q5%nrc= z%>cOdo){nDV}%(E&w<@|abZvi;ZO8!+P-W+4O1#qG_721vTb4dY0Oh}N19bYBC+NY z%6B3#&-pAstex6wjyOrfmU*2XxWHwXzQgt~zh!69>WA$1MxanQBxhE@SM*Q4U=1w&`^93q zv~(Ki^to<1ZZoY52bgGqJ+S(gcAvka`af-0GGL2`Z2rd@R|Y&!@xDj>ti<%^PXlso zk&GB9M`(pSw;B%pZ%M1#su+lwnZt$3dz( zlr~p_4;Q#EW^QNP_mEPV7v@bnTl*g^bxaMVWq<+nd{L>FFS@l^@K*IXxf6>WU6$-o zTcI6mlQz$PEGH0akXkEJg^{=q6hX3Ke6sIV0-d-gbh&`d!DKMC7Ib<%*-4sKAY$Fl zwQqgbS}Jzqos78ZxUCL`4fL22J2L>vP)lNUZ@lv74%e7)YFc?O{LmjYpbPLQ+s}-X z<=#|zoUa-9F2pM9QqfEg|EMVIhP~{s?4TJ#XQBXfX>4lBu5Cvpc0;9n$aY?c1Yy@h zoS&%CwtpRaE~tQf?&3oEpy#GJ_hj#oZLbXd4c{kkWZk?{`XHHIPU!dW<6}9r}Fbb*s$?^vJZD)J0$bZ z;n4|n=TtI#cZ%#`n^^AX1ZWnr*Kao529K}Jhd_L=t?{F!BlmMNqXx2ufO_CJCheeP zZdJ=MgZygw6?=USS2rPFD%$;h+OQ_~sJ%12HAG<5J5AK<52Z0(nPPweH>Z)%L8ye{ zl+mvodoQKl=(Dj6c;wi;%;THY2E4EW7bqs~D!As;9|?6uhAumn6-;skY=agZ+o+a+ zbA+(~sE#8ywn2VBJYPUrP{;wQO&B!EqGR6E*w5EUwQg;wwVg`3vVQDG4<_M?wQEGM z0|Bi4X@eIis`18M;I2arZL_u#QwXqE9y^FQ2jKzA`u?f~+qb}+AVaNb361B29^3n7 z5Di`+zGkBSDcl_#gRy#JfyV8PX3v+BosW3jmwr zI>qB{VC3(jQ2BX^SHHSiBTrU*?2vW}`5b?vm}kh$Ad>Wp*{2%oT67&>WhyuQB^#jz zA{?FxxM!#PJF)r61?~FtJKq^QnRUy%jq1eS0{;UF((b>ikPhn~Yv3^_pOf1AyX>BI zhS|JTpy=kPys->QEmXn#FR;BMYR0;BYfJ>2$B;mm>(q>fw|P-+wbDN))(Tt4l}!4K z?@D&K8)g%o(gn8~s{wwiRndHuf@FK~P1*$rz>($H2ehEr_Q8yUL&Zy;FA7)UWTiGG zox%8t=0JwKf8?Ng3h?C;x{~^71Gbvy>=wTfvU8%Nzq@JAqV&HmDF842=<7A|e1qC_ zfL5%(P2W0XleIEEWSjJuz8bN9q!&qGB(^`r3(UWZ7f6O1Vt9h3hDm7qs;1S?6=uX0 z8*M$O-SnVM_}C7NNwArzksH5y{NJbp9Mk`y0?_GejmfEh*g<~zRFZjf-H}GaX6tls z9N?}Z>@b(byQ>nbiRO39y2;YM+S;)_aJU9BkY?1a4LXM2_=3Kah`RXuVpfzYXe5l(pXi^Y zlFgG!*w?mTESgr33~JUg3<;KVP(dNv>`Lz3ih>ShS6Gj)64)Kwx&FmVZQgP=#FY}} zZZN|D_Tnj`pWjwzS&sBu!mh8y8NshvYD0Vzc)0PjLKC# zu&lp<5nt5jS-b4N?-={=z%hVWYOJM6@?Bej<;34myoSuqaZ8nm?czuOAZwEY0(8Ly zVCK5dDx)PoB4BEbHh|7$W1s3c9Op9{eZZbQeBC*|9Jrr(A06*c6&1b=W3GSwmzVQ--!J$7&Z5`f>nPV-#Xr;t zXw%bB@Ti7KHB@|}nR@+U^)v(Qh(n+vAPYgZQ&T~~6JwyU;n&0mS0}81L^3W25WK-a zjTJoUq1e0Fcm~}1F#{8)2*|q3RdlKGu_d7euI-8Kn@k5B?-f6snxU5KI;Zl^HDoR= zwbPam=S)g`4p}n`rI;4R(nTr3(D+u#0mDZhSP7 z9|!?{GA9)b?|_@o)&B25Hg?@^T``rM+~lmpbOM3qZ#8g$#ko4-e3rJ{GJSh7B*X8* zS-Efvu~_N-TKW+TTbyY7fb-Ep{Qv?Oky3wS9yd(k2+{G(=77SP!y?yOCR`Wvg3k^eMcb1QMx6GzM6w*CvHrKiAO2kF*NQq;52)uog&CDs)T&e|G+cDKfHiUz zt~oxio0QZA$HItJ!3`;;JzO=v9`QDjScIML*o;a-#$-4G%mB^S*2W-=l=OkkdoVbG)*wm$iMme^Zvm6u3u>)gr0RKKNqw@@7dok4* z4*Qx_xWR}=VR$%lD<`2Y_YGocoQROY!{!g zFRLHEs9y47q~GUHvsoa&4>f*kp-o$Bb(d4t6(dWRyV% zv`|^eqjH}P9f+}LT7ih{j$qqSe%IP=euY$ib~EFpk~?MI2n!}YGnV1erntX!?sR_* zL0090G!j}hPtJ9c{90&vqQLYS`uv$m&WT5Pox^WbT^D*I?ujxkribcEnOt6(?G{|M zKm$$4P&sZ6N}J>i3;HRN`AU>SujH!;aJYgoGcmQz26_ER|M!))2Nbu5J@;sgzllq+ z{Z9GkA=3)|0NB69lQ$ca5A!Rdi>bhF+QUl|6mP=uAg6v{!V)xl7Buk=h|A>jsotn} z=ysa74rn+W>&7pS#yY+MJrtlZa^2TILV7a*AcOC&o_~j`rCi!Ui^Fc@5n~=&1if(8 zwA85hB+BZj@3h}7y)jjLxw|Zj#=QEke7o4=S;W~gsMU+Q(s_wSmfIU!7FTd~s?rGZ zL>SObp`$h2>0Idr*JR;Lo8vt**i(?kH5J(QAu}qx&WwMeJ*B>KJA`rxKUe@9Y z?(a~QXkY+!g^mRD8=p_Ocdnsf8+`@G2q1u&l*|YB#={%W^qqM#jIW<1Te)bCp@guT za;RLmF4B<=3BH*JFJHWFaE&ww$>YPIbF#TX*~TgmO@^0C@oL_+O129`q}Z>-6(LBg zTqURvVBQ`#p&dg|ObabE$i(*^VEv?HuvxU>a;^@43k52c2HI}17? z9{q8Ig*?*dTR;D6{qBL=(yeNMo2O~do zK79IIj|ROH4y)e7&hi;INAO%Bj6O{*T~u1@KBg(7nRRp1&lN~7@0TqrbGQgHO{HGH z$Hz;P`Rg zx~dWl2B4EIk3mK1Ij;~3BqP*@fzbcMkbw<}Kx~gt&UJRoqTI~b^m{&7D**9VEuZhPK{u74b#@@@(+JfW9s;vm*3z(Pd+c9N|40`tFd8 z<^>eaN745W+2#f0UHenY`Re2Vd&owc1RWowKzc%K$K*r(!svOE*vE+ODunKwpW}~> zewfBP-?pGW^mBGQv3LL~?`ZQ6+FFcHNa^m=dvxcAQkV}stZTOcF#8+u$N40x4R*Y` zYRSh&YBvDsbk{BrJ{eUGfK48wuBAdturg?hNQ!44m8@lR=!l{5r^y-;vMVY6VI zY!%wIu}!$PrWJrrU#loS;3op6fc;S;rA)BF;Tq^S9&?SwhCUN(C7fZ#Iy?tz!CxAi zJI9Pq4YhTZRC6NGg($1B1)N5G{dyi87cWd@+?15Q=p3-~v1IIc9@>Q8WH#|t>*@kF z2ilJ<=ywDQHt!90tZYh+N+{gjuZyBCUpTq2~ zCiO=wnF|h_nN;5RJ1t^dca3BF?=Ne!uryY4f5*TKcS+}PeWwQ&KhR(fG8SKkNp6tX z_=uR818yaeKl>eR6O)riRC@K#W2jy8=xVD?GQT0XZFUmh^J23=kq?Fwg`qk5vrqy; z90bus)X_xQI!v?GBej2RVIMAkdD&`?g0jM9XuT#pRo+IWsC$EJD+b$zq)M6rGAhyu zEec>WY5PEm>kqwBFm3=m04S|*F=Y35sSY$!$^fsZDq|)@LRcMMaCWfs6|fCqCj|Fn z72ZvRS5J^txuiDMK5#9!FRVOQj9MT>;YwhuMTg7M`012hGoZPu`5-bMGE zTKSKR(wn|U=0aeEVk+dXfH58w{3M|0jtR8%(Mz);!OudG&Tl<#b7$i3l!MHrxe~@v z$5)*|Kno7t`#X@zZBfiH)JmtrDq~P5pRnhIa|{T!(bPqOhJsEY>cFkfjU#~6yx>zV zrFlYkQg&HF#Ek-rI@euHGBu-3B;@#x*`an@BXsxv&5F?}#@b}9pG)KEG9(^JE8Zj}^+k#7&vDl|z6s1>m zdX<0_7)cBCk1EI(J^g!R2)D7BwTfq_*>bi4bX^y#-!Rb;$=qETPqAfI0wr2=0g))jQwgHqo!#kZ=a60SvRoM2m3w9J&x0>F-;tt{W!NGDqtv-npoA zO%cp-MD>d1zN)1q(RLa3LzQ@5Gs~!~HVkAdx!~OzlH7`7Fk7!s37dK#8Fc(JOJY47 zo((cTIy41vYK!~}c40zTuZUB5D;Bv1}Tg^>l zutL68$Kj>0kq;F1c-~ZV!O?p~N)N4d7w-IU<$lOMa(Fk{8*hDW%vaNdQ3(=Fa8&EU z0ZzM8LjZOa<*TK;0pYM|Tl}C*IlqS5mt7}wd{dd6=@jTk7v z5QuRzLQ%YdgXbc(Dv>IWFu(`3fB`hVa3SNn>OPYXA+|?oaU2CoFG)6pEvoG|3Q{;+ zdE}s?riap8i|?HU=cWI-=-0B8dWKVX`-O8Fg4lkS1muC>@AV)BLR;z_3;Go*ddJ;>OnzO-#o}{|+#n7ckao7nR2y?jUaAiNm;oMq{^NE#ahl ze{56)X~8fL5C<)b|8f$APl1@YIW|(o^X2~KQCxp94?8f9U!!+}0gjLTNkN5Z#0mw~=`Y53J zpF$p7ZN2Nx5#*FV8QSO$Ky%>^#RS~Rg~MeL?+9U(tTklmbD`S_L*Kg9HHh_NJTQtQ zvq%GY&NLz!zpp%&T*+jg$6f2OSc!jW)Xonkb|Sz*+X3pA1wgjk{6vFIpU#J!anKgF zLA%!m>O@{0Z}(z8dfaK>Ho=_gp-mjcfU7iD^b06=UYfv@1M@;~(I;~OR!icl#ua_& zro+pvs`A)JOAT{NX&GPu%|P$kRW^~4>4=e;|NgCIPE`eP{XMbd$BO2nUpq+adAG?m zymFuJf2w*nO#jnPcUVImZM<6v#AI%jM3)xkF4 z@z+>va4>Oa=M{8}V3bGOcIFyD*Nx!L)TiK>AVeW#X>{|k50r6!(YbcTfdWOWY9WV* z3%{h_!FGpsu06|r`eS1mULT3#LtMXFS#M=&7s@-~M4W>*M`1ZS*@D`MjAl90De`v=4DuFI)l{kRKm#LY%+TZ@K0o4T6KktreW*RMHXERa36$ zy{1H>WyWr(h_rnl)^x`re?G6;Zrq2YAEkD!LD&I$8$?S!SDgaUtYNtdoHY-6XK{Mj z4MG~5#ORrO-Ak-+weWMT6RH&*T6h?+qp*63XTwaQhJ#eRiJ}0eWgt3$2$>%{b*|Ym zW|y58YTWl8N}w-}?mXgl+R&GH(~`Az+sGhh4*Pb?)w;QvWwxvaR^5Twie3Bi{>CWn z8{8#asJL#RT8-bOr?qjw#!54(vN{HyR9Ftzw%Z{@-`LWv?^+8`&-rbr63M{$0b2Lc zC(|PFT!NzQ)JO=`$_Dl`=D(F2Iw-_5G$Yu|FxgfAfxH%l>ZQ(3S`${4fIkU zCctCO-v#%eCzlKAkK$pr!9tHg#Q(H; zMxTGiK&W-AYo`tdKW>BVab@m>^kxnH*skQ#U{4JYlw?9+%I ze3;w*tpm42VO`#<0V5|_HM;f)$v58ZW|$94dH^?oGk`kRDEXWxex_!Y)VW8n0_duV zn#P|w1}Y_KZGl>gvfZM_4X~$in8u?|NS$n4DHcu_HFa0?Ie{g4xZhV{A7en@0c~ae zSwc;e_mKDaj31zfy|0k}B_`liDZjEVD= z!|bn&o)wM??8Eu6V-H|O$d79G30w%2#jVH&ef6NNB3Dx+IcQr_UJo5?wh^cela5Sn zI7_p~MPJ+@H37JBa%gBr*BaHeMt0l+AjeL<`$OInV-N_wt)pV_y9*=G@~eC14DRUy zVco*j(qYARPB|<>_^r}?FPpDfibp6tZ`&`tn{Ch>g%Vcz+#R_+J52Uw ze*j})6CHi<+x$M*gX5Wxj=EBbB{qP4*7Q7AXbO4N7xouO{d|iDD3f=l;q$Vg96DXE zIeK1H-{CgL1X5L_u4OQtpmfG8q-yzagsI40D(YNY#eAM*N=Ru2Z)H&KlrcqZ*%NK; zIG?2ZR?+K^CoHp0SAGp5dQinyPWubDbj5TdrxX@y2!YJ&hVD!?PyVPLEkMNTwv8=Y z-?wE}P+}9H8K9RE{^xx$CO4a7OejxFYpst@2~lhZWPN7KM+Z3N7tU`+SRES~i9W+@ z@VXa1HmxKqSLOszXMTdd?18|RX%n$tV%pG7tijcZXaV?>LOnvRHs6#RaN?K^k4o)J z?h`@E)}5d*`5-hlXNT-}#+iJ0*Mg3l3`V71(|3gsE8{z|h}=lp3io065Tx>1Du?TZ!j*jCPK=@RK|jWR{?Z3+7~C>BK74{fP-_d5+Wji50q^pPne6uEdN))j zw&T^|(}}Bc;HI5oJ{$J0tHvTB;^0{mhJpx)8Vc=-IY1B-5A)PTb&j3l-1}5fd8Tw3 zIuH-z@F`X=k zb^caktHU2YZkKvkfr{fsRociMtm%Vo@j+}mwhz~q%G%*tDaRDElycKCR00dpBoNHO z{dn&uq{0F&@#=Bj%ncZ?!)3`|V2ZTFuTy|*_=D;dbT|d!dtQK?`DM{Wv;Y`?WfzMY zvr6OD*N=-jIC=VzO|D%CHR~H<*a7X7 z^D(K0%=Uhm_j(wYdVw`UDNytlLaloqLeF2uFLm5Z`{BRxPc7&3^cox~_z{cK6|G9C zAWehG;A-BYdN%}>(g0%92y*VkTE{;%{jdViv7`^QvC^z>|1zjw<+E&moYkx(=LIFO zy&91q3fPD7JwiFZU6(b}!JXXlC#wa?IUk-F2#Jb5Hwow3$5U!IH(;y|m#IJwW3mGfbHAGEQAEw1&s z6rWA3Y=!S+8?bPU4bKf-$cJ;Bnuk8q?q^h~|M)>5U_Ub2dx@0uf!~0iuN%y$q{iYA z)V&_TW;T*T%&Fq!N?zqNc4^Uoj$LX1V~jsHzWm$OJXYoy>+s?zh%ha`sCBJl z8>6&PF&M$S8-M0wdMT1{Chb#YbOJjCB`p|-%;+8fZHwDC<}guTCm?6Ss*3`?S3ram zn-+XGZ+s2)MM#wkif0cEbwLwjg|io7(zrZ7CI8~V#5lxH!Dao`iqb;xDK8joc21@= z>M|4;HdUe=!_XaQ#rF$<0(ZpV5I`Xiev^3f_WjioY%YlXJ!Zq=ce1@b^t<3fvi^p2 zldhi=jtXc1i-i(cNpd++)dLRLNB<1*qc)oE_*OC|VX&%*E==@nq^uxh$&3J&6m4Mj`8C{|i!EKSw~ zjRu^xmTr@5#`kub+YCi0H_D^UUz_-;b_3tU@6_0{-FK(KmcXQ; z-O%usE_(eLE;#+L0@Sml543e`AEiZ)`_zo0I`O_>tJCKP>U0B9D}n9R$Yf#1SMJa4 zIOBUg$Bl`m*$cEX)&I-q+ z3b#=P_V)5w$hLJ8=QtMoJR2u{)(*S1ex4Uv+usV~T4`VdOMT}84g{GK19zh6#>~-! z{0Q^7uf4DFJa%%^snnyg<$)M-S%mAypFij?&|ciS+78@um`2C-Ag6p6A>T!aCkHz( z#J;a=OU)B=npi+QE3|Wr9kYY!p>qa_(4H9-F>6Ai_YdhzFK{u(f^|p{=*j|hl)=1U z=h>b>r+|W)B3^4e=^Nn(fG+CP)8~azG2`wo!K80}-Y*-Cf3m1^&D3QaeSIeXr}c}LqDPfmkFj}8v|4TIZdP}FAXZenUx z4p|l(t>Dz!c6ERgp^>^&z6K6yXM^Lid>@aQ=JpQ%Xf>-9i-sO-l8Hf{sAdc9*4;JN zh)TUB<<|ehOW$q{5%<_>*K;Cbh0JP#A&PFwVMX=1bh*nK8SvEAS1uZ`8ZWt_;ccl@ zKLQ$}0UAZ5%IXD-1x5C74K|^f4iFupJxW$mp;Eq29{sMhQjXmDMf>jFczAB&VRHzL z+EzOgB*VS;-1v)wPjxqb2bE<65UiB0))JOElUm(4XISuRMfGYiE7;n`9BVTZ-E zb{EZe4j!MKdfMEGNIx3=2maVY#g6Uvq2N@kGDSvR;KE}-u%Z)}f5sP+T(8ZQSZYrl zyoGl5s2?F!=X$LjU)zOTc7O@g^bf&jxY^gatcPW4)Urn>WBhZxW5~vk zrKnaW%_1IqM8wuIRA?-uqDZAmDb^a^(o|PShCtQ0uu23nb(W%ffGtW<#Z<|YHaGJ? zo7na!B_Q5~bi|_6CuVScQ>iZuKJsvOB=cp!F24#C zU;#m#abt2R&G0FVJFS zNXjg0&(eU;x#B*%)h>w53pw3=pnrjC6Oj9SBesW65YP%YtMf?@MF!+5O_BkNfNC8e+c11*fw;5tab$OX&8TMSkB9J(8ef<(}ba+c4UF3 z8(gIBqH#Q9y0_f!Ogn=Qc9(M;UaiGFB}Tz~?2t&|mr6B|^~WS_L0?S*+FC7|c=jl% zXNZ_+tdFYdgjj36YfGm|)PVUQs~t7x8tt54$9~K<0ZPjhLcw%+Dd_K-tQv`<+7FYuQ1!G@T0$q7Z^-uGeWkJ3 z;3&NtPz|Eo6f9&Iw+`1pUFMx@%=5#~g&=o)an2Cr4V5#36~%6nTB(m$V~v9pW{kQP z5`F$7qBAjcj^(W63x_FNSckxA3Z$C}$1jR6&@Y1f`+=ZMGa2Jc?NSQbcD$l-jxC;- zn>*Gt&h7XMC2mfcCQtkTMsvf2IZ3Vun(@1mBX9q&9O=j`tSo699tintE5Yc?^X2vj zOOpOEO&v}(9s>3sv*wPXDt)r_{os$E8Bna9Ai%M)$n=;~T7_d_ z8}+e)U~=4Q*8J1%>cEE0M;32A(uS8B+2H*BT%2Qh9sF7isti`ZGq0>igd2tsqs_oR z&|cJuwa0Y1)n^LG#EW=&J|C#pWUcg!t(Kzk+eH)v-hPnMujUY zFuS28PfIa7*FWBaCDvp>+{`xB5)I?}i+cxB_W~Ccp&LRBIf}9NF=6k<*HBBLJZB;x zjcax$6Nj1cyEdM&rwL34Bb$7_H@U!_tP3=_Lv&ul^D|M{I|$p{9Q9bpA>)S+E&@*j z*nGCAeXYjZ;Y5&wl=C6;=MUL(>4*~q`!iS?c!)T2r$)4UZ4Sv=jl@|Co9r>pIdAnyMEdlKI(e4H9+G*-Vt8;CQixZ#_b%E8k$2sY1sgn-qRMivsS?ud_K05Foc|u3-EzdPE1_N>%dB6rU_cD+~yxUWD|jYU9|I= zZuX!A_3B+AQaCu#0Tj?|6(V}lxr2}`wuD!)#zD@*^8x3nEWm@fH72oy~xLT-4?jml_Dc1%j}h%G;cZAaApJ)@PN<$3^?e3j6*$<6SvBaqjeO_nT>8 zjI}@}@J_*4d7~vbFJ;Uh#@hrNPb%4>`v)p$5CFr9MRXCzAQ>O(v>Wmln|l;fH!sr5@xtEdiOYqKM+aDj)1B)y}T z8~pBUC~?kt;6ngP5Tzz{bL0*7nGyczv2=8F5{GOvuztZ0Eqs6iIlFH(%&^d5S!ljQU zDt2hmKdhVO-4i)R=hqTO-i(DpC3 zFscRY<1T*hBcTgk2`r(PGHNkbs5sBh+gf?ubjPw0eAf_TKE|$6lzZC$@O~r&p&!QP zYv+7%4^~SCx(}~EX9*682tk@3=Ps)8KEE}=MEP(}793s3j}ByKxpd?=VhD3JM@;?u z4fpVOv$cROQq}%|DxU#FjIr4W{31OO`uWAj>OltG4~9aJLq@gFf5e1s!(b;LzN=0I zm_X<95ItzS^bWr2k0K1#mIh;)0vS2LMip6fdfCX)mG$O<8|m|m>i)cCDmwFh0^y3Y z0aL>OXG;@9&A4tZ+A1vrxJv((UoU7s>6i(bn!TvEa*R!sz}7w$W+wwR3)~Clc<8?C z3RTr;!vJGe+_2yjF-K4Ia4g0caGFEtz`+CO8Kf6PD-S5flnCI^sdQWQq2|(`8 z=se?ppBh&Mq^F*Msdj-(J~4B!!a_2CcCf%8XYwD;7e(daqtJ&SLrO_v~|rYzN}}GJEon0gw0n zyJpDu_CaCnKzT+OYG7ZvFtfjiye{U-rK$q`(x{0@RG^%hz|0|4-z&hm@}TpzgSKfw z(##I;OY`jjhS?my;(Q30kB`1J4z6dvt4%w>=3$!yru1FjV-A1dpzTf9UAMX7s;u#S z)OC_HS$aVYA}9Y7SiPuuxfm!Pk`C8iCd}D+KCkg|Y3g_nD;wicoySTIb3a(-G4K zGp9)EQy2W>wtPr?-T?jZ!FLPWev*)$(69lP{D%WpXU+H;{*Vx{n|fEaoZ+VGg2BY& zbi=gNFAmxwUG%4>ND7{+OdnDrofZ@0X&W1hnSJo7=4imFSG|37)I3Eq(3|e%#oMen zhV~BNthzZ<=VY>16W%@QO4DiW5n#j8gma>AmZk6Uv39KWvDTN~6@<^7N8X#t=l+ao_*;0iR> z33w_YU)!RHDHuTI;Bi@;&dEG+Mwohdm^i=#wSXZ!pTJyF^O7so?^_E5P$m{~-=3!v zETF)S*_ToGc~zgD|WOhqc*0S&te2DWa;-v)2u0r3D>v3@|9Hk#Ol`hyC(03Zc@ zxpbkeD9)Q9-XNllGKC3LbicLCa1v_$IZ>FK<$mZQqa!wBjz<%D{srIl_<>TfztnX; zn2nFb1_WSG8O9@x*aMu)2Ao6vXdD>K+p`LwzVV$xeq`j;`2OTo zoMPNjH6-LB9dwzoZBg~hJbs3p7a8~Du`}DwQ$n*UF9FYKhr_hG=FF;SiXGT~i57$Q z+1CSpC~!Sn>ocpb?{(w6-YN;f?Adv9g-|D~*6c7v&6*Y>#!jzUVT&de3MoD80|Op* zI8AJ}@wrfPU#aR6{hgapTR2YZ8l}Zx8iIFP@Yul`7*5z6GDZ?M%^^5jFi0zHV#98? z1!zA3$bA|cz_fvMy@U00dLBTCcFI-zIpV7(ketQICD`}%l2Jh5mkX}f6=?6_W)wbTrwg_%A$d3cW z_ihU`?Jn7dR%@lhfauE4DJA-r=zqj(<(ulZF(oiB9qIxA~SLiy~AkrBczKf{nHpY zY_p{S_^gV%nke_GsS#f|tgCa6*}sTHAyQrNB&yl;fAe=LmN z^VUq)v*BlOP>A@JE|0!j?IRjr14v>5sLF$_zA|6bwy(v`W?fPdBiR5Q0)Y9X)=RCx zp)(R|H^(}#dV;JLFqDp!t^)SE5c^>)g#Yq2;aPrH(rt_h^6$kv!3UsMjIDf#?4MMe zLxriIlWL3hI`|p!D(P{G56M{qzw15&YL`-OX+Z=AzwWo-#T*Me@$P^tUR|akPYm0Z zi3QeA0+Zmw4|qQj^YQ%rY2c4$EYidv7M_me=i%83Z8+@!2BG=DsggxEcI>j{PHv{! zXk&&Zhng9N2F@ zD|H?^bZcGxdh9!nQ?pF49vZ29r6?$BV&=uy{93$F03!g_!)YR)>mnOXa36lZ+;f>D zTrYpElx&8(k2!G_S7&|b=?j}h$^^SZ1Gty#YR?+sFB{a65M2C!;t-5yr5ea3Xb8hdyKN`*Po zG2^KMc!!&gH|AtDhA#yCt#{3+fCnf)FU02eG6@=h-??*X$Ohimz9fKwuuBG_4+@TT z;lO0{8%!3L1gh?&G9(9Mor!k{GX!w_4q%)WeVINQON>p|_er1X!46#MdFK1s`bZ4$ zKrQ!aOnN=QWcH48&cTskKd_(!44%r|BZA~s%XN0=r5ukzHPo3#}>4`17Ymev)R?dwJD zYuB&DsbBH=j}?{QD&c0QO?6GIq4(>hY+EaUetYs@tBrWp4tX$B=fx9km|S0l1W&9M zC*2dV(qcZFaRf;q7)7r+71=PB4#ob;y$V26RYV}czS9psE3D0 z6Fg807~(?2&r}S4^gY*P#zW552&`0%3{NgZm-5AUR;34QAHDCrldYc)#@fkVw}z$; zepH}c5A#m8MARAgZhh?w2l*WoLmv#qec8BJ|C9zaz?C>*Nn>3}j+wh38R6lG^UH`% zyc4=Xw_iF@2ZVwth5jsL=il1LM(IN!Jr78*s4e}L7>&jAWP2QYHLe|l9kBCnnB$>6 z70y+uflH@J>dD!PDJsQw0cFaa!5&fc`XgJvLb})=LZb(H{Nxhh`sWP0w$%rAJS_%} zWd0mxwt;)MnC(>qxX~YLzgQBd_dJplk_n2+ z$TYeCLYZggEs`SO(Pjo@itT%9CUvgaifEh)1TD3dRa;{>PFf@|KM4M4+ij2?fxJJJ z^etpmzY;d1<|VGWD8(_T#2fQ#Y)Gjs=1rypB}Y{40@)~PECyLDfxRA&h|BSJ<`)wS z3UanPXW8*--(+|!!I>C(enSUrA7gF*oovm=Lq{>kZ9ru+Knnaj*#Jt*eTiz$T8KZx zUi3GL;T|X$JfMX64ONeb<5aNZH;h%^Z;{$T+c~L|Ni}eTjc{RZ-1V@5cWOW1)W#~7 zse{XjQ9SqWiRL_HX6KyC4$&tf!7ptZ&a-3rt#c^l2W|Fjb=dxD_V z+KH>=F6m4j_kd3KQ2QrJr@Bzi38q_SOowgkoatCtO7nz8qoExW)x=4#6*`jz&!VV2 z5zj}9*Ve2d47>@=_p3#n>pxhcERC>nC2FyXD425^_l<72wruGRjI*v~Ap;#ZoRQLQ z?0~(rtErnjS^!itm-Ww`Cc**u=`+}jnwM~4e;E`))O5pE4`k=KzY)_`)GuPGw^uh4JWQ*|=8^ zPQpVrUow0Z5Pr4+p}=sI537FuH1O9V*~6-IJA3>9Lg^ik=S8A;PI~CO*@9||82AB% zQF_&2iQqSJ5s*1^sz5n!tBUpqBe`}dKT+0m;%`FzvhvCBRt5WH^eq_xU89Yv+|EJY z(#cB}KY|pAZJKNW(423%cT?-F*yR*oOy9M;Sa|Jc)+tH*N^Lr)x>owbw(GTBq+8s* z8Kdsp05=QpKp)ML1|gdb@%&5HGnQ&%^`Bjk#{M5FY&diqfCInQRo;f>i@Bkff&Lk_ zZ&1s^ipsoxt#AN7lnJ!^Yl=Vy9;7JHLXhoMO3*()`5;ufVr|m{V;zpUue&wZrHdg; z4|DptcKATD5(X^X9K*YEt{MG}4HxAk?xd#qdDwch5cZS3v+s{iYboXT-wp3}O2y)OSwLCFz zJUstyHu#WAvbe8oV8{o&2!7CZejosPH=CRDgkRvmb=(crDAuz-j@REkXlu5xPxWG*pF3KV(#ijpb6M#B9m3~La6dFQjuUv9V-1`%-zS#2SaI8$iboq>GaEv*6b0WR+W*S$mp&UFCH;cZqdtPfU$g1i=zr~I z(|XvqBsG>N8s0ipblExFbhr4_=C%f^ZiDL|cQq=Kgn&)uU7f3&4hDFbnAKAf?`ey@ z5O8(yM5(l&ji$y*0D}Zg!io3$AfBxhCL%r1>#C&A!=TQFNs)YkKO$N!?%G&|TqRBl zw7yV>52oL4V*tuPH!H)YJycp?1o%8Pv z&j&+gy0~H;CPH7@B54+UEA~F$IPM^pk+L(+{1R#6mQfi8qmKdQ#uU7{hYHOx$j{Zp z$GhttZiW0OEnYWfT+i}=1DZ(e?|hpbn0sz|@OVa=VG^Dfu+rpfq5JDgAI^Ro(brWt zDPtuIn1?0$iYp3LKW_TI$zoFTL_?eM9G4|gjHgoc`cu-B&#b4mh+tts>H_0z)0iOE zi3A2Q71nwPZyilYDX9=~50sT_3)ut%iaX85n2jczYh0Y39%O;qFiB{P1qHB6y3tR7 zq6T+c`L7)QHR*u|5XZuk_za$6umn3vRKEBzzSQmziK2G}mtSj0ydA>F#)>VLHfz7Nfa>H7mc6TR(VX!*KM?v5ucOp_9n(L0X1nS-ev;W$BZJ#0bzo7^vfT2 z1&o}7yUpMSeV0&Yjp@4vHsth5KYz5b;%+mz(`yDDP}YN=yiq11NM0;VhWEfm`Q@m48Uvv)&*#?jqnAx=YJI-81z5sBHb0ub=*bgo{QkBX|zSC`X}F zg5pXQU9Rsj+N_tyiaPa8rv96Q7mWR7S!~xqO%!Q{r?;E9? z1Hv$}oWpfbj*v#n@v2jW(#Ix&{YF{b(ODYZ*X(fu9IhEsIX<@ReYf4GCv^6gIMbxe z2WCR>EGf2GHw2JL4R4`xO*3n4tV04Y-^LD8T+xP6x*7@5Y8TA*jXhTZcu=6RmZ^`n zVVzz#@@XfRl)+EfQrva19phnQ82<8v$eK#Kh&Axk$K-Yl+SR&Bk4x0=K|55sh4;eP z6bn#|`E%VZ)^4d{o4=4{FgUi8J?z19<-Yj%o?D8eVB^tkD#JZsLB(^zTz&*$H)ldB zV{A;4?H@rf>D8`|$eVi$mGQgK@D0HZ@R4Ox4J zKN2?0>;Hsby7=%tFO(KM0nY>cNQ-rkN27TJ9zTQ+>R0Jf3mmx>8m}cGnW3BG%Wj+I zIt4)PpDwpsxl1Ukr|`s>QgrrqB%m>N{(&;Bm|yDN0C+$T^F;}4y{!Ded;$_zWBwXy zi;K(m=0%Ug1aQN&cgRL^2iTtypY`-x1Kh!Wxf?nV9yIulmD(AS+$hNRPQTPg*B{8z zN+7ms?#t+KIgX&>y{Vs!inx0lDDDR^&XASu!o&VsES`Wk!kF}nnNa^_&$+V2c#&)* zcCW`r=UUsyubvv#Q(+1_Zcm+4F+a{6TV%#^b{RNSqz;v?{OTX_weM{k-a#qC2XAt1 zp_o@gy2H^w z@eH5AAw$_$w0a)1>gzq#ml|tS+ga(KxLqo|#0ORKy7E!bC7nPH^}uj0#pFR|MQR8v zW(z9eer$Yx*?myRDFtmTk}eZ;!+&aSn(c0mp#$jW&N_L{*q147!zJK@+O|U-bkiRB z(y>gw(`#SI=MM-y9E9zP1P4Ao`SngVkv;q9X+xmThTx6Alw$2L7Y)@oceQ&twj{0K zdw-EMe$1LFXIsFJI3n`re*|I4pL0P+9JC!^X5Q&JK5i&{^5M9h_M;847Ks0wExL|j z#>Zf1iVvc9M}JZ@8lV#g9Cy8kQ2u7r)v((v@Y!MN65usf+ypu-jvK2z@l3@$>}er# zfS3BzQc_vJMoQ{!HH~U->~q~$?ZlS!BrQw7C<6YyqNJ<|vgFnai$#g^(6<2gUo%W+WdUgj0ZMI z=xT~mU&OkR2tKiD(n@Wuc9A!JGDdbB;Q8I%k&Rk@BxG`9&BW_#{-Jq z&_WJ5@6vH};rLB4hY#6Ke!zFvmqmA6_M)5E(m@r`02dL&9%bwY2bSyi1v)lNZYRi; zKSwj-ED1&qI1t19ky)sn4KORp^G^5r(;wik2Lx^d2d0Qe$6Yr*LL1uoz3!de z*r^&j4z362VFDX(qd#Ulhl-d{Q25N-jT;%pCo_x59fOXWWSHq>qDzu>s0{g-1JvO) zNS{euD7s#E_MMsYs@k)S7fs~D0R-|~m^Zq=)sW8QH?VAZiu;>B(xo3afMfl$_-|>4 zP8WJ4whlYLzJbqru4%<4AA;`Jr|P1%%W|kuBzAxKljtVOw1&5kq=!@w78S0vh2Q*` z-lC&st!zeb+rP@(QyrsfCT7gR=A~wUs1|MqBOw0yp$kj-ISrhYa{d#(Z2L~)!Q@BB z5t}=n@Ad)PRMss~WcpYRgS$zSH!$XlhTYOt1Gq3UKn-=6OMcs+72kKEb65g)5*G8j zjc^=~2PCsk=+`gE&nmi2bOgEY=V)p{?Bg=H4&}Q6ej;~7fo_w3D6 zXtL31|CR01C(%3*vksPVSY~j5?rTNQKdry9K(lP$Yj%^j&5LRn&3w9#bi0jCKQ*H+ zy)sN zbHcTI^?yp-OeYagIi>tKF&`}me!eS>1yn)fT0{H_xpp?W0{p7rh2;-T>}{D*)j0p( z*iJXb8f{GWv5shRV7Y_}=eq$j4c?WIKR<)ZJ>&`1x&y*^d*n7Ta1itTK(%7*hl?01 zVnj8`9mt<^j;kEBDc%N`sUM2?&w?K*ZNmR_P}tJ@?D;R zKl$AHlJ74_yA7AT2dx0p3hlg-x`Ch@BR8PbztuHAtV%@-z>a&uKUy6^=kqIZ-EaW=lj6~DK+qb0TP)2 zzl)7p#SaKw*g}6-FgX)+pRcON7HDUeQ;vNhSte}}{(!c1f2G$oIAGVHKCs!?AJA}p zDvjUVmiV-x9{R%?z0P0_(KN(ARz^o+1(fzax-aED8y6}M?RsX^@q z=3lXR=Y>-ezoa~M*miqkc;c@<(JB@ z8N!M_g!vPte@duPq3+1hiA93@x^K?{Idw%f)JH$s@8^2!5z-Ht`<-ee(=J$1pr`wk z-zkq`uvw)WGL`Q04+<31BSDytYwoaZtMx$-g%c{O4#Aa?z4Jp3v4G6KV$SJuvyo@z zzPOz)`wuFHQ7w-T0eoKl6NbM_ZSyj&&bxlKUwucL=~AiRoR}oll>-O8{s{Qawzkw5 zF2REX@BLUouL_m65fPpE(YeFrGwNCdSjIy>V}$%!Nk~-uvJn=dsCoIh?c&p)fFuWT zn_c=}`4<%hD|Hq`0|Nul1!8=_Y>i@yO_PmHW5K#UV<7$IPlB6rL&Mu#!9o;#PTAc7 z(*{7P?OJkmptu(_ZI;A(ReK;xi+$kkrvNRtCw9jrG!0fH1YWI*JK5Q`Fg~eyQ_Qnc zU#tVW98*9sw6c>+Y3wzw1snb9@ysC`Q?8G~f%?u~ynawM0oi8Yc?;IWcVUuB{T}m^B$KWu34l|yEdsJo4G@U#N14t8o9;g?+U)88S zycm8ht#$AqIN$gEzp`7buIuYG0&9r=qeZs?ysduR;#&6YT=#fn&ppHg#Oa5~+<7I2 zg2tI@Ncu(;(^^Zy^O;*Ww9}3L4;So4Q8xS>k=4Vs{uMXgt{!nog%Y_yML=FHU{Fax zB?sBA8QTDiMOuLRr04%|Ij4nrOGL1O9mw!vH@o-AdyRBD7d%Mum-qArrFA=|@kU zLp%z7cOSGhA0z|VtA+}9&~{!oQlV^t7%|a|%Q?ncH{o8DNBLYC&g0?i~KAdjnhd1c44r9_VOZ3mQ~dK<1$ehhJ5Xn~hxC>JQx-IQF;+ zu+!C(xugilsv+mmmj_7qH^mJtqh!JYU0C;UL-hDLO6`zTCl&mZmrRw9&J`mGq7W144stFY0PeA&ftpz^~R#o6_4I) z--$N(bs^gf4jQa}g=F&xN#K{~!VNA3ZHZ?El;(b@s zVh?+;gP!gv22?U(w%Z9yr*J+@$6A&pMZ1S=4oSLrg&gn$`<9@c1(%P<@RqS#@R!`U z8j-_Xf1DV^q0#&GaK4g1#QDvkqvF1s&CsWOO2>h1=)zO&2q23C=c60UDT9NaB2Jn^ zu`wrRGYW_c=AS{-Jt!&%E0w-mbiD@7!_pB^Zch*PmL^ee;qDbP-lS7O^Dw0)9%}IM zoocPW+H$d1!nRw}G4Y*l9>qc_WU-u{=ZWq<^WmXTK3LSa)>Sl!jUdSV&pEpE)A?+_ zS0_5X&iFV|$b4$&j_sSsINrt79VQaB;OboeJ*8_2rxewZO|3`9@V-w&^|iiI&b7~j z-JTu;nRyrSm7GATIK;8!MW6wNUFq`bas`>z@RlkX_(Zq>19A3yKC8BGh-rBaz#CBU zb4!O%R;aRn{_(_2TinMIssjiVWjp6d;mRI9pTyW_AlzOFry@Z6F0T&#j+GvxBfAyVUKNsUWjpB_P zb6AP_e>hJLnL~3l3m6=aFDHc{kJxb#>#PAAYM^$^3v{iOayj3pD}ALt9uigFw5(*F&MP&V)oj1Q|aeB*+50tA7@`@)7oIQ!J#j26(~rK-Q6-Z za&5D3^O68=^$7$WJPGkzdWZc=bgu8;9yV@qdrdo3{!FMNakK-{hlL{0fu|mS&Hi=t zsknB1A;KM54&xzK9`GjAgygr}fQBn@wC zlwMoS)8yVTpaC>04|l_V0L(Dbz~p|ZAP zV?=NFiI#JX(a}h2cYG@!K{l5(5xy=|@a_uc{0PQhYRAS5d^Zr!?;WxUDGB&NCG)*( zfiCPz7!;tbY*5p3+k~hOc=ZPa-up8!cT!>LfJ*PvjlviZ(x4uH+f?Hj@7s;`MfuS4 zR40_(3^fHB>qG_)1u7mBgWh+O+M*nwK@so2Y_e zkzVo2Q?o-#-xIP*P>zUjMtigv~o)t$TgEB;Ln&?$7g;> z-#K(L8E45&X-DV_V2_=I+%`h(i2?FnuY-gi=YB#&@`#f8kN?o17Zn_Gx`vQ)w{J>mB?V zVA(D`e=;MQ$eVL-j0p{Bq7rqXRsV(V{z{pjL}&3rTH)_sT|m{qW_ix!6v=too&%w) z_HUH)lMDK|@jK()_fZw?l+?;Dq#1ilHsY3!heSx5R`aq{{PruR2OEH@LsaEpP2tK+ zUn3z>?Sos^w&(JfH}n1PSzGX6qblPLnlqq2F*TcC+t%K{q@w?YXw79+0Gl^!R&khZb>VRqG^WbAiP})C}(ksQfvAj8FXlX`eqg zQEmzn#BG?D@^>v8*Ea(gusfUZpi^Tr91l6uyZz*35cZ3cbb4qoZ8}tPdXJ{#vA+*6 z9)Ue_*`zs+#SpizV7NphjK)QfGcfAx}%plH$;u2dcD%B^RdL ztIoN842T#OKzN(ShE`&=(Yy|-k&qR+K>r{o$#!zC)`9@;>tXGMmv!lqGqCNT@=jql zTnZkhkua+^ftmr*n$!d(d@U1J|FAWtv$e)C)Cl~b`18{CR<4dw-K4$@~E z#2)Y%qS&9MHi&`>{EinlYK!2mfaBS13fNQ_`ygj<5p*7Pi0(wn&o0S*ayCONUMCy* z$r0sOH#AqBIWtFtmmM+?COqUQ{CrB6XWcDb>=xV7St4Q#mBg0JdI+-LJG6Q`5B2*y z5YGxw_f`oya|JKe)kg&P!w_-Oy3fzPlwv~^$EF&9cKxkp`eb&p{jGPp4K{mwvpEgG zy`XUT<}kS|Pvq)$(djj-|7Mwk@)UNr{BkV5XC~R9oC^xg)qgWBPJ`c#%lQkmuK2z# zT6j_+p2l!%!(n={C@ok4l=)=e&2Xu!M8vQN!Yp(hv@r%0uFUk4;A5f?TxsLdkK{TT z6Ntd?TkHH_+oQ{k;`m3)y&)*~Nh!ysJ4NsbaeJa42s|M8seVbM)M$|jg7BT%&tLS% z4_t0XFswBq>2z5-WD|h`_2Dm_7<94IcRhHV5P^Kb&mhSVZhi2d1ttY zpbaK|M(BZRh>l~Uf2aWC;kGdiLK%dP4(62KC-Z9cnS(aBU&P`H#*}BE;|W3)ax8l1 zh6Yo=^+aGN@K8?3-rwT*I$xJ&(g&zOD~u$FXEDryJ_bKGPke9Nf|z4NjN^q1Esjkc zgnEc84;jboNPU?{+fCb>UgzSP)qt@@O#OZCmv^6)hr{%D6eb94!2WPKbL_jDp?)Ci z_?SIQLU6XTpWL9J`h3SG1$f)N)=rwBaRwrJj*5|T2jP!(0a`rT>{ znDe=NdTopcb#D+|J}GHGb$E$EQ7veg&)?tqIOw1Q4of6D+jy&t1z zcJCmxU-UG@gG;UY0|?E&$aO#g-0tZeZKYfa{8)8V(zAlRJ_Z)~pRL>o2iCodkDw zX(dV@ZBQl)ubmj$~!OwJDV!t51K_cbv#=G`IEm~HOI_`n3p_cc>p>(`w zf9JsP`p0YN;8{C6`H32wQxk`;*Id@~S<}Q-HqE*4pyS-{Jj@Ka{v8oHE8)Kz*yN@XnGvR#T{or_)fH>lc8$-}eHm(&n^@(DYGD zP}*O&jqxCj`!h5L3N*$CJllN+e!-a*gm9)SiZ`{58vqYJxVC%(q|fq;)2uPSUxJiV zXT2E~Mkp1ICqL>XHGk4W5f~q^K#mo@LrTClPmbHY81Sn=?>6X};)8*C2=c!)TJMLm zF%2=bRJmUDrnwqnu_K?+H!G6hQU>#`JwiIP*J`h)kLNNj5j?q^; z%~{vL^BkD7!}hhP=V<(iUj)73#QY_Nw(9WW0POy$&L3d9q9PZ_#zM`TI5)r7mb+sr z3KbPZbw5p^iiCyr5$?F`lLJ z&bHB&BtZavrq4`YCKs@n%BbW>TcozC!WIeDn5a8Xn->;s7!@b@x#AtZG0&xM6eaOp z2x9_jccnM+X~a@(vnQsYtDnhsM-N+~@!qfeo1+7oXyWaRq{Nre|ApnfENWtYm*V$) z4}Q&axYZDXS=uZLRRsvl1I3{^Pf54}DR*?eewnMptfe{ws`aTzmBoDp@fP@z!Ourha|k1Ln$@q7MgaB>ww}$| z)sJ@=NADJ_N+`iTN#@HW9rKp+f4GRzda#!dUI38Y2A}2XgRR}EX%w(-^OO&$h7O4t zyk&gkEY=Q{^Rvg5d^!vNeP-uz=A^jY9vK=E>-gDs)so}gg_@2OzNKwy+itlJt>;O) zp>B*7G7Eg&7&bpinsr&41{V96L#F>%~4>JJ1?|0eA#Y>mP9n_LR-(NLea8t1ko-i zRgKe{xq!10O|I!$8oJkRO)E0pU;u6B^$1iHXi4aHvBJ_f1Mcg9jZ<2H#JlTv-E2Sj zOblyw$Ce^^_3whAU~6N-b(UO#uZ*{al_SDhJ7tAiYIhrA@C(rv?!?Jh+^@CZXfkZJC_OIG8?|*{D84V2 z&IdNNJ8+sBu$F&(Rk|gTt|vs}o`ES5)hq zFO6%n!AkeD%>g8Df8RWwV!78fHy2D6dk{*=vG1u7syX zU;_fnw($Gvh=x=)h7qt7Lk(~1bj$pKGZ&i9>l#|s!)b*pAuooz`O?IWfCKQxf#?Gw>(w;#k45WlW^q=Sf1 z{UFk{L!@hvZyAcMWdlMT%!T$Weo?t)fPwsS#3tB(=aUYeIO_Cx5lIf(2Egru9s+t3 zYRqSqdEw_zBRg@nyEN;ugEj}WASGo%?HlM;q2d0xqbO7{&q;4i$ScDOEdQRViO`vx0OY~RGW7Cw0(W83|n z6zC(O&K{(z@HYU=0S~ zFu~xs_LF7X$R|6=O&#~pQ-nFMGJyB0n(e~@4+c-WzpeYb656_O|D+q#B-ccq`;NBI zoO;p7jkVguJy3N7_q*Ee8q}2w4aSTJt*ov5X!IX-sZ7g@AM>V!m}f2y$JYTEKzebh zO&xdr``es&hf+tl05A_^k0vMVo&)QL8`OdcbppFt`o8l*`u5`YT>7v4OUn7_YIA7l z{xhXgl5cT3Fw@0D2T6~$7g*=Vbr{M-JP-#+l>n67=r@5Pk9~}IiP0*R%wyOUE$SIW zvEK*-T8VII20*G)up*#HT5caAD0~#MIH&4z^FW@K`)chVwoUu^JW1FwibXOQ0f51J ze_-T4s292b43oXZLk~JoC>$i5kN?ua10)bMJa=L=mr6pPh<<340MtE8dH@n|6CJql zYb-E+|B|->>in!8+Hxup;KlK)Uz9XZXF!}!fZ9pLkXy0AMbG@GT{2D}6a8G=A|1sf zWX`$JWOAT>eRSGrJo24ohuQl`g_$KM+hAvrX(Lvm>qJm)e^0|Zwv6P4kj#+jIW<++ ziV>rq3jSSgJ%KG<5V1O39-6~XwEIa@tMmCG+RDxK2KKWE#ttNX9~ z<4XVBRZf-0*UP;)xow_FxFQ2}!4z_Dwu|nF`#EBIfTQLg?mT@6P;$#qda`{QZYTkL z0gFOa7=adJX|p*Mh`we3Run2!clWwnz$OVHd9b$Gfx6sqdqhltvfi=Z`e^bK6T}mF zm*(3k9p_~x&#H4OJd;jsc*R4+)_3-x;++yfHdseG#kVT>anX+k-)50)`!b$Pm25x@ z>)@R=flHr{1R1kj=CndsGxz3D?CNr6RQ&ZzH(Xy;FP%*I_PHf-`T z;eeym@%TEvu|Yy~P2VLA7V2sfHDrt_m}BC*?2|u=aHwAzaiy;-DctevoEN+2W96fy zbNs*`0}gpUGfG0D)AiJ!i(j%a=ZM_jAy1Ly+2u_~Efv@N%(ue3_9qo7r72BAXrsFyvtDRA8c^3e&w_6I$!M0O^XS)3VZ0xsP{)i*~NU{ zR9h-y9Y>*uY&Juts-HtPP|@9Nw$wesr}CNMr=%xgpRHk|bvgShC6ED%92O>QgFqt} zQ}RmRofqRr^n9k!CvPt&Xj?`_wwwFtF$YrPaqgrPI6?V$J}<)I>obmhC8dLwMhW+R zeKe?o%l#vM%5|u$4}msUI(h1G#QoK;Y|dTlm`&AraFfWIx{>JFW5R{?@rjVdm7%Bi(Y@cEW~<^GniJv%1`w7*1RNVuR7VHkzS#A zbEyT2YUwsIg8Dnws@kXO(4X2vxu3vcd<{d}r@y+Wt7G3AZ9d0$YBOY@REwe&G-y4+r-I_2urJy=kKhkUl3 zcj1BCs^A{Dogy%-cA3V=N!BU@?IIWzt>!E!b-*$MvGNd&O{mW6+!@_;cB`u6(|HWn z>OTHOWoWbJ*DlW#cX+d*i(T&{t1D86ppyzvKb;zb+ddW{EF4#wiUQ` zG@`HFcxSl|OQ7vH{elARv zmE5Rwr`@hZGwr5zg?Ofqs zr)^X=Ok||ajOnLovWKl135PAyiLU}|#Sb(Cuzna*`bI<|Cj zw-jg8?OD(?pSsB-u@}@fOKyc>Hqv#DPRf~&BgNd?R<9R>^6!AE4;X4=Tp(0Pzud@sRCp15!MP#B|VB3ARl=Y%o^3 z7OHReMK2h5*3BQfr>uNG+t?@AKup_H&aX4E^u3d=j;l+DAm}IHHY+_jZqCb=Wth#n zOhx3p=Bg~YtlgCp7s6O-AD|lFk<0~Pu|KDJBlRJRV-8&&xBY2s@Mm@ooR@l@+aK#Y zy#hs9Av#^}Ow}`K{TEBEdb^EQYAjPU4CadE?IxvfL_z#~hBi_KM>5Y`^L2wdok-@_Unq0y9w!ItdAr3R>G#4~-OPDltA!-RK=5?C_4;EiHHQqoAbP@sGOr2Nn$h3j048mjiGj-~}+;@gF?j)QlrO@y)c2FHEo3I#|Jo4L%oi35Yh;|HEEt>rQ!Y$ zHsHoP&IbAw>Q%>R^Q8Kg5S@s38=D!U0U|vH)%O@7PNrPcR^Ob7bt88U4&QoYIPdsP zk$fWOI)(flt$q$J`R9|EtnMM3%zX1B>Z8rH^Wy6A^Q>aadceX5z@6Jc3f!XFwf(!> z3b`HnqedlR;8xc|4IoM&b`)GTyv&P&BgYz@oK}zav%tAHwoA(>C;uwbdjBejA5Ru_ zuBGmXc7G$phwlDj`!g%otJ!Qb_`CzXuSG5>{ief841YozV=)(BvU1CU)yP#BVBoFS zhYHiWuNaVZ#=tgN5fWgqrm2TY<{chXbyZ6J(kVUqtDo2n$FreOvReFToxwy1JouSG zeHQhd7wM7(qYb5+Lr6wRxt@F{5uko=>fVd)YNTR7&e}aV^rTr-_VLO$KRY9B-Oh zarfv$;rWP}gb^M_PexxWNR>ovK0O{`riJ)xWR8p-xwrf9l@soc29;Q$^l$jVf?LH| zzmE04O-mar>~WIoKt-VPjy3jDQB4mlr5PyVdwqDMPk@fRJCTcQ*~|2&GS{fUq*!wj z&W_1fi1|j``tgH6f?B@Vl-uyW%WR3akC`?MhTm_&y*9$N;zy4SGI`@b?*tKwFB8&T zVKYnNe9OaqxCtv5-ZtUBjLY5PXLlWI5Z7RW;S#HCFTd+&%C*$|?=1SQ1&I=|Y~j`t z?`qS_z<>U9AHYOhRJ7ICIpn6sgDGj}y)3PL7Y})01z-A+bc}FOMdPg{A9}qO56end z8?sn)#8wDrLO5b4^1vdx{>2HWKt9Go|=Zk!L3>X!ip_flN?dV5=xi>+Np3t7Zsv zAi_B$T((MQVpBQj>nhHO9qa$B6wgCDgJ`)(n+F+uACOyoPAv7Aj#j1yj@sMKJ1i^X zMb4dtlbzQDDeX;wDm-~iMZYpOVS#NjlGr^i;w+Ce2?(AEEpU)e^eVD}il$GFv#Bus zNx;;>rOh_LfblP>HtJBejR>BBu457}@!#@^!8Aq9g!^-q{D@vpr~9S)=g&MgK9bvY zgNcQUofh7e+}fOZ>!g&a)USYLnVRx1j`WIt=@kMLs;EwlrM>&Q7M@V5jH}cg7v1>Y zObDZyQ}BUeo1sNw)#Ke7t|eMbxNr#_BEOGuOyzs%Rew7Ddcd zH{_XSBL;@;)9Fsjg(-pIqzyyO0T2rm?Z<`SMg+$gF+y}p1|400!6i==Go56T5+e+! zI>vJ!59Br#^|-|Q;JDSNgt9a0W|Px=R4|)^R20Y*b1UOAbiU+6!Bfb5r0UXf8|4G( zMLhy#LP?jdz@qPFlUs&`;ppg`)|S(8uk_>fCoZ(nYzS}(V7Y>;B_HXMPXxitt)`hW zer44IA1{Ri`ZZTBU*e9r5=Qvo@wrxsUdpvM!poK!V^43CIECdCxhI5i_w=>rTQ6l? z(f62>0I|O#Kf%#a3?_$0hb0k}&Ug9PbE0W}n2ZEQ#WH_D_Ig}QE2J=zM&yR){thkm z$)hWRBIfg~O0>p=R}=QW-%SJ6wIb@45}`_GDC#9b54iP@0OE6}qI;a=BrYGaDsmLG zCk`;xpn{YdHwx|z1yU7~of6_t6d2i8^(yY=4W={*YAS%y`Hz4WC;R+g%lQtc<2lzB z17U!(m$D$UP)vgQ=&G_C45iXH+`qd+)zqcsBB29zpfbN>9r@r=^Z>))(kyO4;Nmk$ z_Tg(r1e8;oW&@e8LGz8R<6x`^h+p)sd*Fx0#V^OO?~_1!-`4ukQa^z3GSx$uK$a=! zPa%f`8%y}bq^mLB(zymHF8Q<;6x!0cCM4-48Gp3WM7Z@5ftkOf4X+fYVm~>DWLvP% z6XPb=JXb{(7|Vb6bv-<$Sjkxp?$6HkF5>5Aoa;w&o(~LMP0zEdZwHEP!wQ3R8Z($Q zz3M*~V9cRri&E2H6|_BKz{|nsJ%~MR&;VNQbA`B`F=+wpOtu0cZXwhi{10{I78iF6r{S z^X1gTp7Iddn0)c23kDho&%yyoWh#d^Y6+j-!YQ3L=G*(70y{+=$FSXZ!6Ee$_URi5 z98CVdEL{cCbZ(aG9}|?vA9-b}C-O_T(ZZ82{IOBK$alpKsQ#+2$tfEj2D=Gp>tX%6 zPq~#fVA4wf@MU!=B>{ai*p72;+T7dokfYxUl|E|7z4<=MMq+-Hifw(qWld?K>(9H` zGgTe2)hd{d3e(2GW|1bzq{RcYSA*kN>sDiOf!BLse()a!fJBn6#>5W>y)F5Q+alvW zmsHej%03@lFb;Y=s5PP@@3+#g?$6=VO1(ck`4E(ZC2I4#(R$0zj|9mjBot2jM3`8{ zKGuB36u+R%m>YPTN;w=2;7nnY;Km5YdIssYAPZ88^(k&G^%-T}vy*UyMPz%~B(*ix zlMH8}!F*(ENim5lW9P>H)S5)oi^9}5J=y-ieyQEW1Gb%WjJ|FGSz87RA<2V+Sp=CH z5(j^p!6}ko=>49Wgre$K;H(YL6vbtw;GxtiT@AI+II{;l{qO(ntnLG3N$a4}7xq6r}(s6@O)YfOQp^YYdYhu3fdi za&!Ocz=@BLR>pXOrGYapa>(xR7M#qbom_w3tC9k;6DQ5mXq@Is(FjeiWIzGcN=JnZ z(cQQ#2G})mBVtVIcC{Yxjo)bVwKCKrS2EyAEdJ3C&`v^t@bxl?hbVJ>58XW&k;B_0 z0^3}>i}P#5kGf6n?HLmkIUpC10IwzK)InWp%4fm`rSrtaAw($4f|Ljmin!%|ql|l< zNuL+>+dKr}c@Nn-G>^B7YYBaGMLU_Fgyf{QTUEq-Gid>6t_uBf-Wi?xl1<&X^U%K~ zcZwi^DbSNizQH=|_?mo+QpK-KQQ+J!TKXDhp~=C3W6T80LCO4309Fl_w`|0Scegd-9%*X~v{}?!J-)(~@@C!TbmKbG zOB^)%y-)cGsvLMRg*9GuvXc~9J7?w_n>-2cKGuL8iJL$m7A-mxHwqh29ALgtgi$ig zUt+AIm^)*4WX&X#0Nv`;^@AgegKgYBA?ByGjT*A>f2dZ~2!M^al`LI%>_vElhQkGZxrlp)FHnd;QJ5 zn+;$Khb(y?Xf3*DM*+4;kfu4&v_axTfu3|p8S zthBEpA9ZLy>dTU41G&gOEkM)X)Q3m~E-50FF`pk&B>uyNZ=j(pTzyH#H?KmrmfYyR zyYj@xN-wL@jpAe^rKQi7vH-5yv3&B#+Enp0lg8h?UX0^vT&`2&S~`+5MhV&O$cJkR z8L!Q_|E)yEbpzTpQPM{-O9V+o=o%mCaBP|^_|_gBdpRRuQ)!>(`0~HoM0OJo>8UVY zJ)yZxa9f5-zEP?f1RKxT2S5H<#u~95@g*q`=$8%i7hfpi6r9LslALD=)mD$wqIcp~ zK^=iKIvsd+WS(8k_G6ZqopaIG)IJs2a+}0&DNOW| zZ_PM68bvm{)do(u#2{#|$Tk{VOBOujV|wmHwl6#hu*0D7kx@t!FS6P4Hp&$lC$6SW z^L>%h2@|yhTmy%=b~iQ0O}>$q zk21;DM4vKDe|>~ua2X@izQfbta#Ymx5=^X5jwN9kpdpxaf?9nC)X%G>R ziOyeDrqP%(b!h(3aidw9EVN;ToIpq8yl=DpnA8)2 zQ%f5_UqE<3(2vabW;4V9&=z0rhg#|T+5TMi+W5?NuxOf6`qYW_G)cN8D<4^YquhFl zBqsLY=vtA@!AZ{*u})UTQMH|PBp5oyz|6Sco0KlMsm39HP-qf3g)g%+HN^N;3Y++& z%Lx?Un7l#9A$cc$n&rs@G8BqNwe56wjTk*7L$tNfH^QwvN7}eX)Y+IEah9BWGGtKF zigogO+*@|EPDcKCI?^_8<9={CGW42bha6tiwn;Rv5vCaF*PkFN^1`7AmH8b75=o*G z>lnpjnD?UO_akwj>GEVe!Lu!hBi9ij5Y5R}AW|=V!6^63{m(G(Sf$Nv<^W9>`1)R* zVwkV%hM?L zZqAwl{1H5lTPg+$w(M8_9JX}5rD=D3|!mnk9re7zw`o|V^IC2 zKTl^Io_6Rm$+rRpjJIkYrS>gHYNP_=c69kF%_MqDjtFxB3dCzltL0TdKNO+al(=n8 zJ*??4*yxCH6<%KJ?{zd98UR|8as0C8f-Wl zLsG5);SD=&t1n-$2K&$WCyQ)+L$ENqE~U8X8|cd=?Az-*Isg1hUhaJjet%%rD)GL| z_GPH5zNu1<4gduCCxmnz8|mVJ!3gta>DRs3r+y5AADog0>B+~bgRMo!M0c#3#&q;N z3-mrh_l#~^?E$`-x}IffoBh<4e0@K=_(OK$CY%ZVS6#Rt)x;RtwZnQgh^9Ib!&{1N z??wz}dYv?Dkc%3oN)E5jYlL8J$Fc$5yz`JY@-b!a%050q{(2Sw&a_#817UtQ(Rxo> z`;#<=R9;6slnOfL=J}IxIY_iCQwHF3mCs*I<#2FUa}(c934m}^ z2+_j~5h4_|?9MB9T?c!$F-~OOs0~i*i@xA(Efb*k-&-CyUQkQDlTG!9Z^klujt~GT zRNtkQq++%|avvIkkC(!MY&ujyr}fs<0#gtZcx)KPe4AKoN1t}aM-{kdOl}6uI8ZDU z)wy5T65^_v*0!{ispsNP?Jq)Z< zYF){}9SF^TgUGm!c>jmQbLL1mv}I)r_}=^QHahFIZq{l4RO-<6M>c8=PI1S=uF|PP z_M#~YrUwH}aAO8juDa?eJ-{d%*Deh~eZH8fRC6QAEcX4t99)YU*n=UoxjipPdnu8+ zb|5<9$`FVoT_cs%shX=$eo{imz}Q}@zz#5&idP9CH4q)a~@yoEj;WqUg z@JwI$?`&rJvI?mvI8>{sllc8AYV+VZGbw@0W3=R5fuq9mWP(&qhnE$$?nndE6ArS01^DUV>ouQRr3 z;daw7=m0gG3UCp8Z+3kD(ceux6SI0HVZ@kvXy}npFb}P^BpCs##_^ad?e4B@?bKK+9lVK~cpw6rKf0Y=$4h++FkVFQL-VeaJOPI{1f6C>99njNQhA886i z=1oFRTM!|=*hn?fXZnRPDb`%{%g} z6yy;T!g|0}@8R!>s#ey{&}mKUVOu$`bC@Cz*rANx=zs3rYz|8od<*NxC%tvCl?b}) z-@@dN_-^YtIB+~Ph;h*E{Ne2v*_vn1P>0ut31nU!Fx?qtvI&nN2~P~`K#m&h$SgRn zwiUkUcORsHjtJfPGzyk|$BDi+iRK!~jY8MH@2g(ky0pm&(cPObxxaOlyQdFGB;E_hpGmFOHL7^xpQ zP=We=1VguY<6-vwkXbMOupwj`hF*NmR8|zv{+UL~;H~L#7n@d-|H|mSnXC zo0$5eZ4y0W%b_oE0KyAVuf}x0#wDIUD+KXE4AxQ8&pXk5zikk0v2)<0 zwr-QU?rs_(_O~t94aP6KLF#2J9C4ElQCZ;5@zT1sUZ#oc3rsJ`%=vmxhH4+H<4Vm@ zI@Z4i^o_7qz%b;S+1>nP&ctF;I+Hys9%gd+@cuwo5ZVKFuupS{cy4E zC2(TN;!SO3m57v!-lv9=6{)>E1DX)nz>gsaY?~{ZnnY#&sSp|MQ!L357}pOG_ANDh z24v|_aW31Abc>T#??Ku0SaZYv$B*H|V2s=u2 z{qZEcM5=jR?(4}zGhpa-uA09`?UWt!eCo~l5R(HqnMD!K28FT0J4xnE+LfX}VF|Nu zt1#^o9|MJSr8HIa78G%j(6JN=(ZdZ9A_QV>iG=;aeW{F@JyshL3WhKIh$ysw6++I} z-`fzxAW{cph2eZ36*aJc^9G0dzo^q&r?*V?Q1#7m*xHXS%Cz2A3peq1ncc=l6k5v_ z4{JHcZz+S64u~0dmBE*f?5tqVrha0~uz0vqz}R8vHzM{O7AEr5BuXi42#fb<{yeGbBg1UjCSCYvv zbaD(V@?uGX(b2g2)946M%aWWi8d)9jt`CznAW^%AWyvAB5e7_A%w&99Ti1veZ(Thy zLHQ6RT|kHNDZ1vmRmfGxry2L4y{3#}I zDiW!ejvygWWv6J9nKldeKLI5l(5POTS+GJ`JrzZ{N$6>cgy;cA-t#5aBfkYSoLV22 z=3D?PV>adF<~}+Zgc;f&zrO9~9D7saOjteu17%mgbT8r$aWU$W$*mM&}v z4toeYaLw~C_imv(6Z~sY9mK}v*mtynKYi=^>Eu8v zJ*HK&v$dnP94+I?pfO!y;`-e2uu8u34URj;1X(d-V5`^|Ef{~(6=GNSyi1QMiTl1b zy_=5^jmh!{^I%m>#&cOWlzwLDtcMoDy$F#ZdTJazBCu^R%+$0W3qL}X=8}5d1Ejmd zT06(m3eD8wfK`L3EhgMvGp@TL$H{7+ZRg@ou;h;r9TE8`O(W=~yDCuc4JF&NK>Kkv za{L_!Qp9&`(zZaPo=nas;!4vCu7Gd~jzKD9HNJ8pWtQCA6wz{num4nJ=KZC@n5!t_ zBB4`AQDH2dHD&w|{7ueBkzbyH$MQW$mVd(YjgriC!%h*T<{b?;< zz{wt3UOGLcY>Ebb@{4Rt;(eLx&#l@Tt6zfEO7nLJgXDrtDC5+cRcLb{C|_t(qB}Du zyt^Sir`VXK^qBh9zi%vT7KHX30eGGbX}Tp(e0;R4H;691?JAuEI+g49s+j-2HeGV@ zqcGuPE0NIsbldtxQfY@xx^lcdQ=(6OSubldk;LnTuL*JHfw9X&k#Vn2cG8U58XqBR z)gN(~)+kz4L3Ah*tHl~KgS{WPvMc1?#tN3iW@^%w0I?Hh&ETNTg24g~HmerPdOK zM&Frf+-8K^lQ zj?hQrtt>Fg!TE$u^W15Lzl>ivmEs~PkQk40T=W@$U_s2WcS;Ttn|HgzyT$-Vh3wL% zzSP-FB3dpII?3EGjStl$Pq9b>O)yDo28~e5#b8wz7t4*UlVBn~evLs@wYzUKEV8wx z6gmVWfH+cQTNtYpWJU-jUAr|-^eG6V%~m*L0p2LI_30wkpkk2?_D>nBRTqd-%BX63 zW-M5IIZhNBlrwDQ>~?)xRQ1a*w)GM->+e`?`+i@CE-@FA<2tU??By$Nz&1o8!^ewl z*&m1Ste7x_2z2%kF2BD`?Y4a8m$5ZdbYl+xd*y+uVYjtA!4je{ae~G&g+PX!vM{r0 zE<1T@ympBKe%Itk6iXuz3HFaZPsmi|ry-uRoFBkibNg>1z6LJss$kU9d=$3hhPc({ zWvOn{HfF_ghr+I*OEzFfUO7S_R*`6Wi3Kwf+wsW?k;2LcQrl0UMEQmo17u?Ul6qUs zBU&z!ddi*EBw4UYsz<$&)7AWi)&(xIvG1vj8x;jm6JK1|IQO`=>qRLnn&Y9f{VSu5 zgIzb1B;22Nt7db8*zE7`q5-CNnFJX(yPF)L_!h3@IZy6BohWP#dfPYq)LK}m2uv(O zx?6FSDmmCz^8xeaM=JiTk3lMg5U-ph2I70-+LOD{opBt}bW87ie3U=Tss$$JCp?Bg zh+7&jWxU_Fn3BO6H{A|?-3edk;QQIX)omuahm)5 z&(Ig&RjI+e*{;D%p(C)UL%cVf*@Bd+;+Tc{BXCkWQa!0`y6)ikCIsSUpS~dos?S^o zUt&)Fohb4SGW!>3-pZxD{A_e3r_U1I{{*c!YVyz%RpZiKgkG}0p$LZ%8L!Q_kBGlxSEil$ z%>7%5M4xD3yVL=hzd1aAi08u90Ba7?BDEKpN8*}0-#ufPmX@Pd!kmSKFk2zmC*w_7 z916L$c`;+u1nyOf4jA5vuik&}`HXO4q4HR6%&*-sr%35YUmKX~6t^bU0&D+aH*!{D zA?WpdwZ|=<>se;X$M?qnOKaacm_Mj6>C@^LV^KMM{Z(R0-o({pr4_{v7HaupmB3NI? z>il{=@uLWrF5v5|J8wXik{@YCG#r=hIWS*_V~=%k$%RT_TOypH;COuBkt({hJ~3H^ zNMoHM61i}hT@p`mENe?a3WZET%+?_|1zBEmWRWch{6C67@(u5@V;Y0DHrzZiv4F^$Fr52c0boj*xP-+$V6iVo@@gFG-w# z2Tco-kCwkxqr15_7b|izhBgFpev|f6qU(8>TpY-`vzh>wsZbpOvTi7ggb7so_WiQ6 zHbILY%5B-FtjBbr7DBU?(KkEsaRrG`95ZcQipY866X)^?rn(( zyYcl>Ojx9;V@iAdrsbj~{iR4C!*Uhy7&$Eoz`mU`njQ*U^Z ziVXyFA6~9Tut0gjHY&{?v`1_gK&l?3q_=Zl8QYxMqEMojR3Afs{EG9QQq2yIKC{0J z>2@y&`68R#U)oMJqsRtnzjTOgEx;YCYGFA^I2}X`bn_Nar}v>XSCSgk-Np>*9m$Q5 zP=|e*56j&a3G>hqQE_xwxrsF(lEDeZRdXXY-Pg77TH7zQwRc~;bx19OIuLPa#S%yB z$+j}9NwZ&=1U#c(qvsUcj8xl-w0wZOIY2FAar%D3>H?9n*qVAUU6}I^CYWmpN{&tG zcO}F@GJrK#{f_14jp18 zl;lC)JOFiF-e9#R$AQ$#ly8>~4B-6Y=)gH~q6o)KB&z}Ot&n?SEuR)ITaodSMGg&!`yJ!G;e(QoUFw6b@sNnKYR zCj#mVYq^)zp80H|QtxxlbdjsF)_00Dyj>e3R97E}_3sU?jYK+W6xI2l(RCx^xuZt6 zDc8@_N38LjwD|1$d7tFNK{U6|#D%=JC}t&F09exQwtFNR+DH&4wy>d*CrdZKSXATUk0D`tAT#CT2tkYU z^sC`$>`Jg(JFrXIr|d6{4%2?0RtdPviXgRIsKzqg$3`ttu*nvqQbWlf0zKEK#TFct zyCjj#L!M&LA)N`%?h$10;wI+@N5}hkWr@y?jJ3A)j<#=o8u}y-^q331AOMdk*C3{` zSzu(SH-_BDcTD%CA{WAL2?jU`Qr2GlqolD_`H=ib!3}cn79vHUoDaeBAm=x{^kv=P zhZwfQemx(_&^qUdHBL)^soC^IU>uWO$n2RXpv~(%=gUlC*)!!^k0D!IKH9q68`mdj z!RyR^Z)JniyTn8Xh~Hd>LPVv_JLD6HbvmM-Kn4xVu$YImCw!GNRxJK+Hqqyz1X;>1 z2{0705X9m~q9q0$!<3mKUzNK}XG`NH7-bhoy)2U%7t-Ts>J|iQ{=egQatxDL^9U-d z)X6yl&jpHGO8v|+=d1w@QazUmyJ;B57fAUy#tl^Zn(`?^ZNa?UW5WFvY2H~|V z6C^t6G|j?gmM`{msU=m6>PbDz6^4~CJ2QGg&yJMC@o5P$sPPi7C0k|O;+O!1w&b9j zD#0XV-;$OtwjKE;PGTkb1;me&DG`ioKL6P2f8e{?-iWt8wKVB{P_iKC>~>%HX0M}I zm{m7MPZiuCL2Kjw%sbrpnxdu3md(f=GHgxHInFICUYcFydhwxwg8MFo=8!4;pgW2u zQ53C!p^K3$AZfaqOmpOdHn&TjKUU9vO0*drvGA15F@X!Oqz=?<`>?JI7i ziyx%w;qHu0iUku1bi`E>mxKrd6ja5EE6pk;|3f2T_5uL_q^P( zy^{}Q-eGG-$#1HS24P}(5kgqG#iJ6JcpQQCAR&Va>Een}kF^1@ z2|W04ps7BLo%^LPe{d@Wo4jjdL2s#ojVdblmZ;tW(3c=o`ZmU_x0dMFZTMUf(Gc#l z-m2>(PW`jRbiGz7wDnj&z)b5ZFyDPH6c$apVBR`xNC7YdK~7_y03-JI&ud3IYvlY^ zUxYG_6-zD>yFqX3Dh(CfoY>8e(?a2Tg_~cS@B?EXC7Lc~%e`9;yFsh_pipQ0<+q3; zdMap&3z0i#BZd+ZBq{49DIyc;p71A|2o|<=e~wNdKjNJ=r4uU8lfCceUpZ;1oc32f zZdCywj<~(ov!6sOs2r*saZ~9thKtWZibYBm^Fnt9P%P|1oXSl-Hu(A&`f+qkn3H5T z2FjKtr)%6&eTJbbLZ3JabPSjDBjoW=4xnRtXi$u=Eh8uBq6y`FjmlCkhoIKcJKiWRv{{IbWTSgxD%J_YpD(8M$`}+*ZjEzr1 zWV0S6LfQ#bg6ypif$(6Lu*Y+IoA^-#0>rJl@lDdcYpFg}J-bv!9-&>N50gLU$ne>A>i!}q}^S!8R? zJ&TwJ1;`8&939OR+O9se9Nj&%7Z6JevSG z){sMkrK!Xc67%XjiucF*p8z7DCBjSl4b2nz)LSzxyEg9RJt0Cup*o)aSmIGb1?uCM z?;+Pvf8+rBv4A-_C=z!NDuuResbC!NE5CNwL&n_ulxO0QnvdbjcICU-7IBlYir5F} zuHNQGYlg^;oAaS!zzHA(rl39t{F%WQ(CRO7G8dZVn`EZS)B>+MmJ8gq&ftjQ__%?Y zMc|c#-qK1w<2V!I^!kla1SE0P>=ww$-1ihm6I6@@21`nkB2`R8#ch1fy9(n8H3z*j z-WGv=r2BV*r>>&!g`xRI^M&R;|N8FUNo z5Y#4Vp1kkhtWW;PfJShvj=MRY3HSA8m0(9K4Tj?uB@a1HWhNIZIz#U53CK48B1{n@ zA(YEh{;a+?0^a(MAo>jnU8~jUdzxr^i3P=drN8j_x_iXj0#nWHc+L~13o_Gwk~tEH z>Ox z5%pA|#_gNRK-i2cAKcy3^XUo^oRi~l>%5~aa0brHf%8_-x~byGO@3d6ZebJ05P_Y! zp7T9}M=fFEx;a&FTd*TIP1sB-QdN!>-lEWnG$3E>W2BuY`15QWU3D#N7M~;v?k$p@ zn#;3xkJ2y_$t(^ygfEscMwW--BJtvKo{l#`w9P%u;i(K=b-43Z_~2{AdO&QC*+kzy zA6Li?_xM1|`bJf?&@?2kBCX?gh>>7{1pAj$Q!98AI_4|D*ApvaNeSdpoe zw9)pvr@DL%Ojo30oE$SPwrbFsJf-ELpsUv@E=`wU!f z)CPd#3#9$L#;~0IPQ#0!0^6le4S2^_U-ZmkMyX(93%(!;(VX3Y4bFOt%GIcyT$sI< zH&Af#t(X5H1b56F9J_CdA``Cn?X7oW{E`dYnK9&B)u6OMOky`rC36zEHB>fYY%I#T zv{Rw(-=S-!o@sG^z}{ET~mmaljc_xwX!uQiGkU$v~RKBb-|a@wfv(-o&f z`g6(Ho(7*L?dkFpeypU;CK*uzG|B&>ak}>zKhJZa%p>h)(Um)%0m3005x+@4Sunmg8Cu-d?nOjq8?tazOb8yCD+Jz61`nc$^xMg~7 zoN(k;N3bIUu&@R3vfuf`AAFa}+2W{tV$E+|sdhC#ezzrT{B#8PFe&!KI(%&Ol7NgF zx}Jb}xbL;G84LA1%qfzKwO$ml1G270k)c-1Z9|%d#-HRY#<4kmz#a6kNT|wVa7)D} z5JMcgZ_~NMqvKB$Gq*5x$O{P>Dx`xrf4mz~sSp|MM&V8C#zr`g(c&N3U3)oAum4n} zS1$TnGTuvX!la%aKT6d0h@5)@d0kmM(s9wGLDh7D?ZT$R#S90FTFMNrW7$e73)2G3 zmNNBB$C5e%;MKRBrrWn>F;PERfS5vc>@Gw&Nb-T)y&99Dog~rat_n2QaBlu7x)w5! z$iQ^9jc$%DhkEs&*f|x?xE4tUQ27{)m7T4HiekC=$T3O-B=JbBQr!{^i_i@dg+NHD zNyOzdJRtG`Iu$S#+gVb_s}+>s!?tHEV+O5^W=?{9CJ3d{6RkUcise15H$-wNjxjb;4i`-b9(*H2tS%Q z>!3;s)C!@0oGq5$4vrTg0;VmUS$2!u+Y^xYT>mC-h6Ff8p?~K#_oL0l6`XgE@uuZn)n&C@l z{9CjWW`s`8YOY_ZX{T`o-s@YAuJ5Z$zBR;+pu>#)$Zp^AiT-US+*MinIi*0ONNZ3o1&_WGTZYs}(cFZGGkqp84dnns<_fUr@kmtn( zM92<7v!icDp}Lz8M^~`&nJ(ZfOqK72~*W;Az5%opC2bNKvZBh|C+eG2k??k023$ z7SyORoK_>eMVdUx-S$k&Cd83`+T zUB8lSCe_vPtEA^R*K`IAXf$HpW^*(>9?*EksJr>vEDP$O>kpK4pT}+AJ3!O*=h_~m zD~_)1Fi5KyZgsr$NvS%o4GZ@iXuJVOkq@b^TrHa&V4k#CGzMYzNEyg@&9SK4(qu^O z4p_52N3>{z@@P{21MZ-s64PB(-l8D0N%ryT6^5uk-l6 zzn(L6eW`uB+PwvWe50*7yr?q~MWa81DGJBvl2#Nt=Skb4ef_=6%3ur}CCFC)2Y(v3HK$x8X`2PdG!L&3n``JsT3*#hJypX>$y9?by-96R`Gox(aOpH=PPoP}Ws5urWT2x=;m zxm>DN2**hog;<6(i!SY_0)-7p{lWm2d^esGvp^3e{02}jDMb50PLrGFJ9$p2W&n%c zm-(5Y-z4-{>lc?8=ezAf8(bkW4&^+jyQiISY$;se2v@(_rHtz}=N!{@DOWErl8TFj zA+$)!bXt3$(5Cc4jA6Ntt);)C?R90mo2~g+fQYUT_SKKV_0H6^1M6a8_PbkJJwHDM zZfXu#kRt}8u~1g8M=5c{vJjr0fNnuc}V%>NDuSN_@TjN6*udP-~0q z4~-$IGwt935`cQV>*U_zifX%4qTr$RAd&>DCMpS(Ra+sf+bz=T2{jAVVnb5I*C2u) zp%7{@*rZ%JLKzmMgy~bpMzt`i9 z-DCVqqs*8nEKNnWRb!?KKm6s2z(Vwzrm}RnV|vYTjvXd)LrC{u>frcs z&8U!=)m3`Wgp)&{+f0FwS2_s$IYdl-OSpS_aR(+{mLr+Knc{9@b9VB`4fVYMw_I>! zKPVJQk|Jn`7;M|J{C59!I&9J6*Cz0-e*J!NYt2YLFeuuHl}YY36|iIpE!0~4KiVPR zR@zLud!*dSft|dn|A=n(Rrmjrq{vu^#P|1QaAh&Efc!LuM+Mt$J> z!#eUwI?K(kA#A~u4-u)Cbr3*uil}^sZ+5(T*tG@bY$y}Cw%aGxHe?ZQPZgUD*zS$uZXC}NKD9U%&^t&?L+W<%}auv28HiShH}`<~9kh{A>} z1|dROwyQ*;kUa-?`%fDJ6bTquJL9gVzTS}F`a+d8=SUyT20+K+yl=nO2jVP{{A#Y% zEJZ~&zTi5?ucbjpN*xxa%`q>TU`Ul8h%lnfn8Yd|g(BO9)Ak1LdK4Zkv<+r(aJGwV zZANBm;;G_GPXyU~N1NiRju48>f&#NT%#(WskT{3AfSljAc51#dsGaZQQ{a^EYr{PY zhgu34&|u2wTB5>s>U-Omg?r@2@>B$$Hw)UDyDZEzB?^}5{IWp1IR!xgT$7B(okC|s zrT47D7`M@wMq(jA*$i>N_o7 zGst$8@R34h-RN=5&^Brtl_*;IX(1sVH#!zW@ zZC>vjgh0d;zDp*#o?b=7gmG7NIq-K(&oNRvz`sCV?)0Q_M?7#Q_EqVaQfsK>>vvz_ ze$EHN?sW#p*+9(1BvlVXy`Yj~%XLjF3nneBQeN_h$$?@LU4K~dX!@Kxwe>h=;CK>* z3Fc!WG~OG;{6`-#3roDFi!APqe1D|$#c9!ea^eVv8Y3mq^S@SVfnl193pJQDk;6;R zS8dXVV7f4=tIs{!_iXj&?8k|c@>VgzTaKuybDy!N*Z)^ifaYufTi2YrYjz9mJ z;5mTZ5KH#=||=%TKB6}SqD%)*`Pp zl3 zg^q|A(lk%W1A{@!MNwaEAx{ut!Ag`7X06LgczXSU)||Z2ouSwJ8$S=1+fHTwI$HH_;P_!^7NQAJm^?Fq~o znV)ql{;7{izNR1hFt9NXLkvc0K7gIZEjydB{z{TlAGOsicG<73XT}X?7Tmbl`-|(7R#gJUW%as_l+?D*3iQ~C3C~YQk6$=?h!iqLkZt_0_*xu72a6Jz4JF!aBB@- zUjT8Ov}Iqj{wB&Gl#7Gy-M;rxvK!J*n*+SfAZ}!ua5?sQ#m0MX!{T zKl)>>=JU)Y7Zou4Fnz#;Zd40b^Zm&cIch}W=BfBp53Q)+5x+^jJWA`cjSwjeYg4dR z9(eC-=x#YdWZo1ptX8UE;Kp}Gk}$C(DlSl(S(|yVjC;2jfPO-tv_8EL4VAtU+=z-{ zd95{naYlz!ZWg_jj{MJmvdGq&@lKG1u_6T`ix4}8woGrY0>#h-RZSoDQ~ttMbuB}^ zsCz-Yj|;ibymg&E2G02AlmTRTP!4#gg+QA>i11>ESSgc64E31B#;1aDGI-Vsg2mw8 zWE}YwQl?m4v*ferE~0~pYhg8~uK6x{%O zTK;Z7?+oC*@65aB%Bqd6mWyq#^M&<3Lt6e-pHVI_IkNa<3W4Pvsm5Ac$B}0;wT}(J z|1HIFo!10ukB{+vSoI`te|XCx+GD#=p`uIcaz_)>&ctvJ-A=^= z>Yt$w>t6ErL*af$NlPDK&AxVD*FQRn{AEhnesa`y!z8sj+sb_4-{*^UK;*ZjG0&l<}iuI0)4 zGrNc0j`?-tkkaP0&-eO1PnNOdytao((~gRia;}haEoH6oD^dlbpp#WO(6h3UylriK zYd!GRLV^_z*xXj2yh;wzU2zVZnh%htFpEMt50ohBmnB-zD-TdrOssR1^rJ|$F-Rxo zCv6B2BIMxh#E#4xwE^cs{Y}udmJ+|ssyht{UCG(#>zAdVZ(Xzp)|)dn-W$8xajwG( zZGl&|s~M4HuQkU9Lb##AzS-t0g*M@O$`GM?DopKNZKln@8K2EJzD^t^ zg{d)Jt6%I71V1&l67wAjJ7W}K4UR;=6XUHdOx+T25@HMQd6ARh7So`+pms}ZZ5+?C>D}KyA4H3d-r``B@!Ar)fh++s zAEe*m1*2f7&iTuqw@7a2+Ii+4rJ!M9Irk1Oylgx(D^A7C+JMe`0M8QYn8Kb1H1Dkr z(FhUMLUdyocY9blMgPep|C45wSi}>~z`0^H^ZyLW7_Ddb1S2lYhL)B<9)lSozAs3t zf{ht53WZQ_zm_}|0Q%v(yRMx$aP^c_P^efKs|Z}ASPD=ng!}o>TIv@^-L6a+Iv_kQ zqC2_XaTr!)O9Gg_2Azn9+mPT7xn3-^4b*ghU!79B2ITLJkT55dY%_eR4#^uvd0`0 zjO&4=wR2vH2yELSFG%t_0cXYOm(nkGZ6=v(g16rf&w!LGavu(M8ouZc0WDQ9QrdPY zJ}lSfJuC^r*Sk&2<*5*=VM>4#%AqO_?f{0NuK{ij9f?OQG)^U{ScrV6#L=88dP9Qi z3zf$F>hF=+bYN_;JkNUjb!j;V1-)F;npK$_XRw`3DE4lz)jRh93KS^Whnj8@)FHHn7!h|dR0!xCbyZsSV| zv5R=_I{Kcf8dqXh-4;tYaq3I|NnTL9JxspcmqB1_)S$j47I@O81z*dSo#%jI@r7IO zfQrqn+|L4|8lgD^_+ZVZV}&3LBduu_i4o+q4-b zMU67Ts21cz4g)HYc%n5iC_IUt9Lfnl4+z&y3YGl6`g~+o84aMG#yQ;AFMe~8@*nv2 z*4aM2?Y;4c!YuO%`igT9k!dNAPFsyj&{FKsVAh%u) z#7WE9zl!c8)y>$|OBXN@H1P)$N2Swwc#!U-_$x{nh%pr^$a z-MK+VZ6dZJN8@zCE#J?v;Iqz%*s-P~#K+{@YAPrg_Pnl3tBzvQhl8%CjA*l3O-TsY zLdy{ajINm=^Fq>j{YpC=a(Zy%f%*+au+p&Y{&@=11gO~q6t)77>c8zxEnt*Z`1~W zg9(-WroB~c%KgN{2#Q2)3fRbR#V-?8DYCU@z2C<_Y*63Z_)Ui=sPYxOi^Xv{A)*St zZei_9r%_Z$gvJH>i?&Rj);JA)&ri(h@muJaz8*jhfB9zIW1EdzoH*&4d^j) z*Xj-HuqKcnc`uBWif!ml#`RFhgsKu4%IFu3_qO$e1turq+@|?A8(H6M+?`m`a$!nr z8i1N1yq#I0=Kt1njUd62w>0a0d4k$*h%YTs>tb}H(8iN0E=0}Ft6d3PHuWq)h9w`5 zspIJzEBldA)yl-+!=4&FQxMi$VBUvQ{-r_3`3$u zd-MYZG1jZTw%Kr^%VPjfFdfT{#bkuPz8L9v82HsW;KAN&K;BDIuERJ1CK94P0*M1y zZ+l}ATfA_uuN`QDal{5Kuc;qW0R1Vd)kzt63KFYSj15WT&0z~Y63kSJ{=-B`9wqcM zGEeIND&pthuCxK_&kzCaIqTX^!ess;<4wN84P=F?ex9mH$OL@ znC}S)aydN`+Ul>={bD9fCF^|9GYW6^x88w6O?Mq1QnxRrXR*s3TX9U&4V~4oUdsC_ z3qzNLP4X<-I3Uye@9S{W&xHu+i0`ujAZrAzcFwxc(}4>W3Q%o~ns{!R~(&74r-iQ`eZI#in1fkHym(R@D;-i5aBTUNv-@w!7=&V1X^()Q2* z%3n-`-nlE25$wD*`%dMeYRKD&I)-aL0fw)Djq4gZBGA$0E?*b?NB?Ewc_6PX6>ag# zJ#GQg7M`={A*yjmk^IxNdw`4u=Rtn8^yT@m-96H8&yS{Qk~LZ*j(d^{@p(~QBg)Yt zEmON_fYcVHsHO`CSb0Y<48k}Chf*pOH694KdO^%|>pHX>tH5f3LXH9-=H$+0r(pWPEKZ90|Dn&xF z5X`V2ivX!iFlB7~)~v50E7PI(uln7Ct(H?^>R4 zujk6r*tSV4xZS^h{b~^k^J^1+K{jHNi?oA)zaa|`$3VvIb>l{K| z$5VO#=yT*Prjd&F==lht#&S-{$Al^O(Y^}X?Es}F{T&Tb55AioQDoH>J!#e%Sln{j zM^Is}?{vTP^Z85W%?=jnTq`+DoVpVyMxAicMGWZXtYESV(IEA*4nvUy`TC)Of^MKx zi5tO<34L%ds{KXuzL@+sxd+sqVL1xzy;$|VJtDpTUguV{$%N%|iOX9iXFZy$tFp|ZYEuc4! zz1EKX!mDLnZhV(CIb@iwr^4MbVCT>RLFS^sBqoPT07Ti4qvuu_9K%1rGmS{X!kI5(RNHoz@8<<+D{bF(EK?o<>XJ&}S57qtBFj~tODRh>Lc00OToEV4A z>yInlhP3Hja8?a^$VB_ANbyP6 z5exvi6#RR$x3GkNnzl3>hF%f2P2m|a<+?9w>o+hLOdG&jk#K0Nb*{-QEGbx>KS|{= z(RFcpU2r4eAg@A9Pm>3a=Ds}f!wH5LvyFPkAbYg53=__nT7%dc>>D|}lX2Z~g5q=@ zq6LEl$Y_?3nFBgrAZiCm3x_ap^_b>Wrm;2>dRp7UGx(ven*ku_{%C9=>skJJi<4k) zp9n(eMy5RtJJ6zT1scnCO z{IGIu_TcJQ=^N56?LkmouY1;UFRp$Tiw=IFP4AVP51_GpobP3?j|29H3vG^wFSVJ| z6LKnW^JcGmlk_DJAc5m1Pa_>M#Rq|0iECc#Kp{b0Hakk}YV|ecj&LNkhM>^z1>&_1 z5_2~_i)Y+OJJA^!)6|kX;y#`7pL&;@<;}41#1AQ~cGo!E-|zOiGaon}0e;e+`WYhe z3W!F|?U%v`Z0ikje39>lXE`rVk}(_8Z3yr865qeImLK2q1Y6Iz{J}15nUasV6xcnN z)}tdSSDSR|uzSX|(zxeMIuD-_w-M%-qeSM-29D9^}P=2rt3a zUm*q@7~vvBx0*m>Lzikrhg@Ihp5;7T)Uh}jFeBSLKTN~AFRF~MtFHlxR8PlDL#9mO znCs5g&Hk&*Sq!dO^H+vzn+nzj30chh1*Zk^P=!`s%i}8?0f!<7{|24ES8UG`)L+d6 z@VscP+IR6J6u*`re}tmC4h0@euftZHQzvZSyQ%p>*&|bs6QtCh3(J${w53hs zs|>!MmA~HkKrjeudW;Ba-17+5hLd?#sS`z)$LQK`CHtr1fUT+LT7}rT90Rihu$ywJ z(1zhkpb634nEG*u(Nq0DwDu4`d=+VD{0ZUIrihJP?&|&JFJXc0CHA83F%1D)n&Zv> z(eG!o%}D7M7TSO!TWbk(moOplJ`}YF-qFTqsa_IM^#en2oJ=?>y`$}=YuE;z!p4b7 ziOYtWF;NEyme-4Rlivckh-?=c9mVc8369QPr0Bt7TPQR$_$=NkwvAg>Big0OQ({Bi zwUNLk11W9cGXj8yaYG`u(YO!aq|C>gn5>b zez&H6G+CpOdHnuoh@5)@WIRku?^JOM@vqv4&rr#Waj26?l+gVI@vXx#v&b2kG=)`p zy)z(o>F^=%ka>lP1Q&$L3IodZc=2`T-sn8>{eWcM6m3CSi9VZJkyu*b82$iLB%VOW z^V?!42WqUp2lB_v7rmk7CED5bXLsN%jRXuKt%uiKDhG>y2j`2vt_cN01Ojapnw!M} z*zC77+=swcrf&?xFGoY)5X->#2n9BGUAE?y`Ftp<#mlrdF>IeweQh_48e@>gV!2aj zQ!@|B_Vbt7c%0pnziZs^I+k9dcP{UxI0H9&s2MK-%reAw)G9> zy&A|~2V+k*E8{nTa;L{)i!z5D{+|nl#ewIe$NyFF`6hH^e;4u9VGCr?F4!*#BNcgN zrSL>OuT$3g7D8poNRUqtQ+$8`X+W00Ju_nIer+G3QB5%jY%@qp+djdeP2&+F1Y#A5 z<~<0cfVLK#+jN7mimN&8$CSbbvk~OR0z2z6@tYci(~!{BIQvs(QOfJ_8N6zLT{4Lx zTZ_aEyt&yrW~@3o2PeMJ_R#V1TDO=+5uLnm^S%GJDb9{5U5jzKp-cIrm@$^4u>kbK z7oN!sRO=-RW2Sh76d3@0HC83sJm-q^Ty(B=p|rRNL%%9;A0jfEWU6NpFu?yQ(uVkP_sXX{E#a+S z>wKUW-ni3eht)otTX8yQ=a9mlcQSK(yWUms&{&XWe!~zscPJ|%0s&w+apwtc^sVd) zBYT(#Z#TB&HpJ+VeL8?4b*|}Dk3h1k4HL%(r~G){SoFNH{upV1C0Zs`V ziC2pb6v+|z6LaTrBA^}Zc-Drb-qwX$yO-?|W-I7DMJMC>VWJ`r1}=?{oMohPNZ~iP z?EqN^_8%B`vsm%{{SMapdeGKUg{pU2|7iTX)9>K;P}Ep17yy$7#NJ-s%K!wlw2c_; z3DeGepy{PdS3at4P^=3ZNwY$w`ww%!g=13<9P6O$vw|?(RO~zp{O}Ef0hu=KZrVmH6k$%H(5z<|cczE1z2umV7cL#D z5Q)3$tX|pv)#Us=gnHikP^NSI06@C;73b7hkh?UV7>NQPswO@`7# zPR+i|CzAOcZ_){1B2tTKqhDlPKVNVL6x!@z5h6UBoy*N85xC~nxD^OeX!sk z=_g-e$Y%dky7`B-_vW4WGpIgEP8Bl_s`yCk1RO0lo0fpaB9=E^RKY8d*uwaN{%oMI z0dohQb75hnFdyJ}z)<&1*BU|nqEM+H)7haOi9}a@-G$R5p}f~@d}=+WRQ`WSnb#W> z-d=#aNEQlPpf$75*0TzKUN#GDmj&4Q+nRfJ1`mDkVX|v_pdk+T#;X?E)V>btykVoz zrYPil%3)rA|Gca1yKI!~ylXq?*qSvU2y05m&a;pLlbf3Ek3WnSmBM^QX>u)n$DJf0 zo-aTOtd>|lRN*z&rYJ)Ep{W4u-R;QBZDVi7^+ACP^6qVW}F7foY~%& z;GY-=kH}%TwjXee!lM!Y=@lMBbfusM{o+6t*0)%ur^o&u{VtLj{bQsa{v26YXa&{p z$lxC$ig{E}Jw*gD6sh9dEXs#&G)I_9jVNqBJuZd%2ZR||fZ44b>T{6qt`gd#q@&R; zAXJ!G#VAoJ#WfhafmDeYBPmq&|H_TMOxwu^g1Ce%5h((PM$>BSlruLw^kqZI8`Ooo zkgZECs$e8P*{Z{gvtjB)xA#K`aA=JpgJC_SYN5@w##b!k3*Zu|v?$bi%Awxxq9_1` z!wGaO7EvUW{%_~``yyXd3f|QQ<~$eGv!um}-EB&vFLBu@v_a~Lgxbw}&DM!uXx5-F zuh|A>eH#@#+NzCjNCbs)3YMK5k$4@KN>!()T|7$U@IL*{w?V}ID!bJyM*O-@kxMMZ z@>-)LbcQ0+mMazywfU+1`dbKzNp`HB#@PmkWo2}{4`4moyOn}NXOG1mCkh+Sdbf=R zu8n8BrseYKv0A!!z#y3|u^?P%^KnjmZ1fw7TIn5LTQ=XX zaFL;FdepMLzY1;FpM>sYTQq*VBA4dPLK{?6iD2eg(TkN?)4rT^J)x_D^reY}ay3;i zKhnv^uex0r0C6cNJ_|DiJ@nK(t_e*-syH_=i%sp%%J_5Fam>gTTQj#YZ4=*rIxoCW zYlE3RI6k7Sr9t93CaGR{W7pF}zKhq^nB=2WCo_L3P`tbIh_gx*Tl7We^M46&$E1@= zHu=yo9UM3+@^)nZU+7oFM6ON8oszkK8=^KBtSLzNN8_c<7xG2P;C+hB1LsnpKj&2$ z2~<4esa#WOZf?(x6D=19F_k-%wIS*PfUaUuoCyiprsjDkRY z-fu;5)eXkX)%7@Mrqr!d-Me{Nmz>*Q9{XM**+~}MFuJ1T3(d{97p_8U+wW%k#^49+ z@ML`Z#Jya^n#EkvVh3kDVvIf-6T}zh>bu(P0*gJ+U|39HLUm2Z*MYx-h2vGfZXfHr zVSzR8$Kb7>8jM?;-U@LZG$_H-{Ru*(u$V-LpkF!Sf`tT!!F8O(UAILuPBD;D8boIJ z63}>kjo!f^5tPFErBJwZrxa|}dYqJ}|1<4Z9? zQb}$sQ0_-5M_j1+W;@qo2dlpCtu?eYAEek9ru14^UO$A;(}xkLP8I3`J!H?d-FKqV z`%i~XYPYx08M*stj>xLefxdM^tJ)$Q_iv>_lRAs$Fh=p zN*sBeXLDJ#&5hVjH^!h=ZL~z`E;UHHNB_KF2d``AP~vTXG4K{{aGu3V*1# zU+8-?eBu*OJz<~g&GrGZ;L2m3FNKX~Mx4x>LzqEp#PUQ+?vi>5D99vsMrJdPga`z= zYClVJPVA-xmS5<~T^B0%L&Tv{T-(hLLO6TV%T(MOf7)7KJn=+WLk$j4kAcBUZzQuW>|7Cr#A1f@L zi0IeA%@Xm=o;J^2UGNYS7TVUsq=iRJajWP+Oy4~L&s$wHL_q9P;T6I>jXI7p!$EyE zbQ{uVT@u+Md$`rye(B!Ud$C#-_P<#It9XYbm?W{66M4_Bt3QtLy1SLSEe6d8KonBc z^Nb9|?!%KJQ4Bns|7Jk6b?DBKoqSlHou4SUk%GSz>vv{7v(*$^i11KIxM4x$iHv&^ zELo1}(>ig+muHB?t0&Z5p*Lk}M?Xr$uIxh;scq!oAwi;K`^@W2u4UczEW(T1Iv^LL z&0BEX(_cjt^Z&M<$)}nr(3&`i^Nq{7aot8hQ~Qh>jz~)DL&>sx$j7n6?9r66Y>Y^~ z%quHBoNj>bMizF32@&#@@5_zgPvJl|5rz=#0;QVMm_PL~P+Oc3p@RsTQZj_KC4xT(NtYFgGti zEVok_6Wlw;$0@W}XnSkh0#2^SW6vekfzRcSLl;gdpd_x0VoxGX<+iz!C$iXPW8oul zK_3Xbbk*(WWKUa%#&%~#D7z@1tBR8+S7ll*c+rg<&Ab-v33*= zvIR8YYi%T5p!`PgvH37q+$4kO+A)`0}koopM-ZcFC9ZOhp)rK>=FmnDe#RV=o-g*HkwF{r!fvhZRL()$>la4jh0?7e7rC$)NEQ7>sQp}hG@Is z#!L`{-spa4lJ|SEW3DZ=RRPa{K&kl5YzkDJ2w-*5(5FJ`wH_$z%g(y{1W|DBDxuFn zKDPY+HwEG!Jx_9(<=1jbwWgK@6frPqe<$S*D{|6A+V#L}g;Wldod2ys1_*465o8v% zHf`YPGbyxlpwHoJK^Kem69;M#2*>j_3A%*cn6tF2K&ntJ=qKW@?FkjG+ZOs^&2>e; z8t)VTDYZKf3E?2y$O7#Y*6zPcGo;;7aYg7$3XIx8<+w5ZiXdO(A#I@GWZ>DlE^5|A z9|H#CkAvVK>$p#`$SN!h(c%S8W8ZTXRtoxNpC`;&k}R>vSi2R1bjraMlPFXJ1~%@8 zJMc>}X?q@wy;~XZem|@u0v}XMZfJWOyVT50=><1{`;Pa{Z*?h zf+y_%m4W>fY0nb5kcNYdnfZp~YhN%atQGmUlT11C1Vf~h0z}$SZ-IGjlvm#)Ykj8j z0dw0EKF3btF5tna0``xE1gkgLN(Qe!mo`=4*cBsKiWdY|4jSwSxQ?f3ipgG7uy_Ev zk;KUuyr=X}eiW2Yai`y3o=)|M@zTwo-XT%LFcQaony=e%g|W^imbl`T}U=IuYGDUpy3dkEsf*qH#HyfsuP#CV8O9 zgUTM3FNAXK&3)k+AL1e;oLznxv!#|3+^ljA zSqq(3By%2-(VkwfO3F4w5h`zqEQ@m-DRAU;4t$EpxTjViro=Px`<3RYd_`C6f8jXx z<}aM34s4L-&k3S6exse6JYoLRA$x)-BQrLK%bfpABq-T#3LbFzT#scu6&8Iq*T}qa z+A7#;i&#+;DRw+YG`-{%Gn}I_HH3^fl5&A7O# zkWgAQR8kMM6W2Pa`gy#}rHw@i%8AfLT7*gI$JW{@_sV^4-o^(^%ZBSe4i=_fC@R}) zYyASsb*@}+g&bZHGGUQ#)QoaQf2~cFaAI#{{thDJ)oN=_n`=O6>&;I=>)xYK7IwTw zQLG*||6^n=`=Qb`$>c0k=J11&Jc>ri_L^9djChW18;LP{Fj038u3L7z)2vKd%3^O2 zRWYIR1*&pFd{rWir3E~XeQF%Yz3GCH$}GSj%z|)fbDi9spMFNNF@JD={cYc|rZ?YL z<~!K9?6-KK@I>ryA5Vh>5P!5}1$0)3cx~oSY|O8Zf@{MyBHmjuddGUl4VX34D$)elVI;z;#-sScr(e>wbv8*)9 zdX${((w1=_qIu&5gXAEeFT9OCLu+#Z?#+|3Tt#`FY4mjd{1=J9_9*sM*?)wQwo9Tw zflNU$&q$lEEoiIJ@!U87_)NZ%(?n*|6TaN15z%S_G&UN$8*qL=!`{(0AJEjU1@3Di)PlY!hQ{JrIVw+^fI<+>E~<>x zd2MqE8)a#_H~#PUv{5bZxr(X=;sNO*z}`I~2-+b1x^};>Ejz@8D57h&t*&`bSSwG~Y}GttNH}^tL?vHx8{CI)`)? zRPKb%lU#7%>UtasC2B-foYz>-Z$)CPBvN3;6e6GnFR;D!uZK^1he_!A8{Pit^O)-#C!;=g?F^Zom)h3{7dDW60DKVQ)32>qCNu{4Jk0mp3Vig^g*<* z;Yi_Ja5Q0Dm8#-9O2S12%!TesDAxGH;a3#fZeK-&{kdWatm36HSH>eAB62(k%*gpw zNm7Z)2rA5*g6naGgz)y#D)$2l;DP1aH?JN7NEAV})#PH z^Xdv7FDe+by&LKqjz8PyfAkwDQ9{7ME>J58k<$=gd&t*4K*v!ZC`R-K)g2P(-FO|h zG~Irhb`Itx8)_?(s}&m?v^6Gh$pTR+TB<8;6@1uYcd9T;>Bd6*6GB_vq7h$hrAb2> zH<+&O0X`RZhj;H6K}S7=oh6=JGswMdEf~`;HZM|C)qClVRqXrg;oJ2;%8>4h+_Rh` zq_bR9Py(m%e9aXRdffMpA+?q;-KB2$+ovYf0I3!$&HjUfQ|doc;OSM*{rhh(z9ls5 z?y?#8aa=4*iaBv=ZcLWSpgh7ifSEHYa}`VHjt0V%Wz#xTz+xt)8E6M{03rG4=p{ii z6&`z+8*eg-ZU@4HxkA!5F$au;7?Zw1FmDNvf%}hur2upA&yJIJ;PZA>;-EaWa|Oj~ z)Q3wYdyAd)8j2R_*gGf-AV*ylu64wbaL+MoJRPJfoL4LTpm?x7uPhN zaWwn!cmNkqfW`;xAcjC+j=N0iWkT6sDO3)ckcP!m3bPxJx%Sc-2bW|nJqT*7iXuY7$1vTouH|~0(aAp z&yJAJlH076MQ_%TVgkL3P0;#wdu)2?xUZpAicGU7DWn_n4RE5+Hd$YMwF8pQc>z_L zGYjNv5?v*r&4a0$3!tM|>L`(yQ@BSM81aqhgjFuM_4i+AF#z%1xM!5beDa4XmvJP3 z_hP7EBXFAFHDSpWBsQ~mb4fMvr>Qr?`tu~mXWYz%H!f|R&^LW(!7%Lro^jLkQ_?5K z&Gv$fd%i%5P3)x7n?A?q0Mhq6U*=~8CD$(n_9Mi5_?w8t#Wg(3`T4%N`+*e48hbce z;~z!lbCLUqrNc(3$g5i+mGv1vlK2l8rUD0H7e&*cIqYc7CsT?vh$mw}IIHxf`jpnl zKpG7pBO!qaZuRZ`tk{i@8kgillwdBI!s_EH;Xqz*bo6zN=ZB88D@c=1x!!zfHYywI z>i4tprRjCDsTwo3eoA;w*`iaVUTzVE4Iv{Tfhm;xM)GzqN^WdGXhJ!`a#yDE8hJl- zch@&q6v~I*QY*+?^veQHZ#=10zgnuzcJtQdcF7dzo?T0cT*ci!GpH9%;A=B{Q`N%2 zq{LPQQD|$e_Jarm693q&uCH327;=L2)rVF$3JskLN6fQc1`O4X=7kbdxrQGsSWG^p z6IUVt8SAIauDGw<(AZfEf5*%bD{ybj!3h)f!gZY#A--MgtI7$|@>hw=fpFzqqP5{J zk`jQj?I9y0wPk#UXiyTX^n2MXX6e6!ubT6{C?r)0hRY&LwJe$+$S z(f(D+Hd==RKY;yW$v0*5UmtNb9 zP6yuMSHc-rls{Jumd=h9zwI8_eP5OwlaRi~0I*Wyt{7X7zIX@NT6G`zljQbab!qOg zp9h#xImv4C;N{m{XP|U~L45)9EEgA%MRINL87$w*g;Sg_bH>hoyTy7_z!nEpTze;S z%QVCGl>ML)?eP>s$~a#`V;_j&G0YN)SAN?aS3f|sTqw3Lr^rC*0W+1Pi|?Y)~;8JOjh3RF=FR8Ec+nKy1@Q3?~@?%$Pj`;poyC}HCM1UVOr4du2U zhom{68FYYb$*<*$QjXZY-;X%c}8*QqlGpuaQmmK z$&+A!7>LaZ;vhq)t^;`;^fwA^syaWFPKWlcilqx}DJ36JEg}{0L)8Sf9~WgaCZ!p` zsgNy0ng(6{<^>x!W(mi4*VK#pinq==$rZ|=sVSyM@;dU{5Oz|^5+uXIp>8ZbO&%yl zj@fmHtcLM?(lpfnbO-}pBIHaaM=i{e$QZR8Jv2~RHzL}O&p(<-i{ptgJ3a0TxJ(3V z3b%IL8QSF6EP5qNGS_8Q{KI6`7_Mi=gZ`1)(ghbhg;K`O0V4IX03iFjO5lvV^-~Ho zT}6{V1UWip_we7| zy;<*OYpwq7i}B#7Yyd|h_kstZ-@%!ansFHMlv+DpXzOoGzt}`VV{SFiqFcoj-#lN0 z?(ri8ZH5i|9%FQfsrNP>aRYZ;9y(}GA0gd%8yGwZD-tDVs_sMvPiSJ#*ujC6s{Izw0FzGjYtaef#rH8Yp){= z9k&}$w5geLrt>_Jb6C%|6Qo&$hWoSwmO(8PT4mY+S?drvcU~iIna`uNGQ_s} z1Opr&Hwqif#-dcqbT>~^tVq2s!Wj)oeUD49WZr>MCTeXf5o@0>C-WsgzgCfC5HDC$Z;3^jA=39DhA!IzyX$K(#jv z#(OI4lT3JxuZX_yzngk1zH{O^vfMHKJnTO$cX3h4Y<9%DFLH)xdZ{TpZIn^nunxh2 zHYp=)1IWuGgcnI-%dl^BL?l$)j(f|*CxLObDjNpM;uL%-%~2BSQU< zySt^90vc2xztb|Os=B2z$YOR3Ct+MWW98uZ6M?C(yqQ;IX< z+a~aM7Zkj%xI(&kLd^&1ZnL3mkDjM>txq}i5Z7956HDN%F!`os?fBal&WT)HNIO(2 z1|PAVApQ*E)Je`&VzD0A#QMVrLf${qOA78IIyU}VQb&o7(4D$EZ{S-6zKBjP#yd8& zK3Foc?Jp;NrNVWdC;9wnY%Iv_0BJD1>4(OT%FGY>Fi99EOEg&&M0tILXnIL1Vx4g% zH#$@dC!|1ibPjR?#exnRLPkOY7u@P6+q}|7)K2Cbg&g)uSq#tz+RY)_Nsn9(U(c9k zE`d>tCbAR5FYc3yeqB;K@xdBjEJ&$@XdWSZr6wo>scxG-2m|2A@Rz41&pLnuf;beZT`UPyBYv86z-3f(!%d& zx@4Iq(WDqV7}64{VHJ&Yy-n$?S@7iT&lln>QicO2?lr$ZN(A!AY1_4PiU{PRef}Ym znJhE-6!vFGJ_{7~#iCh@9JpUXRA!#`L0jjh;G#hGz2AI}gxh(0vj3yamR9dKI|_y~ zEkx>F!C6`}pC)Rln$^nn#B4s}!?JL>WOg*);+ZTtWW zb?CBg$6*$O5TULJVbB{NQuJS`1;cJ#IF`V40PHyo5BIGkx34?tF_yXOW7SU-A|ZiU z%pPTJrPLRkQ@=#oEQ_0iNpHndvC~w_IpQo+q&EviIZl`d+Q#D(MYmGnyJ-OAppXCg zoH@I5*d%hAguzGsND>*>TI1y}e`_2U>KY2t+n>42tCckqA182_z=WX%a1{PpKa zu4SZOlbo1zzbUop)AP4ewEp~veRGvCGNx9fRPX+R{+S>gA?gXGi`1% z`mo;Hu|k_TFjqE+>-SN$^kLOiaWG?ZBv*AJB3%M~-wKfNo3`p2Z3t(Z+akw{ctF^7Mipbh{8^#{-;Q;xY`?-Bx zc~zzY(8a4%utw>z(F=)+Je1U;NkW$#UKRI*eT1I$?OBpJJjjWNd~g_R8CeTT``z){ ztO*>Y*(_f>mO&6&CP>QmV-y~6iy#Wmi&O}+;X$aFE(mRo2u&}?h|C*Lk}y0J&QRR$ zE89$*h})_B({|8m3t>2AqFs#rUj!}Zi^<9@n5Vyf;18bq9c+9dTQr7*@rwnfZs<+B z-oaDbw%!Mt>KDIZGt~`JWE-}u5J^ObI%LCz!e}hhjDbq@5<}Z@3WyBQI=^}yQ zsZLBXwfvFCjhAr*=v3r6kRztLT&%!iQ7mc%hBcpw)oSq@ZzE>+_ImXYilHeui*LCo z!GvAw8Kf6DtfB>O_R>7ksnt$0#4Es1So|Z`8nN}ExAQrx5&_MMabU^+aUy^@57TI* z`+<2etsQ??uJbwm+lgA8u%q&G^a&e#gw7;ufdO=!ld`tn`~^WXiPDVrNPpG13W@o< zos2am@(n&*K1iUe5J*9SB7vh`0E*#rb<rp3)lH#^ zsco7%hLbQ}np*;JDq_mFwj_Zee-fR?L=7p?EJtK_YLU2D@Jj!)F#gV2uC7Cg!M7e9 z8?`|bL?4Z47YY{L6qufefhirgsGF)XiL2hU)y{=@g2-+nzQbhB7|p+q)L|lz`J#I+ zvgDIL+AtK=1;I*+8C~DTcg3;a9Ob`}yv)^ja-8ItagyUJ0< z%vOGfozVFQKrYwE=PW+aw)26`<&^o(X21aKLpm0q@heZx5E)bcD^z^H?iAXp+rjHy zNCklV-E8;Yoc`N(QOMWlnYc>q^xL#XnL^wApm6&F46wFmgcQ2ll%^B!6m1 z)5~$9u)%CBN?~*ii-rBfhd?*NlMu%y-ia8U`uHOqSS%nFs;~iMnzvae$otN=uZsa3 zbi*Uhw}JI=t}VGC@jVNvuql|%Z>|Ph-&Jus828P!;g4CDm2{2S|DLFt&4mO;pU52Pf@}0Y+rBcSMOCnT{yhMSBSz9a^W7$qV}lz#i!{J7b-Sq5F)kV0aQ>-j#`V<9rV!mQOL-j$mR%(e)2c zG`Ypl=qtM}a5BpU-{aCv{nF-nBulB-B)|2jmz)VzW+OS>OG>ZO)%&hnxelKY;OxEA z%~V{eCHkY_-c2c_MW0f!uyIU?%e_#tHb+GFV=E}^?akhIkAZ6k=s30xaY;9MUh}J? zm^jIYb#JrHeDco$O0P$tO)b8q85Rr_Hr(X2#~zV#vuK?dY{xEMA~XO7$THw$2;WLH z?RL8&Q5@SUk#WtPY0dmWhNh_ezfkE|=fvCkaaM%*e@@9Cm?Y(u8~JV{QDY-bR^lWa zltjUOQvLsx%rm+v5CJ?x6msQzOP%Ko?_+5amPF4Gsh0&1Ek@*Oq@W5^f=JjWp|IsL zvpddTr^xJ*I|!jr&P5baSY2Rwm~uDS8t zooD0MxSgIgM?ATZ)q_>p4BZ>M4T$#I=si?u8$vy!OQ8fW1e`3iU3ekrdTcbk1>>3y z|LVfDUFw{XpnNPGoaV%1Q1H`~KG!iUl+ri`_|-2GNAd%4Qm0D7aii;jqzI6Fj&uYs zM_0j~iL=6sdcy|p14OVyDo2^f-BE1z)9{zJ!vxeDKaG*>1z>LltabktGTF<@@-P=Xn%e_FrmyYKd z=0FK&f#s3zk?Q~+M+=0&;ly0hP7PhPxw}?D9%%cyw6W#e^pvYhbbeKZEGs${+;xF4 zJ7m1BlCUcbs>cp&6FI!}T1Z&{|MWx4sdEK991e`E{zhWp8p3=1BmMhF|0p1yoBW96 zDpZVk_YaZmn=jd#-+RKq3kS(C<|j!pxO*7RDjmR%{kbq!#6D#ZTn-n zyf5;r*4_9H0dW1d)XStjuR6>QfNW_PffR&OiLjb72`U1402){bAUC~T98~6_ZZd_Q zC%J}rVsZ&^I@2wT_RISJkA5X-+iqm)QvE#iqvZGT#U)VsmQijkHDLaCK=iSgD_zD8 zdj()evc}9)87`q%KDYybXU4`gVKjt{1JW&75Gl|VzaK5z0Kh&Q(%sSuPPYp6-!}bmRxA%SH?LMK3 zQz41VDo%B-wPVGg3zme{B&K`VcA2Xvd{9$DHJhqu*ls+eKXFXr1T3WJ63E0*1h90! zQa=_a7s8oOHBrJmkQ=K93T~4bVsoJQ9|`kykK>{3ZwhOnYa>H}A31wSHc$$o9ax@aO|!!->E)t+|IPF#W2S{2vnEgEZy3wd5GfDM0JxZqEEP z`A3ge1jmkB*NE;L79@(A^YquSa@W<-!^(^S1u3vm1>6@4hcLOG1Dbj+jyIuIQP9{Z1WuE4T3fkl!9PR0isQRN-HPmp71qE z*Bs!59POl+Lc0NOzdQSDsBzjXx+NieAOVJtg$I};S}ufb{(L@_9F`Bp{gE2&0D}5q zd9=={I~!L}c~pETd}rufO1+@0s*YE?+z66p!dq%IUSwX5B{hF~L~Hi3kSlTIW1vli zl8wKRv?t*zfuI2Lhht>M(6V64ti%&d<`U?Wb~sQjDAz zDQQsnNF1iPo|%2_TuMSyhD$qG0MV)3qa*9hshrwf6Hd-Yy8gh@V5?JLlginTD@B{3 zmk^UOJ~~=Ge2op!exa@1VC)6Ms1?~bOE(!u*LkC0nRp_0sAHU*Up<79B`sz<_OB-bu9165y*UTg^;)~<7<{XAZG>fUkX_4^S^wBCzc*r7;cfS8dT* z=iqDpaoMA%*EEzY=(gsk!Q(@yI3b_aHP9%z321@T%7nx}1>~^joINyIN#Z|41U2O6 zSIS?oliM*+>`*%sS%MpjSQdwToFlnI>-v@kXpSFGF584QCr~M^fkFbHlxUrqVS$bB zp{s=izVK#+AYBLZ(%(GH_X{vrv65R9z(|rEE1&%3(F>N|F@^Kt7Ib3*1xzA>q=afL zLw$QGyDxHaQE*ximr1}L|I*wMPMBtk#Fzbk=q+<$%4jPgkXx~+6CH(>NbNL{xamg> z=@04e@7rs@de++394M$`pbVH=)~*F6j~B7$-bTBVp>#TN9MWR4mBUuBn_@^+)RZlc zNL=NsmmduE&rviM6%6m*8%nDU;UWD0DCx&>Ezf63Qgu8l+N&b+09gmuYziH5g5R%~ zMnlE`-YZWdCxlZ32boFwMB)z1SsWC}s{>|&M$W)INcjnL@>suFL8Q|>Vh3P>#v+!- zB}}^9Q<`3uYZ#!NT8|QHU~JMoIyn)!2k;`5;3#Vv^bR(uKb<8i`X=|!3)?ENs#wwF zqF=?}+mT+ZSW%=BIO)fLLPdJBPaPbtkE?|p)4vTGOINC7%EFDG+jjvh2L{^yv#lL0EW zNlL~(sagYmgL~|^hyg}QTYeGn_TN2r=n={sLh|J-5ZE(^qLKw-_5A!kr z)UM4YJ_j~~PwM4y(w->3K~=+)+;c=1J4V#RTC|T(aAS<)hXYDT5Gz5ni{r$)7^huf zLIpkOC!R9|NhLYWTo}L54J608qzgMr3dOMp%+97g`6e_4iddmB2X>+W;Kv{sM?RT1 z*AgM0|6N5Je;BF75pxELnE+%33GXFhC-tr+6ITg)ySyNOkvKRqyABAWjGDPZ4U zds6RDTSNu9Cj zgFHb}Fa?8lEFSM)7o@`xCb%(&Lx?0{m|H!j6KjpUQrStgJ;B{9{*CWg+i~gZhRAR5 zC#@U=wuy9p8Z_FbM8>I^&?v-p)#ck!jujhyq3trtpE$gq;KzOxVeIK3ywy+Fb0}%j zqOOAOVJ=vFf*&hrHU)2C*io`gC8hSlX2}T*%0!6J8tCg`Z}_L4T6qhhWvrIQp8&KG#RbrAo*lqp}ySmClfhZMQD-2 z3ujg@1HDWT6?L->Br6A`*A-;8#eJgE)c_QqUmKDD4&C6QCFBMN?c@|ciK6k>kljqwl)~|kJ#7! zOpZ1aHpr!QgPkSk8~e9RjzR4k813E`Plx3~u@T+N1Xjdk3#?eyO0gK6XSHEVf~5 z5|=iLZ33vaLSsbAO)n>fiL9gxFq={X=BuB}Nd zGxFY~H9&7mvI>eAB~%iyAZDQl$+`C> z8;)#FlVJYAQ7jV|cHc3nn%Md1D1UtPak5H+!F@0U@i=xH_APem9c|x`lqo3540cMt zahFu|o#N5meC8KOC-?&eBlj$q2wr(UF*~%2wE&N+_dL6r_6lws-5t$jz8UG`NJ;~5 zPiXb%>F;op-hAWZ9ZJ}kSI+S_oKZzzv`E7?GX~^!P(y7^FN4Iul8S}@h%ufEnyDj! zs}XqKn}{DakGf4@dvCFm&CroCrv@Z1CGVs5h=p;M zc1YQ@KxJk{&B(*Y*OqqRou{|&YFRCbpAt{SCpp(?);dLMs@jrCPRn#{qA&Su8ONRb zsDsn87g-u`3}2ibI+Y?*dDBeH<-SvF8wCJ{u*sO;`QMJ80#08a}hS z!n#U_q~$ibugyvmYd%J#G%Pj_RH*Kr&sh?#h0>2if@#s_Fyp#RmH}o6*~-Q~c!7|w zc`^?ki2b99X;xX~nyYuGF(ItYTqn_Cvy&gu8v#h!X7w?aMrR zqHDj3DAjzxm`t*0B_I`a9JgpyE1? ziBekeM2|^(M&(hIE0tY9tSb;I7+^k=uL%cIoOW~$ewkWb+wkSLdy|I1PwQI}#2&25 zM@M%ysJrjvBJKsf4~5Ap1r#$>@!d8>Z)>Yx1DnaDTHMAi9-sQ7Bu>9ebB zGJps8uImTDdLNkA;`IKCbNogxW;zkFkh-K6@Ch7pAJ=&R_4!V{r((JhA zI!`3=1LPf&36zu68#eY*N8(!{)Sd!6(|B)P*Gs?|Ox_=jGV!EM{$E3hgQ^<8(rGU$ zUqr;9p;8amz}Zln zJa9LanDcGQ!b}q1ko3ywLgHAelc886o}Yj-Y;3elEOb*bHRhg3h7Dl2@A+jjhri4R zp{2yxk$!}hv^r{dJv^n~PimbM59G(mJT}gZD|K6Ku=8EC@(e-2d+%=6Y2}%ynQGEs zNYwH~V4LJoLMLm#qKi%g48Lp^Y?2Q*Q_Dz0 zBqr#mLLC+?NHTJ{x7Cke(K;R@lDA~BcA=fdO-zpq*gFzanqHP`3}DW)>u)rV14LNG zv7`4Z8Mz1MI4u{Rq#g}ObzelKF9@|>4~ih~#>9cseOCtw^rhIbG~2rATe1%(=Jlr?`L4FRrRmR4u)v$@niBK7Nt>$q!0{g-oBH=yv26&Q z$Q;Lx0N|lKv;M5{?^_E4$6l!;!ilvH!uAYlaelL$=Ho<4!;?j~0Z43;xJ55=VYWQ+ z^5oDmdV^Wi=gkX&MzJEVrzv}QrpJ_F@LbdOWSVNBH|de-jXX%aw8 zkM(*xpQW>8=WD`1dew9k$P~^UN}k9xUJC#uo3_%0Dj;&2-im&KO$h6Sw&Z{aNcCWq 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%0AJS9&agtg^J8ecUzJIT4v-4dX}?&0~yJ`x1f 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͓Wcnl#zGh5!}tvT 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 OXi0yP?Y~0zLo6i^6`We#jpv+IEQii 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%0DSw`_sq>v5J-Qf|F}ij4ENWT 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

    Zn@tFE& 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%0DhG`%KBC9jk3N#+^r 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%0D9Wv(eR;eH!n<;-q6$9J%NE-wB^6jocE>jCy? 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[-}L`2gMMOwO2E3@A~s9UtsP^y>)*JO(WUHX=#^bdj&vl zbuofUtPV%Mr&)my|E;=G%8mKy)( z(F&Czu^V4nhJ5Aoa&9oqNOV{i0+d@$}Amh6}A0e6X1IL%!hx7dIr4u1NRIUquI4Ge^Ge<+if!ALeZ3LoqS=HS;bxD zVE5?r2K#~~c~#YY7io2QKQ#sk>6If z@5DNQ`ow$ar9=it&ayvw5S1A?SL)0QLTHu$i@f#{V) z#}Q3lWhibCZAy--i2hqJP10g6Qxz4kTa|2^(xj3$sa!O^f67H#opLvciabpHJwR<^zUw z(D%}Y0+Hy&wVKS8<97E&mbJh<7U7BPV_KD2sRK8e*nMh+6ups2B-J%)g|rLNra9Lf zozcmbWSuCD@#LW=+dFaX?NqbB_{T39=!wf0_%)2ta?}Wx5FW0G2jCfv%fxM!9+;P% zI??YDZ9=pg(aVY6Mzk%_sHg&`bvwcCsl`166JN}yW7*Fbmgoyx^RrcN6$pL#*y`CmuZei z84yHVw~**Wq78_?Otco!HCSJd!@MNYIjAkCgK*I!hrR&&U zDoDu_gp@3MQOxdioPV}O^Md$PC1WVBanA_SPwbzhTz#n4-G76DMYQu{vGS+9Obh2zMURz6{_=}{I4qWil(a=`Pops;q%yT`_A0ZI z?@oyDMk5L(i!9$O*3!~PyoSnOc3|kXqyV(`)qAJxEe!r30dF!$59;PNlj%|5F@J|oqQpLg21lR zVL7R5ZieyuSsmk^ei>mod~0c34+@I2*6B`X*iVOF^1f_!vPh>Si#C=UM-d)ASR zw2IKN!|~0%L1?$eWmBERp34%J5r z*5p)9iG#CW2(6`$$0j2@s#L8B?9>Bx0}q>Q`tA7n>1>n>sEr~(5ugZA1SkR&0gAvY zCZMWbVrPl2=|m5j{?}CfE57=hdpXIQYdU2)Mc{uXa7BGu@)7Jzl+43jxNUjgMYt(| F_bWfyWO)Dp diff --git a/build/pyinstaller/macOS/darwin/Resources/conclusion.html b/build/pyinstaller/macOS/darwin/Resources/conclusion.html deleted file mode 100644 index b8e90473469..00000000000 --- a/build/pyinstaller/macOS/darwin/Resources/conclusion.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -

    - -
    -
    -
    Uninstall WSO2 API Manager
    -

    Run the following command to uninstall WSO2 API Manager.
    -
      $ sudo bash /Library/__PRODUCT__/__VERSION__/uninstall.sh
    -

    -
    -

    -

    Copyright © 2019 WSO2 Inc. All rights reserved. API Manager and its use subject to a license agreement and are also subject to copyright, trademark patent and/or other laws.

    -
    - - diff --git a/build/pyinstaller/macOS/darwin/Resources/uninstall.sh b/build/pyinstaller/macOS/darwin/Resources/uninstall.sh deleted file mode 100644 index 09e364e9019..00000000000 --- a/build/pyinstaller/macOS/darwin/Resources/uninstall.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -#Generate application uninstallers for macOS. - -#Parameters -DATE=`date +%Y-%m-%d` -TIME=`date +%H:%M:%S` -LOG_PREFIX="[$DATE $TIME]" - -#Functions -log_info() { - echo "${LOG_PREFIX}[INFO]" $1 -} - -log_warn() { - echo "${LOG_PREFIX}[WARN]" $1 -} - -log_error() { - echo "${LOG_PREFIX}[ERROR]" $1 -} - -#Check running user -if (( $EUID != 0 )); then - echo "Please run as root." - exit -fi - -echo "Welcome to Application Uninstaller" -echo "The following packages will be REMOVED:" -echo " __PRODUCT__-__VERSION__" -while true; do - read -p "Do you wish to continue [Y/n]?" answer - [[ $answer == "y" || $answer == "Y" || $answer == "" ]] && break - [[ $answer == "n" || $answer == "N" ]] && exit 0 - echo "Please answer with 'y' or 'n'" -done - - -#Need to replace these with install preparation script -VERSION=__VERSION__ -PRODUCT=__PRODUCT__ - -echo "Application uninstalling process started" -# remove link to shortcut file -find "/usr/local/bin/" -name "__PRODUCT__-__VERSION__" | xargs rm -if [ $? -eq 0 ] -then - echo "[1/3] [DONE] Successfully deleted shortcut links" -else - echo "[1/3] [ERROR] Could not delete shortcut links" >&2 -fi - -#forget from pkgutil -pkgutil --forget "org.$PRODUCT.$VERSION" > /dev/null 2>&1 -if [ $? -eq 0 ] -then - echo "[2/3] [DONE] Successfully deleted application informations" -else - echo "[2/3] [ERROR] Could not delete application informations" >&2 -fi - -#remove application source distribution -[ -e "/Library/${PRODUCT}/${VERSION}" ] && rm -rf "/Library/${PRODUCT}/${VERSION}" -if [ $? -eq 0 ] -then - echo "[3/3] [DONE] Successfully deleted application" -else - echo "[3/3] [ERROR] Could not delete application" >&2 -fi - -echo "Application uninstall process finished" -exit 0 diff --git a/build/pyinstaller/macOS/darwin/Resources/welcome.html b/build/pyinstaller/macOS/darwin/Resources/welcome.html deleted file mode 100644 index 393d21d1799..00000000000 --- a/build/pyinstaller/macOS/darwin/Resources/welcome.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - -
    -
    -

    OpenBB is a leading open source investment research software platform for accessing and analyzing financial market data. We represent millions of investors who want to leverage state-of-the-art data science and machine learning technologies to make sense of raw unrefined data. Our mission is to make investment research effective, powerful and accessible to everyone.

    -

    This installation procedure will install the OpenBB Terminal.

    -

    -
    - - diff --git a/build/pyinstaller/macOS/darwin/scripts/postinstall b/build/pyinstaller/macOS/darwin/scripts/postinstall deleted file mode 100644 index 8c3cbfc39d9..00000000000 --- a/build/pyinstaller/macOS/darwin/scripts/postinstall +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -exit 0 diff --git a/build/pyinstaller/macOS_package_assets/OpenBB Terminal/OpenBB Terminal b/build/pyinstaller/macOS_package_assets/OpenBB Terminal/OpenBB Terminal deleted file mode 100755 index 455e34ab2fb..00000000000 --- a/build/pyinstaller/macOS_package_assets/OpenBB Terminal/OpenBB Terminal +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -clear - -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -echo " _ _ _ " -echo " | | | (_) " -echo " | | ___ __ _ __| |_ _ __ __ _ " -echo " | | / _ \ / _\` |/ _\` | | '_ \ / _\` | " -echo " | |___| (_) | (_| | (_| | | | | | (_| |_ _ _ " -echo " |______\___/ \__,_|\__,_|_|_| |_|\__, (_|_|_)" -echo " __/ | " -echo " |___/ " - -BOOTUP_MESSAGE=" -The boot up process might take a while. Please be patient... - -OpenBB Terminal v3.2.5 will be the last version of this Terminal. - -To continue our mission of democratizing investment research, we are working on a new open-source CLI tool built on top of the OpenBB Platform that will soon be available to everyone for free on my.openbb.co. - -Join us on social media to be among the first to hear the news. - -Discord: openbb.co/discord -Twitter: openbb.co/twitter -LinkedIn: openbb.co/linkedin -" -echo "$BOOTUP_MESSAGE" - -"$SCRIPTDIR"/.OpenBB/OpenBBTerminal diff --git a/build/pyinstaller/macOS_package_assets/README.TXT b/build/pyinstaller/macOS_package_assets/README.TXT deleted file mode 100644 index a4911975f0c..00000000000 --- a/build/pyinstaller/macOS_package_assets/README.TXT +++ /dev/null @@ -1 +0,0 @@ -MOVE THE OpenBB Terminal FOLDER TO THE APPLICATIONS FOLDER diff --git a/build/pyinstaller/setup_icons.applescript b/build/pyinstaller/setup_icons.applescript deleted file mode 100644 index 8bbce2b5471..00000000000 --- a/build/pyinstaller/setup_icons.applescript +++ /dev/null @@ -1,20 +0,0 @@ -use framework "Foundation" -use framework "AppKit" -use scripting additions - --- Get script location -tell application "Finder" - set current_path to POSIX path of (container of (path to me) as alias) -end tell - --- Set OpenBB Terminal folder icon relative to script location -set sourcePath to current_path & "../../images/openbb_folder_icon.icns" -set destPath to current_path & "macOS_package_assets/OpenBB Terminal" -set imageData to (current application's NSImage's alloc()'s initWithContentsOfFile:sourcePath) -(current application's NSWorkspace's sharedWorkspace()'s setIcon:imageData forFile:destPath options:2) - --- Set OpenBB Terminal launcher icon relative to script location -set sourcePath to current_path & "../../images/openbb.icns" -set destPath to current_path & "macOS_package_assets/OpenBB Terminal/OpenBB Terminal" -set imageData to (current application's NSImage's alloc()'s initWithContentsOfFile:sourcePath) -(current application's NSWorkspace's sharedWorkspace()'s setIcon:imageData forFile:destPath options:2) diff --git a/build/pyinstaller/setup_icons_post.applescript b/build/pyinstaller/setup_icons_post.applescript deleted file mode 100644 index 73587aca012..00000000000 --- a/build/pyinstaller/setup_icons_post.applescript +++ /dev/null @@ -1,20 +0,0 @@ -use framework "Foundation" -use framework "AppKit" -use scripting additions - --- Get script location -tell application "Finder" - set current_path to POSIX path of (container of (path to me) as alias) -end tell - --- Set OpenBB Terminal launcher icon in folder relative to script location -set sourcePath to current_path & "../../images/openbb.icns" -set destPath to current_path & "../../DMG/OpenBB Terminal/.OpenBB/OpenBBTerminal" -set imageData to (current application's NSImage's alloc()'s initWithContentsOfFile:sourcePath) -(current application's NSWorkspace's sharedWorkspace()'s setIcon:imageData forFile:destPath options:2) - --- Set OpenBB pywry icon relative to script location -set sourcePath to current_path & "../../images/openbb.icns" -set destPath to current_path & "../../DMG/OpenBB Terminal/.OpenBB/pywry" -set imageData to (current application's NSImage's alloc()'s initWithContentsOfFile:sourcePath) -(current application's NSWorkspace's sharedWorkspace()'s setIcon:imageData forFile:destPath options:2) diff --git a/build/pyinstaller/terminal.spec b/build/pyinstaller/terminal.spec deleted file mode 100644 index 35d0b300995..00000000000 --- a/build/pyinstaller/terminal.spec +++ /dev/null @@ -1,217 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- # noqa -import os -from shutil import which -import subprocess -import sys -from pathlib import Path -import matplotlib - -import scipy -from dotenv import set_key -from PyInstaller.building.api import COLLECT, EXE, PYZ -from PyInstaller.building.build_main import Analysis -from PyInstaller.building.splash import Splash -from PyInstaller.compat import is_darwin, is_win - -from openbb_terminal.loggers import get_commit_hash - -NAME = "OpenBBTerminal" - -build_type = ( - os.getenv("OPENBB_BUILD_TYPE") if bool(os.getenv("OPENBB_BUILD_TYPE")) else "folder" -) -repo_path = Path(os.getcwd()).resolve() - -# Local python environment packages folder -venv_path = Path(sys.executable).parent.parent.resolve() - -# Check if we are running in a conda environment -if is_darwin: - pathex = os.path.join(os.path.dirname(os.__file__), "site-packages") -elif "site-packages" in list(venv_path.iterdir()): - pathex = str(venv_path / "site-packages") -else: - pathex = str(venv_path / "lib" / "site-packages") - -pathex = Path(pathex).resolve() - -# Removing unused ARM64 binary -binary_to_remove = pathex / "_scs_direct.cpython-39-darwin.so" -print("Removing ARM64 Binary: _scs_direct.cpython-39-darwin.so") -binary_to_remove.unlink(missing_ok=True) -build_assets_folder = repo_path / "build/pyinstaller" - -# Removing inspect hook -destination = pathex / "pyinstaller/hooks/rthooks/pyi_rth_inspect.py" -print("Replacing Pyinstaller Hook: pyi_rth_inspect.py") -source = build_assets_folder / "hooks/pyi_rth_inspect.py" -subprocess.run(["cp", str(source), str(destination)], check=True) - - -# Get latest commit -commit_hash = get_commit_hash() -default_env_file = build_assets_folder / ".env" -set_key(default_env_file, "OPENBB_LOGGING_COMMIT_HASH", str(commit_hash)) - -# Files that are explicitly pulled into the bundle -added_files = [ - (str(repo_path / "openbb_terminal"), "openbb_terminal"), - (str(repo_path / "openbb_terminal/core/plots"), "openbb_terminal/core/plots"), - (str(pathex / "property_cached"), "property_cached"), - (str(pathex / "user_agent"), "user_agent"), - (str(pathex / "vaderSentiment"), "vaderSentiment"), - (str(pathex / "prophet"), "prophet"), - (str(pathex / "whisper"), "whisper"), - (str(pathex / "transformers"), "transformers"), - (str(pathex / "linearmodels/datasets"), "./linearmodels/datasets"), - (str(pathex / "statsmodels/datasets"), "./statsmodels/datasets"), - (str(pathex / "debugpy/_vendored"), "./debugpy/_vendored"), - (".env", "."), - (str(pathex / "blib2to3/Grammar.txt"), "blib2to3"), - (str(pathex / "blib2to3/PatternGrammar.txt"), "blib2to3"), - (str(pathex / "streamlit"), "streamlit"), - (str(pathex / "altair"), "altair"), - (str(pathex / "pyarrow"), "pyarrow"), - (which("pywry"), "."), -] - -if is_win: - added_files.extend( - [ - (os.path.join(f"{os.path.dirname(scipy.__file__)}.libs"), "scipy.libs/"), - (str(pathex / "frozendict/version.py"), "frozendict"), - ( - os.path.join(f"{os.path.dirname(matplotlib.__file__)}.libs"), - "matplotlib.libs/", - ), - ] - ) - - -# Python libraries that are explicitly pulled into the bundle -hidden_imports = [ - "sklearn.utils._cython_blas", - "sklearn.utils._typedefs", - "sklearn.utils._heap", - "sklearn.utils._sorting", - "sklearn.utils._vector_sentinel", - "sklearn.neighbors.quad_tree", - "sklearn.tree._utils", - "sklearn.neighbors._partition_nodes", - "sklearn.metrics._pairwise_distances_reduction._datasets_pair", - "sklearn.metrics._pairwise_distances_reduction._middle_term_computer", - "squarify", - "linearmodels", - "statsmodels", - "user_agent", - "vaderSentiment", - "feedparser", - "_sysconfigdata__darwin_darwin", - "prophet", - "debugpy", - "pywry", - "scipy.sparse.linalg._isolve._iterative", - "whisper", - "transformers", - "yt_dlp", - "textwrap3", - "streamlit", - "pytrends", - "pytrends.request", - "pyarrow", -] - - -if is_win: - hidden_imports.append("frozendict") - -analysis_kwargs = dict( - scripts=[str(repo_path / "terminal.py")], - pathex=[str(pathex), "."], - binaries=[], - datas=added_files, - hiddenimports=hidden_imports, - hookspath=["build/pyinstaller/hooks"], - hooksconfig={}, - runtime_hooks=["build/pyinstaller/hooks/hook-debugpy.py"], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=None, - noarchive=False, -) - -a = Analysis(**analysis_kwargs) -pyz = PYZ(a.pure, a.zipped_data, cipher=analysis_kwargs["cipher"]) - -# Executable icon -if is_win: - exe_icon = (str(repo_path / "images/openbb_icon.ico"),) -if is_darwin: - exe_icon = (str(repo_path / "images/openbb.icns"),) - - -exe_args = [ - pyz, - a.scripts, - [], -] - -exe_kwargs = dict( - name=NAME, - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=False, - upx_exclude=[], - console=True, - disable_windowed_traceback=False, - target_arch="x86_64", - codesign_identity=None, - entitlements_file=None, - icon=exe_icon, - version="version.rc", -) - - -# Packaging settings -if build_type == "onefile": - exe_args += [a.binaries, a.zipfiles, a.datas] - exe_kwargs["runtime_tmpdir"] = None -elif build_type == "folder": - exe_kwargs["exclude_binaries"] = True - collect_args = [ - a.binaries, - a.zipfiles, - a.datas, - ] - collect_kwargs = dict( - strip=False, - upx=True, - upx_exclude=[], - name=NAME, - ) - - -# Platform specific settings -if is_win: - splash = Splash( - str(repo_path / "images/openbb_splashscreen.png"), - binaries=a.binaries, - datas=a.datas, - text_pos=(200, 400), - text_size=12, - text_color="white", - ) - exe_args += [splash, splash.binaries] - -if is_darwin: - exe_kwargs["argv_emulation"] = True - -exe = EXE(*exe_args, **exe_kwargs) - -if build_type == "folder": - coll = COLLECT( - *([exe] + collect_args), - **collect_kwargs, - ) diff --git a/build/pyinstaller/version.rc b/build/pyinstaller/version.rc deleted file mode 100644 index 8a232ed040d..00000000000 --- a/build/pyinstaller/version.rc +++ /dev/null @@ -1,42 +0,0 @@ -# UTF-8 -# -# For more details about fixed file info 'ffi' see: -# http://msdn.microsoft.com/en-us/library/ms646997.aspx -VSVersionInfo( - ffi=FixedFileInfo( - # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4) - # Set not needed items to zero 0. - filevers=(3, 2, 4, 0), - prodvers=(3, 2, 4, 0), - # Contains a bitmask that specifies the valid bits 'flags'r - mask=0x0, - # Contains a bitmask that specifies the Boolean attributes of the file. - flags=0x0, - # The operating system for which this file was designed. - # 0x4 - NT and there is no need to change it. - OS=0x4, - # The general type of file. - # 0x1 - the file is an application. - fileType=0x1, - # The function of the file. - # 0x0 - the function is not defined for this fileType - subtype=0x0, - # Creation date and time stamp. - date=(0, 0) - ), - kids=[ - StringFileInfo( - [ - StringTable( - '040904b0', - [StringStruct('Comments', 'The OpenBB Terminal. For additional details, visit OpenBB.co'), - StringStruct('CompanyName', 'OpenBB'), - StringStruct('FileDescription', 'OpenBB Terminal Program'), - StringStruct('FileVersion', '5.0'), - StringStruct('InternalName', 'OpenBB Terminal'), - StringStruct('ProductName', 'OpenBB Terminal'), - StringStruct('ProductVersion', '3.2.5.0')]) - ]), - VarFileInfo([VarStruct('Translation', [1033, 1200])]) - ] -) diff --git a/build/pypi/openbb_terminal/build.sh b/build/pypi/openbb_terminal/build.sh deleted file mode 100755 index b02d361e436..00000000000 --- a/build/pypi/openbb_terminal/build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# BUILD `openbb_terminal/.env` -OPENBB_LOGGING_COMMIT_HASH="sha:$(git rev-parse --short=8 HEAD)" -OPENBB_LOGGING_APP_NAME="gst_packaged_pypi" -echo "OPENBB_LOGGING_APP_NAME='${OPENBB_LOGGING_APP_NAME}'" > openbb_terminal/.env -echo "OPENBB_LOGGING_COMMIT_HASH=${OPENBB_LOGGING_COMMIT_HASH}" >> openbb_terminal/.env - -poetry publish --build \ No newline at end of file diff --git a/build/pypi/openbb_terminal/test_publish.sh b/build/pypi/openbb_terminal/test_publish.sh deleted file mode 100755 index ef5c2e1a348..00000000000 --- a/build/pypi/openbb_terminal/test_publish.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# BUILD `openbb_terminal/.env` -OPENBB_LOGGING_COMMIT_HASH="sha:$(git rev-parse --short=8 HEAD)" -OPENBB_LOGGING_APP_NAME="gst_packaged_pypi" -echo "OPENBB_LOGGING_APP_NAME='${OPENBB_LOGGING_APP_NAME}'" > openbb_terminal/.env -echo "OPENBB_LOGGING_COMMIT_HASH=${OPENBB_LOGGING_COMMIT_HASH}" >> openbb_terminal/.env - -poetry publish -r testpypi --build \ No newline at end of file diff --git a/examples/usdLiquidityIndex.ipynb b/examples/usdLiquidityIndex.ipynb index 7681e0c9488..4f177babebb 100644 --- a/examples/usdLiquidityIndex.ipynb +++ b/examples/usdLiquidityIndex.ipynb @@ -20,12 +20,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ - "import json\n", - "\n", "from openbb import obb\n", "from pandas import DataFrame\n" ] @@ -42,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -50,15 +48,15 @@ "text/plain": [ "OBBject\n", "\n", - "id: 06580cab-5bdc-7e28-8000-632a5d8dc92f\n", - "results: [{'date': datetime.date(2002, 12, 18), 'WALCL': 719542.0, 'WLRRAL': 21905....\n", + "id: 0660e135-3511-73d7-8000-b792f7e418bb\n", + "results: [{'date': datetime.date(2002, 12, 18), 'provider': 'fred', 'WALCL': 719542...\n", "provider: fred\n", - "warnings: [{'category': 'UserWarning', 'message': '{\"WALCL\": {\"title\": \"Assets: Tot...\n", + "warnings: None\n", "chart: None\n", - "extra: {'metadata': {'arguments': {'provider_choices': {'provider': None}, 'standar..." + "extra: {'results_metadata': {'WALCL': {'title': 'Assets: Total Assets: Total Assets..." ] }, - "execution_count": 4, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -78,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -110,7 +108,7 @@ } ], "source": [ - "metadata = json.loads(data.warnings[0].message)\n", + "metadata = data.extra[\"results_metadata\"]\n", "\n", "display(metadata.keys())\n", "display(metadata[\"WALCL\"].get(\"title\"))\n", @@ -573,7 +571,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -10197,7 +10195,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.11.7" }, "orig_nbformat": 4 }, diff --git a/openbb_platform/assets/providers.json b/openbb_platform/assets/providers.json new file mode 100644 index 00000000000..c40e8cece34 --- /dev/null +++ b/openbb_platform/assets/providers.json @@ -0,0 +1,58 @@ +[ + { + "name": "Alpha Vantage", + "credentials": ["alpha_vantage_api_key"], + "v3_credentials": ["API_KEY_ALPHAVANTAGE"], + "link": "https://www.alphavantage.co/support/#api-key", + "instructions": "Go to: https://www.alphavantage.co/support/#api-key\n\n![AlphaVantage](https://user-images.githubusercontent.com/46355364/207820936-46c2ba00-81ff-4cd3-98a4-4fa44412996f.png)\n\nFill out the form, pass Captcha, and click on, \"GET FREE API KEY\"." + }, + { + "name": "BizToc", + "credentials": ["biztoc_api_key"], + "v3_credentials": ["API_BIZTOC_TOKEN"], + "link": "https://biztoc.com", + "instructions": "The BizToc API is hosted on RapidAPI. To set up, go to: https://rapidapi.com/thma/api/biztoc.\n\n![biztoc0](https://github.com/marban/OpenBBTerminal/assets/18151143/04cdd423-f65e-4ad8-ad5a-4a59b0f5ddda)\n\nIn the top right, select 'Sign Up'. After answering some questions, you will be prompted to select one of their plans.\n\n![biztoc1](https://github.com/marban/OpenBBTerminal/assets/18151143/9f3b72ea-ded7-48c5-aa33-bec5c0de8422)\n\nAfter signing up, navigate back to https://rapidapi.com/thma/api/biztoc. If you are logged in, you will see a header called X-RapidAPI-Key.\n\n![biztoc2](https://github.com/marban/OpenBBTerminal/assets/18151143/0f3b6c91-07e0-447a-90cd-a9e23522929f)" + }, + { + "name": "FRED", + "credentials": ["fred_api_key"], + "v3_credentials": ["API_FRED_KEY"], + "link": "https://fred.stlouisfed.org/docs/api/api_key.html", + "instructions": "Go to: https://fred.stlouisfed.org\n\n![FRED](https://user-images.githubusercontent.com/46355364/207827137-d143ba4c-72cb-467d-a7f4-5cc27c597aec.png)\n\nClick on, \"My Account\", create a new account or sign in with Google:\n\n![FRED](https://user-images.githubusercontent.com/46355364/207827011-65cdd501-27e3-436f-bd9d-b0d8381d46a7.png)\n\nAfter completing the sign-up, go to \"My Account\", and select \"API Keys\". Then, click on, \"Request API Key\".\n\n![FRED](https://user-images.githubusercontent.com/46355364/207827577-c869f989-4ef4-4949-ab57-6f3931f2ae9d.png)\n\nFill in the box for information about the use-case for FRED, and by clicking, \"Request API key\", at the bottom of the page, the API key will be issued.\n\n![FRED](https://user-images.githubusercontent.com/46355364/207828032-0a32d3b8-1378-4db2-9064-aa1eb2111632.png)" + }, + { + "name": "Financial Modeling Prep", + "credentials": ["fmp_api_key"], + "v3_credentials": ["API_KEY_FINANCIALMODELINGPREP"], + "link": "https://financialmodelingprep.com/developer", + "instructions": "Go to: https://site.financialmodelingprep.com/developer/docs\n\n![FinancialModelingPrep](https://user-images.githubusercontent.com/46355364/207821920-64553d05-d461-4984-b0fe-be0368c71186.png)\n\nClick on, \"Get my API KEY here\", and sign up for a free account.\n\n![FinancialModelingPrep](https://user-images.githubusercontent.com/46355364/207822184-a723092e-ef42-4f87-8c55-db150f09741b.png)\n\nWith an account created, sign in and navigate to the Dashboard, which shows the assigned token. by pressing the \"Dashboard\" button which will show the API key.\n\n![FinancialModelingPrep](https://user-images.githubusercontent.com/46355364/207823170-dd8191db-e125-44e5-b4f3-2df0e115c91d.png)" + }, + { + "name": "Intrinio", + "credentials": ["intrinio_api_key"], + "v3_credentials": ["API_INTRINIO_KEY"], + "link": "https://intrinio.com/", + "instructions": "Go to: https://intrinio.com/starter-plan\n\n![Intrinio](https://user-images.githubusercontent.com/85772166/219207556-fcfee614-59f1-46ae-bff4-c63dd2f6991d.png)\n\nAn API key will be issued with a subscription. Find the token value within the account dashboard." + }, + { + "name": "Polygon", + "credentials": ["polygon_api_key"], + "v3_credentials": ["API_POLYGON_KEY"], + "link": "https://polygon.io", + "instructions": "Go to: https://polygon.io\n\n![Polygon](https://user-images.githubusercontent.com/46355364/207825623-fcd7f0a3-131a-4294-808c-754c13e38e2a.png)\n\nClick on, \"Get your Free API Key\".\n\n![Polygon](https://user-images.githubusercontent.com/46355364/207825952-ca5540ec-6ed2-4cef-a0ed-bb50b813932c.png)\n\nAfter signing up, the API Key is found at the bottom of the account dashboard page.\n\n![Polygon](https://user-images.githubusercontent.com/46355364/207826258-b1f318fa-fd9c-41d9-bf5c-fe16722e6601.png)" + }, + { + "name": "Nasdaq", + "credentials": ["nasdaq_api_key"], + "v3_credentials": ["API_KEY_QUANDL"], + "link": "https://www.quandl.com/tools/api", + "instructions": "Go to: https://www.quandl.com\n\n![Quandl](https://user-images.githubusercontent.com/46355364/207823899-208a3952-f557-4b73-aee6-64ac00faedb7.png)\n\nClick on, \"Sign Up\", and register a new account.\n\n![Quandl](https://user-images.githubusercontent.com/46355364/207824214-4b6b2b74-e709-4ed4-adf2-14803e6f3568.png)\n\nFollow the sign-up instructions, and upon completion the API key will be assigned.\n\n![Quandl](https://user-images.githubusercontent.com/46355364/207824664-3c82befb-9c69-42df-8a82-510d85c19a97.png)" + }, + { + "name": "Tradier", + "credentials": ["tradier_api_key"], + "v3_credentials": ["API_TRADIER_TOKEN"], + "link": "https://tradier.com/products/market-data-api", + "instructions": "Go to: https://documentation.tradier.com\n\n![Tradier](https://user-images.githubusercontent.com/46355364/207829178-a8bba770-f2ea-4480-b28e-efd81cf30980.png)\n\nClick on, \"Open Account\", to start the sign-up process. After the account has been setup, navigate to [Tradier Broker Dash](https://dash.tradier.com/login?redirect=settings.api) and create the application. Request a sandbox access token." + } +] diff --git a/openbb_platform/core/integration/test_obbject.py b/openbb_platform/core/integration/test_obbject.py index 735dc520969..4a2d1ad339f 100644 --- a/openbb_platform/core/integration/test_obbject.py +++ b/openbb_platform/core/integration/test_obbject.py @@ -1,3 +1,5 @@ +"""Test the OBBject.""" + import contextlib import sys diff --git a/openbb_platform/core/openbb_core/__init__.py b/openbb_platform/core/openbb_core/__init__.py index e69de29bb2d..13627db21b0 100644 --- a/openbb_platform/core/openbb_core/__init__.py +++ b/openbb_platform/core/openbb_core/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core.""" diff --git a/openbb_platform/core/openbb_core/api/app_loader.py b/openbb_platform/core/openbb_core/api/app_loader.py index 9c8330af10b..d6ff19878ca 100644 --- a/openbb_platform/core/openbb_core/api/app_loader.py +++ b/openbb_platform/core/openbb_core/api/app_loader.py @@ -1,11 +1,29 @@ +"""App loader module.""" + from typing import List, Optional from fastapi import APIRouter, FastAPI +from openbb_core.app.router import RouterLoader class AppLoader: """App loader.""" + @staticmethod + def get_openapi_tags() -> List[dict]: + """Get openapi tags.""" + main_router = RouterLoader.from_extensions() + openapi_tags = [] + # Add tag data for each router in the main router + for r in main_router.routers: + openapi_tags.append( + { + "name": r, + "description": main_router.get_attr(r, "description"), + } + ) + return openapi_tags + @staticmethod def from_routers( app: FastAPI, routers: List[Optional[APIRouter]], prefix: str diff --git a/openbb_platform/core/openbb_core/api/auth/user.py b/openbb_platform/core/openbb_core/api/auth/user.py index dab13cca5a9..c61aa5303cf 100644 --- a/openbb_platform/core/openbb_core/api/auth/user.py +++ b/openbb_platform/core/openbb_core/api/auth/user.py @@ -1,3 +1,5 @@ +"""User authentication.""" + import secrets from typing import Optional @@ -15,7 +17,6 @@ async def authenticate_user( credentials: Annotated[Optional[HTTPBasicCredentials], Depends(security)] ): """Authenticate the user.""" - if credentials: username = Env().API_USERNAME password = Env().API_PASSWORD diff --git a/openbb_platform/core/openbb_core/api/dependency/__init__.py b/openbb_platform/core/openbb_core/api/dependency/__init__.py index e69de29bb2d..4abe38b227a 100644 --- a/openbb_platform/core/openbb_core/api/dependency/__init__.py +++ b/openbb_platform/core/openbb_core/api/dependency/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core API Dependency.""" diff --git a/openbb_platform/core/openbb_core/api/rest_api.py b/openbb_platform/core/openbb_core/api/rest_api.py index f166a91be4e..0ad92f613b6 100644 --- a/openbb_platform/core/openbb_core/api/rest_api.py +++ b/openbb_platform/core/openbb_core/api/rest_api.py @@ -67,13 +67,13 @@ app = FastAPI( ], lifespan=lifespan, ) - app.add_middleware( CORSMiddleware, allow_origins=system.api_settings.cors.allow_origins, allow_methods=system.api_settings.cors.allow_methods, allow_headers=system.api_settings.cors.allow_headers, ) +app.openapi_tags = AppLoader.get_openapi_tags() AppLoader.from_routers( app=app, routers=( diff --git a/openbb_platform/core/openbb_core/api/router/__init__.py b/openbb_platform/core/openbb_core/api/router/__init__.py index e69de29bb2d..93fabc683c4 100644 --- a/openbb_platform/core/openbb_core/api/router/__init__.py +++ b/openbb_platform/core/openbb_core/api/router/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core API Router.""" diff --git a/openbb_platform/core/openbb_core/api/router/commands.py b/openbb_platform/core/openbb_core/api/router/commands.py index d524156ddbd..ce1cab484a8 100644 --- a/openbb_platform/core/openbb_core/api/router/commands.py +++ b/openbb_platform/core/openbb_core/api/router/commands.py @@ -132,8 +132,8 @@ def validate_output(c_out: OBBject) -> OBBject: Returns ------- - OBBject - Validated OBBject object. + Dict + Serialized OBBject. """ def is_model(type_): @@ -188,7 +188,7 @@ def build_api_wrapper( func.__annotations__ = new_annotations_map @wraps(wrapped=func) - async def wrapper(*args: Tuple[Any], **kwargs: Dict[str, Any]): + async def wrapper(*args: Tuple[Any], **kwargs: Dict[str, Any]) -> OBBject: user_settings: UserSettings = UserSettings.model_validate( kwargs.pop( "__authenticated_user_settings", @@ -198,8 +198,7 @@ def build_api_wrapper( execute = partial(command_runner.run, path, user_settings) output: OBBject = await execute(*args, **kwargs) - output = validate_output(output) - return output + return validate_output(output) return wrapper diff --git a/openbb_platform/core/openbb_core/app/__init__.py b/openbb_platform/core/openbb_core/app/__init__.py index e69de29bb2d..6b3de9cda26 100644 --- a/openbb_platform/core/openbb_core/app/__init__.py +++ b/openbb_platform/core/openbb_core/app/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core App Module.""" diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index 3a43aba3e8a..4d9985a2172 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -1,5 +1,7 @@ """Command runner module.""" +# pylint: disable=R0903 + from copy import deepcopy from dataclasses import asdict, is_dataclass from datetime import datetime @@ -37,6 +39,7 @@ class ExecutionContext: system_settings: SystemSettings, user_settings: UserSettings, ) -> None: + """Initialize the execution context.""" self.command_map = command_map self.route = route self.system_settings = system_settings @@ -192,6 +195,8 @@ class ParametersBuilder: ): valid = asdict(annotation()) # type: ignore for p in extra_params: + if "chart_params" in p: + continue if p not in valid: warn( message=f"Parameter '{p}' not found.", @@ -224,7 +229,7 @@ class ParametersBuilder: } # We allow extra fields to return with model with 'cc: CommandContext' config = ConfigDict(extra="allow", arbitrary_types_allowed=True) - ValidationModel = create_model(func.__name__, __config__=config, **fields) # type: ignore + ValidationModel = create_model(func.__name__, __config__=config, **fields) # type: ignore # pylint: disable=C0103 # Validate and coerce model = ValidationModel(**kwargs) ParametersBuilder._warn_kwargs( @@ -233,6 +238,7 @@ class ParametersBuilder: ) return dict(model) + # pylint: disable=R0913 @classmethod def build( cls, @@ -273,6 +279,7 @@ class ParametersBuilder: return kwargs +# pylint: disable=too-few-public-methods class StaticCommandRunner: """Static Command Runner.""" @@ -281,6 +288,7 @@ class StaticCommandRunner: cls, func: Callable, kwargs: Dict[str, Any], + show_warnings: bool = True, # pylint: disable=unused-argument # type: ignore ) -> OBBject: """Run a command and return the output.""" obbject = await maybe_coroutine(func, **kwargs) @@ -300,8 +308,29 @@ class StaticCommandRunner: raise OpenBBError( "Charting is not installed. Please install `openbb-charting`." ) - obbject.charting.show(render=False, **kwargs) # type: ignore + chart_params = {} + extra_params = kwargs.get("extra_params", {}) + if hasattr(extra_params, "__dict__") and hasattr(extra_params, "chart_params"): + chart_params = kwargs["extra_params"].__dict__.get("chart_params", {}) + elif isinstance(extra_params, dict) and "chart_params" in extra_params: + chart_params = kwargs["extra_params"].get("chart_params", {}) + + if "chart_params" in kwargs and kwargs["chart_params"] is not None: + chart_params.update(kwargs.pop("chart_params", {})) + + if ( + "kwargs" in kwargs + and "chart_params" in kwargs["kwargs"] + and kwargs["kwargs"].get("chart_params") is not None + ): + chart_params.update(kwargs.pop("kwargs", {}).get("chart_params", {})) + + if chart_params: + kwargs.update(chart_params) + obbject.charting.show(render=False, **kwargs) + + # pylint: disable=R0913, R0914 @classmethod async def _execute_func( cls, @@ -348,7 +377,6 @@ class StaticCommandRunner: # pylint: disable=protected-access obbject._route = route obbject._standard_params = kwargs.get("standard_params", None) - if chart and obbject.results: cls._chart(obbject, **kwargs) @@ -381,6 +409,7 @@ class StaticCommandRunner: ) return obbject + # pylint: disable=W0718 @classmethod async def run( cls, diff --git a/openbb_platform/core/openbb_core/app/deprecation.py b/openbb_platform/core/openbb_core/app/deprecation.py index 5dd38c1ae54..a771589913a 100644 --- a/openbb_platform/core/openbb_core/app/deprecation.py +++ b/openbb_platform/core/openbb_core/app/deprecation.py @@ -50,6 +50,7 @@ class OpenBBDeprecationWarning(DeprecationWarning): since: Optional[Tuple[int, int]] = None, expected_removal: Optional[Tuple[int, int]] = None, ) -> None: + """Initialize the warning.""" super().__init__(message, *args) self.message = message.rstrip(".") self.since = since or get_major_minor(VERSION) diff --git a/openbb_platform/core/openbb_core/app/logs/formatters/formatter_with_exceptions.py b/openbb_platform/core/openbb_core/app/logs/formatters/formatter_with_exceptions.py index 17ccd72ff64..f3f8c8f9066 100644 --- a/openbb_platform/core/openbb_core/app/logs/formatters/formatter_with_exceptions.py +++ b/openbb_platform/core/openbb_core/app/logs/formatters/formatter_with_exceptions.py @@ -1,16 +1,15 @@ -# IMPORTATION STANDARD +"""Logging Formatter that includes formatting of Exceptions.""" + import logging import re from copy import deepcopy from pathlib import Path -# IMPORTATION THIRDPARTY -# IMPORTATION INTERNAL from openbb_core.app.logs.models.logging_settings import LoggingSettings class FormatterWithExceptions(logging.Formatter): - """Logging Formatter that includes formatting of Exceptions""" + """Logging Formatter that includes formatting of Exceptions.""" DATEFORMAT = "%Y-%m-%dT%H:%M:%S%z" LOGFORMAT = "%(asctime)s|%(name)s|%(funcName)s|%(lineno)s|%(message)s" @@ -20,6 +19,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def calculate_level_name(record: logging.LogRecord) -> str: + """Calculate the level name of the log record.""" if record.exc_text: level_name = "X" elif record.levelname: @@ -31,6 +31,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def extract_log_extra(record: logging.LogRecord): + """Extract extra log information from the record.""" log_extra = dict() if hasattr(record, "func_name_override"): @@ -44,6 +45,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def mock_ipv4(text: str) -> str: + """Mock IPv4 addresses in the text.""" pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" replacement = " FILTERED_IP " text_mocked = re.sub(pattern, replacement, text) @@ -52,6 +54,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def mock_email(text: str) -> str: + """Mock email addresses in the text.""" pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" replacement = " FILTERED_EMAIL " text_mocked = re.sub(pattern, replacement, text) @@ -60,6 +63,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def mock_password(text: str) -> str: + """Mock passwords in the text.""" pattern = r'("password": ")[^"]+' replacement = r"\1 FILTERED_PASSWORD " text_mocked = re.sub(pattern, replacement, text) @@ -67,6 +71,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def mock_flair(text: str) -> str: + """Mock flair in the text.""" pattern = r'("FLAIR": "\[)(.*?)\]' replacement = r"\1 FILTERED_FLAIR ]" text_mocked = re.sub(pattern, replacement, text) @@ -75,6 +80,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def mock_home_directory(text: str) -> str: + """Mock home directory in the text.""" user_home_directory = str(Path.home().as_posix()) text_mocked = text.replace("\\", "/").replace( user_home_directory, "MOCKING_USER_PATH" @@ -84,6 +90,7 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def filter_special_tags(text: str) -> str: + """Filter special tags in the text.""" text_filtered = text.replace("\n", " MOCKING_BREAKLINE ") text_filtered = text_filtered.replace("'Traceback", "Traceback") @@ -91,6 +98,7 @@ class FormatterWithExceptions(logging.Formatter): @classmethod def filter_piis(cls, text: str) -> str: + """Filter Personally Identifiable Information in the text.""" text_filtered = cls.mock_ipv4(text=text) text_filtered = cls.mock_email(text=text_filtered) text_filtered = cls.mock_password(text=text_filtered) @@ -101,6 +109,7 @@ class FormatterWithExceptions(logging.Formatter): @classmethod def filter_log_line(cls, text: str): + """Filter log line.""" text_filtered = cls.filter_special_tags(text=text) text_filtered = cls.filter_piis(text=text_filtered) @@ -113,6 +122,7 @@ class FormatterWithExceptions(logging.Formatter): style="%", validate=True, ) -> None: + """Initialize the FormatterWithExceptions.""" super().__init__( fmt=self.LOGFORMAT, datefmt=self.DATEFORMAT, @@ -123,15 +133,18 @@ class FormatterWithExceptions(logging.Formatter): @property def settings(self) -> LoggingSettings: + """Get the settings.""" return deepcopy(self.__settings) @settings.setter def settings(self, settings: LoggingSettings) -> None: + """Set the settings.""" self.__settings = settings # OVERRIDE def formatException(self, ei) -> str: - """Exception formatting handler + """Define the Exception formatting handler. + Parameters ---------- ei : logging._SysExcInfoType @@ -141,13 +154,13 @@ class FormatterWithExceptions(logging.Formatter): str Formatted exception """ - result = super().formatException(ei) return repr(result) # OVERRIDE def format(self, record: logging.LogRecord) -> str: - """Log formatter + """Define the Log formatter. + Parameters ---------- record : logging.LogRecord @@ -157,7 +170,6 @@ class FormatterWithExceptions(logging.Formatter): str Formatted_log message """ - level_name = self.calculate_level_name(record=record) log_prefix_content = { "appName": self.settings.app_name, diff --git a/openbb_platform/core/openbb_core/app/logs/handlers/path_tracking_file_handler.py b/openbb_platform/core/openbb_core/app/logs/handlers/path_tracking_file_handler.py index d8b65afaa22..acf8a50d5cc 100644 --- a/openbb_platform/core/openbb_core/app/logs/handlers/path_tracking_file_handler.py +++ b/openbb_platform/core/openbb_core/app/logs/handlers/path_tracking_file_handler.py @@ -1,3 +1,5 @@ +"""Path Tracking File Handler.""" + # IMPORTATION STANDARD from copy import deepcopy from logging.handlers import TimedRotatingFileHandler @@ -17,8 +19,11 @@ TMP_FOLDER_NAME = "tmp" class PathTrackingFileHandler(TimedRotatingFileHandler): + """Path Tracking File Handler.""" + @staticmethod def build_log_file_path(settings: LoggingSettings) -> Path: + """Build the log file path.""" app_name = settings.app_name directory = settings.user_logs_directory session_id = settings.session_id @@ -27,8 +32,7 @@ class PathTrackingFileHandler(TimedRotatingFileHandler): return path def clean_expired_files(self, before_timestamp: float): - """Remove expired files from logs directory""" - + """Remove expired files from logs directory.""" logs_dir = self.settings.user_logs_directory archives_directory = logs_dir / ARCHIVES_FOLDER_NAME tmp_directory = logs_dir / TMP_FOLDER_NAME @@ -51,10 +55,12 @@ class PathTrackingFileHandler(TimedRotatingFileHandler): @property def settings(self) -> LoggingSettings: + """Get the settings.""" return deepcopy(self.__settings) @settings.setter def settings(self, settings: LoggingSettings) -> None: + """Set the settings.""" self.__settings = settings # OVERRIDE @@ -64,6 +70,7 @@ class PathTrackingFileHandler(TimedRotatingFileHandler): *args, **kwargs, ) -> None: + """Initialize the PathTrackingFileHandler.""" # SETUP PARENT CLASS filename = str(self.build_log_file_path(settings=settings)) frequency = settings.frequency diff --git a/openbb_platform/core/openbb_core/app/logs/handlers_manager.py b/openbb_platform/core/openbb_core/app/logs/handlers_manager.py index 3f2229b13c0..2d9a0efb927 100644 --- a/openbb_platform/core/openbb_core/app/logs/handlers_manager.py +++ b/openbb_platform/core/openbb_core/app/logs/handlers_manager.py @@ -1,9 +1,8 @@ -# IMPORT STANDARD +"""Handlers Manager.""" + import logging import sys -# IMPORT THIRD-PARTY -# IMPORT INTERNAL from openbb_core.app.logs.formatters.formatter_with_exceptions import ( FormatterWithExceptions, ) @@ -15,7 +14,10 @@ from openbb_core.app.logs.models.logging_settings import LoggingSettings class HandlersManager: + """Handlers Manager.""" + def __init__(self, settings: LoggingSettings): + """Initialize the HandlersManager.""" self._handlers = settings.handler_list self._settings = settings @@ -34,36 +36,42 @@ class HandlersManager: logging.getLogger().debug("Unknown log handler.") def _add_posthog_handler(self): + """Add a Posthog handler.""" handler = PosthogHandler(settings=self._settings) formatter = FormatterWithExceptions(settings=self._settings) handler.setFormatter(formatter) logging.getLogger().addHandler(handler) def _add_stdout_handler(self): + """Add a stdout handler.""" handler = logging.StreamHandler(sys.stdout) formatter = FormatterWithExceptions(settings=self._settings) handler.setFormatter(formatter) logging.getLogger().addHandler(handler) def _add_stderr_handler(self): + """Add a stderr handler.""" handler = logging.StreamHandler(sys.stderr) formatter = FormatterWithExceptions(settings=self._settings) handler.setFormatter(formatter) logging.getLogger().addHandler(handler) def _add_noop_handler(self): + """Add a null handler.""" handler = logging.NullHandler() formatter = FormatterWithExceptions(settings=self._settings) handler.setFormatter(formatter) logging.getLogger().addHandler(handler) def _add_file_handler(self): + """Add a file handler.""" handler = PathTrackingFileHandler(settings=self._settings) formatter = FormatterWithExceptions(settings=self._settings) handler.setFormatter(formatter) logging.getLogger().addHandler(handler) def update_handlers(self, settings: LoggingSettings): + """Update the handlers with new settings.""" logger = logging.getLogger() for hdlr in logger.handlers: if isinstance(hdlr, (PathTrackingFileHandler, PosthogHandler)): diff --git a/openbb_platform/core/openbb_core/app/logs/logging_service.py b/openbb_platform/core/openbb_core/app/logs/logging_service.py index 28067def685..abc605ca7d8 100644 --- a/openbb_platform/core/openbb_core/app/logs/logging_service.py +++ b/openbb_platform/core/openbb_core/app/logs/logging_service.py @@ -19,8 +19,7 @@ from pydantic_core import to_jsonable_python class LoggingService(metaclass=SingletonMeta): - """ - Logging Manager class responsible for managing logging settings and handling logs. + """Logging Manager class responsible for managing logging settings and handling logs. Attributes ---------- @@ -59,8 +58,7 @@ class LoggingService(metaclass=SingletonMeta): system_settings: SystemSettings, user_settings: UserSettings, ) -> None: - """ - Logging Service Constructor. + """Define the Logging Service Constructor. Sets up the logging settings and handlers and then logs the startup information. @@ -82,8 +80,7 @@ class LoggingService(metaclass=SingletonMeta): @property def logging_settings(self) -> LoggingSettings: - """ - Current logging settings. + """Define the Current logging settings. Returns ------- @@ -94,8 +91,7 @@ class LoggingService(metaclass=SingletonMeta): @logging_settings.setter def logging_settings(self, value: Tuple[SystemSettings, UserSettings]): - """ - Setter for updating the logging settings. + """Define the Setter for updating the logging settings. Parameters ---------- @@ -109,8 +105,7 @@ class LoggingService(metaclass=SingletonMeta): ) def _setup_handlers(self) -> HandlersManager: - """ - Setup Logging Handlers. + """Set up Logging Handlers. Returns ------- diff --git a/openbb_platform/core/openbb_core/app/logs/models/logging_settings.py b/openbb_platform/core/openbb_core/app/logs/models/logging_settings.py index 1cf14d5240f..708246f9e9a 100644 --- a/openbb_platform/core/openbb_core/app/logs/models/logging_settings.py +++ b/openbb_platform/core/openbb_core/app/logs/models/logging_settings.py @@ -1,3 +1,5 @@ +"""Logging settings.""" + from pathlib import Path from typing import List, Optional @@ -8,11 +10,14 @@ from openbb_core.app.model.user_settings import UserSettings # pylint: disable=too-many-instance-attributes class LoggingSettings: + """Logging settings.""" + def __init__( self, user_settings: Optional[UserSettings] = None, system_settings: Optional[SystemSettings] = None, ): + """Initialize the logging settings.""" user_settings = user_settings or UserSettings() system_settings = system_settings or SystemSettings() diff --git a/openbb_platform/core/openbb_core/app/logs/utils/expired_files.py b/openbb_platform/core/openbb_core/app/logs/utils/expired_files.py index 4f101d23db8..feb933c9a69 100644 --- a/openbb_platform/core/openbb_core/app/logs/utils/expired_files.py +++ b/openbb_platform/core/openbb_core/app/logs/utils/expired_files.py @@ -1,20 +1,19 @@ -# IMPORTATION STANDARD +"""Expired files management utilities.""" + import contextlib from datetime import datetime from pathlib import Path from typing import List -# IMPORTATION THIRDPARTY - -# IMPORTATION INTERNAL - def get_timestamp_from_x_days(x: int) -> float: + """Get the timestamp from x days ago.""" timestamp_from_x_days = datetime.now().timestamp() - x * 86400 return timestamp_from_x_days def get_expired_file_list(directory: Path, before_timestamp: float) -> List[Path]: + """Get the list of expired files from a directory.""" expired_files = [] if directory.is_dir(): # Check if the directory exists and is a directory for file in directory.iterdir(): @@ -25,6 +24,7 @@ def get_expired_file_list(directory: Path, before_timestamp: float) -> List[Path def remove_file_list(file_list: List[Path]): + """Remove a list of files.""" for file in file_list: with contextlib.suppress(PermissionError): file.unlink(missing_ok=True) diff --git a/openbb_platform/core/openbb_core/app/logs/utils/utils.py b/openbb_platform/core/openbb_core/app/logs/utils/utils.py index a94efd331cb..e150627b147 100644 --- a/openbb_platform/core/openbb_core/app/logs/utils/utils.py +++ b/openbb_platform/core/openbb_core/app/logs/utils/utils.py @@ -1,12 +1,10 @@ -# IMPORT STANDARD +"""Utility functions for logging.""" + import time import uuid import warnings from pathlib import Path, PosixPath -# IMPORT THIRD-PARTY -# IMPORT INTERNAL - def get_session_id() -> str: """UUID of the current session.""" @@ -41,6 +39,7 @@ def get_log_dir(contextual_user_data_directory: str) -> PosixPath: def create_log_dir_if_not_exists(contextual_user_data_directory: str) -> Path: + """Create a log directory for the current installation.""" log_dir = Path(contextual_user_data_directory).joinpath("logs").absolute() if not log_dir.is_dir(): log_dir.mkdir(parents=True, exist_ok=True) @@ -49,6 +48,7 @@ def create_log_dir_if_not_exists(contextual_user_data_directory: str) -> Path: def create_log_uuid_if_not_exists(log_dir: Path) -> str: + """Create a log id file for the current logging session.""" log_id = get_log_id(log_dir) if not log_id.is_file(): logging_id = f"{uuid.uuid4()}" @@ -60,10 +60,12 @@ def create_log_uuid_if_not_exists(log_dir: Path) -> str: def get_log_id(log_dir): + """Get the log id file.""" return (log_dir / ".logid").absolute() def create_uuid_dir_if_not_exists(log_dir, logging_id) -> PosixPath: + """Create a directory for the current logging session.""" uuid_log_dir = (log_dir / logging_id).absolute() if not uuid_log_dir.is_dir(): diff --git a/openbb_platform/core/openbb_core/app/model/__init__.py b/openbb_platform/core/openbb_core/app/model/__init__.py index e69de29bb2d..44adb9707fe 100644 --- a/openbb_platform/core/openbb_core/app/model/__init__.py +++ b/openbb_platform/core/openbb_core/app/model/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core App Model.""" diff --git a/openbb_platform/core/openbb_core/app/model/abstract/__init__.py b/openbb_platform/core/openbb_core/app/model/abstract/__init__.py index e69de29bb2d..65daa6e5650 100644 --- a/openbb_platform/core/openbb_core/app/model/abstract/__init__.py +++ b/openbb_platform/core/openbb_core/app/model/abstract/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core App Abstract Model.""" diff --git a/openbb_platform/core/openbb_core/app/model/abstract/error.py b/openbb_platform/core/openbb_core/app/model/abstract/error.py index 95cc53b434e..91c67d9aa24 100644 --- a/openbb_platform/core/openbb_core/app/model/abstract/error.py +++ b/openbb_platform/core/openbb_core/app/model/abstract/error.py @@ -1,3 +1,5 @@ +"""OpenBB Error.""" + from typing import Optional, Union @@ -5,5 +7,6 @@ class OpenBBError(Exception): """OpenBB Error.""" def __init__(self, original: Optional[Union[str, Exception]] = None): + """Initialize the OpenBBError.""" self.original = original super().__init__(str(original)) diff --git a/openbb_platform/core/openbb_core/app/model/abstract/results.py b/openbb_platform/core/openbb_core/app/model/abstract/results.py index 5152f0fad58..a9456b99189 100644 --- a/openbb_platform/core/openbb_core/app/model/abstract/results.py +++ b/openbb_platform/core/openbb_core/app/model/abstract/results.py @@ -1,3 +1,5 @@ +"""OpenBB Core App Model Abstract Results.""" + from pydantic import BaseModel Results = BaseModel diff --git a/openbb_platform/core/openbb_core/app/model/abstract/singleton.py b/openbb_platform/core/openbb_core/app/model/abstract/singleton.py index 3575186ee22..0ecccafc446 100644 --- a/openbb_platform/core/openbb_core/app/model/abstract/singleton.py +++ b/openbb_platform/core/openbb_core/app/model/abstract/singleton.py @@ -1,13 +1,18 @@ +"""Singleton metaclass implementation.""" + from typing import Dict, Generic, TypeVar T = TypeVar("T") class SingletonMeta(type, Generic[T]): + """Singleton metaclass.""" + # TODO : check if we want to update this to be thread safe _instances: Dict[T, T] = {} def __call__(cls: "SingletonMeta", *args, **kwargs): + """Singleton pattern implementation.""" if cls not in cls._instances: instance = super().__call__(*args, **kwargs) cls._instances[cls] = instance diff --git a/openbb_platform/core/openbb_core/app/model/abstract/tagged.py b/openbb_platform/core/openbb_core/app/model/abstract/tagged.py index 134a2605567..80cfe1678e0 100644 --- a/openbb_platform/core/openbb_core/app/model/abstract/tagged.py +++ b/openbb_platform/core/openbb_core/app/model/abstract/tagged.py @@ -1,6 +1,10 @@ +"""OpenBB Core App Abstract Model Tagged.""" + from pydantic import BaseModel, Field from uuid_extensions import uuid7str # type: ignore class Tagged(BaseModel): + """Model for Tagged.""" + id: str = Field(default_factory=uuid7str, alias="_id") diff --git a/openbb_platform/core/openbb_core/app/model/abstract/warning.py b/openbb_platform/core/openbb_core/app/model/abstract/warning.py index 2e2f778c397..7914b6af7f7 100644 --- a/openbb_platform/core/openbb_core/app/model/abstract/warning.py +++ b/openbb_platform/core/openbb_core/app/model/abstract/warning.py @@ -1,14 +1,19 @@ +"""Module for warnings.""" + from warnings import WarningMessage from pydantic import BaseModel class Warning_(BaseModel): + """Model for Warning.""" + category: str message: str def cast_warning(w: WarningMessage) -> Warning_: + """Cast a warning to a pydantic model.""" return Warning_( category=w.category.__name__, message=str(w.message), @@ -16,4 +21,4 @@ def cast_warning(w: WarningMessage) -> Warning_: class OpenBBWarning(Warning): - pass + """Base class for OpenBB warnings.""" diff --git a/openbb_platform/core/openbb_core/app/model/fast_api_settings.py b/openbb_platform/core/openbb_core/app/model/api_settings.py similarity index 98% rename from openbb_platform/core/openbb_core/app/model/fast_api_settings.py rename to openbb_platform/core/openbb_core/app/model/api_settings.py index 24ad76a3916..1eccb73eaef 100644 --- a/openbb_platform/core/openbb_core/app/model/fast_api_settings.py +++ b/openbb_platform/core/openbb_core/app/model/api_settings.py @@ -24,7 +24,7 @@ class Servers(BaseModel): description: str = "Local OpenBB development server" -class FastAPISettings(BaseModel): +class APISettings(BaseModel): """Settings model for FastAPI configuration.""" model_config = ConfigDict(frozen=True) diff --git a/openbb_platform/core/openbb_core/app/model/charts/chart.py b/openbb_platform/core/openbb_core/app/model/charts/chart.py index a825be1e9fe..38d062d7966 100644 --- a/openbb_platform/core/openbb_core/app/model/charts/chart.py +++ b/openbb_platform/core/openbb_core/app/model/charts/chart.py @@ -1,3 +1,5 @@ +"""OpenBB Core Chart model.""" + from enum import Enum from typing import Any, Dict, Optional @@ -5,10 +7,14 @@ from pydantic import BaseModel, ConfigDict, Field class ChartFormat(str, Enum): + """Chart format.""" + plotly = "plotly" class Chart(BaseModel): + """Model for Chart.""" + content: Optional[Dict[str, Any]] = Field( default=None, description="Raw textual representation of the chart.", @@ -25,6 +31,7 @@ class Chart(BaseModel): model_config = ConfigDict(validate_assignment=True) def __repr__(self) -> str: + """Return string representation.""" return f"{self.__class__.__name__}\n\n" + "\n".join( f"{k}: {v}" for k, v in self.model_dump().items() ) diff --git a/openbb_platform/core/openbb_core/app/model/command_context.py b/openbb_platform/core/openbb_core/app/model/command_context.py index 052fb5bc780..977df7a485b 100644 --- a/openbb_platform/core/openbb_core/app/model/command_context.py +++ b/openbb_platform/core/openbb_core/app/model/command_context.py @@ -1,3 +1,5 @@ +"""Command Context.""" + from pydantic import BaseModel, Field from openbb_core.app.model.system_settings import SystemSettings @@ -5,5 +7,7 @@ from openbb_core.app.model.user_settings import UserSettings class CommandContext(BaseModel): + """Command Context.""" + user_settings: UserSettings = Field(default_factory=UserSettings) system_settings: SystemSettings = Field(default_factory=SystemSettings) diff --git a/openbb_platform/core/openbb_core/app/model/credentials.py b/openbb_platform/core/openbb_core/app/model/credentials.py index 30cae535ef7..5ed7684e351 100644 --- a/openbb_platform/core/openbb_core/app/model/credentials.py +++ b/openbb_platform/core/openbb_core/app/model/credentials.py @@ -100,7 +100,7 @@ class Credentials(_Credentials): # type: ignore """Credentials model used to store provider credentials.""" def __repr__(self) -> str: - """String representation of the credentials.""" + """Define the string representation of the credentials.""" return ( self.__class__.__name__ + "\n\n" diff --git a/openbb_platform/core/openbb_core/app/model/custom_parameter.py b/openbb_platform/core/openbb_core/app/model/custom_parameter.py deleted file mode 100644 index 06b947e0c55..00000000000 --- a/openbb_platform/core/openbb_core/app/model/custom_parameter.py +++ /dev/null @@ -1,35 +0,0 @@ -import sys -from dataclasses import dataclass -from typing import Dict, Optional - -from typing_extensions import LiteralString - -# `slots` is available on Python >= 3.10 -if sys.version_info >= (3, 10): - slots_true = {"slots": True} -else: - slots_true: Dict[str, bool] = {} - - -class BaseMetadata: - """Base class for all metadata. - - This exists mainly so that implementers - can do `isinstance(..., BaseMetadata)` while traversing field annotations. - """ - - __slots__ = () - - -@dataclass(frozen=True, **slots_true) -class OpenBBCustomParameter(BaseMetadata): - """Custom parameter for OpenBB.""" - - description: Optional[str] = None - - -@dataclass(frozen=True, **slots_true) -class OpenBBCustomChoices(BaseMetadata): - """Custom choices for OpenBB.""" - - choices: Optional[LiteralString] = None diff --git a/openbb_platform/core/openbb_core/app/model/defaults.py b/openbb_platform/core/openbb_core/app/model/defaults.py index ad41b1dc228..52007edf5de 100644 --- a/openbb_platform/core/openbb_core/app/model/defaults.py +++ b/openbb_platform/core/openbb_core/app/model/defaults.py @@ -1,3 +1,5 @@ +"""Defaults model.""" + from typing import Dict, Optional from pydantic import BaseModel, ConfigDict, Field @@ -11,6 +13,7 @@ class Defaults(BaseModel): routes: Dict[str, Dict[str, Optional[str]]] = Field(default_factory=dict) def __repr__(self) -> str: + """Return string representation.""" return f"{self.__class__.__name__}\n\n" + "\n".join( f"{k}: {v}" for k, v in self.model_dump().items() ) diff --git a/openbb_platform/core/openbb_core/app/model/field.py b/openbb_platform/core/openbb_core/app/model/field.py new file mode 100644 index 00000000000..d791cb08f08 --- /dev/null +++ b/openbb_platform/core/openbb_core/app/model/field.py @@ -0,0 +1,28 @@ +"""Custom field for OpenBB.""" + +from typing import Any, List, Optional + +from pydantic.fields import FieldInfo + + +class OpenBBField(FieldInfo): + """Custom field for OpenBB.""" + + def __repr__(self): + """Override FieldInfo __repr__.""" + # We use repr() to avoid decoding special characters like \n + if self.choices: + return f"OpenBBField(description={repr(self.description)}, choices={repr(self.choices)})" + return f"OpenBBField(description={repr(self.description)})" + + def __init__(self, description: str, choices: Optional[List[Any]] = None): + """Initialize OpenBBField.""" + json_schema_extra = {"choices": choices} if choices else None + super().__init__(description=description, json_schema_extra=json_schema_extra) # type: ignore[arg-type] + + @property + def choices(self) -> Optional[List[Any]]: + """Custom choices.""" + if self.json_schema_extra: + return self.json_schema_extra.get("choices") # type: ignore[union-attr,return-value] + return None diff --git a/openbb_platform/core/openbb_core/app/model/hub/features_keys.py b/openbb_platform/core/openbb_core/app/model/hub/features_keys.py deleted file mode 100644 index c0653ff443c..00000000000 --- a/openbb_platform/core/openbb_core/app/model/hub/features_keys.py +++ /dev/null @@ -1,37 +0,0 @@ -from typing import Optional - -from pydantic import BaseModel, Field - - -class FeaturesKeys(BaseModel): - API_BITQUERY_KEY: Optional[str] = Field(default=None) - API_BIZTOC_TOKEN: Optional[str] = Field(default=None) - API_CMC_KEY: Optional[str] = Field(default=None) - API_COINGLASS_KEY: Optional[str] = Field(default=None) - API_CRYPTO_PANIC_KEY: Optional[str] = Field(default=None) - API_DAPPRADAR_KEY: Optional[str] = Field(default=None) - API_DATABENTO_KEY: Optional[str] = Field(default=None) - API_EODHD_KEY: Optional[str] = Field(default=None) - API_ETHPLORER_KEY: Optional[str] = Field(default=None) - API_FINNHUB_KEY: Optional[str] = Field(default=None) - API_FRED_KEY: Optional[str] = Field(default=None) - API_GITHUB_KEY: Optional[str] = Field(default=None) - API_GLASSNODE_KEY: Optional[str] = Field(default=None) - API_INTRINIO_KEY: Optional[str] = Field(default=None) - API_KEY_ALPHAVANTAGE: Optional[str] = Field(default=None) - API_KEY_FINANCIALMODELINGPREP: Optional[str] = Field(default=None) - API_KEY_QUANDL: Optional[str] = Field(default=None) - API_MESSARI_KEY: Optional[str] = Field(default=None) - API_NEWS_TOKEN: Optional[str] = Field(default=None) - API_POLYGON_KEY: Optional[str] = Field(default=None) - API_REDDIT_CLIENT_ID: Optional[str] = Field(default=None) - API_REDDIT_CLIENT_SECRET: Optional[str] = Field(default=None) - API_REDDIT_PASSWORD: Optional[str] = Field(default=None) - API_REDDIT_USERNAME: Optional[str] = Field(default=None) - API_REDDIT_USER_AGENT: Optional[str] = Field(default=None) - API_SANTIMENT_KEY: Optional[str] = Field(default=None) - API_SHROOM_KEY: Optional[str] = Field(default=None) - API_SMARTSTAKE_KEY: Optional[str] = Field(default=None) - API_SMARTSTAKE_TOKEN: Optional[str] = Field(default=None) - API_TOKEN_TERMINAL_KEY: Optional[str] = Field(default=None) - API_WHALE_ALERT_KEY: Optional[str] = Field(default=None) diff --git a/openbb_platform/core/openbb_core/app/model/hub/hub_session.py b/openbb_platform/core/openbb_core/app/model/hub/hub_session.py index fb0142eafc1..7a9cf615991 100644 --- a/openbb_platform/core/openbb_core/app/model/hub/hub_session.py +++ b/openbb_platform/core/openbb_core/app/model/hub/hub_session.py @@ -1,9 +1,13 @@ +"""Model for HubSession.""" + from typing import Optional from pydantic import BaseModel, SecretStr, field_serializer class HubSession(BaseModel): + """Model for HubSession.""" + username: Optional[str] = None email: str primary_usage: str @@ -12,10 +16,12 @@ class HubSession(BaseModel): access_token: SecretStr def __repr__(self) -> str: + """Return string representation.""" return f"{self.__class__.__name__}\n\n" + "\n".join( f"{k}: {v}" for k, v in self.model_dump().items() ) @field_serializer("access_token", when_used="json-unless-none") def _dump_secret(self, v): + """Dump secret.""" return v.get_secret_value() diff --git a/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py b/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py index aebcf6afa31..16ea348319e 100644 --- a/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py +++ b/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py @@ -1,12 +1,15 @@ -# from typing import Dict, List, Union +"""Hub user settings model.""" + +from typing import Dict, Optional -from openbb_core.app.model.hub.features_keys import FeaturesKeys from pydantic import BaseModel, ConfigDict, Field class HubUserSettings(BaseModel): + """Hub user settings model.""" + # features_settings: Dict[str, str] - features_keys: FeaturesKeys = Field(default_factory=FeaturesKeys) + features_keys: Dict[str, Optional[str]] = Field(default_factory=dict) # features_sources: Dict[str, List[str]] # features_terminal_style: Dict[str, Union[str, Dict[str, str]]] diff --git a/openbb_platform/core/openbb_core/app/model/metadata.py b/openbb_platform/core/openbb_core/app/model/metadata.py index cf421fca7e0..9162bfa0bea 100644 --- a/openbb_platform/core/openbb_core/app/model/metadata.py +++ b/openbb_platform/core/openbb_core/app/model/metadata.py @@ -1,3 +1,5 @@ +"""Metadata model.""" + from datetime import datetime from inspect import isclass from typing import Any, Dict, Optional, Sequence, Union @@ -10,6 +12,8 @@ from openbb_core.provider.abstract.data import Data class Metadata(BaseModel): + """Metadata of a command execution.""" + arguments: Dict[str, Any] = Field( default_factory=dict, description="Arguments of the command.", @@ -21,6 +25,7 @@ class Metadata(BaseModel): timestamp: datetime = Field(description="Execution starting timestamp.") def __repr__(self) -> str: + """Return string representation.""" return f"{self.__class__.__name__}\n\n" + "\n".join( f"{k}: {v}" for k, v in self.model_dump().items() ) @@ -29,96 +34,108 @@ class Metadata(BaseModel): @classmethod def scale_arguments(cls, v): """Scale arguments. + This function is meant to limit the size of the input arguments of a command. If the type is one of the following: `Data`, `List[Data]`, `DataFrame`, `List[DataFrame]`, `Series`, `List[Series]` or `ndarray`, the value of the argument is swapped by a dictionary containing the type and the columns. If the type is not one of the previous, the value is kept or trimmed to 80 characters. """ - for arg, arg_val in v.items(): - new_arg_val: Optional[Union[str, dict[str, Sequence[Any]]]] = None + arguments: Dict[str, Any] = {} + for item in ["provider_choices", "standard_params", "extra_params"]: + arguments[item] = {} + # The item could be class or it could a dictionary. + v_item = ( + v.__dict__.get(item, {}) if not isinstance(v, dict) else v.get(item, {}) + ) + # The item might not be a dictionary yet. + v_item = v_item if isinstance(v_item, dict) else v_item.__dict__ + for arg, arg_val in v_item.items(): + new_arg_val: Optional[Union[str, dict[str, Sequence[Any]]]] = None - # Data - if isclass(type(arg_val)) and issubclass(type(arg_val), Data): - new_arg_val = { - "type": f"{type(arg_val).__name__}", - "columns": list(arg_val.model_dump().keys()), - } + # Data + if isclass(type(arg_val)) and issubclass(type(arg_val), Data): + new_arg_val = { + "type": f"{type(arg_val).__name__}", + "columns": list(arg_val.model_dump().keys()), + } - # List[Data] - if isinstance(arg_val, list) and issubclass(type(arg_val[0]), Data): - _columns = [list(d.model_dump().keys()) for d in arg_val] - ld_columns = ( - item for sublist in _columns for item in sublist - ) # flatten - new_arg_val = { - "type": f"List[{type(arg_val[0]).__name__}]", - "columns": list(set(ld_columns)), - } + # List[Data] + if isinstance(arg_val, list) and issubclass(type(arg_val[0]), Data): + _columns = [list(d.model_dump().keys()) for d in arg_val] + ld_columns = ( + item for sublist in _columns for item in sublist + ) # flatten + new_arg_val = { + "type": f"List[{type(arg_val[0]).__name__}]", + "columns": list(set(ld_columns)), + } - # DataFrame - elif isinstance(arg_val, pd.DataFrame): - df_columns = ( - list(arg_val.index.names) + arg_val.columns.tolist() - if any(index is not None for index in list(arg_val.index.names)) - else arg_val.columns.tolist() - ) - new_arg_val = { - "type": f"{type(arg_val).__name__}", - "columns": df_columns, - } - - # List[DataFrame] - elif isinstance(arg_val, list) and issubclass( - type(arg_val[0]), pd.DataFrame - ): - ldf_columns = [ - ( - list(df.index.names) + df.columns.tolist() - if any(index is not None for index in list(df.index.names)) - else df.columns.tolist() + # DataFrame + elif isinstance(arg_val, pd.DataFrame): + df_columns = ( + list(arg_val.index.names) + arg_val.columns.tolist() + if any(index is not None for index in list(arg_val.index.names)) + else arg_val.columns.tolist() ) - for df in arg_val - ] - new_arg_val = { - "type": f"List[{type(arg_val[0]).__name__}]", - "columns": ldf_columns, - } + new_arg_val = { + "type": f"{type(arg_val).__name__}", + "columns": df_columns, + } - # Series - elif isinstance(arg_val, pd.Series): - new_arg_val = { - "type": f"{type(arg_val).__name__}", - "columns": list(arg_val.index.names) + [arg_val.name], - } + # List[DataFrame] + elif isinstance(arg_val, list) and issubclass( + type(arg_val[0]), pd.DataFrame + ): + ldf_columns = [ + ( + list(df.index.names) + df.columns.tolist() + if any(index is not None for index in list(df.index.names)) + else df.columns.tolist() + ) + for df in arg_val + ] + new_arg_val = { + "type": f"List[{type(arg_val[0]).__name__}]", + "columns": ldf_columns, + } - # List[Series] - elif isinstance(arg_val, list) and isinstance(arg_val[0], pd.Series): - ls_columns = [ - ( - list(series.index.names) + [series.name] - if any(index is not None for index in list(series.index.names)) - else series.name - ) - for series in arg_val - ] - new_arg_val = { - "type": f"List[{type(arg_val[0]).__name__}]", - "columns": ls_columns, - } + # Series + elif isinstance(arg_val, pd.Series): + new_arg_val = { + "type": f"{type(arg_val).__name__}", + "columns": list(arg_val.index.names) + [arg_val.name], + } - # ndarray - elif isinstance(arg_val, np.ndarray): - new_arg_val = { - "type": f"{type(arg_val).__name__}", - "columns": list(arg_val.dtype.names or []), - } + # List[Series] + elif isinstance(arg_val, list) and isinstance(arg_val[0], pd.Series): + ls_columns = [ + ( + list(series.index.names) + [series.name] + if any( + index is not None for index in list(series.index.names) + ) + else series.name + ) + for series in arg_val + ] + new_arg_val = { + "type": f"List[{type(arg_val[0]).__name__}]", + "columns": ls_columns, + } - else: - str_repr_arg_val = str(arg_val) - if len(str_repr_arg_val) > 80: - new_arg_val = str_repr_arg_val[:80] + # ndarray + elif isinstance(arg_val, np.ndarray): + new_arg_val = { + "type": f"{type(arg_val).__name__}", + "columns": list(arg_val.dtype.names or []), + } - v[arg] = new_arg_val or arg_val + else: + str_repr_arg_val = str(arg_val) + if len(str_repr_arg_val) > 80: + new_arg_val = str_repr_arg_val[:80] - return v + arguments[item][arg] = new_arg_val or arg_val + + return arguments diff --git a/openbb_platform/core/openbb_core/app/model/obbject.py b/openbb_platform/core/openbb_core/app/model/obbject.py index 89232702405..2db09e0cd00 100644 --- a/openbb_platform/core/openbb_core/app/model/obbject.py +++ b/openbb_platform/core/openbb_core/app/model/obbject.py @@ -1,6 +1,5 @@ """The OBBject.""" -from re import sub from typing import ( TYPE_CHECKING, Any, @@ -26,6 +25,7 @@ from openbb_core.app.model.abstract.tagged import Tagged from openbb_core.app.model.abstract.warning import Warning_ from openbb_core.app.model.charts.chart import Chart from openbb_core.app.utils import basemodel_to_df +from openbb_core.provider.abstract.annotated_result import AnnotatedResult from openbb_core.provider.abstract.data import Data if TYPE_CHECKING: @@ -81,40 +81,6 @@ class OBBject(Tagged, Generic[T]): ] return f"{self.__class__.__name__}\n\n" + "\n".join(items) - @classmethod - def results_type_repr(cls, params: Optional[Any] = None) -> str: - """Return the results type representation.""" - results_field = cls.model_fields.get("results") - type_repr = "Any" - if results_field: - type_ = params[0] if params else results_field.annotation - type_repr = getattr(type_, "__name__", str(type_)) - - if json_schema_extra := getattr(results_field, "json_schema_extra", {}): - model = json_schema_extra.get("model", "Any") - - if json_schema_extra.get("is_union"): - return f"Union[List[{model}], {model}]" - if json_schema_extra.get("has_list"): - return f"List[{model}]" - - return model - - if "typing." in str(type_): - unpack_optional = sub(r"Optional\[(.*)\]", r"\1", str(type_)) - type_repr = sub( - r"(\w+\.)*(\w+)?(\, NoneType)?", - r"\2", - unpack_optional, - ) - - return type_repr - - @classmethod - def model_parametrized_name(cls, params: Any) -> str: - """Return the model name with the parameters.""" - return f"OBBject[{cls.results_type_repr(params)}]" - def to_df( self, index: Optional[Union[str, None]] = "date", sort_by: Optional[str] = None ) -> pd.DataFrame: @@ -277,6 +243,24 @@ class OBBject(Tagged, Generic[T]): del results["index"] return results + def to_llm(self) -> Union[Dict[Hashable, Any], List[Dict[Hashable, Any]]]: + """Convert results field to an LLM compatible output. + + Returns + ------- + Union[Dict[Hashable, Any], List[Dict[Hashable, Any]]] + Dictionary of lists or list of dictionaries if orient is "records". + """ + df = self.to_dataframe(index=None) + + results = df.to_json( + orient="records", + date_format="iso", + date_unit="s", + ) + + return results + def show(self, **kwargs: Any) -> None: """Display chart.""" # pylint: disable=no-member @@ -299,4 +283,9 @@ class OBBject(Tagged, Generic[T]): OBBject[ResultsType] OBBject with results. """ - return cls(results=await query.execute()) + results = await query.execute() + if isinstance(results, AnnotatedResult): + return cls( + results=results.result, extra={"results_metadata": results.metadata} + ) + return cls(results=results) diff --git a/openbb_platform/core/openbb_core/app/model/preferences.py b/openbb_platform/core/openbb_core/app/model/preferences.py index 57987020b17..19c2d7f745d 100644 --- a/openbb_platform/core/openbb_core/app/model/preferences.py +++ b/openbb_platform/core/openbb_core/app/model/preferences.py @@ -9,24 +9,28 @@ from pydantic import BaseModel, ConfigDict, Field, PositiveInt class Preferences(BaseModel): """Preferences for the OpenBB platform.""" - data_directory: str = str(Path.home() / "OpenBBUserData") - export_directory: str = str(Path.home() / "OpenBBUserData" / "exports") - user_styles_directory: str = str(Path.home() / "OpenBBUserData" / "styles" / "user") cache_directory: str = str(Path.home() / "OpenBBUserData" / "cache") chart_style: Literal["dark", "light"] = "dark" + data_directory: str = str(Path.home() / "OpenBBUserData") + export_directory: str = str(Path.home() / "OpenBBUserData" / "exports") + metadata: bool = True + output_type: Literal[ + "OBBject", "dataframe", "polars", "numpy", "dict", "chart", "llm" + ] = Field( + default="OBBject", + description="Python default output type.", + validate_default=True, + ) plot_enable_pywry: bool = True - plot_pywry_width: PositiveInt = 1400 - plot_pywry_height: PositiveInt = 762 plot_open_export: bool = ( False # Whether to open plot image exports after they are created ) - table_style: Literal["dark", "light"] = "dark" + plot_pywry_height: PositiveInt = 762 + plot_pywry_width: PositiveInt = 1400 request_timeout: PositiveInt = 15 - metadata: bool = True - output_type: Literal["OBBject", "dataframe", "polars", "numpy", "dict", "chart"] = ( - Field(default="OBBject", description="Python default output type.") - ) show_warnings: bool = True + table_style: Literal["dark", "light"] = "dark" + user_styles_directory: str = str(Path.home() / "OpenBBUserData" / "styles" / "user") model_config = ConfigDict(validate_assignment=True) diff --git a/openbb_platform/core/openbb_core/app/model/profile.py b/openbb_platform/core/openbb_core/app/model/profile.py index 64959e5c798..f1e62db0393 100644 --- a/openbb_platform/core/openbb_core/app/model/profile.py +++ b/openbb_platform/core/openbb_core/app/model/profile.py @@ -1,3 +1,5 @@ +"""Profile model.""" + from typing import Optional from pydantic import BaseModel, ConfigDict, Field @@ -6,10 +8,13 @@ from openbb_core.app.model.hub.hub_session import HubSession class Profile(BaseModel): + """Profile.""" + hub_session: Optional[HubSession] = Field(default=None) model_config = ConfigDict(validate_assignment=True) def __repr__(self) -> str: + """Return string representation.""" return f"{self.__class__.__name__}\n\n" + "\n".join( f"{k}: {v}" for k, v in self.model_dump().items() ) diff --git a/openbb_platform/core/openbb_core/app/model/python_settings.py b/openbb_platform/core/openbb_core/app/model/python_settings.py new file mode 100644 index 00000000000..f03648c92b4 --- /dev/null +++ b/openbb_platform/core/openbb_core/app/model/python_settings.py @@ -0,0 +1,23 @@ +"""Python configuration settings model.""" + +from typing import List, Optional + +from pydantic import BaseModel, Field, PositiveInt + + +class PythonSettings(BaseModel): + """Settings model for Python interface configuration.""" + + docstring_sections: List[str] = Field( + default_factory=lambda: ["description", "parameters", "returns", "examples"], + description="Sections to include in autogenerated docstrings.", + ) + docstring_max_length: Optional[PositiveInt] = Field( + default=None, description="Maximum length of autogenerated docstrings." + ) + + def __repr__(self) -> str: + """Return a string representation of the model.""" + return f"{self.__class__.__name__}\n\n" + "\n".join( + f"{k}: {v}" for k, v in self.model_dump().items() + ) diff --git a/openbb_platform/core/openbb_core/app/model/results/__init__.py b/openbb_platform/core/openbb_core/app/model/results/__init__.py index e69de29bb2d..a87e3e8784f 100644 --- a/openbb_platform/core/openbb_core/app/model/results/__init__.py +++ b/openbb_platform/core/openbb_core/app/model/results/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core App Model Results.""" diff --git a/openbb_platform/core/openbb_core/app/model/results/empty.py b/openbb_platform/core/openbb_core/app/model/results/empty.py index 4b23c903033..0f9779a681d 100644 --- a/openbb_platform/core/openbb_core/app/model/results/empty.py +++ b/openbb_platform/core/openbb_core/app/model/results/empty.py @@ -1,5 +1,7 @@ +"""Empty results.""" + from openbb_core.app.model.abstract.results import Results class Empty(Results): - pass + """Empty results.""" diff --git a/openbb_platform/core/openbb_core/app/model/system_settings.py b/openbb_platform/core/openbb_core/app/model/system_settings.py index 39ceebbc813..c5439fb760d 100644 --- a/openbb_platform/core/openbb_core/app/model/system_settings.py +++ b/openbb_platform/core/openbb_core/app/model/system_settings.py @@ -14,8 +14,9 @@ from openbb_core.app.constants import ( USER_SETTINGS_PATH, ) from openbb_core.app.model.abstract.tagged import Tagged -from openbb_core.app.model.fast_api_settings import FastAPISettings -from openbb_core.app.version import VERSION +from openbb_core.app.model.api_settings import APISettings +from openbb_core.app.model.python_settings import PythonSettings +from openbb_core.app.version import CORE_VERSION, VERSION class SystemSettings(Tagged): @@ -28,6 +29,7 @@ class SystemSettings(Tagged): # OpenBB section version: str = VERSION + core: str = CORE_VERSION home_directory: str = str(HOME_DIRECTORY) openbb_directory: str = str(OPENBB_DIRECTORY) user_settings_path: str = str(USER_SETTINGS_PATH) @@ -45,7 +47,10 @@ class SystemSettings(Tagged): log_collect: bool = True # API section - api_settings: FastAPISettings = Field(default_factory=FastAPISettings) + api_settings: APISettings = Field(default_factory=APISettings) + + # Python section + python_settings: PythonSettings = Field(default_factory=PythonSettings) # Others debug_mode: bool = False diff --git a/openbb_platform/core/openbb_core/app/provider_interface.py b/openbb_platform/core/openbb_core/app/provider_interface.py index ac43a50a16a..0932704cb96 100644 --- a/openbb_platform/core/openbb_core/app/provider_interface.py +++ b/openbb_platform/core/openbb_core/app/provider_interface.py @@ -2,18 +2,33 @@ from dataclasses import dataclass, make_dataclass from difflib import SequenceMatcher -from typing import Any, Callable, Dict, List, Literal, Optional, Tuple, Type, Union +from typing import ( + Annotated, + Any, + Callable, + Dict, + List, + Literal, + Optional, + Tuple, + Type, + Union, +) from fastapi import Query from pydantic import ( BaseModel, ConfigDict, + Discriminator, Field, + SerializeAsAny, + Tag, create_model, ) from pydantic.fields import FieldInfo from openbb_core.app.model.abstract.singleton import SingletonMeta +from openbb_core.app.model.obbject import OBBject from openbb_core.provider.query_executor import QueryExecutor from openbb_core.provider.registry_map import MapType, RegistryMap from openbb_core.provider.utils.helpers import to_snake_case @@ -92,12 +107,15 @@ class ProviderInterface(metaclass=SingletonMeta): self._registry_map = registry_map or RegistryMap() self._query_executor = query_executor or QueryExecutor - self._map = self._registry_map.map + self._map = self._registry_map.standard_extra # TODO: Try these 4 methods in a single iteration self._model_providers_map = self._generate_model_providers_dc(self._map) self._params = self._generate_params_dc(self._map) self._data = self._generate_data_dc(self._map) self._return_schema = self._generate_return_schema(self._data) + self._return_annotations = self._generate_return_annotations( + self._registry_map.original_models + ) self._available_providers = self._registry_map.available_providers self._provider_choices = self._get_provider_choices(self._available_providers) @@ -148,9 +166,9 @@ class ProviderInterface(metaclass=SingletonMeta): return self._registry_map.models @property - def return_map(self) -> Dict[str, Dict[str, Any]]: + def return_annotations(self) -> Dict[str, Type[OBBject]]: """Return map.""" - return self._registry_map.return_map + return self._return_annotations def create_executor(self) -> QueryExecutor: """Get query executor.""" @@ -164,9 +182,11 @@ class ProviderInterface(metaclass=SingletonMeta): curr_name = current.name curr_type: Optional[Type] = current.annotation curr_desc = getattr(current.default, "description", "") + curr_json_schema_extra = getattr(current.default, "json_schema_extra", {}) inc_type: Optional[Type] = incoming.annotation inc_desc = getattr(incoming.default, "description", "") + inc_json_schema_extra = getattr(incoming.default, "json_schema_extra", {}) def split_desc(desc: str) -> str: """Split field description.""" @@ -174,6 +194,24 @@ class ProviderInterface(metaclass=SingletonMeta): detail = item[0] if item else "" return detail + def merge_json_schema_extra(curr: dict, inc: dict) -> dict: + """Merge json schema extra.""" + for key in curr.keys() & inc.keys(): + # Merge keys that are in both dictionaries if both are lists + curr_value = curr[key] + inc_value = inc[key] + if isinstance(curr_value, list) and isinstance(inc_value, list): + curr[key] = list(set(curr.get(key, []) + inc.get(key, []))) + inc.pop(key) + + # Add any remaining keys from inc to curr + curr.update(inc) + return curr + + json_schema_extra: dict = merge_json_schema_extra( + curr=curr_json_schema_extra or {}, inc=inc_json_schema_extra or {} + ) + curr_detail = split_desc(curr_desc) inc_detail = split_desc(inc_desc) @@ -192,6 +230,7 @@ class ProviderInterface(metaclass=SingletonMeta): default=getattr(current.default, "default", None), title=providers, description=new_desc, + json_schema_extra=json_schema_extra, ) merged_type: Optional[Type] = ( @@ -221,7 +260,9 @@ class ProviderInterface(metaclass=SingletonMeta): additional_description += " Multiple comma separated items allowed." else: additional_description += ( - " Multiple comma separated items allowed for provider(s): " + ", ".join(multiple) + "." # type: ignore + " Multiple comma separated items allowed for provider(s): " + + ", ".join(multiple) # type: ignore[arg-type] + + "." ) provider_field = ( @@ -375,7 +416,7 @@ class ProviderInterface(metaclass=SingletonMeta): This creates a dictionary of dataclasses that can be injected as a FastAPI dependency. - Example: + Example ------- @dataclass class CompanyNews(StandardParams): @@ -416,7 +457,7 @@ class ProviderInterface(metaclass=SingletonMeta): This creates a dictionary that maps model names to dataclasses that can be injected as a FastAPI dependency. - Example: + Example ------- @dataclass class CompanyNews(ProviderChoices): @@ -450,7 +491,7 @@ class ProviderInterface(metaclass=SingletonMeta): This creates a dictionary of dataclasses. - Example: + Example ------- class EquityHistoricalData(StandardData): date: date @@ -525,3 +566,60 @@ class ProviderInterface(metaclass=SingletonMeta): fields=[("provider", Literal[tuple(available_providers)])], # type: ignore bases=(ProviderChoices,), ) + + def _generate_return_annotations( + self, original_models: Dict[str, Dict[str, Any]] + ) -> Dict[str, Type[OBBject]]: + """Generate return annotations for FastAPI. + + Example + ------- + class Data(BaseModel): + ... + + class EquityData(Data): + price: float + + class YFEquityData(EquityData): + yf_field: str + + class AVEquityData(EquityData): + av_field: str + + class OBBject(BaseModel): + results: List[ + SerializeAsAny[ + Annotated[ + Union[ + Annotated[YFEquityData, Tag("yf")], + Annotated[AVEquityData, Tag("av")], + ], + Discriminator(get_provider), + ] + ] + ] + """ + + def get_provider(v: Type[BaseModel]): + """Callable to discriminate which BaseModel to use.""" + return getattr(v, "_provider", None) + + annotations = {} + for name, models in original_models.items(): + outer = set() + args = set() + for provider, model in models.items(): + data = model["data"] + outer.add(model["results_type"]) + args.add(Annotated[data, Tag(provider)]) + # We set the provider to use it in discriminator function + setattr(data, "_provider", provider) + meta = Discriminator(get_provider) if len(args) > 1 else None + inner = SerializeAsAny[Annotated[Union[tuple(args)], meta]] # type: ignore[misc,valid-type] + full = Union[tuple((o[inner] if o else inner) for o in outer)] # type: ignore[valid-type] + annotations[name] = create_model( + f"OBBject_{name}", + __base__=OBBject[full], # type: ignore[valid-type] + __doc__=f"OBBject with results of type {name}", + ) + return annotations diff --git a/openbb_platform/core/openbb_core/app/router.py b/openbb_platform/core/openbb_core/app/router.py index 218629be8ba..c9d196216aa 100644 --- a/openbb_platform/core/openbb_core/app/router.py +++ b/openbb_platform/core/openbb_core/app/router.py @@ -12,7 +12,6 @@ from typing import ( Mapping, Optional, Type, - Union, get_args, get_origin, get_type_hints, @@ -20,7 +19,7 @@ from typing import ( ) from fastapi import APIRouter, Depends -from pydantic import BaseModel, Field, SerializeAsAny, Tag, create_model +from pydantic import BaseModel from pydantic.v1.validators import find_validators from typing_extensions import Annotated, ParamSpec, _AnnotatedAlias @@ -203,15 +202,33 @@ class Router: """API Router.""" return self._api_router + @property + def prefix(self) -> str: + """Prefix.""" + return self._api_router.prefix + + @property + def description(self) -> Optional[str]: + """Description.""" + return self._description + + @property + def routers(self) -> Dict[str, "Router"]: + """Routers nested within the Router, i.e. sub-routers.""" + return self._routers + def __init__( self, prefix: str = "", + description: Optional[str] = None, ) -> None: """Initialize Router.""" self._api_router = APIRouter( prefix=prefix, responses={404: {"description": "Not found"}}, ) + self._description = description + self._routers: Dict[str, Router] = {} @overload def command(self, func: Optional[Callable[P, OBBject]]) -> Callable[P, OBBject]: @@ -290,10 +307,41 @@ class Router: prefix: str = "", ): """Include router.""" - tags = [prefix[1:]] if prefix else None + tags = [prefix.strip("/")] if prefix else None self._api_router.include_router( router=router.api_router, prefix=prefix, tags=tags # type: ignore ) + name = prefix if prefix else router.prefix + self._routers[name.strip("/")] = router + + def get_attr(self, path: str, attr: str) -> Any: + """Get router attribute from path. + + Parameters + ---------- + path : str + Path to the router or nested router. + E.g. "/equity" or "/equity/price". + attr : str + Attribute to get. + + Returns + ------- + Any + Attribute value. + """ + return self._search_attr(self, path, attr) + + @staticmethod + def _search_attr(router: "Router", path: str, attr: str) -> Any: + """Recursively search router attribute from path.""" + path = path.strip("/") + first = path.split("/")[0] + if first in router.routers: + return Router._search_attr( + router.routers[first], "/".join(path.split("/")[1:]), attr + ) + return getattr(router, attr, None) class SignatureInspector: @@ -348,10 +396,9 @@ class SignatureInspector: callable_=provider_interface.params[model]["extra"], ) - func = cls.inject_return_type( + func = cls.inject_return_annotation( func=func, - return_map=provider_interface.return_map.get(model, {}), - model=model, + annotation=provider_interface.return_annotations[model], ) else: @@ -368,60 +415,6 @@ class SignatureInspector: return func - @staticmethod - def inject_return_type( - func: Callable[P, OBBject], - return_map: Dict[str, dict], - model: str, - ) -> Callable[P, OBBject]: - """Inject full return model into the function. Also updates __name__ and __doc__ for API schemas.""" - results: Dict[str, Any] = {"list_type": [], "dict_type": []} - - for provider, return_data in return_map.items(): - if return_data["is_list"]: - results["list_type"].append( - Annotated[return_data["model"], Tag(provider)] - ) - continue - - results["dict_type"].append(Annotated[return_data["model"], Tag(provider)]) - - list_models, union_models = results.values() - - return_types = [] - for t, v in results.items(): - if not v: - continue - - inner_type: Any = SerializeAsAny[ # type: ignore[misc,valid-type] - Annotated[ - Union[tuple(v)], # type: ignore - Field(discriminator="provider"), - ] - ] - return_types.append(List[inner_type] if t == "list_type" else inner_type) - - return_type = create_model( - f"OBBject_{model}", - __base__=OBBject, - __doc__=f"OBBject with results of type {model}", - results=( - Optional[Union[tuple(return_types)]], # type: ignore - Field( - None, - description="Serializable results.", - json_schema_extra={ - "model": model, - "has_list": bool(len(list_models) > 0), - "is_union": bool(list_models and union_models), - }, - ), - ), - ) - - func.__annotations__["return"] = return_type - return func - @staticmethod def polish_return_schema(func: Callable[P, OBBject]) -> Callable[P, OBBject]: """Polish API schemas by filling `__doc__` and `__name__`.""" @@ -468,6 +461,14 @@ class SignatureInspector: func.__annotations__[arg] = Annotated[callable_, Depends()] # type: ignore return func + @staticmethod + def inject_return_annotation( + func: Callable[P, OBBject], annotation: Type[OBBject] + ) -> Callable[P, OBBject]: + """Annotate function with return annotation.""" + func.__annotations__["return"] = annotation + return func + @staticmethod def get_description(func: Callable) -> str: """Get description from docstring.""" diff --git a/openbb_platform/core/openbb_core/app/service/auth_service.py b/openbb_platform/core/openbb_core/app/service/auth_service.py index 6ce4ecbb221..3bbe97c92dc 100644 --- a/openbb_platform/core/openbb_core/app/service/auth_service.py +++ b/openbb_platform/core/openbb_core/app/service/auth_service.py @@ -29,7 +29,7 @@ class AuthService(metaclass=SingletonMeta): """Auth service.""" def __init__(self, ext_name: Optional[str] = EXT_NAME) -> None: - """Initializes AuthService.""" + """Initialize AuthService.""" if not self._load_extension(ext_name): self._router = default_router self._auth_hook = default_auth_hook @@ -37,22 +37,22 @@ class AuthService(metaclass=SingletonMeta): @property def router(self) -> APIRouter: - """Gets router.""" + """Get router.""" return self._router @property def auth_hook(self) -> Callable[..., Awaitable[None]]: - """Gets general authentication hook.""" + """Get general authentication hook.""" return self._auth_hook @property def user_settings_hook(self) -> Callable[..., Awaitable[UserSettings]]: - """Gets user settings hook.""" + """Get user settings hook.""" return self._user_settings_hook @staticmethod def _is_installed(ext_name: str) -> bool: - """Checks if auth_extension is installed.""" + """Check if auth_extension is installed.""" extension = ExtensionLoader().get_core_entry_point(ext_name) or False return extension and ext_name == extension.name # type: ignore diff --git a/openbb_platform/core/openbb_core/app/service/hub_service.py b/openbb_platform/core/openbb_core/app/service/hub_service.py index 22e6330bd76..bc932699ed5 100644 --- a/openbb_platform/core/openbb_core/app/service/hub_service.py +++ b/openbb_platform/core/openbb_core/app/service/hub_service.py @@ -1,6 +1,7 @@ """Hub manager class.""" from typing import Optional +from warnings import warn from fastapi import HTTPException from jose import JWTError @@ -8,13 +9,11 @@ from jose.exceptions import ExpiredSignatureError from jose.jwt import decode, get_unverified_header from openbb_core.app.model.abstract.error import OpenBBError from openbb_core.app.model.credentials import Credentials -from openbb_core.app.model.hub.features_keys import FeaturesKeys from openbb_core.app.model.hub.hub_session import HubSession from openbb_core.app.model.hub.hub_user_settings import HubUserSettings from openbb_core.app.model.profile import Profile from openbb_core.app.model.user_settings import UserSettings from openbb_core.env import Env -from pydantic import SecretStr from requests import get, post, put @@ -22,14 +21,28 @@ class HubService: """Hub service class.""" TIMEOUT = 10 + # Mapping of V3 keys to V4 keys for backward compatibility + V3TOV4 = { + "API_KEY_ALPHAVANTAGE": "alpha_vantage_api_key", + "API_BIZTOC_TOKEN": "biztoc_api_key", + "API_FRED_KEY": "fred_api_key", + "API_KEY_FINANCIALMODELINGPREP": "fmp_api_key", + "API_INTRINIO_KEY": "intrinio_api_key", + "API_POLYGON_KEY": "polygon_api_key", + "API_KEY_QUANDL": "nasdaq_api_key", + "API_TRADIER_TOKEN": "tradier_api_key", + } + V4TOV3 = {v: k for k, v in V3TOV4.items()} def __init__( self, session: Optional[HubSession] = None, base_url: Optional[str] = None, ): + """Initialize Hub service.""" self._base_url = base_url or Env().HUB_BACKEND self._session = session + self._hub_user_settings: Optional[HubUserSettings] = None @property def base_url(self) -> str: @@ -80,13 +93,10 @@ class HubService: def pull(self) -> UserSettings: """Pull user settings from Hub.""" if self._session: - hub_user_settings = self._get_user_settings(self._session) - if hub_user_settings: - profile = Profile( - hub_session=self._session, - ) - credentials = self.hub2platform(hub_user_settings) - return UserSettings(profile=profile, credentials=credentials) + self._hub_user_settings = self._get_user_settings(self._session) + profile = Profile(hub_session=self._session) + credentials = self.hub2platform(self._hub_user_settings) + return UserSettings(profile=profile, credentials=credentials) raise OpenBBError( "No session found. Login or provide a 'HubSession' on initialization." ) @@ -215,42 +225,38 @@ class HubService: detail = response.json().get("detail", None) raise HTTPException(status_code, detail) - @classmethod - def hub2platform(cls, settings: HubUserSettings) -> Credentials: + def hub2platform(self, settings: HubUserSettings) -> Credentials: """Convert Hub user settings to Platform models.""" - # TODO: Hub is getting credentials from `all_api_keys.json`, which uses - # the terminal names conventions. We need to update it to use a file that - # lives here in the platform and maps the credential names between the two. - credentials = Credentials( - alpha_vantage_api_key=settings.features_keys.API_KEY_ALPHAVANTAGE, - biztoc_api_key=settings.features_keys.API_BIZTOC_TOKEN, - fred_api_key=settings.features_keys.API_FRED_KEY, - fmp_api_key=settings.features_keys.API_KEY_FINANCIALMODELINGPREP, - intrinio_api_key=settings.features_keys.API_INTRINIO_KEY, - polygon_api_key=settings.features_keys.API_POLYGON_KEY, - nasdaq_api_key=settings.features_keys.API_KEY_QUANDL, - ) - return credentials + if any(k in settings.features_keys for k in self.V3TOV4): + deprecated = { + k: v for k, v in self.V3TOV4.items() if k in settings.features_keys + } + msg = "" + for k, v in deprecated.items(): + msg += f"\n'{k}' -> '{v}', " + msg = msg.strip(", ") + warn( + message=f"\nDeprecated v3 credentials found.\n{msg}" + "\n\nYou can update them at https://my.openbb.co/app/platform/credentials.", + ) + # We give priority to v4 keys over v3 keys if both are present + hub_credentials = { + self.V3TOV4.get(k, k): settings.features_keys.get(self.V3TOV4.get(k, k), v) + for k, v in settings.features_keys.items() + } + return Credentials(**hub_credentials) - @classmethod - def platform2hub(cls, credentials: Credentials) -> HubUserSettings: + def platform2hub(self, credentials: Credentials) -> HubUserSettings: """Convert Platform models to Hub user settings.""" - - def get_cred(cred: str) -> Optional[str]: - secret_str: Optional[SecretStr] = getattr(credentials, cred, None) - return secret_str.get_secret_value() if secret_str else None - - features_keys = FeaturesKeys( - API_BIZTOC_TOKEN=get_cred("biztoc_api_key"), - API_FRED_KEY=get_cred("fred_api_key"), - API_INTRINIO_KEY=get_cred("intrinio_api_key"), - API_KEY_ALPHAVANTAGE=get_cred("alpha_vantage_api_key"), - API_KEY_FINANCIALMODELINGPREP=get_cred("fmp_api_key"), - API_POLYGON_KEY=get_cred("polygon_api_key"), - API_KEY_QUANDL=get_cred("nasdaq_api_key"), - ) - hub_user_settings = HubUserSettings(features_keys=features_keys) - return hub_user_settings + # Dump mode json ensures SecretStr values are serialized as strings + credentials = credentials.model_dump(mode="json", exclude_none=True) + settings = self._hub_user_settings or HubUserSettings() + for v4_k, v in sorted(credentials.items()): + v3_k = self.V4TOV3.get(v4_k, None) + # If v3 key was there, we keep it + k = v3_k if v3_k in settings.features_keys else v4_k + settings.features_keys[k] = v + return settings @staticmethod def check_token_expiration(token: str) -> None: diff --git a/openbb_platform/core/openbb_core/app/service/system_service.py b/openbb_platform/core/openbb_core/app/service/system_service.py index c18bc1354ef..906ff6808ec 100644 --- a/openbb_platform/core/openbb_core/app/service/system_service.py +++ b/openbb_platform/core/openbb_core/app/service/system_service.py @@ -20,6 +20,7 @@ class SystemService(metaclass=SingletonMeta): "headless", "logging_sub_app", "api_settings", + "python_settings", "debug_mode", } @@ -29,6 +30,7 @@ class SystemService(metaclass=SingletonMeta): self, **kwargs, ): + """Initialize system service.""" self._system_settings = self._read_default_system_settings( path=self.SYSTEM_SETTINGS_PATH, **kwargs ) diff --git a/openbb_platform/core/openbb_core/app/service/user_service.py b/openbb_platform/core/openbb_core/app/service/user_service.py index 9b6fcff50bc..8ab438782eb 100644 --- a/openbb_platform/core/openbb_core/app/service/user_service.py +++ b/openbb_platform/core/openbb_core/app/service/user_service.py @@ -20,6 +20,7 @@ class UserService(metaclass=SingletonMeta): self, default_user_settings: Optional[UserSettings] = None, ): + """Initialize user service.""" self._default_user_settings = ( default_user_settings or self.read_default_user_settings() ) diff --git a/openbb_platform/core/openbb_core/app/static/__init__.py b/openbb_platform/core/openbb_core/app/static/__init__.py index e69de29bb2d..bbfce45ce15 100644 --- a/openbb_platform/core/openbb_core/app/static/__init__.py +++ b/openbb_platform/core/openbb_core/app/static/__init__.py @@ -0,0 +1 @@ +"""OpenBB Core App Static.""" diff --git a/openbb_platform/core/openbb_core/app/static/account.py b/openbb_platform/core/openbb_core/app/static/account.py index d589c265663..b17eef7c713 100644 --- a/openbb_platform/core/openbb_core/app/static/account.py +++ b/openbb_platform/core/openbb_core/app/static/account.py @@ -34,6 +34,7 @@ class Account: self._openbb_directory = ( base_app._command_runner.system_settings.openbb_directory ) + self._hub_service: Optional[HubService] = None def __repr__(self) -> str: """Human readable representation of the object.""" @@ -120,18 +121,20 @@ class Account: Optional[UserSettings] User settings: profile, credentials, preferences """ - hs = self._create_hub_service(email, password, pat) - incoming = hs.pull() + self._hub_service = self._create_hub_service(email, password, pat) + incoming = self._hub_service.pull() updated: UserSettings = UserService.update_default(incoming) self._base_app._command_runner.user_settings = updated if remember_me: Path(self._openbb_directory).mkdir(parents=False, exist_ok=True) session_file = Path(self._openbb_directory, self.SESSION_FILE) with open(session_file, "w") as f: - if not hs.session: + if not self._hub_service.session: raise OpenBBError("Not connected to hub.") - json.dump(hs.session.model_dump(mode="json"), f, indent=4) + json.dump( + self._hub_service.session.model_dump(mode="json"), f, indent=4 + ) if return_settings: return self._base_app._command_runner.user_settings @@ -151,14 +154,12 @@ class Account: Optional[UserSettings] User settings: profile, credentials, preferences """ - hub_session = self._base_app._command_runner.user_settings.profile.hub_session - if not hub_session: + if not self._hub_service: UserService.write_default_user_settings( self._base_app._command_runner.user_settings ) else: - hs = HubService(hub_session) - hs.push(self._base_app._command_runner.user_settings) + self._hub_service.push(self._base_app._command_runner.user_settings) if return_settings: return self._base_app._command_runner.user_settings @@ -178,14 +179,12 @@ class Account: Optional[UserSettings] User settings: profile, credentials, preferences """ - hub_session = self._base_app._command_runner.user_settings.profile.hub_session - if not hub_session: + if not self._hub_service: self._base_app._command_runner.user_settings = ( UserService.read_default_user_settings() ) else: - hs = HubService(hub_session) - incoming = hs.pull() + incoming = self._hub_service.pull() updated: UserSettings = UserService.update_default(incoming) updated.id = self._base_app._command_runner.user_settings.id self._base_app._command_runner.user_settings = updated @@ -208,12 +207,10 @@ class Account: Optional[UserSettings] User settings: profile, credentials, preferences """ - hub_session = self._base_app._command_runner.user_settings.profile.hub_session - if not hub_session: + if not self._hub_service: raise OpenBBError("Not connected to hub.") - hs = HubService(hub_session) - hs.disconnect() + self._hub_service.disconnect() session_file = Path(self._openbb_directory, self.SESSION_FILE) if session_file.exists(): diff --git a/openbb_platform/core/openbb_core/app/static/app_factory.py b/openbb_platform/core/openbb_core/app/static/app_factory.py index 5686194c467..7141e573400 100644 --- a/openbb_platform/core/openbb_core/app/static/app_factory.py +++ b/openbb_platform/core/openbb_core/app/static/app_factory.py @@ -1,6 +1,6 @@ """App factory.""" -from typing import Optional, Type, TypeVar +from typing import Dict, Optional, Type, TypeVar from openbb_core.app.command_runner import CommandRunner from openbb_core.app.model.system_settings import SystemSettings @@ -8,6 +8,7 @@ from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.static.account import Account from openbb_core.app.static.container import Container from openbb_core.app.static.coverage import Coverage +from openbb_core.app.static.reference_loader import ReferenceLoader from openbb_core.app.version import VERSION E = TypeVar("E", bound=Type[Container]) @@ -25,10 +26,12 @@ class BaseApp: """Base app.""" def __init__(self, command_runner: CommandRunner): + """Initialize the app.""" command_runner.init_logging_service() self._command_runner = command_runner self._account = Account(self) self._coverage = Coverage(self) + self._reference = ReferenceLoader().reference @property def account(self) -> Account: @@ -50,14 +53,16 @@ class BaseApp: """Coverage menu.""" return self._coverage + @property + def reference(self) -> Dict[str, Dict]: + """Return reference data.""" + return self._reference + def create_app(extensions: Optional[E] = None) -> Type[BaseApp]: """Create the app.""" - class EmptyClass: - pass - - class App(BaseApp, extensions or EmptyClass): # type: ignore + class App(BaseApp, extensions or object): # type: ignore[misc] def __repr__(self) -> str: # pylint: disable=E1101 ext_doc = extensions.__doc__ if extensions else "" diff --git a/openbb_platform/core/openbb_core/app/static/container.py b/openbb_platform/core/openbb_core/app/static/container.py index a8a38b62963..60fc1def9bb 100644 --- a/openbb_platform/core/openbb_core/app/static/container.py +++ b/openbb_platform/core/openbb_core/app/static/container.py @@ -11,6 +11,7 @@ class Container: """Container class for the command runner session.""" def __init__(self, command_runner: CommandRunner) -> None: + """Initialize the container.""" self._command_runner = command_runner OBBject._user_settings = command_runner.user_settings OBBject._system_settings = command_runner.system_settings diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 663fa7e4340..8a2a86a6619 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -6,7 +6,8 @@ import inspect import re import shutil import sys -from dataclasses import Field +from dataclasses import Field as DCField +from functools import partial from inspect import Parameter, _empty, isclass, signature from json import dumps, load from pathlib import Path @@ -24,6 +25,7 @@ from typing import ( TypeVar, Union, get_args, + get_origin, get_type_hints, ) @@ -36,15 +38,15 @@ from starlette.routing import BaseRoute from typing_extensions import Annotated, _AnnotatedAlias from openbb_core.app.extension_loader import ExtensionLoader, OpenBBGroups -from openbb_core.app.model.custom_parameter import ( - OpenBBCustomChoices, - OpenBBCustomParameter, -) from openbb_core.app.model.example import Example +from openbb_core.app.model.field import OpenBBField +from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ProviderInterface from openbb_core.app.router import RouterLoader +from openbb_core.app.service.system_service import SystemService from openbb_core.app.static.utils.console import Console from openbb_core.app.static.utils.linters import Linters +from openbb_core.app.version import CORE_VERSION, VERSION from openbb_core.env import Env from openbb_core.provider.abstract.data import Data @@ -86,13 +88,17 @@ class PackageBuilder: self.lint = lint self.verbose = verbose self.console = Console(verbose) + self.route_map = PathHandler.build_route_map() + self.path_list = PathHandler.build_path_list(route_map=self.route_map) def auto_build(self) -> None: """Trigger build if there are differences between built and installed extensions.""" if Env().AUTO_BUILD: - add, remove = PackageBuilder._diff( - self.directory / "assets" / "extension_map.json" + reference = PackageBuilder._read( + self.directory / "assets" / "reference.json" ) + ext_map = reference.get("info", {}).get("extensions", {}) + add, remove = PackageBuilder._diff(ext_map) if add: a = ", ".join(sorted(add)) print(f"Extensions to add: {a}") # noqa: T201 @@ -113,10 +119,9 @@ class PackageBuilder: self.console.log("\nBuilding extensions package...\n") self._clean(modules) ext_map = self._get_extension_map() - self._save_extension_map(ext_map) self._save_modules(modules, ext_map) self._save_package() - self._save_reference_file() + self._save_reference_file(ext_map) if self.lint: self._run_linters() @@ -143,12 +148,6 @@ class PackageBuilder: ] return ext_map - def _save_extension_map(self, ext_map: Dict[str, List[str]]) -> None: - """Save the map of extensions available at build time.""" - code = dumps(obj=dict(sorted(ext_map.items())), indent=4) - self.console.log("Writing extension map...") - self._write(code=code, name="extension_map", extension="json", folder="assets") - def _save_modules( self, modules: Optional[Union[str, List[str]]] = None, @@ -156,28 +155,26 @@ class PackageBuilder: ): """Save the modules.""" self.console.log("\nWriting modules...") - route_map = PathHandler.build_route_map() - path_list = PathHandler.build_path_list(route_map=route_map) - if not path_list: + if not self.path_list: self.console.log("\nThere is nothing to write.") return - MAX_LEN = max([len(path) for path in path_list if path != "/"]) + MAX_LEN = max([len(path) for path in self.path_list if path != "/"]) - if modules: - path_list = [path for path in path_list if path in modules] + _path_list = ( + [path for path in self.path_list if path in modules] + if modules + else self.path_list + ) - for path in path_list: - route = PathHandler.get_route(path=path, route_map=route_map) + for path in _path_list: + route = PathHandler.get_route(path, self.route_map) if route is None: - module_code = ModuleBuilder.build( - path=path, - ext_map=ext_map, - ) - module_name = PathHandler.build_module_name(path=path) + code = ModuleBuilder.build(path, ext_map) + name = PathHandler.build_module_name(path) self.console.log(f"({path})", end=" " * (MAX_LEN - len(path))) - self._write(code=module_code, name=module_name) + self._write(code, name) def _save_package(self): """Save the package.""" @@ -185,11 +182,23 @@ class PackageBuilder: code = "### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###\n" self._write(code=code, name="__init__") - def _save_reference_file(self): + def _save_reference_file(self, ext_map: Optional[Dict[str, List[str]]] = None): """Save the reference.json file.""" self.console.log("\nWriting reference file...") - data = ReferenceGenerator.get_reference_data() - code = dumps(obj=data, indent=4) + code = dumps( + obj={ + "openbb": VERSION.replace("dev", ""), + "info": { + "title": "OpenBB Platform (Python)", + "description": "This is the OpenBB Platform (Python).", + "core": CORE_VERSION.replace("dev", ""), + "extensions": ext_map, + }, + "paths": ReferenceGenerator.get_paths(self.route_map), + "routers": ReferenceGenerator.get_routers(self.route_map), + }, + indent=4, + ) self._write(code=code, name="reference", extension="json", folder="assets") def _run_linters(self): @@ -224,13 +233,28 @@ class PackageBuilder: return content @staticmethod - def _diff(path: Path) -> Tuple[Set[str], Set[str]]: + def _diff(ext_map: Dict[str, List[str]]) -> Tuple[Set[str], Set[str]]: """Check differences between built and installed extensions. Parameters ---------- - path: Path - The path to the folder where the extension map is stored. + ext_map: Dict[str, List[str]] + Dictionary containing the extensions. + Example: + { + "openbb_core_extension": [ + "commodity@1.0.1", + ... + ], + "openbb_provider_extension": [ + "benzinga@1.1.3", + ... + ], + "openbb_obbject_extension": [ + "openbb_charting@1.0.0", + ... + ] + } Returns ------- @@ -238,8 +262,6 @@ class PackageBuilder: First element: set of installed extensions that are not in the package. Second element: set of extensions in the package that are not installed. """ - ext_map = PackageBuilder._read(path) - add: Set[str] = set() remove: Set[str] = set() groups = OpenBBGroups.groups() @@ -263,7 +285,7 @@ class ModuleBuilder: def build(path: str, ext_map: Optional[Dict[str, List[str]]] = None) -> str: """Build the module.""" code = "### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ###\n\n" - code += ImportDefinition.build(path=path) + code += ImportDefinition.build(path) code += ClassDefinition.build(path, ext_map) return code @@ -300,7 +322,7 @@ class ImportDefinition: hint_type = get_args(get_type_hints(return_type)["results"])[0] hint_type_list.append(hint_type) - hint_type_list = cls.filter_hint_type_list(hint_type_list=hint_type_list) + hint_type_list = cls.filter_hint_type_list(hint_type_list) return hint_type_list @@ -330,7 +352,6 @@ class ImportDefinition: hint_type_list = cls.get_path_hint_type_list(path=path) code = "from openbb_core.app.static.container import Container" code += "\nfrom openbb_core.app.model.obbject import OBBject" - code += "\nfrom openbb_core.app.model.custom_parameter import OpenBBCustomParameter, OpenBBCustomChoices" # These imports were not detected before build, so we add them manually and # ruff --fix the resulting code to remove unused imports. @@ -339,6 +360,7 @@ class ImportDefinition: code += "\nimport pandas" code += "\nimport numpy" code += "\nimport datetime" + code += "\nfrom datetime import date" code += "\nimport pydantic" code += "\nfrom pydantic import BaseModel" code += "\nfrom inspect import Parameter" @@ -355,6 +377,7 @@ class ImportDefinition: code += "\nfrom openbb_core.app.static.utils.filters import filter_inputs\n" code += "\nfrom openbb_core.provider.abstract.data import Data" code += "\nfrom openbb_core.app.deprecation import OpenBBDeprecationWarning\n" + code += "\nfrom openbb_core.app.model.field import OpenBBField" if path.startswith("/quantitative"): code += "\nfrom openbb_quantitative.models import " code += "(CAPMModel,NormalityModel,OmegaModel,SummaryModel,UnitRootModel)" @@ -380,7 +403,7 @@ class ClassDefinition: code = f"class {class_name}(Container):\n" route_map = PathHandler.build_route_map() - path_list = PathHandler.build_path_list(route_map=route_map) + path_list = PathHandler.build_path_list(route_map) child_path_list = sorted( PathHandler.get_child_path_list( path=path, @@ -391,7 +414,7 @@ class ClassDefinition: doc = f' """{path}\n' if path else ' # fmt: off\n """\nRouters:\n' methods = "" for c in child_path_list: - route = PathHandler.get_route(path=c, route_map=route_map) + route = PathHandler.get_route(c, route_map) if route: doc += f" {route.name}\n" methods += MethodDefinition.build_command_method( @@ -557,8 +580,8 @@ class MethodDefinition: kind=Parameter.POSITIONAL_OR_KEYWORD, annotation=Annotated[ bool, - OpenBBCustomParameter( - description="Whether to create a chart or not, by default False." + OpenBBField( + description="Whether to create a chart or not, by default False.", ), ], default=False, @@ -580,14 +603,14 @@ class MethodDefinition: name="provider", kind=Parameter.POSITIONAL_OR_KEYWORD, annotation=Annotated[ - Union[MethodDefinition.get_type(field), None], - OpenBBCustomParameter( + Optional[MethodDefinition.get_type(field)], + OpenBBField( description=( "The provider to use for the query, by default None.\n" f" If None, the provider specified in defaults is selected or '{first}' if there is\n" " no default." "" - ) + ), ), ], default=None, @@ -638,7 +661,7 @@ class MethodDefinition: ): """Add the field custom description and choices to the param signature as annotations.""" if model_name: - available_fields: Dict[str, Field] = ( + available_fields: Dict[str, DCField] = ( ProviderInterface().params[model_name]["standard"].__dataclass_fields__ ) @@ -647,27 +670,26 @@ class MethodDefinition: continue field_default = available_fields[param].default - choices = getattr(field_default, "json_schema_extra", {}).get( "choices", [] ) description = getattr(field_default, "description", "") - if choices: - new_value = value.replace( - annotation=Annotated[ - value.annotation, - OpenBBCustomParameter(description=description), - OpenBBCustomChoices(choices=choices), - ], - ) - else: - new_value = value.replace( - annotation=Annotated[ - value.annotation, - OpenBBCustomParameter(description=description), - ], - ) + PartialParameter = partial( + OpenBBField, + description=description, + ) + + new_value = value.replace( + annotation=Annotated[ + value.annotation, + ( + PartialParameter(choices=choices) + if choices + else PartialParameter() + ), + ], + ) od[param] = new_value @@ -901,17 +923,17 @@ class DocstringGenerator: Parameters ---------- - field_type (Any): - Typing object containing the field type. - is_required (bool): - Flag to indicate if the field is required. - target (Literal["docstring", "website"], optional): - Target to return type for. Defaults to "docstring". + field_type : Any + Typing object containing the field type. + is_required : bool + Flag to indicate if the field is required. + target : Literal["docstring", "website"] + Target to return type for. Defaults to "docstring". Returns ------- - str: - String representation of the field type. + str + String representation of the field type. """ is_optional = not is_required @@ -1020,6 +1042,7 @@ class DocstringGenerator: kwarg_params: dict, returns: Dict[str, FieldInfo], results_type: str, + sections: List[str], ) -> str: """Create the docstring for model.""" @@ -1053,50 +1076,56 @@ class DocstringGenerator: description = getattr(metadata[0], "description", "") if metadata else "" return type_, description - docstring = summary.strip("\n").replace("\n ", f"\n{create_indent(2)}") - docstring += "\n\n" - docstring += f"{create_indent(2)}Parameters\n" - docstring += f"{create_indent(2)}----------\n" + # Description summary + if "description" in sections: + docstring = summary.strip("\n").replace("\n ", f"\n{create_indent(2)}") + docstring += "\n\n" + if "parameters" in sections: + docstring += f"{create_indent(2)}Parameters\n" + docstring += f"{create_indent(2)}----------\n" - # Explicit parameters - for param_name, param in explicit_params.items(): - type_, description = get_param_info(param) - type_str = format_type(str(type_), char_limit=79) - docstring += f"{create_indent(2)}{param_name} : {type_str}\n" - docstring += f"{create_indent(3)}{format_description(description)}\n" + # Explicit parameters + for param_name, param in explicit_params.items(): + type_, description = get_param_info(param) + type_str = format_type(str(type_), char_limit=79) + docstring += f"{create_indent(2)}{param_name} : {type_str}\n" + docstring += f"{create_indent(3)}{format_description(description)}\n" - # Kwargs - for param_name, param in kwarg_params.items(): - p_type = getattr(param, "type", "") - type_ = ( - getattr(p_type, "__name__", "") if inspect.isclass(p_type) else p_type - ) + # Kwargs + for param_name, param in kwarg_params.items(): + p_type = getattr(param, "type", "") + type_ = ( + getattr(p_type, "__name__", "") + if inspect.isclass(p_type) + else p_type + ) - if "NoneType" in str(type_): - type_ = f"Optional[{type_}]".replace(", NoneType", "") + if "NoneType" in str(type_): + type_ = f"Optional[{type_}]".replace(", NoneType", "") - default = getattr(param, "default", "") - description = getattr(default, "description", "") - docstring += f"{create_indent(2)}{param_name} : {type_}\n" - docstring += f"{create_indent(3)}{format_description(description)}\n" + default = getattr(param, "default", "") + description = getattr(default, "description", "") + docstring += f"{create_indent(2)}{param_name} : {type_}\n" + docstring += f"{create_indent(3)}{format_description(description)}\n" - # Returns - docstring += "\n" - docstring += f"{create_indent(2)}Returns\n" - docstring += f"{create_indent(2)}-------\n" - providers, _ = get_param_info(explicit_params.get("provider", None)) - docstring += cls.get_OBBject_description(results_type, providers) + if "returns" in sections: + # Returns + docstring += "\n" + docstring += f"{create_indent(2)}Returns\n" + docstring += f"{create_indent(2)}-------\n" + providers, _ = get_param_info(explicit_params.get("provider", None)) + docstring += cls.get_OBBject_description(results_type, providers) - # Schema - underline = "-" * len(model_name) - docstring += f"\n{create_indent(2)}{model_name}\n" - docstring += f"{create_indent(2)}{underline}\n" + # Schema + underline = "-" * len(model_name) + docstring += f"\n{create_indent(2)}{model_name}\n" + docstring += f"{create_indent(2)}{underline}\n" - for name, field in returns.items(): - field_type = cls.get_field_type(field.annotation, field.is_required()) - description = getattr(field, "description", "") - docstring += f"{create_indent(2)}{field.alias or name} : {field_type}\n" - docstring += f"{create_indent(3)}{format_description(description)}\n" + for name, field in returns.items(): + field_type = cls.get_field_type(field.annotation, field.is_required()) + description = getattr(field, "description", "") + docstring += f"{create_indent(2)}{field.alias or name} : {field_type}\n" + docstring += f"{create_indent(3)}{format_description(description)}\n" return docstring @classmethod @@ -1112,6 +1141,11 @@ class DocstringGenerator: doc = func.__doc__ or "" param_types = {} + sections = SystemService().system_settings.python_settings.docstring_sections + max_length = ( + SystemService().system_settings.python_settings.docstring_max_length + ) + # Parameters explicit in the function signature explicit_params = dict(formatted_params) explicit_params.pop("extra_params", None) @@ -1125,32 +1159,105 @@ class DocstringGenerator: # Parameters passed as **kwargs kwarg_params = params["extra"].__dataclass_fields__ param_types.update({k: v.type for k, v in kwarg_params.items()}) - - returns = return_schema.model_fields - results_type = func.__annotations__.get("return", model_name) - if hasattr(results_type, "results_type_repr"): - results_type = results_type.results_type_repr() - + # Format the annotation to hide the metadata, tags, etc. + annotation = func.__annotations__.get("return") + results_type = ( + cls._get_repr( + cls._get_generic_types( + annotation.model_fields["results"].annotation, # type: ignore[union-attr,arg-type] + [], + ), + model_name, + ) + if isclass(annotation) and issubclass(annotation, OBBject) # type: ignore[arg-type] + else model_name + ) doc = cls.generate_model_docstring( model_name=model_name, summary=func.__doc__ or "", explicit_params=explicit_params, kwarg_params=kwarg_params, - returns=returns, + returns=return_schema.model_fields, results_type=results_type, + sections=sections, ) else: doc = doc.replace("\n ", f"\n{create_indent(2)}") - if doc and examples: + if doc and examples and "examples" in sections: doc += cls.build_examples( path.replace("/", "."), param_types, examples, ) + if ( + max_length # pylint: disable=chained-comparison + and len(doc) > max_length + and max_length > 3 + ): + doc = doc[: max_length - 3] + "..." return doc + @classmethod + def _get_generic_types(cls, type_: type, items: list) -> List[str]: + """Unpack generic types recursively. + + Parameters + ---------- + type_ : type + Type to unpack. + items : list + List to store the unpacked types. + + Returns + ------- + List[str] + List of unpacked type names. + + Examples + -------- + Union[List[str], Dict[str, str], Tuple[str]] -> ["List", "Dict", "Tuple"] + """ + if hasattr(type_, "__args__"): + origin = get_origin(type_) + # pylint: disable=unidiomatic-typecheck + if ( + type(origin) is type + and origin is not Annotated + and (name := getattr(type_, "_name", getattr(type_, "__name__", None))) + ): + items.append(name.title()) + func = partial(cls._get_generic_types, items=items) + set().union(*map(func, type_.__args__), items) + return items + + @staticmethod + def _get_repr(items: List[str], model: str) -> str: + """Get the string representation of the types list with the model name. + + Parameters + ---------- + items : List[str] + List of type names. + model : str + Model name to access the model providers. + + Returns + ------- + str + String representation of the unpacked types list. + + Examples + -------- + [List, Dict, Tuple], M -> "Union[List[M], Dict[str, M], Tuple[M]]" + """ + if s := [ + f"Dict[str, {model}]" if i == "Dict" else f"{i}[{model}]" for i in items + ]: + return f"Union[{', '.join(s)}]" if len(s) > 1 else s[0] + return model + class PathHandler: """Handle the paths for the Platform.""" @@ -1235,7 +1342,7 @@ class ReferenceGenerator: pi = DocstringGenerator.provider_interface @classmethod - def get_endpoint_examples( + def _get_endpoint_examples( cls, path: str, func: Callable, @@ -1248,18 +1355,18 @@ class ReferenceGenerator: Parameters ---------- - path (str): - Path of the router. - func (Callable): - Router endpoint function. - examples (Optional[List[Example]]): - List of Examples (APIEx or PythonEx type) - for the endpoint. + path : str + Path of the router. + func : Callable + Router endpoint function. + examples : Optional[List[Example]] + List of Examples (APIEx or PythonEx type) + for the endpoint. Returns ------- - str: - Formatted string containing the examples for the endpoint. + str: + Formatted string containing the examples for the endpoint. """ sig = signature(func) parameter_map = dict(sig.parameters) @@ -1278,18 +1385,18 @@ class ReferenceGenerator: ) @classmethod - def get_provider_parameter_info(cls, model: str) -> Dict[str, str]: + def _get_provider_parameter_info(cls, model: str) -> Dict[str, str]: """Get the name, type, description, default value and optionality information for the provider parameter. Parameters ---------- - model (str): - Standard model to access the model providers. + model : str + Standard model to access the model providers. Returns ------- - Dict[str, str]: - Dictionary of the provider parameter information + Dict[str, str] + Dictionary of the provider parameter information """ pi_model_provider = cls.pi.model_providers[model] provider_params_field = pi_model_provider.__dataclass_fields__["provider"] @@ -1316,7 +1423,7 @@ class ReferenceGenerator: return provider_parameter_info @classmethod - def get_provider_field_params( + def _get_provider_field_params( cls, model: str, params_type: str, @@ -1326,22 +1433,22 @@ class ReferenceGenerator: Parameters ---------- - model (str): - Model name to access the provider interface - params_type (str): - Parameters to fetch data for (QueryParams or Data) - provider (str, optional): - Provider name. Defaults to "openbb". + model : str + Model name to access the provider interface + params_type : str + Parameters to fetch data for (QueryParams or Data) + provider : str + Provider name. Defaults to "openbb". Returns ------- - List[Dict[str, str]]: - List of dictionaries containing the field name, type, description, default, - optional flag and standard flag for each provider. + List[Dict[str, str]] + List of dictionaries containing the field name, type, description, default, + optional flag and standard flag for each provider. """ provider_field_params = [] expanded_types = MethodDefinition.TYPE_EXPANSION - model_map = cls.pi._map[model] # pylint: disable=protected-access + model_map = cls.pi.map[model] for field, field_info in model_map[provider][params_type]["fields"].items(): # Determine the field type, expanding it if necessary and if params_type is "Parameters" @@ -1391,24 +1498,24 @@ class ReferenceGenerator: return provider_field_params @staticmethod - def get_obbject_returns_fields( + def _get_obbject_returns_fields( model: str, providers: str, ) -> List[Dict[str, str]]: """Get the fields of the OBBject returns object for the given standard_model. - Args - ---- - model (str): - Standard model of the returned object. - providers (str): - Available providers for the model. + Parameters + ---------- + model : str + Standard model of the returned object. + providers : str + Available providers for the model. Returns ------- - List[Dict[str, str]]: - List of dictionaries containing the field name, type, description, default - and optionality of each field. + List[Dict[str, str]] + List of dictionaries containing the field name, type, description, default + and optionality of each field. """ obbject_list = [ { @@ -1441,21 +1548,21 @@ class ReferenceGenerator: return obbject_list @staticmethod - def get_post_method_parameters_info( + def _get_post_method_parameters_info( docstring: str, ) -> List[Dict[str, Union[bool, str]]]: """Get the parameters for the POST method endpoints. Parameters ---------- - docstring (str): - Router endpoint function's docstring + docstring : str + Router endpoint function's docstring Returns ------- - List[Dict[str, str]]: - List of dictionaries containing the name,type, description, default - and optionality of each parameter. + List[Dict[str, str]] + List of dictionaries containing the name,type, description, default + and optionality of each parameter. """ parameters_list = [] @@ -1497,19 +1604,19 @@ class ReferenceGenerator: return parameters_list @staticmethod - def get_post_method_returns_info(docstring: str) -> List[Dict[str, str]]: + def _get_post_method_returns_info(docstring: str) -> List[Dict[str, str]]: """Get the returns information for the POST method endpoints. Parameters ---------- - docstring (str): - Router endpoint function's docstring + docstring: str + Router endpoint function's docstring Returns ------- - List[Dict[str, str]]: - Single element list having a dictionary containing the name, type, - description of the return value + List[Dict[str, str]] + Single element list having a dictionary containing the name, type, + description of the return value """ returns_list = [] @@ -1538,8 +1645,8 @@ class ReferenceGenerator: return returns_list @classmethod - def get_reference_data(cls) -> Dict[str, Dict[str, Any]]: - """Get the reference data for the Platform. + def get_paths(cls, route_map: Dict[str, BaseRoute]) -> Dict[str, Dict[str, Any]]: + """Get path reference data. The reference data is a dictionary containing the description, parameters, returns and examples for each endpoint. This is currently useful for @@ -1547,12 +1654,11 @@ class ReferenceGenerator: Returns ------- - Dict[str, Dict[str, Any]]: - Dictionary containing the description, parameters, returns and - examples for each endpoint. + Dict[str, Dict[str, Any]] + Dictionary containing the description, parameters, returns and + examples for each endpoint. """ reference: Dict[str, Dict] = {} - route_map = PathHandler.build_route_map() for path, route in route_map.items(): # Initialize the reference fields as empty dictionaries @@ -1574,7 +1680,7 @@ class ReferenceGenerator: } # Add endpoint examples examples = openapi_extra.get("examples", []) - reference[path]["examples"] = cls.get_endpoint_examples( + reference[path]["examples"] = cls._get_endpoint_examples( path, route_func, examples, # type: ignore @@ -1584,19 +1690,21 @@ class ReferenceGenerator: reference[path]["description"] = getattr( route, "description", "No description available." ) + + # TODO: The reference is not getting populated when a command does not use a standard model # Access model map from the ProviderInterface - model_map = cls.pi._map[ - standard_model - ] # pylint: disable=protected-access + model_map = cls.pi.map.get(standard_model, {}) for provider in model_map: if provider == "openbb": # openbb provider is always present hence its the standard field reference[path]["parameters"]["standard"] = ( - cls.get_provider_field_params(standard_model, "QueryParams") + cls._get_provider_field_params( + standard_model, "QueryParams" + ) ) # Add `provider` parameter fields to the openbb provider - provider_parameter_fields = cls.get_provider_parameter_info( + provider_parameter_fields = cls._get_provider_parameter_info( standard_model ) reference[path]["parameters"]["standard"].append( @@ -1605,23 +1713,23 @@ class ReferenceGenerator: # Add endpoint data fields for standard provider reference[path]["data"]["standard"] = ( - cls.get_provider_field_params(standard_model, "Data") + cls._get_provider_field_params(standard_model, "Data") ) continue # Adds provider specific parameter fields to the reference reference[path]["parameters"][provider] = ( - cls.get_provider_field_params( + cls._get_provider_field_params( standard_model, "QueryParams", provider ) ) # Adds provider specific data fields to the reference - reference[path]["data"][provider] = cls.get_provider_field_params( + reference[path]["data"][provider] = cls._get_provider_field_params( standard_model, "Data", provider ) # Add endpoint returns data # Currently only OBBject object is returned providers = provider_parameter_fields["type"] - reference[path]["returns"]["OBBject"] = cls.get_obbject_returns_fields( + reference[path]["returns"]["OBBject"] = cls._get_obbject_returns_fields( standard_model, providers ) # Add data for the endpoints without a standard model (data processing endpoints) @@ -1635,12 +1743,43 @@ class ReferenceGenerator: reference[path]["description"] = re.sub(" +", " ", description) # Add endpoint parameters fields for POST methods reference[path]["parameters"]["standard"] = ( - ReferenceGenerator.get_post_method_parameters_info(docstring) + cls._get_post_method_parameters_info(docstring) ) # Add endpoint returns data # Currently only OBBject object is returned reference[path]["returns"]["OBBject"] = ( - cls.get_post_method_returns_info(docstring) + cls._get_post_method_returns_info(docstring) ) return reference + + @classmethod + def get_routers(cls, route_map: Dict[str, BaseRoute]) -> Dict[str, Dict[str, Any]]: + """Get router reference data. + + Parameters + ---------- + route_map : Dict[str, BaseRoute] + Dictionary containing the path and route object for the router. + + Returns + ------- + Dict[str, Dict[str, Any]] + Dictionary containing the description for each router. + """ + main_router = RouterLoader.from_extensions() + routers = {} + for path in route_map: + path_parts = path.split("/") + # We start at 2: ["/", "some_router"] "/some_router" + i = 2 + p = "/".join(path_parts[:i]) + while p != path: + if p not in routers: + description = main_router.get_attr(p, "description") + if description is not None: + routers[p] = {"description": description} + # We go down the path to include sub-routers + i += 1 + p = "/".join(path_parts[:i]) + return routers diff --git a/openbb_platform/core/openbb_core/app/static/utils/decorators.py b/openbb_platform/core/openbb_core/app/static/utils/decorators.py index 61d9b46578b..a8fbf1f0d59 100644 --- a/openbb_platform/core/openbb_core/app/static/utils/decorators.py +++ b/openbb_platform/core/openbb_core/app/static/utils/decorators.py @@ -29,7 +29,7 @@ def validate( """Validate function calls.""" def decorated(f: Callable[P, R]): - """Decorated function.""" + """Use for decorating functions.""" @wraps(f) def wrapper(*f_args, **f_kwargs): diff --git a/openbb_platform/core/openbb_core/app/static/utils/filters.py b/openbb_platform/core/openbb_core/app/static/utils/filters.py index 32a92138586..b2262a1e8c8 100644 --- a/openbb_platform/core/openbb_core/app/static/utils/filters.py +++ b/openbb_platform/core/openbb_core/app/static/utils/filters.py @@ -42,5 +42,16 @@ def filter_inputs( kwargs[p][field] = new break + else: + provider = kwargs.get("provider_choices", {}).get("provider") + for param_category in ("standard_params", "extra_params"): + if param_category in kwargs: + for field, value in kwargs[param_category].items(): + if isinstance(value, list): + kwargs[param_category][field] = ",".join(map(str, value)) + check_single_item( + kwargs[param_category][field], + f"{field} -> multiple items not allowed for '{provider}'", + ) return kwargs diff --git a/openbb_platform/core/openbb_core/app/utils.py b/openbb_platform/core/openbb_core/app/utils.py index f7c6c1ca7dc..452300c4334 100644 --- a/openbb_platform/core/openbb_core/app/utils.py +++ b/openbb_platform/core/openbb_core/app/utils.py @@ -166,6 +166,6 @@ def check_single_item( value: Optional[str], message: Optional[str] = None ) -> Optional[str]: """Check that string contains a single item.""" - if value and ("," in value or ";" in value): + if value and isinstance(value, str) and ("," in value or ";" in value): raise OpenBBError(message if message else "multiple items not allowed") return value diff --git a/openbb_platform/core/openbb_core/app/version.py b/openbb_platform/core/openbb_core/app/version.py index a022eb1c790..39872d98a1c 100644 --- a/openbb_platform/core/openbb_core/app/version.py +++ b/openbb_platform/core/openbb_core/app/version.py @@ -58,3 +58,8 @@ try: VERSION = get_package_version(PACKAGE) except pkg_resources.DistributionNotFound: VERSION = "unknown" + +try: + CORE_VERSION = get_package_version("openbb-core") +except pkg_resources.DistributionNotFound: + CORE_VERSION = "unknown" diff --git a/openbb_platform/core/openbb_core/env.py b/openbb_platform/core/openbb_core/env.py index e4e4c1df461..9249658ffbc 100644 --- a/openbb_platform/core/openbb_core/env.py +++ b/openbb_platform/core/openbb_core/env.py @@ -1,3 +1,5 @@ +"""Environment variables.""" + import os from pathlib import Path from typing import Dict, Optional @@ -14,47 +16,48 @@ class Env(metaclass=SingletonMeta): _environ: Dict[str, str] def __init__(self) -> None: + """Initialize the environment.""" dotenv.load_dotenv(Path(OPENBB_DIRECTORY, ".env")) self._environ = os.environ.copy() @property def API_AUTH(self) -> bool: - """API authentication: enables API endpoint authentication""" + """API authentication: enables API endpoint authentication.""" return self.str2bool(self._environ.get("OPENBB_API_AUTH", False)) @property def API_USERNAME(self) -> Optional[str]: - """API username: sets API username""" + """API username: sets API username.""" return self._environ.get("OPENBB_API_USERNAME", None) @property def API_PASSWORD(self) -> Optional[str]: - """API password: sets API password""" + """API password: sets API password.""" return self._environ.get("OPENBB_API_PASSWORD", None) @property def API_AUTH_EXTENSION(self) -> Optional[str]: - """Auth extension: specifies which authentication extension to use""" + """Auth extension: specifies which authentication extension to use.""" return self._environ.get("OPENBB_API_AUTH_EXTENSION", None) @property def AUTO_BUILD(self) -> bool: - """Automatic build: enables automatic package build on import""" + """Automatic build: enables automatic package build on import.""" return self.str2bool(self._environ.get("OPENBB_AUTO_BUILD", True)) @property def DEBUG_MODE(self) -> bool: - """Debug mode: enables debug mode""" + """Debug mode: enables debug mode.""" return self.str2bool(self._environ.get("OPENBB_DEBUG_MODE", False)) @property def DEV_MODE(self) -> bool: - """Dev mode: enables development mode""" + """Dev mode: enables development mode.""" return self.str2bool(self._environ.get("OPENBB_DEV_MODE", False)) @property def HUB_BACKEND(self) -> str: - """Hub backend: sets the backend for the OpenBB Hub""" + """Hub backend: sets the backend for the OpenBB Hub.""" return self._environ.get("OPENBB_HUB_BACKEND", "https://payments.openbb.co") @staticmethod diff --git a/openbb_platform/core/openbb_core/provider/abstract/annotated_result.py b/openbb_platform/core/openbb_core/provider/abstract/annotated_result.py new file mode 100644 index 00000000000..8d51086017b --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/abstract/annotated_result.py @@ -0,0 +1,20 @@ +"""Annotated result.""" + +from typing import Generic, Optional, TypeVar + +from pydantic import BaseModel, Field + +T = TypeVar("T") + + +class AnnotatedResult(BaseModel, Generic[T]): + """Annotated result allows fetchers to return metadata along with the data.""" + + result: Optional[T] = Field( + default=None, + description="Serializable results.", + ) + metadata: Optional[dict] = Field( + default=None, + description="Metadata.", + ) diff --git a/openbb_platform/core/openbb_core/provider/abstract/fetcher.py b/openbb_platform/core/openbb_core/provider/abstract/fetcher.py index 011f03f197b..f2cc759821a 100644 --- a/openbb_platform/core/openbb_core/provider/abstract/fetcher.py +++ b/openbb_platform/core/openbb_core/provider/abstract/fetcher.py @@ -9,12 +9,14 @@ from typing import ( Generic, Optional, TypeVar, + Union, get_args, get_origin, ) from pandas import DataFrame +from openbb_core.provider.abstract.annotated_result import AnnotatedResult from openbb_core.provider.abstract.data import Data from openbb_core.provider.abstract.query_params import QueryParams from openbb_core.provider.utils.helpers import maybe_coroutine, run_async @@ -56,7 +58,7 @@ class Fetcher(Generic[Q, R]): """Extract the data from the provider.""" @staticmethod - def transform_data(query: Q, data: Any, **kwargs) -> R: + def transform_data(query: Q, data: Any, **kwargs) -> Union[R, AnnotatedResult[R]]: """Transform the provider-specific data.""" raise NotImplementedError @@ -79,7 +81,7 @@ class Fetcher(Generic[Q, R]): params: Dict[str, Any], credentials: Optional[Dict[str, str]] = None, **kwargs, - ) -> R: + ) -> Union[R, AnnotatedResult[R]]: """Fetch data from a provider.""" query = cls.transform_query(params=params) data = await maybe_coroutine( @@ -139,7 +141,7 @@ class Fetcher(Generic[Q, R]): data = run_async( cls.extract_data, query=query, credentials=credentials, **kwargs ) - transformed_data = cls.transform_data(query=query, data=data, **kwargs) + result = cls.transform_data(query=query, data=data, **kwargs) # Class Assertions assert isinstance( @@ -184,10 +186,13 @@ class Fetcher(Generic[Q, R]): assert len(data) > 0, "Data must not be empty." # Transformed Data Assertions + transformed_data = ( + result.result if isinstance(result, AnnotatedResult) else result + ) + assert transformed_data, "Transformed data must not be None." - is_list = isinstance(transformed_data, list) - if is_list: + if isinstance(transformed_data, list): return_type_args = cls.return_type.__args__[0] return_type_is_dict = ( hasattr(return_type_args, "__origin__") diff --git a/openbb_platform/core/openbb_core/provider/registry_map.py b/openbb_platform/core/openbb_core/provider/registry_map.py index eb4573a0efb..05dff9ef4f6 100644 --- a/openbb_platform/core/openbb_core/provider/registry_map.py +++ b/openbb_platform/core/openbb_core/provider/registry_map.py @@ -1,12 +1,11 @@ """Provider registry map.""" -import sys from copy import deepcopy from inspect import getfile, isclass from pathlib import Path from typing import Any, Dict, List, Literal, Optional, Tuple, get_origin -from pydantic import BaseModel, Field, create_model +from pydantic import BaseModel from openbb_core.provider.abstract.data import Data from openbb_core.provider.abstract.fetcher import Fetcher @@ -27,8 +26,8 @@ class RegistryMap: self._registry = registry or RegistryLoader.from_extensions() self._credentials = self._get_credentials(self._registry) self._available_providers = self._get_available_providers(self._registry) - self._map, self._return_map = self._get_map(self._registry) - self._models = self._get_models(self._map) + self._standard_extra, self._original_models = self._get_maps(self._registry) + self._models = self._get_models(self._standard_extra) @property def registry(self) -> Registry: @@ -46,14 +45,14 @@ class RegistryMap: return self._credentials @property - def map(self) -> MapType: - """Get provider registry map.""" - return self._map + def standard_extra(self) -> MapType: + """Get standard extra map.""" + return self._standard_extra @property - def return_map(self) -> MapType: - """Get provider registry return map.""" - return self._return_map + def original_models(self) -> MapType: + """Get original models.""" + return self._original_models @property def models(self) -> List[str]: @@ -72,37 +71,42 @@ class RegistryMap: """Get list of available providers.""" return sorted(list(registry.providers.keys())) - def _get_map(self, registry: Registry) -> Tuple[MapType, Dict[str, Dict]]: + def _get_maps(self, registry: Registry) -> Tuple[MapType, Dict[str, Dict]]: """Generate map for the provider package.""" - map_: MapType = {} - return_schemas: Dict[str, Dict] = {} + standard_extra: MapType = {} + original_models: Dict[str, Dict] = {} for p in registry.providers: for model_name, fetcher in registry.providers[p].fetcher_dict.items(): - standard_query, extra_query = self.extract_info(fetcher, "query_params") - standard_data, extra_data = self.extract_info(fetcher, "data") - if model_name not in map_: - map_[model_name] = {} + standard_query, extra_query = self._extract_info( + fetcher, "query_params" + ) + standard_data, extra_data = self._extract_info(fetcher, "data") + if model_name not in standard_extra: + standard_extra[model_name] = {} # The deepcopy avoids modifications from one model to affect another - map_[model_name]["openbb"] = { + standard_extra[model_name]["openbb"] = { "QueryParams": deepcopy(standard_query), "Data": deepcopy(standard_data), } - map_[model_name][p] = { + standard_extra[model_name][p] = { "QueryParams": extra_query, "Data": extra_data, } - if provider_model := self.extract_data_model(fetcher, p): - is_list = get_origin(self.extract_return_type(fetcher)) == list + original_models.setdefault(model_name, {}).update( + { + p: { + "query": self._get_model(fetcher, "query_params"), + "data": self._get_model(fetcher, "data"), + "results_type": self._get_results_type(fetcher), + } + } + ) - return_schemas.setdefault(model_name, {}).update( - {p: {"model": provider_model, "is_list": is_list}} - ) + self._merge_json_schema_extra(p, fetcher, standard_extra[model_name]) - self._merge_json_schema_extra(p, fetcher, map_[model_name]) - - return map_, return_schemas + return standard_extra, original_models def _merge_json_schema_extra( self, @@ -110,7 +114,7 @@ class RegistryMap: fetcher: Fetcher, model_map: dict, ): - """Merge json schema extra for different providers""" + """Merge json schema extra for different providers.""" model: BaseModel = RegistryMap._get_model(fetcher, "query_params") std_fields = model_map["openbb"]["QueryParams"]["fields"] extra_fields = model_map[provider]["QueryParams"]["fields"] @@ -138,49 +142,14 @@ class RegistryMap: return list(map_.keys()) @staticmethod - def extract_return_type(fetcher: Fetcher): + def _get_results_type(fetcher: Fetcher) -> Any: """Extract return info from fetcher.""" - return getattr(fetcher, "return_type", None) + return get_origin(getattr(fetcher, "return_type", None)) @staticmethod - def extract_data_model(fetcher: Fetcher, provider_str: str) -> BaseModel: - """Extract info (fields and docstring) from fetcher query params or data.""" - model: BaseModel = RegistryMap._get_model(fetcher, "data") - model_name = getattr(model, "__name__", "") - fields = {} - for field_name, field in model.model_fields.items(): - field.serialization_alias = field_name - fields[field_name] = (field.annotation, field) - - fields["provider"] = ( - Literal[provider_str], # type: ignore - Field( - default=provider_str, - description="The data provider for the data.", - exclude=True, - ), - ) - - provider_model = create_model( # type: ignore[call-overload] - model_name.replace("Data", ""), - __base__=model, - __doc__=model.__doc__, - __module__=model.__module__, - **fields, - ) - - # Replace the provider models in the modules with the new models we created - # To make sure provider field is defined to be the provider string - # This is hacky, but we need to have `provider: Literal['provider_name']` - # in the model to serve as union discriminator for the API validation - # the alternative would be to specify it manually in all the models - if model_name: - setattr(sys.modules[model.__module__], model_name, provider_model) - - return provider_model - - @staticmethod - def extract_info(fetcher: Fetcher, type_: Literal["query_params", "data"]) -> tuple: + def _extract_info( + fetcher: Fetcher, type_: Literal["query_params", "data"] + ) -> tuple: """Extract info (fields and docstring) from fetcher query params or data.""" model: BaseModel = RegistryMap._get_model(fetcher, type_) all_fields = {} diff --git a/openbb_platform/core/openbb_core/provider/standard_models/etf_holdings.py b/openbb_platform/core/openbb_core/provider/standard_models/etf_holdings.py index 8d1c4a59038..0ad30366cd9 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/etf_holdings.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/etf_holdings.py @@ -2,7 +2,7 @@ from typing import Optional -from pydantic import Field +from pydantic import Field, field_validator from openbb_core.provider.abstract.data import Data from openbb_core.provider.abstract.query_params import QueryParams @@ -17,6 +17,12 @@ class EtfHoldingsQueryParams(QueryParams): symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", "") + " (ETF)") + @field_validator("symbol") + @classmethod + def to_upper(cls, v: str) -> str: + """Convert field to uppercase.""" + return v.upper() + class EtfHoldingsData(Data): """ETF Holdings Data.""" diff --git a/openbb_platform/core/openbb_core/provider/standard_models/forward_eps_estimates.py b/openbb_platform/core/openbb_core/provider/standard_models/forward_eps_estimates.py new file mode 100644 index 00000000000..e0f95d9c8a1 --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/forward_eps_estimates.py @@ -0,0 +1,67 @@ +"""Forward EPS Estimates Standard Model.""" + +from datetime import date as dateType +from typing import Optional + +from pydantic import Field, field_validator + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) + + +class ForwardEpsEstimatesQueryParams(QueryParams): + """Forward EPS Estimates Query Parameters.""" + + symbol: Optional[str] = Field( + default=None, + description=QUERY_DESCRIPTIONS["symbol"], + ) + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def to_upper(cls, v): + """Convert field to uppercase.""" + return v.upper() if v else None + + +class ForwardEpsEstimatesData(Data): + """Forward EPS Estimates Data.""" + + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + name: Optional[str] = Field(default=None, description="Name of the entity.") + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + fiscal_year: Optional[int] = Field( + default=None, description="Fiscal year for the estimate." + ) + fiscal_period: Optional[str] = Field( + default=None, description="Fiscal quarter for the estimate." + ) + calendar_year: Optional[int] = Field( + default=None, description="Calendar year for the estimate." + ) + calendar_period: Optional[str] = Field( + default=None, description="Calendar quarter for the estimate." + ) + low_estimate: Optional[float] = Field( + default=None, description="Estimated EPS low for the period." + ) + high_estimate: Optional[float] = Field( + default=None, description="Estimated EPS high for the period." + ) + mean: Optional[float] = Field( + default=None, description="Estimated EPS mean for the period." + ) + median: Optional[float] = Field( + default=None, description="Estimated EPS median for the period." + ) + standard_deviation: Optional[float] = Field( + default=None, description="Estimated EPS standard deviation for the period." + ) + number_of_analysts: Optional[int] = Field( + default=None, + description="Number of analysts providing estimates for the period.", + ) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/forward_sales_estimates.py b/openbb_platform/core/openbb_core/provider/standard_models/forward_sales_estimates.py new file mode 100644 index 00000000000..8d3e1217d58 --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/forward_sales_estimates.py @@ -0,0 +1,68 @@ +"""Forward Sales Estimates Standard Model.""" + +from datetime import date as dateType +from typing import Optional + +from pydantic import Field, field_validator + +from openbb_core.provider.abstract.data import Data, ForceInt +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) + + +class ForwardSalesEstimatesQueryParams(QueryParams): + """Forward Sales Estimates Query Parameters.""" + + symbol: Optional[str] = Field( + default=None, + description=QUERY_DESCRIPTIONS["symbol"], + ) + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def to_upper(cls, v): + """Convert field to uppercase.""" + return v.upper() if v else None + + +class ForwardSalesEstimatesData(Data): + """Forward Sales Estimates Data.""" + + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + name: Optional[str] = Field(default=None, description="Name of the entity.") + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + fiscal_year: Optional[int] = Field( + default=None, description="Fiscal year for the estimate." + ) + fiscal_period: Optional[str] = Field( + default=None, description="Fiscal quarter for the estimate." + ) + calendar_year: Optional[int] = Field( + default=None, description="Calendar year for the estimate." + ) + calendar_period: Optional[str] = Field( + default=None, description="Calendar quarter for the estimate." + ) + low_estimate: Optional[ForceInt] = Field( + default=None, description="The sales estimate low for the period." + ) + high_estimate: Optional[ForceInt] = Field( + default=None, description="The sales estimate high for the period." + ) + mean: Optional[ForceInt] = Field( + default=None, description="The sales estimate mean for the period." + ) + median: Optional[ForceInt] = Field( + default=None, description="The sales estimate median for the period." + ) + standard_deviation: Optional[ForceInt] = Field( + default=None, + description="The sales estimate standard deviation for the period.", + ) + number_of_analysts: Optional[int] = Field( + default=None, + description="Number of analysts providing estimates for the period.", + ) 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 ddde23dc45c..231945419ed 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 @@ -24,6 +24,7 @@ class OptionsChainsQueryParams(QueryParams): @classmethod @field_validator("symbol", mode="before", check_fields=False) def to_upper(cls, v: str) -> str: + """Return the symbol in uppercase.""" return v.upper() @@ -151,7 +152,7 @@ class OptionsChainsData(Data): @field_validator("expiration", mode="before", check_fields=False) @classmethod def date_validate(cls, v): # pylint: disable=E0213 - """Return the datetime object from the date string""" + """Return the datetime object from the date string.""" if isinstance(v, datetime): return datetime.strftime(v, "%Y-%m-%d") if isinstance(v, str): diff --git a/openbb_platform/core/openbb_core/provider/standard_models/price_target_consensus.py b/openbb_platform/core/openbb_core/provider/standard_models/price_target_consensus.py index f6949cb166a..106879a884f 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/price_target_consensus.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/price_target_consensus.py @@ -15,19 +15,22 @@ from openbb_core.provider.utils.descriptions import ( class PriceTargetConsensusQueryParams(QueryParams): """Price Target Consensus Query.""" - symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", "")) + symbol: Optional[str] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("symbol", "") + ) @field_validator("symbol", mode="before", check_fields=False) @classmethod - def to_upper(cls, v: str) -> str: + def to_upper(cls, v): """Convert field to uppercase.""" - return v.upper() + return v.upper() if v else None class PriceTargetConsensusData(Data): """Price Target Consensus Data.""" symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + name: Optional[str] = Field(default=None, description="The company name") target_high: Optional[float] = Field( default=None, description="High target of the price target consensus." ) diff --git a/openbb_platform/core/openbb_core/provider/utils/client.py b/openbb_platform/core/openbb_core/provider/utils/client.py index 0bec922d9ac..f093a90d4b1 100644 --- a/openbb_platform/core/openbb_core/provider/utils/client.py +++ b/openbb_platform/core/openbb_core/provider/utils/client.py @@ -41,6 +41,7 @@ class ClientResponse(aiohttp.ClientResponse): """Client response class.""" def __init__(self, *args, **kwargs): + """Initialize the response.""" kwargs["request_info"] = self.obfuscate_request_info(kwargs["request_info"]) super().__init__(*args, **kwargs) @@ -61,10 +62,13 @@ class ClientResponse(aiohttp.ClientResponse): class ClientSession(aiohttp.ClientSession): + """Client session.""" + _response_class: Type[ClientResponse] _session: "ClientSession" def __init__(self, *args, **kwargs): + """Initialize the session.""" kwargs["connector"] = kwargs.get( "connector", aiohttp.TCPConnector(ttl_dns_cache=300) ) diff --git a/openbb_platform/core/openbb_core/provider/utils/helpers.py b/openbb_platform/core/openbb_core/provider/utils/helpers.py index 3a5c557341f..604323e9703 100644 --- a/openbb_platform/core/openbb_core/provider/utils/helpers.py +++ b/openbb_platform/core/openbb_core/provider/utils/helpers.py @@ -1,8 +1,9 @@ """Provider helpers.""" import asyncio +import os import re -from datetime import date, datetime +from datetime import date, datetime, timedelta, timezone from difflib import SequenceMatcher from functools import partial from inspect import iscoroutinefunction @@ -313,3 +314,12 @@ def filter_by_dates( return False return list(filter(_filter, data)) + + +def safe_fromtimestamp( + timestamp: Union[float, int], tz: Optional[timezone] = None +) -> datetime: + """datetime.fromtimestamp alternative which supports negative timestamps on Windows platform.""" + if os.name == "nt" and timestamp < 0: + return datetime(1970, 1, 1, tzinfo=tz) + timedelta(seconds=timestamp) + return datetime.fromtimestamp(timestamp, tz) diff --git a/openbb_platform/core/pyproject.toml b/openbb_platform/core/pyproject.toml index 623a8fd1c34..e82caac0f43 100644 --- a/openbb_platform/core/pyproject.toml +++ b/openbb_platform/core/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" authors = ["OpenBB Team "] readme = "README.md" diff --git a/openbb_platform/core/tests/api/test_dependency/__init__.py b/openbb_platform/core/tests/api/test_dependency/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/api/test_dependency/__init__.py +++ b/openbb_platform/core/tests/api/test_dependency/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/api/test_router/__init__.py b/openbb_platform/core/tests/api/test_router/__init__.py index e69de29bb2d..21bb0e0cc06 100644 --- a/openbb_platform/core/tests/api/test_router/__init__.py +++ b/openbb_platform/core/tests/api/test_router/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core API router tests.""" diff --git a/openbb_platform/core/tests/app/__init__.py b/openbb_platform/core/tests/app/__init__.py index e69de29bb2d..3f4c8aabdda 100644 --- a/openbb_platform/core/tests/app/__init__.py +++ b/openbb_platform/core/tests/app/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform core tests.""" diff --git a/openbb_platform/core/tests/app/logs/__init__.py b/openbb_platform/core/tests/app/logs/__init__.py index e69de29bb2d..673bc2dec2f 100644 --- a/openbb_platform/core/tests/app/logs/__init__.py +++ b/openbb_platform/core/tests/app/logs/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core.""" diff --git a/openbb_platform/core/tests/app/logs/formatters/__init__.py b/openbb_platform/core/tests/app/logs/formatters/__init__.py index e69de29bb2d..3f4c8aabdda 100644 --- a/openbb_platform/core/tests/app/logs/formatters/__init__.py +++ b/openbb_platform/core/tests/app/logs/formatters/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform core tests.""" diff --git a/openbb_platform/core/tests/app/logs/formatters/test_formatter_with_exceptions.py b/openbb_platform/core/tests/app/logs/formatters/test_formatter_with_exceptions.py index 90a2cae1b37..625c0bc87cc 100644 --- a/openbb_platform/core/tests/app/logs/formatters/test_formatter_with_exceptions.py +++ b/openbb_platform/core/tests/app/logs/formatters/test_formatter_with_exceptions.py @@ -1,3 +1,5 @@ +"""Tests for the FormatterWithExceptions class.""" + import logging import os from unittest.mock import Mock @@ -7,6 +9,8 @@ from openbb_core.app.logs.formatters.formatter_with_exceptions import ( FormatterWithExceptions, ) +# pylint: disable=W0621 + logging_settings = Mock() logging_settings.app_name = "test_app_name" logging_settings.app_id = "test_app_id" @@ -16,11 +20,13 @@ logging_settings.user_id = "test_user_id" @pytest.fixture def formatter(): + """Return a FormatterWithExceptions instance.""" return FormatterWithExceptions(logging_settings) # Test when exc_text is not empty (should return "X") def test_level_name_with_exc_text(formatter): + """Test the calculate_level_name method.""" record = logging.LogRecord( name="test_logger", level=logging.INFO, @@ -37,6 +43,7 @@ def test_level_name_with_exc_text(formatter): # Test when levelname is not empty (should return the first character of levelname) def test_level_name_with_levelname(formatter): + """Test the calculate_level_name method.""" record = logging.LogRecord( name="test_logger", level=logging.WARNING, @@ -53,6 +60,7 @@ def test_level_name_with_levelname(formatter): # Test when func_name_override and session_id are present in the record def test_extract_log_extra_with_override_and_session_id(formatter): + """Test the extract_log_extra method.""" record = logging.LogRecord( name="test_logger", level=logging.INFO, @@ -75,6 +83,7 @@ def test_extract_log_extra_with_override_and_session_id(formatter): # Test when only func_name_override is present in the record def test_extract_log_extra_with_override(formatter): + """Test the extract_log_extra method.""" record = logging.LogRecord( name="test_logger", level=logging.INFO, @@ -96,6 +105,7 @@ def test_extract_log_extra_with_override(formatter): # Test when only session_id is present in the record def test_extract_log_extra_with_session_id(formatter): + """Test the extract_log_extra method.""" record = logging.LogRecord( name="test_logger", level=logging.INFO, @@ -117,6 +127,7 @@ def test_extract_log_extra_with_session_id(formatter): # Test when neither func_name_override nor session_id are present in the record def test_extract_log_extra_with_no_override_or_session_id(formatter): + """Test the extract_log_extra method.""" record = logging.LogRecord( name="test_logger", level=logging.INFO, @@ -144,6 +155,7 @@ def test_extract_log_extra_with_no_override_or_session_id(formatter): ], ) def test_mock_ipv4(input_text, expected_output, formatter): + """Test the mock_ipv4 method.""" assert formatter.mock_ipv4(input_text) == expected_output @@ -158,6 +170,7 @@ def test_mock_ipv4(input_text, expected_output, formatter): ], ) def test_mock_email(input_text, expected_output, formatter): + """Test the mock_email method.""" assert formatter.mock_email(input_text) == expected_output @@ -175,6 +188,7 @@ def test_mock_email(input_text, expected_output, formatter): ], ) def test_mock_password(input_text, expected_output, formatter): + """Test the mock_password method.""" assert formatter.mock_password(input_text) == expected_output @@ -190,6 +204,7 @@ def test_mock_password(input_text, expected_output, formatter): ], ) def test_mock_flair(input_text, expected_output, formatter): + """Test the mock_flair method.""" assert formatter.mock_flair(input_text) == expected_output @@ -212,6 +227,7 @@ def test_mock_flair(input_text, expected_output, formatter): ], ) def test_mock_home_directory(input_text, expected_output, formatter): + """Test the mock_home_directory method.""" assert formatter.mock_home_directory(input_text) == expected_output @@ -232,6 +248,7 @@ def test_mock_home_directory(input_text, expected_output, formatter): ], ) def test_filter_special_tags(input_text, expected_output, formatter): + """Test the filter_special_tags method.""" assert formatter.filter_special_tags(input_text) == expected_output @@ -249,6 +266,7 @@ def test_filter_special_tags(input_text, expected_output, formatter): ], ) def test_filter_piis(input_text, expected_output, formatter): + """Test the filter_piis method.""" assert formatter.filter_piis(input_text) == expected_output @@ -267,15 +285,18 @@ def test_filter_piis(input_text, expected_output, formatter): ], ) def test_filter_log_line(input_text, expected_output, formatter): + """Test the filter_log_line method.""" assert formatter.filter_log_line(input_text) == expected_output def test_formatException_invalid(): + """Test the formatException method with an invalid exception.""" with pytest.raises(Exception): formatter.formatException(Exception("Big bad error")) # type: ignore[attr-defined] def test_format(formatter): + """Test the format method.""" # Prepare the log record log_record = logging.LogRecord( name="test_logger", diff --git a/openbb_platform/core/tests/app/logs/handlers/__init__.py b/openbb_platform/core/tests/app/logs/handlers/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/logs/handlers/__init__.py +++ b/openbb_platform/core/tests/app/logs/handlers/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/logs/handlers/test_path_tracking_file_handler.py b/openbb_platform/core/tests/app/logs/handlers/test_path_tracking_file_handler.py index 40dae4a702f..ba81d15e1ab 100644 --- a/openbb_platform/core/tests/app/logs/handlers/test_path_tracking_file_handler.py +++ b/openbb_platform/core/tests/app/logs/handlers/test_path_tracking_file_handler.py @@ -12,7 +12,10 @@ from openbb_core.app.logs.handlers.path_tracking_file_handler import ( class MockLoggingSettings: + """Mock logging settings.""" + def __init__(self, app_name, user_logs_directory, session_id, frequency): + """Initialize the mock logging settings.""" self.app_name = app_name self.user_logs_directory = Path(user_logs_directory) self.session_id = session_id @@ -31,17 +34,20 @@ logging_settings.frequency = "H" @pytest.fixture(scope="module") def mocked_path(tmp_path_factory): + """Fixture to create a mocked file path.""" return tmp_path_factory.mktemp("mocked_path") / "mocked_file.log" @pytest.fixture(scope="module") def handler(mocked_path): + """Fixture to create a PathTrackingFileHandler instance.""" # patch `pathlib.Path.joinpath` to return a string containing the joined path with patch.object(Path, "joinpath", return_value=mocked_path): return PathTrackingFileHandler(logging_settings) def test_build_log_file_path(handler, mocked_path): + """Test build_log_file_path method.""" # Define a sample LoggingSettings object with mock attributes settings = MagicMock(spec=MockLoggingSettings) settings.app_name = "my_app" @@ -60,6 +66,7 @@ def test_build_log_file_path(handler, mocked_path): def test_clean_expired_files(handler): + """Test clean_expired_files method.""" with patch( "openbb_core.app.logs.handlers.path_tracking_file_handler.get_expired_file_list" ) as mock_get_expired_file_list, patch( diff --git a/openbb_platform/core/tests/app/logs/handlers/test_posthog_handler.py b/openbb_platform/core/tests/app/logs/handlers/test_posthog_handler.py index 5038f3ec016..5e795a4bf5f 100644 --- a/openbb_platform/core/tests/app/logs/handlers/test_posthog_handler.py +++ b/openbb_platform/core/tests/app/logs/handlers/test_posthog_handler.py @@ -1,3 +1,5 @@ +"""Tests for the PosthogHandler class.""" + import logging from pathlib import Path from unittest.mock import MagicMock @@ -8,7 +10,10 @@ from openbb_core.app.logs.handlers.posthog_handler import ( ) +# pylint: disable=W0621, R0913 class MockLoggingSettings: + """Mock logging settings.""" + def __init__( self, app_name, @@ -22,6 +27,7 @@ class MockLoggingSettings: platform_version, userid, ): + """Initialize the mock logging settings.""" self.app_name = app_name self.sub_app_name = sub_app_name self.user_logs_directory = Path(user_logs_directory) @@ -52,10 +58,12 @@ logging_settings.user_id = "user123" @pytest.fixture def handler(): + """Fixture to create a PosthogHandler instance.""" return PosthogHandler(logging_settings) def test_emit_calls_send(handler): + """Test the emit method.""" # Arrange record = logging.LogRecord( name="test_logger", @@ -78,6 +86,7 @@ def test_emit_calls_send(handler): def test_emit_calls_handleError_when_send_raises_exception(handler): + """Test the emit method.""" # Arrange record = logging.LogRecord( name="test_logger", @@ -104,6 +113,7 @@ def test_emit_calls_handleError_when_send_raises_exception(handler): def test_emit_calls_handleError_when_send_raises_exception_of_specific_type(handler): + """Test the emit method.""" # Arrange record = logging.LogRecord( name="test_logger", @@ -130,6 +140,7 @@ def test_emit_calls_handleError_when_send_raises_exception_of_specific_type(hand def test_emit_calls_handleError_when_send_raises_exception_of_another_type(handler): + """Test the emit method.""" # Arrange record = logging.LogRecord( name="test_logger", @@ -176,6 +187,7 @@ def test_emit_calls_handleError_when_send_raises_exception_of_another_type(handl ], ) def test_log_to_dict(handler, log_info, expected_dict): + """Test the log_to_dict method.""" # Act result = handler.log_to_dict(log_info) @@ -204,6 +216,7 @@ def test_log_to_dict(handler, log_info, expected_dict): ], ) def test_extract_log_extra(handler, record, expected_extra): + """Test the extract_log_extra method.""" # Act result = handler.extract_log_extra(record) diff --git a/openbb_platform/core/tests/app/logs/test_handlers_manager.py b/openbb_platform/core/tests/app/logs/test_handlers_manager.py index 43c23214e88..d46451c6314 100644 --- a/openbb_platform/core/tests/app/logs/test_handlers_manager.py +++ b/openbb_platform/core/tests/app/logs/test_handlers_manager.py @@ -1,3 +1,5 @@ +"""Tests for the handlers manager.""" + import logging from unittest.mock import Mock, patch @@ -7,25 +9,37 @@ from openbb_core.app.logs.handlers_manager import ( PosthogHandler, ) +# pylint: disable=W0231 + class MockPosthogHandler(logging.NullHandler): + """Mock posthog handler.""" + def __init__(self, settings): + """Initialize the handler.""" self.settings = settings self.level = logging.DEBUG class MockPathTrackingFileHandler(logging.NullHandler): + """Mock path tracking file handler.""" + def __init__(self, settings): + """Initialize the handler.""" self.settings = settings self.level = logging.DEBUG class MockFormatterWithExceptions(logging.Formatter): + """Mock formatter with exceptions.""" + def __init__(self, settings): + """Initialize the formatter.""" self.settings = settings def test_handlers_added_correctly(): + """Test if the handlers are added correctly.""" with patch( "openbb_core.app.logs.handlers_manager.PosthogHandler", MockPosthogHandler, @@ -60,6 +74,7 @@ def test_handlers_added_correctly(): def test_update_handlers(): + """Test if the handlers are updated correctly.""" with patch( "openbb_core.app.logs.handlers_manager.PosthogHandler", MockPosthogHandler, diff --git a/openbb_platform/core/tests/app/logs/test_logging_service.py b/openbb_platform/core/tests/app/logs/test_logging_service.py index 316b603588c..8eef4b90137 100644 --- a/openbb_platform/core/tests/app/logs/test_logging_service.py +++ b/openbb_platform/core/tests/app/logs/test_logging_service.py @@ -1,3 +1,5 @@ +"""Test LoggingService class.""" + import json from typing import Optional from unittest.mock import MagicMock, Mock, patch @@ -12,18 +14,24 @@ from pydantic import BaseModel class MockLoggingSettings: + """Mock logging settings.""" + def __init__(self, system_settings, user_settings): + """Initialize the mock logging settings.""" self.system_settings = system_settings self.user_settings = user_settings class MockOBBject(BaseModel): + """Mock object for testing.""" + output: Optional[str] = None error: Optional[str] = None @pytest.fixture(scope="function") def logging_service(): + """Return a LoggingService instance.""" mock_system_settings = Mock() mock_user_settings = Mock() mock_setup_handlers = Mock() @@ -48,6 +56,7 @@ def logging_service(): def test_correctly_initialized(): + """Test the LoggingService is correctly initialized.""" mock_system_settings = Mock() mock_user_settings = Mock() mock_setup_handlers = Mock() @@ -73,6 +82,7 @@ def test_correctly_initialized(): def test_logging_settings_setter(logging_service): + """Test the logging_settings setter.""" custom_user_settings = "custom_user_settings" custom_system_settings = "custom_system_settings" @@ -90,6 +100,7 @@ def test_logging_settings_setter(logging_service): def test_log_startup(logging_service): + """Test the log_startup method.""" with patch("logging.getLogger") as mock_get_logger: mock_info = mock_get_logger.return_value.info @@ -166,6 +177,7 @@ def test_log( exec_info, custom_headers, ): + """Test the log method.""" with patch( "openbb_core.app.logs.logging_service.LoggingSettings", MockLoggingSettings, diff --git a/openbb_platform/core/tests/app/logs/utils/__init__.py b/openbb_platform/core/tests/app/logs/utils/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/logs/utils/__init__.py +++ b/openbb_platform/core/tests/app/logs/utils/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/logs/utils/test_expired_files.py b/openbb_platform/core/tests/app/logs/utils/test_expired_files.py index 7e2721b1058..1cb7897eb25 100644 --- a/openbb_platform/core/tests/app/logs/utils/test_expired_files.py +++ b/openbb_platform/core/tests/app/logs/utils/test_expired_files.py @@ -1,3 +1,5 @@ +"""Tests for the expired_files module.""" + import os import tempfile from pathlib import Path @@ -12,9 +14,12 @@ from openbb_core.app.logs.utils.expired_files import ( remove_file_list, ) +# pylint: disable=W0621 + @pytest.fixture def temp_test_files(): + """Create temporary files for testing.""" with tempfile.TemporaryDirectory() as temp_dir: temp_files = [ Path(temp_dir) / "file1.txt", @@ -30,12 +35,14 @@ def temp_test_files(): def test_get_timestamp_from_x_days(): + """Test get_timestamp_from_x_days.""" result = get_timestamp_from_x_days(0) assert isinstance(result, float) # Test case when all files are expired def test_all_files_expired(temp_test_files): + """Test get_expired_file_list when all files are expired.""" temp_dir, temp_files = temp_test_files before_timestamp = time() + 3 * 86400 # timestamp 3 days from now expired_files = get_expired_file_list(Path(temp_dir), before_timestamp) @@ -44,14 +51,16 @@ def test_all_files_expired(temp_test_files): # Test case when no files are expired def test_no_files_expired(temp_test_files): + """Test get_expired_file_list when no files are expired.""" temp_dir, _ = temp_test_files before_timestamp = 0 expired_files = get_expired_file_list(Path(temp_dir), before_timestamp) - assert expired_files == [] + assert not expired_files # Test case when some files are expired and some are not def test_some_files_expired(temp_test_files): + """Test get_expired_file_list when some files are expired and some are not.""" temp_dir, _ = temp_test_files # add temp file to temp_dir with timestamp in the future @@ -70,27 +79,31 @@ def test_some_files_expired(temp_test_files): # Test case when the directory does not exist def test_directory_not_exists(): + """Test get_expired_file_list when the directory does not exist.""" directory = Path("/path/that/does/not/exist") before_timestamp = time() expired_files = get_expired_file_list(directory, before_timestamp) - assert expired_files == [] + assert not expired_files # Test case when the directory is not a directory def test_directory_not_dir(temp_test_files): + """Test get_expired_file_list when the directory is not a directory.""" _, temp_files = temp_test_files before_timestamp = time() expired_files = get_expired_file_list(temp_files[0], before_timestamp) - assert expired_files == [] + assert not expired_files @pytest.fixture def mock_path(): + """Return a MagicMock for the Path class.""" # Create a MagicMock for the Path class to represent a file path return MagicMock() def test_remove_file_list_no_files(mock_path): + """Test remove_file_list when there are no files to remove.""" # Arrange # Let's assume the file list is empty, meaning there are no files to remove file_list: List[Path] = [] @@ -104,6 +117,7 @@ def test_remove_file_list_no_files(mock_path): def test_remove_file_list_remove_files_successfully(mock_path): + """Test remove_file_list when unlink is successful.""" # Arrange # Let's assume we have three files in the file list file_list = [mock_path, mock_path, mock_path] @@ -120,6 +134,7 @@ def test_remove_file_list_remove_files_successfully(mock_path): def test_remove_file_list_ignore_permission_error(mock_path): + """Test remove_file_list when unlink raises a PermissionError.""" # Arrange # Let's assume we have three files in the file list file_list = [mock_path, mock_path, mock_path] @@ -136,6 +151,7 @@ def test_remove_file_list_ignore_permission_error(mock_path): def test_remove_file_list_other_exception(mock_path): + """Test remove_file_list when unlink raises an exception other than PermissionError.""" # Arrange # Let's assume we have three files in the file list file_list = [mock_path, mock_path, mock_path] diff --git a/openbb_platform/core/tests/app/logs/utils/test_utils.py b/openbb_platform/core/tests/app/logs/utils/test_utils.py index f3715abc434..9cda5662e2f 100644 --- a/openbb_platform/core/tests/app/logs/utils/test_utils.py +++ b/openbb_platform/core/tests/app/logs/utils/test_utils.py @@ -1,3 +1,5 @@ +"""OpenBB Platform Core tests.""" + import uuid from pathlib import Path from unittest.mock import patch @@ -9,12 +11,14 @@ from openbb_core.app.logs.utils.utils import get_app_id, get_log_dir, get_sessio def test_get_session_id_return_type(): + """Test if the returned value is a string.""" # Test if the returned value is a string session_id = get_session_id() assert isinstance(session_id, str) def test_get_session_id_format(): + """Test if the returned string has the format "UUID-current_time.""" # Test if the returned string has the format "UUID-current_time" session_id = get_session_id() @@ -33,6 +37,7 @@ def test_get_session_id_format(): def test_get_session_id_uniqueness(): + """Test if subsequent calls return different session IDs.""" # Test if subsequent calls return different session IDs session_id1 = get_session_id() session_id2 = get_session_id() @@ -43,9 +48,10 @@ def test_get_session_id_uniqueness(): def test_get_app_id_success(): + """Test get_app_id function.""" # Mock the return value of get_log_dir to simulate a successful scenario with patch("openbb_core.app.logs.utils.utils.get_log_dir") as mock_get_log_dir: - mock_get_log_dir + mock_get_log_dir # pylint: disable=pointless-statement mock_get_log_dir.return_value = Path( "/path/to/contextual_user_data_directory/app_id.log" ) @@ -54,6 +60,7 @@ def test_get_app_id_success(): def test_get_app_id_os_error(): + """Test handling of OSError with errno 30.""" # Test handling of OSError with errno 30 (Read-only file system) with patch("openbb_core.app.logs.utils.utils.get_log_dir") as mock_get_log_dir: mock_get_log_dir.side_effect = OSError(30, "Read-only file system") @@ -62,6 +69,7 @@ def test_get_app_id_os_error(): def test_get_app_id_other_exception(): + """Test handling of other exceptions.""" # Test handling of other exceptions with patch("openbb_core.app.logs.utils.utils.get_log_dir") as mock_get_log_dir: mock_get_log_dir.side_effect = Exception("Some other error") @@ -73,6 +81,7 @@ def test_get_app_id_other_exception(): def test_get_log_dir(): + """Test get_log_dir function.""" with patch( "openbb_core.app.logs.utils.utils.create_log_dir_if_not_exists", return_value="/test_dir", diff --git a/openbb_platform/core/tests/app/model/__init__.py b/openbb_platform/core/tests/app/model/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/model/__init__.py +++ b/openbb_platform/core/tests/app/model/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/model/abstract/__init__.py b/openbb_platform/core/tests/app/model/abstract/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/model/abstract/__init__.py +++ b/openbb_platform/core/tests/app/model/abstract/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/model/abstract/test_results.py b/openbb_platform/core/tests/app/model/abstract/test_results.py index c3dd548ea3a..ccdd5b8a036 100644 --- a/openbb_platform/core/tests/app/model/abstract/test_results.py +++ b/openbb_platform/core/tests/app/model/abstract/test_results.py @@ -1,12 +1,15 @@ +"""Tests for the Results model.""" + from openbb_core.app.model.abstract.results import Results from pydantic import BaseModel class MockResults(Results): - pass + """Mock Results class.""" def test_results_model(): + """Test the Results model.""" res = MockResults() assert isinstance(res, BaseModel) diff --git a/openbb_platform/core/tests/app/model/abstract/test_singleton.py b/openbb_platform/core/tests/app/model/abstract/test_singleton.py index d87502e2f67..e586fb00e9d 100644 --- a/openbb_platform/core/tests/app/model/abstract/test_singleton.py +++ b/openbb_platform/core/tests/app/model/abstract/test_singleton.py @@ -1,12 +1,18 @@ +"""Tests for the SingletonMeta metaclass.""" + from openbb_core.app.model.abstract.singleton import SingletonMeta class MyClass(metaclass=SingletonMeta): + """A simple class.""" + def __init__(self, value): + """Initialize the class.""" self.value = value def test_singleton_instance_creation(): + """Test the SingletonMeta metaclass with instance creation.""" # Arrange instance1 = MyClass(42) instance2 = MyClass(100) @@ -18,6 +24,8 @@ def test_singleton_instance_creation(): def test_singleton_multiple_classes(): + """Test the SingletonMeta metaclass with multiple classes.""" + # Arrange class AnotherClass(metaclass=SingletonMeta): def __init__(self, data): diff --git a/openbb_platform/core/tests/app/model/abstract/test_tagged.py b/openbb_platform/core/tests/app/model/abstract/test_tagged.py index 33df298ad58..7c40d15b675 100644 --- a/openbb_platform/core/tests/app/model/abstract/test_tagged.py +++ b/openbb_platform/core/tests/app/model/abstract/test_tagged.py @@ -1,13 +1,17 @@ +"""Test the Tagged model.""" + from openbb_core.app.model.abstract.tagged import Tagged def test_tagged_model(): + """Test the Tagged model.""" tagged = Tagged() assert hasattr(tagged, "id") def test_fields(): + """Test the Tagged fields.""" fields = Tagged.model_fields fields_keys = fields.keys() diff --git a/openbb_platform/core/tests/app/model/abstract/test_warning.py b/openbb_platform/core/tests/app/model/abstract/test_warning.py index 46692077cdd..3a506e6d658 100644 --- a/openbb_platform/core/tests/app/model/abstract/test_warning.py +++ b/openbb_platform/core/tests/app/model/abstract/test_warning.py @@ -1,3 +1,5 @@ +"""Test the Warnings model.""" + from unittest.mock import Mock import pytest @@ -12,6 +14,7 @@ from openbb_core.app.model.abstract.warning import Warning_, cast_warning ], ) def test_warn_model(category, message): + """Test the Warning_ model.""" war = Warning_(category=category, message=message) assert war.category == category @@ -19,6 +22,7 @@ def test_warn_model(category, message): def test_fields(): + """Test the Warning_ fields.""" fields = Warning_.model_fields fields_keys = fields.keys() @@ -27,6 +31,7 @@ def test_fields(): def test_cast_warning(): + """Test the cast_warning function.""" mock_warning_message = Mock() mock_warning_message.category.__name__ = "test" mock_warning_message.message = "test" diff --git a/openbb_platform/core/tests/app/model/charts/__init__.py b/openbb_platform/core/tests/app/model/charts/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/model/charts/__init__.py +++ b/openbb_platform/core/tests/app/model/charts/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/model/charts/test_chart.py b/openbb_platform/core/tests/app/model/charts/test_chart.py index 3d3ff9960bd..4f0eb140f42 100644 --- a/openbb_platform/core/tests/app/model/charts/test_chart.py +++ b/openbb_platform/core/tests/app/model/charts/test_chart.py @@ -1,8 +1,11 @@ +"""Test the chart model.""" + import pytest from openbb_core.app.model.charts.chart import Chart, ChartFormat def test_charting_default_values(): + """Test the charting default values.""" # Arrange & Act chart = Chart() @@ -12,6 +15,7 @@ def test_charting_default_values(): def test_charting_custom_values(): + """Test the charting custom values.""" # Arrange content = {"data": [1, 2, 3]} chart_format = ChartFormat.plotly @@ -25,6 +29,7 @@ def test_charting_custom_values(): def test_charting_assignment_validation(): + """Test the charting assignment validation.""" # Arrange chart = Chart() @@ -34,6 +39,7 @@ def test_charting_assignment_validation(): def test_charting_config_validation(): + """Test the charting config validation.""" # Arrange content = {"data": [1, 2, 3]} chart_format = ChartFormat.plotly @@ -48,5 +54,5 @@ def test_charting_config_validation(): def test_show(): + """Test the show method.""" # TODO : add test after the function is properly refactored - pass diff --git a/openbb_platform/core/tests/app/model/hub/__init__.py b/openbb_platform/core/tests/app/model/hub/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/model/hub/__init__.py +++ b/openbb_platform/core/tests/app/model/hub/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/model/hub/test_features_keys.py b/openbb_platform/core/tests/app/model/hub/test_features_keys.py deleted file mode 100644 index 4f3a85246e0..00000000000 --- a/openbb_platform/core/tests/app/model/hub/test_features_keys.py +++ /dev/null @@ -1,10 +0,0 @@ -from openbb_core.app.model.hub.features_keys import FeaturesKeys - -# ruff: noqa: S105 S106 - - -def test_features_keys(): - fk = FeaturesKeys(API_BITQUERY_KEY="test", API_BIZTOC_TOKEN="test2") - - assert fk.API_BITQUERY_KEY == "test" - assert fk.API_BIZTOC_TOKEN == "test2" diff --git a/openbb_platform/core/tests/app/model/hub/test_hub_session.py b/openbb_platform/core/tests/app/model/hub/test_hub_session.py index 645a097ac1f..19638f22cb9 100644 --- a/openbb_platform/core/tests/app/model/hub/test_hub_session.py +++ b/openbb_platform/core/tests/app/model/hub/test_hub_session.py @@ -1,3 +1,5 @@ +"""Test the HubSession class.""" + from openbb_core.app.model.hub.hub_session import HubSession from pydantic import SecretStr @@ -5,6 +7,7 @@ from pydantic import SecretStr def test_hub_session(): + """Test the HubSession class.""" session = HubSession( access_token=SecretStr("mock_access_token"), token_type="mock_token_type", @@ -22,6 +25,7 @@ def test_hub_session(): def test_fields(): + """Test the HubSession fields.""" fields = HubSession.model_fields fields_keys = fields.keys() diff --git a/openbb_platform/core/tests/app/model/hub/test_hub_user_settings.py b/openbb_platform/core/tests/app/model/hub/test_hub_user_settings.py index ca2f78ff9a8..5fdcde411fa 100644 --- a/openbb_platform/core/tests/app/model/hub/test_hub_user_settings.py +++ b/openbb_platform/core/tests/app/model/hub/test_hub_user_settings.py @@ -1,7 +1,10 @@ +"""Test the HubUserSettings class.""" + from openbb_core.app.model.hub.hub_user_settings import HubUserSettings def test_hub_user_settings(): + """Test the HubUserSettings class.""" hub_settings = HubUserSettings() assert isinstance(hub_settings, HubUserSettings) diff --git a/openbb_platform/core/tests/app/model/test_command_context.py b/openbb_platform/core/tests/app/model/test_command_context.py index 76423c8b9c5..57d982f58c2 100644 --- a/openbb_platform/core/tests/app/model/test_command_context.py +++ b/openbb_platform/core/tests/app/model/test_command_context.py @@ -1,3 +1,5 @@ +"""Test the CommandContext model.""" + from openbb_core.app.model.command_context import ( CommandContext, SystemSettings, @@ -6,6 +8,7 @@ from openbb_core.app.model.command_context import ( def test_command_context(): + """Test the CommandContext model.""" cc = CommandContext() assert isinstance(cc, CommandContext) assert isinstance(cc.user_settings, UserSettings) @@ -13,6 +16,7 @@ def test_command_context(): def test_fields(): + """Test the CommandContext fields.""" fields = CommandContext.model_fields fields_keys = fields.keys() diff --git a/openbb_platform/core/tests/app/model/test_credentials.py b/openbb_platform/core/tests/app/model/test_credentials.py index 041ca5f16e6..52f0d25126c 100644 --- a/openbb_platform/core/tests/app/model/test_credentials.py +++ b/openbb_platform/core/tests/app/model/test_credentials.py @@ -1,8 +1,11 @@ +"""Test the Credentials model.""" + import typing from unittest.mock import patch def test_credentials(): + """Test the Credentials model.""" with patch( target="openbb_core.app.model.credentials.ProviderInterface" ) as mock_provider_interface: @@ -10,7 +13,9 @@ def test_credentials(): "benzinga_api_key": (typing.Optional[str], None), "polygon_api_key": (typing.Optional[str], None), } - from openbb_core.app.model.credentials import Credentials + from openbb_core.app.model.credentials import ( # pylint: disable=import-outside-toplevel + Credentials, + ) creds = Credentials( benzinga_api_key="mock_benzinga_api_key", diff --git a/openbb_platform/core/tests/app/model/test_defaults.py b/openbb_platform/core/tests/app/model/test_defaults.py index af87fa52e24..e4a3df6dd21 100644 --- a/openbb_platform/core/tests/app/model/test_defaults.py +++ b/openbb_platform/core/tests/app/model/test_defaults.py @@ -1,13 +1,17 @@ +"""Test the Defaults class.""" + from openbb_core.app.model.defaults import Defaults def test_defaults(): + """Test the Defaults class.""" cc = Defaults(routes={"test": {"test": "test"}}) assert isinstance(cc, Defaults) assert cc.routes == {"test": {"test": "test"}} def test_fields(): + """Test the Defaults fields.""" fields = Defaults.model_fields fields_keys = fields.keys() diff --git a/openbb_platform/core/tests/app/model/test_metadata.py b/openbb_platform/core/tests/app/model/test_metadata.py index 60c4f95c583..37bf7377984 100644 --- a/openbb_platform/core/tests/app/model/test_metadata.py +++ b/openbb_platform/core/tests/app/model/test_metadata.py @@ -1,3 +1,5 @@ +"""Test the Metadata model.""" + from datetime import datetime import numpy as np @@ -8,9 +10,13 @@ from openbb_core.provider.abstract.data import Data def test_Metadata(): - "Smoke test" + """Run Smoke test.""" m = Metadata( - arguments={"test": "test"}, + arguments={ + "provider_choices": {}, + "standard_params": {}, + "extra_params": {}, + }, route="test", timestamp=datetime.now(), duration=0, @@ -20,7 +26,7 @@ def test_Metadata(): def test_fields(): - "Smoke test" + """Run Smoke test.""" fields = Metadata.model_fields.keys() assert "arguments" in fields assert "duration" in fields @@ -42,7 +48,7 @@ def test_fields(): { "data_list": { "type": "List[Data]", - "columns": ["open", "close", "volume"], + "columns": ["open", "volume", "close"], } }, ), @@ -98,20 +104,41 @@ def test_fields(): ], ) def test_scale_arguments(input_data, expected_output): + """Test the scale_arguments method.""" + kwargs = { + "provider_choices": {}, + "standard_params": {}, + "extra_params": input_data, + } m = Metadata( - arguments=input_data, + arguments=kwargs, route="test", timestamp=datetime.now(), duration=0, ) arguments = m.arguments - for arg in arguments: + for arg in arguments: # pylint: disable=E1133 if "columns" in arguments[arg]: # compare the column names disregarding the order with the expected output - assert sorted(arguments[arg]["columns"]) == sorted( + assert sorted(arguments["extra_params"][arg]["columns"]) == sorted( expected_output[arg]["columns"] ) assert arguments[arg]["type"] == expected_output[arg]["type"] else: - assert m.arguments == expected_output + # assert m.arguments["extra_params"] == expected_output + keys = list(arguments["extra_params"].keys()) + expected_keys = list(expected_output.keys()) + assert sorted(keys) == sorted(expected_keys) + + for key in keys: + if "type" in arguments["extra_params"][key]: + assert ( + arguments["extra_params"][key]["type"] + == expected_output[key]["type"] + ) + assert sorted(arguments["extra_params"][key]["columns"]) == sorted( + expected_output[key]["columns"] + ) + else: + assert arguments["extra_params"][key] == expected_output[key] diff --git a/openbb_platform/core/tests/app/model/test_preferences.py b/openbb_platform/core/tests/app/model/test_preferences.py index ca3bae14af0..dacfc708ed9 100644 --- a/openbb_platform/core/tests/app/model/test_preferences.py +++ b/openbb_platform/core/tests/app/model/test_preferences.py @@ -1,6 +1,9 @@ +"""Test the preferences class.""" + from openbb_core.app.model.preferences import Preferences def test_preferences(): + """Test the preferences class.""" preferences = Preferences() assert isinstance(preferences, Preferences) diff --git a/openbb_platform/core/tests/app/model/test_profile.py b/openbb_platform/core/tests/app/model/test_profile.py index 5c22d7ee73d..7f8a4795327 100644 --- a/openbb_platform/core/tests/app/model/test_profile.py +++ b/openbb_platform/core/tests/app/model/test_profile.py @@ -1,6 +1,9 @@ +"""Test the profile class.""" + from openbb_core.app.model.profile import Profile def test_preferences(): + """Test the preferences class.""" preferences = Profile() assert isinstance(preferences, Profile) diff --git a/openbb_platform/core/tests/app/model/test_system_settings.py b/openbb_platform/core/tests/app/model/test_system_settings.py index 90a1c63778f..1ead135bfe4 100644 --- a/openbb_platform/core/tests/app/model/test_system_settings.py +++ b/openbb_platform/core/tests/app/model/test_system_settings.py @@ -1,3 +1,5 @@ +"""Tests for the SystemSettings class.""" + import os from pathlib import Path @@ -13,11 +15,13 @@ class MockSystemSettings(BaseModel): def test_system_settings(): + """Test the SystemSettings class.""" sys = SystemSettings() assert isinstance(sys, SystemSettings) def test_create_openbb_directory_directory_and_files_not_exist(tmpdir): + """Test the create_openbb_directory method.""" # Arrange values = MockSystemSettings( **{ @@ -37,6 +41,7 @@ def test_create_openbb_directory_directory_and_files_not_exist(tmpdir): def test_create_openbb_directory_directory_exists_user_settings_missing(tmpdir): + """Test the create_openbb_directory method.""" # Arrange values = MockSystemSettings( **{ @@ -59,6 +64,7 @@ def test_create_openbb_directory_directory_exists_user_settings_missing(tmpdir): def test_create_openbb_directory_directory_exists_system_settings_missing(tmpdir): + """Test the create_openbb_directory method.""" # Arrange values = MockSystemSettings( **{ @@ -136,6 +142,7 @@ def test_create_openbb_directory_directory_exists_system_settings_missing(tmpdir ], ) def test_validate_posthog_handler(values, expected_handlers): + """Test the validate_posthog_handler method.""" values = MockSystemSettings(**values) # Act result = SystemSettings.validate_posthog_handler(values) # type: ignore[operator] @@ -158,6 +165,7 @@ def test_validate_posthog_handler(values, expected_handlers): ], ) def test_validate_logging_handlers(handlers, valid): + """Test the validate_logging_handlers method.""" # Act and Assert if valid: assert SystemSettings.validate_logging_handlers(handlers) == handlers # type: ignore[call-arg] diff --git a/openbb_platform/core/tests/app/model/test_user_settings.py b/openbb_platform/core/tests/app/model/test_user_settings.py index b24fb23cae1..ebc78faf4d9 100644 --- a/openbb_platform/core/tests/app/model/test_user_settings.py +++ b/openbb_platform/core/tests/app/model/test_user_settings.py @@ -1,3 +1,5 @@ +"""Test the UserSettings model.""" + from openbb_core.app.model.credentials import Credentials from openbb_core.app.model.defaults import Defaults from openbb_core.app.model.preferences import Preferences @@ -6,6 +8,7 @@ from openbb_core.app.model.user_settings import UserSettings def test_user_settings(): + """Test the UserSettings model.""" settings = UserSettings( credentials=Credentials(), profile=Profile(), diff --git a/openbb_platform/core/tests/app/results/__init__.py b/openbb_platform/core/tests/app/results/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/results/__init__.py +++ b/openbb_platform/core/tests/app/results/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/results/test_empty.py b/openbb_platform/core/tests/app/results/test_empty.py index 23a73ff369e..5ce63f4a5c5 100644 --- a/openbb_platform/core/tests/app/results/test_empty.py +++ b/openbb_platform/core/tests/app/results/test_empty.py @@ -1,8 +1,11 @@ +"""Test the Empty model.""" + from openbb_core.app.model.results.empty import Empty from pydantic import BaseModel def test_empty_model(): + """Test the Empty model.""" empty = Empty() assert isinstance(empty, Empty) diff --git a/openbb_platform/core/tests/app/service/__init__.py b/openbb_platform/core/tests/app/service/__init__.py index e69de29bb2d..55cb40ff9e8 100644 --- a/openbb_platform/core/tests/app/service/__init__.py +++ b/openbb_platform/core/tests/app/service/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Core tests.""" diff --git a/openbb_platform/core/tests/app/service/test_hub_service.py b/openbb_platform/core/tests/app/service/test_hub_service.py index 4b6c702c12f..db2030d561e 100644 --- a/openbb_platform/core/tests/app/service/test_hub_service.py +++ b/openbb_platform/core/tests/app/service/test_hub_service.py @@ -4,10 +4,10 @@ # ruff: noqa: S105 S106 +from pathlib import Path from unittest.mock import MagicMock, patch import pytest -from openbb_core.app.model.hub.features_keys import FeaturesKeys from openbb_core.app.service.hub_service import ( Credentials, HubService, @@ -25,6 +25,66 @@ def mocker(): yield mock +def test_v3tov4_map(): + """Test v3 to v4 map.""" + + v3_keys = { + "databento": "API_DATABENTO_KEY", + "alpha_vantage": "API_KEY_ALPHAVANTAGE", + "fmp": "API_KEY_FINANCIALMODELINGPREP", + "nasdaq": "API_KEY_QUANDL", + "polygon": "API_POLYGON_KEY", + "fred": "API_FRED_KEY", + "news_api": "API_NEWS_TOKEN", + "biztoc": "API_BIZTOC_TOKEN", + "cmc": "API_CMC_KEY", + "finnhub": "API_FINNHUB_KEY", + "whale_alert": "API_WHALE_ALERT_KEY", + "glassnode": "API_GLASSNODE_KEY", + "coinglass": "API_COINGLASS_KEY", + "ethplorer": "API_ETHPLORER_KEY", + "cryptopanic": "API_CRYPTO_PANIC_KEY", + "crypto_panic": "API_CRYPTO_PANIC_KEY", # If dev choses to use this name + "bitquery": "API_BITQUERY_KEY", + "smartstake": ["API_SMARTSTAKE_KEY", "API_SMARTSTAKE_TOKEN"], + "messari": "API_MESSARI_KEY", + "shroom": "API_SHROOM_KEY", + "santiment": "API_SANTIMENT_KEY", + "eodhd": "API_EODHD_KEY", + "tokenterminal": "API_TOKEN_TERMINAL_KEY", + "token_terminal": "API_TOKEN_TERMINAL_KEY", # If dev choses to use this name + "intrinio": "API_INTRINIO_KEY", + "github": "API_GITHUB_KEY", + "reddit": [ + "API_REDDIT_CLIENT_ID", + "API_REDDIT_CLIENT_SECRET", + "API_REDDIT_USERNAME", + "API_REDDIT_USER_AGENT", + "API_REDDIT_PASSWORD", + ], + "companies_house": "API_COMPANIESHOUSE_KEY", + "companieshouse": "API_COMPANIESHOUSE_KEY", # If dev choses to use this name + "dappradar": "API_DAPPRADAR_KEY", + "nixtla": "API_KEY_NIXTLA", + } + + providers = sorted( + [ + p.stem + for p in Path("openbb_platform", "providers").glob("*") + if p.is_dir() and p.name not in ("__pycache__", "tests") + ] + ) + + for provider in providers: + if provider in v3_keys: + keys = v3_keys[provider] + if not isinstance(keys, list): + keys = [keys] + for k in keys: + assert k in HubService.V3TOV4 + + def test_connect_with_email_password(): """Test connect with email and password.""" mock_hub_session = MagicMock(spec=HubSession) @@ -173,31 +233,78 @@ def test_put_user_settings(): ) -def test_hub2platform(): +def test_hub2platform_v4_only(): """Test hub2platform.""" mock_user_settings = MagicMock(spec=HubUserSettings) - mock_user_settings.features_keys = FeaturesKeys( - API_KEY_FINANCIALMODELINGPREP="fmp", - API_POLYGON_KEY="polygon", - API_FRED_KEY="fred", - ) + mock_user_settings.features_keys = { + "fmp_api_key": "abc", + "polygon_api_key": "def", + "fred_api_key": "ghi", + } - credentials = HubService.hub2platform(mock_user_settings) + credentials = HubService().hub2platform(mock_user_settings) assert isinstance(credentials, Credentials) - assert credentials.fmp_api_key.get_secret_value() == "fmp" - assert credentials.polygon_api_key.get_secret_value() == "polygon" - assert credentials.fred_api_key.get_secret_value() == "fred" + assert credentials.fmp_api_key.get_secret_value() == "abc" + assert credentials.polygon_api_key.get_secret_value() == "def" + assert credentials.fred_api_key.get_secret_value() == "ghi" + + +def test_hub2platform_v3_only(): + """Test hub2platform.""" + mock_user_settings = MagicMock(spec=HubUserSettings) + mock_user_settings.features_keys = { + "API_KEY_FINANCIALMODELINGPREP": "abc", + "API_POLYGON_KEY": "def", + "API_FRED_KEY": "ghi", + } + + credentials = HubService().hub2platform(mock_user_settings) + assert isinstance(credentials, Credentials) + assert credentials.fmp_api_key.get_secret_value() == "abc" + assert credentials.polygon_api_key.get_secret_value() == "def" + assert credentials.fred_api_key.get_secret_value() == "ghi" + + +def test_hub2platform_v3v4(): + """Test hub2platform.""" + mock_user_settings = MagicMock(spec=HubUserSettings) + mock_user_settings.features_keys = { + "API_KEY_FINANCIALMODELINGPREP": "abc", + "fmp_api_key": "other_key", + "API_POLYGON_KEY": "def", + "API_FRED_KEY": "ghi", + } + + credentials = HubService().hub2platform(mock_user_settings) + assert isinstance(credentials, Credentials) + assert credentials.fmp_api_key.get_secret_value() == "other_key" + assert credentials.polygon_api_key.get_secret_value() == "def" + assert credentials.fred_api_key.get_secret_value() == "ghi" def test_platform2hub(): """Test platform2hub.""" - mock_credentials = MagicMock(spec=Credentials) - mock_credentials.fmp_api_key = SecretStr("fmp") - mock_credentials.polygon_api_key = SecretStr("polygon") - mock_credentials.fred_api_key = SecretStr("fred") + mock_user_settings = MagicMock(spec=HubUserSettings) + mock_user_settings.features_keys = { # Received from Hub + "API_KEY_FINANCIALMODELINGPREP": "abc", + "fmp_api_key": "other_key", + "API_FRED_KEY": "ghi", + } + mock_hub_service = HubService() + mock_hub_service._hub_user_settings = mock_user_settings + mock_credentials = Credentials( # Current credentials + fmp_api_key=SecretStr("fmp"), + polygon_api_key=SecretStr("polygon"), + fred_api_key=SecretStr("fred"), + benzinga_api_key=SecretStr("benzinga"), + some_api_key=SecretStr("some"), + ) + user_settings = mock_hub_service.platform2hub(mock_credentials) - user_settings = HubService.platform2hub(mock_credentials) assert isinstance(user_settings, HubUserSettings) - assert user_settings.features_keys.API_KEY_FINANCIALMODELINGPREP == "fmp" - assert user_settings.features_keys.API_POLYGON_KEY == "polygon" - assert user_settings.features_keys.API_FRED_KEY == "fred" + assert user_settings.features_keys["API_KEY_FINANCIALMODELINGPREP"] == "fmp" + assert user_settings.features_keys["fmp_api_key"] == "other_key" + assert user_settings.features_keys["polygon_api_key"] == "polygon" + assert user_settings.features_keys["API_FRED_KEY"] == "fred" + assert user_settings.features_keys["benzinga_api_key"] == "benzinga" + assert "some_api_key" not in user_settings.features_keys diff --git a/openbb_platform/core/tests/app/static/__init__.py b/openbb_platform/core/tests/app/static/__init__.py index e69de29bb2d..3f4c8aabdda 100644 --- a/openbb_platform/core/tests/app/static/__init__.py +++ b/openbb_platform/core/tests/app/static/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform core tests.""" diff --git a/openbb_platform/core/tests/app/static/test_app_factory.py b/openbb_platform/core/tests/app/static/test_app_factory.py index efb79faabff..9a8799be503 100644 --- a/openbb_platform/core/tests/app/static/test_app_factory.py +++ b/openbb_platform/core/tests/app/static/test_app_factory.py @@ -47,3 +47,10 @@ def test_app_coverage(app_factory): coverage = app_factory.coverage assert coverage assert isinstance(coverage, Coverage) + + +def test_app_reference(app_factory): + """Test app reference.""" + reference = app_factory.reference + assert reference + assert isinstance(reference, dict) diff --git a/openbb_platform/core/tests/app/static/test_filters.py b/openbb_platform/core/tests/app/static/test_filters.py index 1f06dc0955d..9532867fe4b 100644 --- a/openbb_platform/core/tests/app/static/test_filters.py +++ b/openbb_platform/core/tests/app/static/test_filters.py @@ -49,6 +49,7 @@ test_data = [ def test_filter_inputs( input_data, ): + """Test the filter_inputs function.""" result = filter_inputs(data=input_data, data_processing=True) # Assert that the result is a dictionary diff --git a/openbb_platform/core/tests/app/static/test_package_builder.py b/openbb_platform/core/tests/app/static/test_package_builder.py index 029c200fa45..fe738d69deb 100644 --- a/openbb_platform/core/tests/app/static/test_package_builder.py +++ b/openbb_platform/core/tests/app/static/test_package_builder.py @@ -5,6 +5,7 @@ from dataclasses import dataclass from inspect import _empty from pathlib import Path +from typing import Any, Dict, List, Tuple, Union from unittest.mock import PropertyMock, mock_open, patch import pandas @@ -27,6 +28,7 @@ from typing_extensions import Annotated @pytest.fixture(scope="module") def tmp_openbb_dir(tmp_path_factory): + """Return a temporary openbb directory.""" return tmp_path_factory.mktemp("openbb") @@ -532,6 +534,7 @@ def test_generate_model_docstring(docstring_generator): docstring = "" model_name = "WorldNews" summary = "This is a summary." + sections = ["description", "parameters", "returns", "examples"] pi = docstring_generator.provider_interface kwarg_params = pi.params[model_name]["extra"].__dataclass_fields__ @@ -551,6 +554,7 @@ def test_generate_model_docstring(docstring_generator): kwarg_params=kwarg_params, returns=returns, results_type="List[WorldNews]", + sections=sections, ) assert docstring @@ -560,11 +564,46 @@ def test_generate_model_docstring(docstring_generator): assert "WorldNews" in docstring +@pytest.mark.parametrize( + "type_, expected", + [ + (Any, []), + (List[str], ["List"]), + (Dict[str, str], ["Dict"]), + (Tuple[str], ["Tuple"]), + (Union[List[str], Dict[str, str], Tuple[str]], ["List", "Dict", "Tuple"]), + ], +) +def test__get_generic_types(docstring_generator, type_, expected): + """Test get generic types.""" + output = docstring_generator._get_generic_types(type_, []) + assert output == expected + + +@pytest.mark.parametrize( + "items, model, expected", + [ + ([], "test_model", "test_model"), + (["List"], "test_model", "List[test_model]"), + (["Dict"], "test_model", "Dict[str, test_model]"), + (["Tuple"], "test_model", "Tuple[test_model]"), + ( + ["List", "Dict", "Tuple"], + "test_model", + "Union[List[test_model], Dict[str, test_model], Tuple[test_model]]", + ), + ], +) +def test__get_repr(docstring_generator, items, model, expected): + output = docstring_generator._get_repr(items, model) + assert output == expected + + def test_generate(docstring_generator): """Test generate docstring.""" def some_func(): - """Some func docstring.""" + """Define Some func docstring.""" formatted_params = { "param1": Parameter("NoneType", kind=Parameter.POSITIONAL_OR_KEYWORD), @@ -582,15 +621,15 @@ def test_generate(docstring_generator): assert "Returns" in doc -def test_read_extension_map(package_builder, tmp_openbb_dir): - """Test read extension map.""" +def test__read(package_builder, tmp_openbb_dir): + """Test read.""" PATH = "openbb_core.app.static.package_builder." open_mock = mock_open() with patch(PATH + "open", open_mock), patch(PATH + "load") as mock_load: - package_builder._read(Path(tmp_openbb_dir / "assets" / "extension_map.json")) + package_builder._read(Path(tmp_openbb_dir / "assets" / "reference.json")) open_mock.assert_called_once_with( - Path(tmp_openbb_dir / "assets" / "extension_map.json") + Path(tmp_openbb_dir / "assets" / "reference.json") ) mock_load.assert_called_once() @@ -646,7 +685,6 @@ def test_read_extension_map(package_builder, tmp_openbb_dir): ) def test_package_diff( package_builder, - tmp_openbb_dir, ext_built, ext_installed, ext_inst_version, @@ -656,22 +694,20 @@ def test_package_diff( """Test package differences.""" def mock_entry_points(group): + """Mock entry points.""" return ext_installed.select(**{"group": group}) PATH = "openbb_core.app.static.package_builder." - with patch.object(PackageBuilder, "_read") as mock_read, patch( - PATH + "entry_points", mock_entry_points - ), patch.object(EntryPoint, "dist", new_callable=PropertyMock) as mock_obj: + with patch(PATH + "entry_points", mock_entry_points), patch.object( + EntryPoint, "dist", new_callable=PropertyMock + ) as mock_obj: class MockPathDistribution: version = ext_inst_version mock_obj.return_value = MockPathDistribution() - mock_read.return_value = ext_built - add, remove = package_builder._diff( - Path(tmp_openbb_dir, "assets", "extension_map.json") - ) + add, remove = package_builder._diff(ext_built) # We add whatever is not built, but is installed assert add == expected_add @@ -689,7 +725,7 @@ def test_package_diff( ({"this"}, {"that"}, False), ], ) -def test_auto_build(package_builder, tmp_openbb_dir, add, remove, openbb_auto_build): +def test_auto_build(package_builder, add, remove, openbb_auto_build): """Test auto build.""" with patch.object(PackageBuilder, "_diff") as mock_assets_diff, patch.object( @@ -700,9 +736,6 @@ def test_auto_build(package_builder, tmp_openbb_dir, add, remove, openbb_auto_bu package_builder.auto_build() if openbb_auto_build: - mock_assets_diff.assert_called_once_with( - Path(tmp_openbb_dir, "assets", "extension_map.json") - ) if add or remove: mock_build.assert_called_once() else: diff --git a/openbb_platform/core/tests/app/static/test_reference_loader.py b/openbb_platform/core/tests/app/static/test_reference_loader.py index 1980ac4611a..20ef1fabf96 100644 --- a/openbb_platform/core/tests/app/static/test_reference_loader.py +++ b/openbb_platform/core/tests/app/static/test_reference_loader.py @@ -1,12 +1,17 @@ +"""Tests for the ReferenceLoader class.""" + import json from pathlib import Path import pytest from openbb_core.app.static.reference_loader import ReferenceLoader +# pylint: disable=W0212, W0621 + @pytest.fixture(scope="function") def reference_loader(): + """Fixture to create a ReferenceLoader instance.""" ReferenceLoader._instances = {} yield ReferenceLoader ReferenceLoader._instances = {} diff --git a/openbb_platform/core/tests/app/static/utils/test_linters.py b/openbb_platform/core/tests/app/static/utils/test_linters.py index 37f57e39592..1ebd54b66d0 100644 --- a/openbb_platform/core/tests/app/static/utils/test_linters.py +++ b/openbb_platform/core/tests/app/static/utils/test_linters.py @@ -10,6 +10,7 @@ from openbb_core.app.static.package_builder import ( @pytest.fixture(scope="module") def tmp_package_dir(tmp_path_factory): + """Return a temporary package directory.""" return tmp_path_factory.mktemp("package") diff --git a/openbb_platform/core/tests/app/test_charting_manager.py b/openbb_platform/core/tests/app/test_charting_manager.py index e69de29bb2d..06b5fb09691 100644 --- a/openbb_platform/core/tests/app/test_charting_manager.py +++ b/openbb_platform/core/tests/app/test_charting_manager.py @@ -0,0 +1 @@ +"""Test ChartingManager.""" diff --git a/openbb_platform/core/tests/app/test_command_runner.py b/openbb_platform/core/tests/app/test_command_runner.py index 4b1b35da92d..d56acfca82c 100644 --- a/openbb_platform/core/tests/app/test_command_runner.py +++ b/openbb_platform/core/tests/app/test_command_runner.py @@ -1,3 +1,5 @@ +"""Test command runner.""" + from dataclasses import dataclass from inspect import Parameter from typing import Dict, List @@ -20,6 +22,8 @@ from openbb_core.app.provider_interface import ExtraParams from openbb_core.app.router import CommandMap from pydantic import BaseModel, ConfigDict +# pylint: disable=W0613, W0621, W0102, W0212 + @pytest.fixture() def execution_context(): @@ -37,7 +41,7 @@ def mock_func(): def mock_func( a: int, b: int, c: float = 10.0, d: int = 5, provider_choices: Dict = {} ) -> None: - pass + """Mock function.""" return mock_func @@ -155,12 +159,14 @@ def test_parameters_builder_merge_args_and_kwargs( def test_parameters_builder_update_command_context( kwargs, system_settings, user_settings, expected_result ): + """Test update_command_context.""" + def other_mock_func( cc: CommandContext, a: int, b: int, ) -> None: - pass + """Mock function.""" result = ParametersBuilder.update_command_context( other_mock_func, kwargs, system_settings, user_settings @@ -207,6 +213,7 @@ def test_parameters_builder_update_command_context( def test_parameters_builder_update_provider_choices( command_coverage, route, kwargs, route_default, expected_result ): + """Test update_provider_choices.""" with patch("openbb_core.app.command_runner.ProviderInterface") as mock_pi: mock_pi.available_providers = ["provider1", "provider2"] result = ParametersBuilder.update_provider_choices( @@ -218,7 +225,6 @@ def test_parameters_builder_update_provider_choices( def test_parameters_builder_validate_kwargs(mock_func): """Test validate_kwargs.""" - # TODO: add more test cases with @pytest.mark.parametrize result = ParametersBuilder.validate_kwargs( @@ -268,7 +274,6 @@ def test_parameters_builder__warn_kwargs(extra_params, base, expect): def test_parameters_builder_build(mock_func, execution_context): """Test build.""" - # TODO: add more test cases with @pytest.mark.parametrize with patch("openbb_core.app.command_runner.ProviderInterface") as mock_pi: @@ -298,14 +303,12 @@ def test_parameters_builder_build(mock_func, execution_context): @patch("openbb_core.app.command_runner.LoggingService") def test_command_runner(_): """Test command runner.""" - assert CommandRunner() @patch("openbb_core.app.command_runner.LoggingService") def test_command_runner_properties(mock_logging_service): """Test properties.""" - sys = SystemSettings() user = UserSettings() cmd_map = CommandMap() @@ -320,6 +323,7 @@ def test_command_runner_properties(mock_logging_service): @patch("openbb_core.app.command_runner.LoggingService") def test_command_runner_run(_): + """Test run.""" runner = CommandRunner() with patch( @@ -338,14 +342,17 @@ async def test_static_command_runner_run( """Test static command runner run.""" def other_mock_func(a: int, b: int, c: int, d: int) -> List[int]: + """Mock function.""" return [a, b, c, d] class MockOBBject: """Mock OBBject""" def __init__(self, results): + """Initialize the mock object.""" self.results = results self.extra = {} + self.extra["metadata"] = {"test": "test"} mock_get_command.return_value = other_mock_func mock_execute_func.return_value = MockOBBject(results=[1, 2, 3, 4]) diff --git a/openbb_platform/core/tests/app/test_deprecation.py b/openbb_platform/core/tests/app/test_deprecation.py index 926fe991a7b..bca6c5381ae 100644 --- a/openbb_platform/core/tests/app/test_deprecation.py +++ b/openbb_platform/core/tests/app/test_deprecation.py @@ -1,3 +1,5 @@ +"""Test deprecated commands.""" + import unittest from openbb_core.app.static.package_builder import PathHandler diff --git a/openbb_platform/core/tests/app/test_utils.py b/openbb_platform/core/tests/app/test_utils.py index 4b2bcfc5fb2..ab07be91597 100644 --- a/openbb_platform/core/tests/app/test_utils.py +++ b/openbb_platform/core/tests/app/test_utils.py @@ -1,3 +1,5 @@ +"""OpenBB Platform Core app utils tests.""" + import numpy as np import pandas as pd import pytest @@ -14,6 +16,8 @@ from openbb_core.app.utils import ( ) from openbb_core.provider.abstract.data import Data +# pylint: disable=W0621 + df = pd.DataFrame( { "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], @@ -37,36 +41,42 @@ multi_index_base_model = [ def test_df_to_basemodel(): + """Test the df_to_basemodel helper.""" base_model = df_to_basemodel(df) assert isinstance(base_model, list) assert base_model[0].x == 1 # type: ignore[attr-defined] def test_df_to_basemodel_multiindex(): + """Test the df_to_basemodel helper with a multi-index DataFrame.""" base_model = df_to_basemodel(df_multiindex) assert isinstance(base_model, list) assert hasattr(base_model[0], "is_multiindex") def test_basemodel_to_df(): + """Test the basemodel_to_df helper.""" df = basemodel_to_df(simple_base_model) assert isinstance(df, pd.DataFrame) assert df.shape == (8, 3) def test_basemodel_to_multiindex_df(): + """Test the basemodel_to_df helper with a multi-index DataFrame.""" df = basemodel_to_df(multi_index_base_model) assert isinstance(df, pd.DataFrame) assert isinstance(df.index, pd.MultiIndex) def test_get_target_column(): + """Test the get_target_column helper.""" target = get_target_column(df, "x") assert isinstance(target, pd.Series) assert target[0] == 1 def test_get_target_columns(): + """Test the get_target_columns helper.""" targets = get_target_columns(df, ["x", "y"]) assert isinstance(targets, pd.DataFrame) assert targets.shape == (10, 2) @@ -84,6 +94,7 @@ def test_get_target_columns(): ], ) def test_list_to_basemodel(data_list, expected): + """Test the list_to_basemodel helper.""" result = list_to_basemodel(data_list) for r, e in zip(result, expected): assert r.model_dump() == e.model_dump() @@ -101,6 +112,7 @@ def test_list_to_basemodel(data_list, expected): ], ) def test_dict_to_basemodel(data_dict, expected): + """Test the dict_to_basemodel helper.""" result = dict_to_basemodel(data_dict) assert result.model_dump() == expected.model_dump() @@ -123,6 +135,7 @@ def test_dict_to_basemodel(data_dict, expected): ], ) def test_ndarray_to_basemodel(array, expected): + """Test the ndarray_to_basemodel helper.""" result = ndarray_to_basemodel(array) for r, e in zip(result, expected): assert r.model_dump() == e.model_dump() @@ -139,6 +152,7 @@ def test_ndarray_to_basemodel(array, expected): ], ) def test_check_single_item(item, expected): + """Test the check_single_item helper.""" if expected is OpenBBError: with pytest.raises(OpenBBError): check_single_item(item) diff --git a/openbb_platform/core/tests/provider/test_registry_map.py b/openbb_platform/core/tests/provider/test_registry_map.py index 5e2e9e9f061..67c905a8821 100644 --- a/openbb_platform/core/tests/provider/test_registry_map.py +++ b/openbb_platform/core/tests/provider/test_registry_map.py @@ -9,8 +9,7 @@ from openbb_core.provider.registry_map import RegistryMap @pytest.fixture def load_registry_map(): """Mock the registry map.""" - registry_map = RegistryMap() - return registry_map + return RegistryMap() def test_get_credentials(load_registry_map): @@ -30,9 +29,12 @@ def test_get_available_providers(load_registry_map): def test_map_and_models(load_registry_map): """Test if the _get_map method behaves as expected.""" - map_, return_map = load_registry_map.map, load_registry_map.return_map + standard_extra, original_models = ( + load_registry_map.standard_extra, + load_registry_map.original_models, + ) models = load_registry_map.models - assert "EquityHistorical" in map_ - assert "EquityHistorical" in return_map + assert "EquityHistorical" in standard_extra + assert "EquityHistorical" in original_models assert "EquityHistorical" in models diff --git a/openbb_platform/core/tests/provider/utils/test_client.py b/openbb_platform/core/tests/provider/utils/test_client.py index 1c88c958853..5b018994d9b 100644 --- a/openbb_platform/core/tests/provider/utils/test_client.py +++ b/openbb_platform/core/tests/provider/utils/test_client.py @@ -1,3 +1,5 @@ +"""Test the client helper.""" + import gzip import json import zlib @@ -80,6 +82,7 @@ class MockClientSession(client.ClientSession): async def request( # type: ignore self, *args, raise_for_status: bool = False, **kwargs ) -> client.ClientResponse: + """Mock the request method.""" response = MockResponse(*args, **kwargs) if raise_for_status: diff --git a/openbb_platform/core/tests/provider/utils/test_helpers.py b/openbb_platform/core/tests/provider/utils/test_helpers.py index 4d37084e4e3..741ce6ee914 100644 --- a/openbb_platform/core/tests/provider/utils/test_helpers.py +++ b/openbb_platform/core/tests/provider/utils/test_helpers.py @@ -11,21 +11,31 @@ from openbb_core.provider.utils.helpers import ( to_snake_case, ) +# pylint: disable=unused-argument + class MockResponse: + """Mock the response.""" + def __init__(self): + """Initialize the mock response.""" self.status_code = 200 self.status = 200 async def json(self): + """Return the json response.""" return {"test": "test"} class MockSession: + """Mock the ClientSession.""" + def __init__(self): + """Initialize the mock session.""" self.response = MockResponse() - async def request(self, *args, **kwargs): + async def request(self, *args, **kwargs): # pylint: disable=unused-argument + """Mock the ClientSession.request method.""" if kwargs.get("raise_for_status", False): raise Exception("Test") diff --git a/openbb_platform/extensions/__init__.py b/openbb_platform/extensions/__init__.py index e69de29bb2d..a2fa55684fc 100644 --- a/openbb_platform/extensions/__init__.py +++ b/openbb_platform/extensions/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Extensions.""" diff --git a/openbb_platform/extensions/commodity/integration/test_commodity_api.py b/openbb_platform/extensions/commodity/integration/test_commodity_api.py index 89f22935c9c..56e06076e4d 100644 --- a/openbb_platform/extensions/commodity/integration/test_commodity_api.py +++ b/openbb_platform/extensions/commodity/integration/test_commodity_api.py @@ -12,6 +12,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -46,6 +47,7 @@ def headers(): ) @pytest.mark.integration def test_commodity_lbma_fixing(params, headers): + """Test the LBMA fixing endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/commodity/integration/test_commodity_python.py b/openbb_platform/extensions/commodity/integration/test_commodity_python.py index c805ffcb269..192dac81a19 100644 --- a/openbb_platform/extensions/commodity/integration/test_commodity_python.py +++ b/openbb_platform/extensions/commodity/integration/test_commodity_python.py @@ -42,6 +42,7 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements ) @pytest.mark.integration def test_commodity_lbma_fixing(params, obb): + """Test the LBMA fixing endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.commodity.lbma_fixing(**params) diff --git a/openbb_platform/extensions/commodity/openbb_commodity/__init__.py b/openbb_platform/extensions/commodity/openbb_commodity/__init__.py index e69de29bb2d..c38801bad61 100644 --- a/openbb_platform/extensions/commodity/openbb_commodity/__init__.py +++ b/openbb_platform/extensions/commodity/openbb_commodity/__init__.py @@ -0,0 +1 @@ +"""OpenBB Commodity Extension.""" diff --git a/openbb_platform/extensions/commodity/openbb_commodity/commodity_router.py b/openbb_platform/extensions/commodity/openbb_commodity/commodity_router.py index ebf5401c28f..3d8482d6852 100644 --- a/openbb_platform/extensions/commodity/openbb_commodity/commodity_router.py +++ b/openbb_platform/extensions/commodity/openbb_commodity/commodity_router.py @@ -12,7 +12,7 @@ from openbb_core.app.query import Query from openbb_core.app.router import Router from pydantic import BaseModel -router = Router(prefix="") +router = Router(prefix="", description="Commodity market data.") # pylint: disable=unused-argument diff --git a/openbb_platform/extensions/commodity/poetry.lock b/openbb_platform/extensions/commodity/poetry.lock index a5af39a01ec..c3aaff6a76a 100644 --- a/openbb_platform/extensions/commodity/poetry.lock +++ b/openbb_platform/extensions/commodity/poetry.lock @@ -2,87 +2,87 @@ [[package]] name = "aiohttp" -version = "3.9.3" +version = "3.9.5" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52"}, - {file = "aiohttp-3.9.3-cp310-cp310-win32.whl", hash = "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b"}, - {file = "aiohttp-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4"}, - {file = "aiohttp-3.9.3-cp311-cp311-win32.whl", hash = "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5"}, - {file = "aiohttp-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f"}, - {file = "aiohttp-3.9.3-cp312-cp312-win32.whl", hash = "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38"}, - {file = "aiohttp-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2"}, - {file = "aiohttp-3.9.3-cp38-cp38-win32.whl", hash = "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63"}, - {file = "aiohttp-3.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d"}, - {file = "aiohttp-3.9.3-cp39-cp39-win32.whl", hash = "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051"}, - {file = "aiohttp-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc"}, - {file = "aiohttp-3.9.3.tar.gz", hash = "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, + {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, + {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, + {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, + {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, + {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, + {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, + {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, + {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, + {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, ] [package.dependencies] @@ -323,13 +323,13 @@ files = [ [[package]] name = "ecdsa" -version = "0.18.0" +version = "0.19.0" description = "ECDSA cryptographic signature library (pure python)" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.6" files = [ - {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, - {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, + {file = "ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a"}, + {file = "ecdsa-0.19.0.tar.gz", hash = "sha256:60eaad1199659900dd0af521ed462b793bbdf867432b3948e87416ae4caf6bf8"}, ] [package.dependencies] @@ -341,13 +341,13 @@ gmpy2 = ["gmpy2"] [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -493,13 +493,13 @@ lxml = ["lxml"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -670,58 +670,58 @@ files = [ [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -778,8 +778,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -810,13 +810,13 @@ xml = ["lxml (>=4.6.3)"] [[package]] name = "posthog" -version = "3.3.4" +version = "3.5.0" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.3.4-py2.py3-none-any.whl", hash = "sha256:2fec5112c6df1d6a214a899e409659ed354511236537e861f1556a0c88e3fd26"}, - {file = "posthog-3.3.4.tar.gz", hash = "sha256:23a891639bc0a4f6fe4d04864d02410c60b7ee5d523de79becbc7325c983dba9"}, + {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, + {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, ] [package.dependencies] @@ -833,29 +833,29 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint" [[package]] name = "pyasn1" -version = "0.5.1" +version = "0.6.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.8" files = [ - {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, - {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, + {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, + {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, ] [[package]] name = "pydantic" -version = "2.6.0" +version = "2.7.0" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.0-py3-none-any.whl", hash = "sha256:1440966574e1b5b99cf75a13bec7b20e3512e8a61b894ae252f56275e2c465ae"}, - {file = "pydantic-2.6.0.tar.gz", hash = "sha256:ae887bd94eb404b09d86e4d12f93893bdca79d766e738528c6fa1c849f3c6bcf"}, + {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, + {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.1" +pydantic-core = "2.18.1" typing-extensions = ">=4.6.1" [package.extras] @@ -863,90 +863,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.1" -description = "" +version = "2.18.1" +description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:300616102fb71241ff477a2cbbc847321dbec49428434a2f17f37528721c4948"}, - {file = "pydantic_core-2.16.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5511f962dd1b9b553e9534c3b9c6a4b0c9ded3d8c2be96e61d56f933feef9e1f"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98f0edee7ee9cc7f9221af2e1b95bd02810e1c7a6d115cfd82698803d385b28f"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9795f56aa6b2296f05ac79d8a424e94056730c0b860a62b0fdcfe6340b658cc8"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c45f62e4107ebd05166717ac58f6feb44471ed450d07fecd90e5f69d9bf03c48"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462d599299c5971f03c676e2b63aa80fec5ebc572d89ce766cd11ca8bcb56f3f"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ebaa4bf6386a3b22eec518da7d679c8363fb7fb70cf6972161e5542f470798"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:99f9a50b56713a598d33bc23a9912224fc5d7f9f292444e6664236ae471ddf17"}, - {file = "pydantic_core-2.16.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8ec364e280db4235389b5e1e6ee924723c693cbc98e9d28dc1767041ff9bc388"}, - {file = "pydantic_core-2.16.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:653a5dfd00f601a0ed6654a8b877b18d65ac32c9d9997456e0ab240807be6cf7"}, - {file = "pydantic_core-2.16.1-cp310-none-win32.whl", hash = "sha256:1661c668c1bb67b7cec96914329d9ab66755911d093bb9063c4c8914188af6d4"}, - {file = "pydantic_core-2.16.1-cp310-none-win_amd64.whl", hash = "sha256:561be4e3e952c2f9056fba5267b99be4ec2afadc27261505d4992c50b33c513c"}, - {file = "pydantic_core-2.16.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:102569d371fadc40d8f8598a59379c37ec60164315884467052830b28cc4e9da"}, - {file = "pydantic_core-2.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:735dceec50fa907a3c314b84ed609dec54b76a814aa14eb90da31d1d36873a5e"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e83ebbf020be727d6e0991c1b192a5c2e7113eb66e3def0cd0c62f9f266247e4"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:30a8259569fbeec49cfac7fda3ec8123486ef1b729225222f0d41d5f840b476f"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920c4897e55e2881db6a6da151198e5001552c3777cd42b8a4c2f72eedc2ee91"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5247a3d74355f8b1d780d0f3b32a23dd9f6d3ff43ef2037c6dcd249f35ecf4c"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5bea8012df5bb6dda1e67d0563ac50b7f64a5d5858348b5c8cb5043811c19d"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ed3025a8a7e5a59817b7494686d449ebfbe301f3e757b852c8d0d1961d6be864"}, - {file = "pydantic_core-2.16.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:06f0d5a1d9e1b7932477c172cc720b3b23c18762ed7a8efa8398298a59d177c7"}, - {file = "pydantic_core-2.16.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:150ba5c86f502c040b822777e2e519b5625b47813bd05f9273a8ed169c97d9ae"}, - {file = "pydantic_core-2.16.1-cp311-none-win32.whl", hash = "sha256:d6cbdf12ef967a6aa401cf5cdf47850559e59eedad10e781471c960583f25aa1"}, - {file = "pydantic_core-2.16.1-cp311-none-win_amd64.whl", hash = "sha256:afa01d25769af33a8dac0d905d5c7bb2d73c7c3d5161b2dd6f8b5b5eea6a3c4c"}, - {file = "pydantic_core-2.16.1-cp311-none-win_arm64.whl", hash = "sha256:1a2fe7b00a49b51047334d84aafd7e39f80b7675cad0083678c58983662da89b"}, - {file = "pydantic_core-2.16.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f478ec204772a5c8218e30eb813ca43e34005dff2eafa03931b3d8caef87d51"}, - {file = "pydantic_core-2.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1936ef138bed2165dd8573aa65e3095ef7c2b6247faccd0e15186aabdda7f66"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99d3a433ef5dc3021c9534a58a3686c88363c591974c16c54a01af7efd741f13"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd88f40f2294440d3f3c6308e50d96a0d3d0973d6f1a5732875d10f569acef49"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fac641bbfa43d5a1bed99d28aa1fded1984d31c670a95aac1bf1d36ac6ce137"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72bf9308a82b75039b8c8edd2be2924c352eda5da14a920551a8b65d5ee89253"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb4363e6c9fc87365c2bc777a1f585a22f2f56642501885ffc7942138499bf54"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20f724a023042588d0f4396bbbcf4cffd0ddd0ad3ed4f0d8e6d4ac4264bae81e"}, - {file = "pydantic_core-2.16.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fb4370b15111905bf8b5ba2129b926af9470f014cb0493a67d23e9d7a48348e8"}, - {file = "pydantic_core-2.16.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23632132f1fd608034f1a56cc3e484be00854db845b3a4a508834be5a6435a6f"}, - {file = "pydantic_core-2.16.1-cp312-none-win32.whl", hash = "sha256:b9f3e0bffad6e238f7acc20c393c1ed8fab4371e3b3bc311020dfa6020d99212"}, - {file = "pydantic_core-2.16.1-cp312-none-win_amd64.whl", hash = "sha256:a0b4cfe408cd84c53bab7d83e4209458de676a6ec5e9c623ae914ce1cb79b96f"}, - {file = "pydantic_core-2.16.1-cp312-none-win_arm64.whl", hash = "sha256:d195add190abccefc70ad0f9a0141ad7da53e16183048380e688b466702195dd"}, - {file = "pydantic_core-2.16.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:502c062a18d84452858f8aea1e520e12a4d5228fc3621ea5061409d666ea1706"}, - {file = "pydantic_core-2.16.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d8c032ccee90b37b44e05948b449a2d6baed7e614df3d3f47fe432c952c21b60"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:920f4633bee43d7a2818e1a1a788906df5a17b7ab6fe411220ed92b42940f818"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f5d37ff01edcbace53a402e80793640c25798fb7208f105d87a25e6fcc9ea06"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:399166f24c33a0c5759ecc4801f040dbc87d412c1a6d6292b2349b4c505effc9"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac89ccc39cd1d556cc72d6752f252dc869dde41c7c936e86beac5eb555041b66"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73802194f10c394c2bedce7a135ba1d8ba6cff23adf4217612bfc5cf060de34c"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8fa00fa24ffd8c31fac081bf7be7eb495be6d248db127f8776575a746fa55c95"}, - {file = "pydantic_core-2.16.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:601d3e42452cd4f2891c13fa8c70366d71851c1593ed42f57bf37f40f7dca3c8"}, - {file = "pydantic_core-2.16.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07982b82d121ed3fc1c51faf6e8f57ff09b1325d2efccaa257dd8c0dd937acca"}, - {file = "pydantic_core-2.16.1-cp38-none-win32.whl", hash = "sha256:d0bf6f93a55d3fa7a079d811b29100b019784e2ee6bc06b0bb839538272a5610"}, - {file = "pydantic_core-2.16.1-cp38-none-win_amd64.whl", hash = "sha256:fbec2af0ebafa57eb82c18c304b37c86a8abddf7022955d1742b3d5471a6339e"}, - {file = "pydantic_core-2.16.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a497be217818c318d93f07e14502ef93d44e6a20c72b04c530611e45e54c2196"}, - {file = "pydantic_core-2.16.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:694a5e9f1f2c124a17ff2d0be613fd53ba0c26de588eb4bdab8bca855e550d95"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d4dfc66abea3ec6d9f83e837a8f8a7d9d3a76d25c9911735c76d6745950e62c"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8655f55fe68c4685673265a650ef71beb2d31871c049c8b80262026f23605ee3"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21e3298486c4ea4e4d5cc6fb69e06fb02a4e22089304308817035ac006a7f506"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71b4a48a7427f14679f0015b13c712863d28bb1ab700bd11776a5368135c7d60"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dca874e35bb60ce4f9f6665bfbfad050dd7573596608aeb9e098621ac331dc"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa496cd45cda0165d597e9d6f01e36c33c9508f75cf03c0a650018c5048f578e"}, - {file = "pydantic_core-2.16.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5317c04349472e683803da262c781c42c5628a9be73f4750ac7d13040efb5d2d"}, - {file = "pydantic_core-2.16.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c29d54ed4501a30cd71015bf982fa95e4a60117b44e1a200290ce687d3e640"}, - {file = "pydantic_core-2.16.1-cp39-none-win32.whl", hash = "sha256:ba07646f35e4e49376c9831130039d1b478fbfa1215ae62ad62d2ee63cf9c18f"}, - {file = "pydantic_core-2.16.1-cp39-none-win_amd64.whl", hash = "sha256:2133b0e412a47868a358713287ff9f9a328879da547dc88be67481cdac529118"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d25ef0c33f22649b7a088035fd65ac1ce6464fa2876578df1adad9472f918a76"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:99c095457eea8550c9fa9a7a992e842aeae1429dab6b6b378710f62bfb70b394"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b49c604ace7a7aa8af31196abbf8f2193be605db6739ed905ecaf62af31ccae0"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c56da23034fe66221f2208c813d8aa509eea34d97328ce2add56e219c3a9f41c"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cebf8d56fee3b08ad40d332a807ecccd4153d3f1ba8231e111d9759f02edfd05"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1ae8048cba95f382dba56766525abca438328455e35c283bb202964f41a780b0"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:780daad9e35b18d10d7219d24bfb30148ca2afc309928e1d4d53de86822593dc"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c94b5537bf6ce66e4d7830c6993152940a188600f6ae044435287753044a8fe2"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:adf28099d061a25fbcc6531febb7a091e027605385de9fe14dd6a97319d614cf"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:644904600c15816a1f9a1bafa6aab0d21db2788abcdf4e2a77951280473f33e1"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87bce04f09f0552b66fca0c4e10da78d17cb0e71c205864bab4e9595122cb9d9"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877045a7969ace04d59516d5d6a7dee13106822f99a5d8df5e6822941f7bedc8"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9c46e556ee266ed3fb7b7a882b53df3c76b45e872fdab8d9cf49ae5e91147fd7"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4eebbd049008eb800f519578e944b8dc8e0f7d59a5abb5924cc2d4ed3a1834ff"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c0be58529d43d38ae849a91932391eb93275a06b93b79a8ab828b012e916a206"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b1fc07896fc1851558f532dffc8987e526b682ec73140886c831d773cef44b76"}, - {file = "pydantic_core-2.16.1.tar.gz", hash = "sha256:daff04257b49ab7f4b3f73f98283d3dbb1a65bf3500d55c7beac3c66c310fe34"}, + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, + {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, + {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, + {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, + {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, + {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, + {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, + {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, + {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, + {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, + {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, + {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, ] [package.dependencies] @@ -954,13 +954,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "python-dateutil" -version = "2.8.2" +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.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {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] @@ -1100,13 +1100,13 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +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.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] @@ -1129,35 +1129,35 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyam [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] name = "tzdata" -version = "2023.4" +version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, - {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] [[package]] name = "urllib3" -version = "2.2.0" +version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, - {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] @@ -1393,20 +1393,20 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.17.0" +version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/commodity/pyproject.toml b/openbb_platform/extensions/commodity/pyproject.toml index 269d2ed093f..44dcb993f70 100644 --- a/openbb_platform/extensions/commodity/pyproject.toml +++ b/openbb_platform/extensions/commodity/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-commodity" -version = "1.0.2" +version = "1.0.4" description = "Commodity extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_commodity" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/crypto/integration/test_crypto_api.py b/openbb_platform/extensions/crypto/integration/test_crypto_api.py index 6d38f1681a5..96a2fec3806 100644 --- a/openbb_platform/extensions/crypto/integration/test_crypto_api.py +++ b/openbb_platform/extensions/crypto/integration/test_crypto_api.py @@ -13,6 +13,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -29,6 +30,7 @@ def headers(): ) @pytest.mark.integration def test_crypto_search(params, headers): + """Test the crypto search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -114,6 +116,7 @@ def test_crypto_search(params, headers): ) @pytest.mark.integration def test_crypto_price_historical(params, headers): + """Test the crypto historical price endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/crypto/integration/test_crypto_python.py b/openbb_platform/extensions/crypto/integration/test_crypto_python.py index b22c29d4dae..7a3073620ef 100644 --- a/openbb_platform/extensions/crypto/integration/test_crypto_python.py +++ b/openbb_platform/extensions/crypto/integration/test_crypto_python.py @@ -25,6 +25,7 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements ) @pytest.mark.integration def test_crypto_search(params, obb): + """Test the crypto search endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.crypto.search(**params) @@ -109,6 +110,7 @@ def test_crypto_search(params, obb): ) @pytest.mark.integration def test_crypto_price_historical(params, obb): + """Test crypto price historical.""" result = obb.crypto.price.historical(**params) assert result assert isinstance(result, OBBject) diff --git a/openbb_platform/extensions/crypto/openbb_crypto/__init__.py b/openbb_platform/extensions/crypto/openbb_crypto/__init__.py index e69de29bb2d..2ce9b051267 100644 --- a/openbb_platform/extensions/crypto/openbb_crypto/__init__.py +++ b/openbb_platform/extensions/crypto/openbb_crypto/__init__.py @@ -0,0 +1 @@ +"""OpenBB Crypto Extension.""" diff --git a/openbb_platform/extensions/crypto/openbb_crypto/crypto_router.py b/openbb_platform/extensions/crypto/openbb_crypto/crypto_router.py index 1f92af05c97..bc81b7db88c 100644 --- a/openbb_platform/extensions/crypto/openbb_crypto/crypto_router.py +++ b/openbb_platform/extensions/crypto/openbb_crypto/crypto_router.py @@ -13,7 +13,7 @@ from openbb_core.app.router import Router from openbb_crypto.price.price_router import router as price_router -router = Router(prefix="") +router = Router(prefix="", description="Cryptocurrency market data.") router.include_router(price_router) diff --git a/openbb_platform/extensions/crypto/openbb_crypto/price/__init__.py b/openbb_platform/extensions/crypto/openbb_crypto/price/__init__.py index e69de29bb2d..71f078e3f0a 100644 --- a/openbb_platform/extensions/crypto/openbb_crypto/price/__init__.py +++ b/openbb_platform/extensions/crypto/openbb_crypto/price/__init__.py @@ -0,0 +1 @@ +"""OpenBB Crypto Price Router.""" diff --git a/openbb_platform/extensions/crypto/poetry.lock b/openbb_platform/extensions/crypto/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/extensions/crypto/poetry.lock +++ b/openbb_platform/extensions/crypto/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/crypto/pyproject.toml b/openbb_platform/extensions/crypto/pyproject.toml index e76484ba8e6..71e244683c7 100644 --- a/openbb_platform/extensions/crypto/pyproject.toml +++ b/openbb_platform/extensions/crypto/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-crypto" -version = "1.1.4" +version = "1.1.5" description = "Crypto extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_crypto" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/currency/integration/test_currency_api.py b/openbb_platform/extensions/currency/integration/test_currency_api.py index bc80a5d75bc..f2f5d56e34e 100644 --- a/openbb_platform/extensions/currency/integration/test_currency_api.py +++ b/openbb_platform/extensions/currency/integration/test_currency_api.py @@ -13,6 +13,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -49,6 +50,7 @@ def headers(): ) @pytest.mark.integration def test_currency_search(params, headers): + """Test the currency search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -141,6 +143,7 @@ def test_currency_search(params, headers): ) @pytest.mark.integration def test_currency_price_historical(params, headers): + """Test the currency historical price endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -156,6 +159,7 @@ def test_currency_price_historical(params, headers): ) @pytest.mark.integration def test_currency_reference_rates(params, headers): + """Test the currency reference rates endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -180,6 +184,7 @@ def test_currency_reference_rates(params, headers): ) @pytest.mark.integration def test_currency_snapshots(params, headers): + """Test the currency snapshots endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/currency/integration/test_currency_python.py b/openbb_platform/extensions/currency/integration/test_currency_python.py index 445e4293838..f2352a1669c 100644 --- a/openbb_platform/extensions/currency/integration/test_currency_python.py +++ b/openbb_platform/extensions/currency/integration/test_currency_python.py @@ -47,6 +47,7 @@ def obb(pytestconfig): ) @pytest.mark.integration def test_currency_search(params, obb): + """Test the currency search endpoint.""" result = obb.currency.search(**params) assert result assert isinstance(result, OBBject) @@ -136,6 +137,7 @@ def test_currency_search(params, obb): ) @pytest.mark.integration def test_currency_price_historical(params, obb): + """Test the currency historical price endpoint.""" result = obb.currency.price.historical(**params) assert result assert isinstance(result, OBBject) @@ -148,6 +150,7 @@ def test_currency_price_historical(params, obb): ) @pytest.mark.integration def test_currency_reference_rates(params, obb): + """Test the currency reference rates endpoint.""" result = obb.currency.reference_rates(**params) assert result assert isinstance(result, OBBject) @@ -169,6 +172,7 @@ def test_currency_reference_rates(params, obb): ) @pytest.mark.integration def test_currency_snapshots(params, obb): + """Test the currency snapshots endpoint.""" result = obb.currency.snapshots(**params) assert result assert isinstance(result, OBBject) diff --git a/openbb_platform/extensions/currency/openbb_currency/currency_router.py b/openbb_platform/extensions/currency/openbb_currency/currency_router.py index 669b463869a..111acd3b5e2 100644 --- a/openbb_platform/extensions/currency/openbb_currency/currency_router.py +++ b/openbb_platform/extensions/currency/openbb_currency/currency_router.py @@ -13,7 +13,7 @@ from openbb_core.app.router import Router from openbb_currency.price.price_router import router as price_router -router = Router(prefix="") +router = Router(prefix="", description="Foreign exchange (FX) market data.") router.include_router(price_router) @@ -65,7 +65,7 @@ async def reference_rates( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Current, official, currency reference rates. + """Get current, official, currency reference rates. Foreign exchange reference rates are the exchange rates set by a major financial institution or regulatory body, serving as a benchmark for the value of currencies around the world. diff --git a/openbb_platform/extensions/currency/poetry.lock b/openbb_platform/extensions/currency/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/extensions/currency/poetry.lock +++ b/openbb_platform/extensions/currency/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/currency/pyproject.toml b/openbb_platform/extensions/currency/pyproject.toml index d42e483b1bf..3dfe060edad 100644 --- a/openbb_platform/extensions/currency/pyproject.toml +++ b/openbb_platform/extensions/currency/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-currency" -version = "1.1.4" +version = "1.1.5" description = "Currency extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_currency" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py b/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py index aa8103f2cf0..a777ddb3bf5 100644 --- a/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py +++ b/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py @@ -13,6 +13,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -38,6 +39,7 @@ def headers(): ) @pytest.mark.integration def test_derivatives_options_chains(params, headers): + """Test the options chains endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -68,6 +70,7 @@ def test_derivatives_options_chains(params, headers): ) @pytest.mark.integration def test_derivatives_options_unusual(params, headers): + """Test the unusual options endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -94,6 +97,7 @@ def test_derivatives_options_unusual(params, headers): ) @pytest.mark.integration def test_derivatives_futures_historical(params, headers): + """Test the futures historical endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -112,6 +116,7 @@ def test_derivatives_futures_historical(params, headers): ) @pytest.mark.integration def test_derivatives_futures_curve(params, headers): + """Test the futures curve endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py b/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py index 8a961c6f652..1ba7c63fd2d 100644 --- a/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py +++ b/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py @@ -35,6 +35,7 @@ def obb(pytestconfig): ) @pytest.mark.integration def test_derivatives_options_chains(params, obb): + """Test the options chains endpoint.""" result = obb.derivatives.options.chains(**params) assert result assert isinstance(result, OBBject) @@ -62,6 +63,7 @@ def test_derivatives_options_chains(params, obb): ) @pytest.mark.integration def test_derivatives_options_unusual(params, obb): + """Test the unusual options endpoint.""" result = obb.derivatives.options.unusual(**params) assert result assert isinstance(result, OBBject) @@ -85,6 +87,7 @@ def test_derivatives_options_unusual(params, obb): ) @pytest.mark.integration def test_derivatives_futures_historical(params, obb): + """Test the futures historical endpoint.""" result = obb.derivatives.futures.historical(**params) assert result assert isinstance(result, OBBject) @@ -100,6 +103,7 @@ def test_derivatives_futures_historical(params, obb): ) @pytest.mark.integration def test_derivatives_futures_curve(params, obb): + """Test the futures curve endpoint.""" result = obb.derivatives.futures.curve(**params) assert result assert isinstance(result, OBBject) diff --git a/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_router.py b/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_router.py index 48b81aa3a5e..040720ecd60 100644 --- a/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_router.py +++ b/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_router.py @@ -5,6 +5,6 @@ from openbb_core.app.router import Router from openbb_derivatives.futures.futures_router import router as futures_router from openbb_derivatives.options.options_router import router as options_router -router = Router(prefix="") +router = Router(prefix="", description="Derivatives market data.") router.include_router(options_router) router.include_router(futures_router) diff --git a/openbb_platform/extensions/derivatives/poetry.lock b/openbb_platform/extensions/derivatives/poetry.lock index 12b9fd975a0..718edef43ca 100644 --- a/openbb_platform/extensions/derivatives/poetry.lock +++ b/openbb_platform/extensions/derivatives/poetry.lock @@ -712,13 +712,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1431,4 +1431,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/derivatives/pyproject.toml b/openbb_platform/extensions/derivatives/pyproject.toml index 89a176987aa..bddb388ea12 100644 --- a/openbb_platform/extensions/derivatives/pyproject.toml +++ b/openbb_platform/extensions/derivatives/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-derivatives" -version = "1.1.4" +version = "1.1.5" description = "Derivatives extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_derivatives" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/devtools/pyproject.toml b/openbb_platform/extensions/devtools/pyproject.toml index dd5f6cddd19..7840fa90c98 100644 --- a/openbb_platform/extensions/devtools/pyproject.toml +++ b/openbb_platform/extensions/devtools/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-devtools" -version = "1.1.5" +version = "1.1.6" description = "Tools for OpenBB Platform Developers" authors = ["OpenBB Team "] readme = "README.md" diff --git a/openbb_platform/extensions/econometrics/integration/test_econometrics_api.py b/openbb_platform/extensions/econometrics/integration/test_econometrics_api.py index 0cf0851b451..068c6d02e3a 100644 --- a/openbb_platform/extensions/econometrics/integration/test_econometrics_api.py +++ b/openbb_platform/extensions/econometrics/integration/test_econometrics_api.py @@ -14,6 +14,7 @@ data: Dict = {} def get_headers(): + """Get the headers for the API request.""" if "headers" in data: return data["headers"] @@ -33,6 +34,7 @@ def request_data(menu: str, symbol: str, provider: str): def get_equity_data(): + """Get equity data.""" if "equity_data" in data: return data["equity_data"] @@ -44,6 +46,7 @@ def get_equity_data(): def get_crypto_data(): + """Get crypto data.""" if "crypto_data" in data: return data["crypto_data"] @@ -60,6 +63,7 @@ def get_crypto_data(): def get_data(menu: Literal["equity", "crypto"]): + """Get data based on the selected menu.""" funcs = {"equity": get_equity_data, "crypto": get_crypto_data} return funcs[menu]() @@ -73,6 +77,7 @@ def get_data(menu: Literal["equity", "crypto"]): ) @pytest.mark.integration def test_econometrics_correlation_matrix(params, data_type): + """Test the correlation matrix endpoint.""" params = {p: v for p, v in params.items() if v} body = json.dumps(get_data(data_type)) @@ -99,6 +104,7 @@ def test_econometrics_correlation_matrix(params, data_type): ) @pytest.mark.integration def test_econometrics_ols_regression_summary(params, data_type): + """Test the OLS regression summary endpoint.""" params = {p: v for p, v in params.items() if v} body = json.dumps( @@ -130,6 +136,7 @@ def test_econometrics_ols_regression_summary(params, data_type): ) @pytest.mark.integration def test_econometrics_autocorrelation(params, data_type): + """Test the autocorrelation endpoint.""" params = {p: v for p, v in params.items() if v} body = json.dumps( @@ -171,6 +178,7 @@ def test_econometrics_autocorrelation(params, data_type): ) @pytest.mark.integration def test_econometrics_residual_autocorrelation(params, data_type): + """Test the residual autocorrelation endpoint.""" params = {p: v for p, v in params.items() if v} body = json.dumps( @@ -210,6 +218,7 @@ def test_econometrics_residual_autocorrelation(params, data_type): ) @pytest.mark.integration def test_econometrics_cointegration(params, data_type): + """Test the cointegration endpoint.""" params = {p: v for p, v in params.items() if v} body = json.dumps( @@ -241,6 +250,7 @@ def test_econometrics_cointegration(params, data_type): ) @pytest.mark.integration def test_econometrics_causality(params, data_type): + """Test the causality endpoint.""" params = {p: v for p, v in params.items() if v} body = json.dumps(get_data(data_type)) @@ -257,6 +267,7 @@ def test_econometrics_causality(params, data_type): ) @pytest.mark.integration def test_econometrics_unit_root(params, data_type): + """Test the unit root endpoint.""" params = {p: v for p, v in params.items() if v} body = json.dumps(get_data(data_type)) diff --git a/openbb_platform/extensions/econometrics/integration/test_econometrics_python.py b/openbb_platform/extensions/econometrics/integration/test_econometrics_python.py index ec67c062f36..752156ed6df 100644 --- a/openbb_platform/extensions/econometrics/integration/test_econometrics_python.py +++ b/openbb_platform/extensions/econometrics/integration/test_econometrics_python.py @@ -25,6 +25,7 @@ data: dict = {} def get_stocks_data(): + """Get stocks data.""" import openbb # pylint:disable=import-outside-toplevel if "stocks_data" in data: @@ -40,6 +41,7 @@ def get_stocks_data(): def get_crypto_data(): + """Get crypto data.""" import openbb # pylint:disable=import-outside-toplevel if "crypto_data" in data: @@ -56,6 +58,7 @@ def get_crypto_data(): def get_data(menu: Literal["equity", "crypto"]): + """Get data.""" funcs = {"equity": get_stocks_data, "crypto": get_crypto_data} return funcs[menu]() @@ -69,6 +72,7 @@ def get_data(menu: Literal["equity", "crypto"]): ) @pytest.mark.integration def test_econometrics_correlation_matrix(params, data_type, obb): + """Test the econometrics correlation matrix.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -94,6 +98,7 @@ def test_econometrics_correlation_matrix(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_ols_regression(params, data_type, obb): + """Test the econometrics OLS regression.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -119,6 +124,7 @@ def test_econometrics_ols_regression(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_ols_regression_summary(params, data_type, obb): + """Test the econometrics OLS regression summary.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -143,6 +149,7 @@ def test_econometrics_ols_regression_summary(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_autocorrelation(params, data_type, obb): + """Test the econometrics autocorrelation.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -177,6 +184,7 @@ def test_econometrics_autocorrelation(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_residual_autocorrelation(params, data_type, obb): + """Test the econometrics residual autocorrelation.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -207,6 +215,7 @@ def test_econometrics_residual_autocorrelation(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_cointegration(params, data_type, obb): + """Test the econometrics cointegration.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -242,6 +251,7 @@ def test_econometrics_cointegration(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_causality(params, data_type, obb): + """Test the econometrics causality.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -264,6 +274,7 @@ def test_econometrics_causality(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_unit_root(params, data_type, obb): + """Test the econometrics unit root.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -282,6 +293,7 @@ def test_econometrics_unit_root(params, data_type, obb): ) @pytest.mark.integration def test_econometrics_panel_random_effects(params, obb): + """Test the econometrics panel random effects.""" params = {p: v for p, v in params.items() if v} params["data"] = mock_multi_index_data() @@ -301,6 +313,7 @@ def test_econometrics_panel_random_effects(params, obb): ) @pytest.mark.integration def test_econometrics_panel_between(params, obb): + """Test the econometrics panel between.""" params = {p: v for p, v in params.items() if v} params["data"] = mock_multi_index_data() @@ -320,6 +333,7 @@ def test_econometrics_panel_between(params, obb): ) @pytest.mark.integration def test_econometrics_panel_pooled(params, obb): + """Test the econometrics panel pooled.""" params = {p: v for p, v in params.items() if v} params["data"] = mock_multi_index_data() @@ -339,6 +353,7 @@ def test_econometrics_panel_pooled(params, obb): ) @pytest.mark.integration def test_econometrics_panel_fixed(params, obb): + """Test the econometrics panel fixed.""" params = {p: v for p, v in params.items() if v} params["data"] = mock_multi_index_data() @@ -358,6 +373,7 @@ def test_econometrics_panel_fixed(params, obb): ) @pytest.mark.integration def test_econometrics_panel_first_difference(params, obb): + """Test the econometrics panel first difference.""" params = {p: v for p, v in params.items() if v} params["data"] = mock_multi_index_data() @@ -377,11 +393,13 @@ def test_econometrics_panel_first_difference(params, obb): ) @pytest.mark.integration def test_econometrics_panel_fmac(params, obb): + """Test the econometrics panel fmac.""" params = {p: v for p, v in params.items() if v} params["data"] = mock_multi_index_data() result = obb.econometrics.panel_fmac(**params) + """Test the econometrics panel fmac.""" assert result assert isinstance(result, OBBject) assert len(result.results) > 0 diff --git a/openbb_platform/extensions/econometrics/openbb_econometrics/__init__.py b/openbb_platform/extensions/econometrics/openbb_econometrics/__init__.py index e69de29bb2d..cd48520387f 100644 --- a/openbb_platform/extensions/econometrics/openbb_econometrics/__init__.py +++ b/openbb_platform/extensions/econometrics/openbb_econometrics/__init__.py @@ -0,0 +1 @@ +"""OpenBB Econometrics Extension.""" diff --git a/openbb_platform/extensions/econometrics/openbb_econometrics/econometrics_router.py b/openbb_platform/extensions/econometrics/openbb_econometrics/econometrics_router.py index f4c8f48386e..cbd7773de1d 100644 --- a/openbb_platform/extensions/econometrics/openbb_econometrics/econometrics_router.py +++ b/openbb_platform/extensions/econometrics/openbb_econometrics/econometrics_router.py @@ -27,7 +27,7 @@ from statsmodels.tsa.stattools import adfuller, grangercausalitytests # type: i from openbb_econometrics.utils import get_engle_granger_two_step_cointegration_test -router = Router(prefix="") +router = Router(prefix="", description="Econometrics analysis tools.") @router.command( diff --git a/openbb_platform/extensions/econometrics/openbb_econometrics/utils.py b/openbb_platform/extensions/econometrics/openbb_econometrics/utils.py index 008c23fce72..6e3745fa54e 100644 --- a/openbb_platform/extensions/econometrics/openbb_econometrics/utils.py +++ b/openbb_platform/extensions/econometrics/openbb_econometrics/utils.py @@ -1,3 +1,5 @@ +"""Utility functions for the econometrics extension of the OpenBB platform.""" + import warnings from typing import Tuple @@ -10,8 +12,9 @@ from statsmodels.tsa.stattools import adfuller def get_engle_granger_two_step_cointegration_test( dependent_series: pd.Series, independent_series: pd.Series ) -> Tuple[float, float, float, pd.Series, float, float]: - """Estimates long-run and short-run cointegration relationship for series y and x and apply - the two-step Engle & Granger test for cointegration. + """Estimate long-run and short-run cointegration relationship for series y and x. + + Then apply the two-step Engle & Granger test for cointegration. Uses a 2-step process to first estimate coefficients for the long-run relationship y_t = c + gamma * x_t + z_t @@ -87,7 +90,7 @@ def get_engle_granger_two_step_cointegration_test( def mock_multi_index_data(): - """Creates a mock multi-index dataframe for testing purposes.""" + """Create a mock multi-index dataframe for testing purposes.""" arrays = [ ["individual_" + str(i) for i in range(1, 11) for _ in range(5)], list(range(1, 6)) * 10, diff --git a/openbb_platform/extensions/econometrics/poetry.lock b/openbb_platform/extensions/econometrics/poetry.lock index a60439738d4..dfd886fe1e0 100644 --- a/openbb_platform/extensions/econometrics/poetry.lock +++ b/openbb_platform/extensions/econometrics/poetry.lock @@ -841,13 +841,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1794,4 +1794,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "0eb5845fa3d270ce5789362bb52c5ecbb5f8d2fc540c35cc5e99a4aa16906644" +content-hash = "922546305cb41e3b30455219cc4c77b840601f4cf605f47d6a515050af1c23fd" diff --git a/openbb_platform/extensions/econometrics/pyproject.toml b/openbb_platform/extensions/econometrics/pyproject.toml index cebb10be85f..dd006eab8da 100644 --- a/openbb_platform/extensions/econometrics/pyproject.toml +++ b/openbb_platform/extensions/econometrics/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-econometrics" -version = "1.1.4" +version = "1.1.5" description = "Econometrics Toolkit for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -12,7 +12,7 @@ scipy = "^1.10.1" statsmodels = "^0.14.0" arch = "^5.5.0" linearmodels = "<=4.25" # ^4.26 has setuptools-scm in setup_requires -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/economy/integration/test_economy_api.py b/openbb_platform/extensions/economy/integration/test_economy_api.py index 8ce32c0e1db..9563b719459 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_api.py +++ b/openbb_platform/extensions/economy/integration/test_economy_api.py @@ -1,3 +1,5 @@ +"""Test Economy API.""" + import base64 import pytest @@ -9,6 +11,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -49,6 +52,7 @@ def headers(): ) @pytest.mark.integration def test_economy_calendar(params, headers): + """Test the economy calendar endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -87,6 +91,7 @@ def test_economy_calendar(params, headers): ) @pytest.mark.integration def test_economy_cpi(params, headers): + """Test the economy CPI endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -102,6 +107,7 @@ def test_economy_cpi(params, headers): ) @pytest.mark.integration def test_economy_risk_premium(params, headers): + """Test the economy risk premium endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -137,6 +143,7 @@ def test_economy_risk_premium(params, headers): ) @pytest.mark.integration def test_economy_gdp_forecast(params, headers): + """Test the economy GDP forecast endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -170,6 +177,7 @@ def test_economy_gdp_forecast(params, headers): ) @pytest.mark.integration def test_economy_gdp_nominal(params, headers): + """Test the economy GDP nominal endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -203,6 +211,7 @@ def test_economy_gdp_nominal(params, headers): ) @pytest.mark.integration def test_economy_gdp_real(params, headers): + """Test the economy GDP real endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -243,6 +252,7 @@ def test_economy_gdp_real(params, headers): ) @pytest.mark.integration def test_economy_balance_of_payments(params, headers): + """Test the economy balance of payments endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -319,6 +329,7 @@ def test_economy_balance_of_payments(params, headers): ) @pytest.mark.integration def test_economy_fred_search(params, headers): + """Test the economy FRED search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -358,6 +369,7 @@ def test_economy_fred_search(params, headers): ) @pytest.mark.integration def test_economy_fred_series(params, headers): + """Test the economy FRED series endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -383,6 +395,7 @@ def test_economy_fred_series(params, headers): ) @pytest.mark.integration def test_economy_money_measures(params, headers): + """Test the economy money measures endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -412,6 +425,7 @@ def test_economy_money_measures(params, headers): ) @pytest.mark.integration def test_economy_unemployment(params, headers): + """Test the economy unemployment endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -437,6 +451,7 @@ def test_economy_unemployment(params, headers): ) @pytest.mark.integration def test_economy_composite_leading_indicator(params, headers): + """Test the economy composite leading indicator endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -463,6 +478,7 @@ def test_economy_composite_leading_indicator(params, headers): ) @pytest.mark.integration def test_economy_short_term_interest_rate(params, headers): + """Test the economy short term interest rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -489,6 +505,7 @@ def test_economy_short_term_interest_rate(params, headers): ) @pytest.mark.integration def test_economy_long_term_interest_rate(params, headers): + """Test the economy long term interest rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -537,6 +554,7 @@ def test_economy_long_term_interest_rate(params, headers): ) @pytest.mark.integration def test_economy_fred_regional(params, headers): + """Test the economy FRED regional endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/economy/integration/test_economy_python.py b/openbb_platform/extensions/economy/integration/test_economy_python.py index 8973e268884..bf9c7bfa1e7 100644 --- a/openbb_platform/extensions/economy/integration/test_economy_python.py +++ b/openbb_platform/extensions/economy/integration/test_economy_python.py @@ -44,6 +44,7 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements ) @pytest.mark.integration def test_economy_calendar(params, obb): + """Test economy calendar.""" params = {p: v for p, v in params.items() if v} result = obb.economy.calendar(**params) @@ -69,6 +70,7 @@ def test_economy_calendar(params, obb): ) @pytest.mark.integration def test_economy_cpi(params, obb): + """Test economy cpi.""" result = obb.economy.cpi(**params) assert result assert isinstance(result, OBBject) @@ -83,6 +85,7 @@ def test_economy_cpi(params, obb): ) @pytest.mark.integration def test_economy_risk_premium(params, obb): + """Test economy risk premium.""" result = obb.economy.risk_premium(**params) assert result assert isinstance(result, OBBject) @@ -114,6 +117,7 @@ def test_economy_risk_premium(params, obb): ) @pytest.mark.integration def test_economy_gdp_forecast(params, obb): + """Test economy gdp forecast.""" params = {p: v for p, v in params.items() if v} result = obb.economy.gdp.forecast(**params) @@ -139,6 +143,7 @@ def test_economy_gdp_forecast(params, obb): ) @pytest.mark.integration def test_economy_gdp_nominal(params, obb): + """Test economy gdp nominal.""" params = {p: v for p, v in params.items() if v} result = obb.economy.gdp.nominal(**params) @@ -164,6 +169,7 @@ def test_economy_gdp_nominal(params, obb): ) @pytest.mark.integration def test_economy_gdp_real(params, obb): + """Test economy gdp real.""" params = {p: v for p, v in params.items() if v} result = obb.economy.gdp.real(**params) @@ -203,6 +209,7 @@ def test_economy_gdp_real(params, obb): ) @pytest.mark.integration def test_economy_balance_of_payments(params, obb): + """Test economy balance of payments.""" params = {p: v for p, v in params.items() if v} result = obb.economy.balance_of_payments(**params) @@ -278,6 +285,7 @@ def test_economy_balance_of_payments(params, obb): ) @pytest.mark.integration def test_economy_fred_search(params, obb): + """Test economy fred search.""" params = {p: v for p, v in params.items() if v} result = obb.economy.fred_search(**params) @@ -316,6 +324,7 @@ def test_economy_fred_search(params, obb): ) @pytest.mark.integration def test_economy_fred_series(params, obb): + """Test economy fred series.""" params = {p: v for p, v in params.items() if v} result = obb.economy.fred_series(**params) @@ -340,6 +349,7 @@ def test_economy_fred_series(params, obb): ) @pytest.mark.integration def test_economy_money_measures(params, obb): + """Test economy money measures.""" params = {p: v for p, v in params.items() if v} result = obb.economy.money_measures(**params) @@ -368,6 +378,7 @@ def test_economy_money_measures(params, obb): ) @pytest.mark.integration def test_economy_unemployment(params, obb): + """Test economy unemployment.""" params = {p: v for p, v in params.items() if v} result = obb.economy.unemployment(**params) @@ -392,6 +403,7 @@ def test_economy_unemployment(params, obb): ) @pytest.mark.integration def test_economy_composite_leading_indicator(params, obb): + """Test economy composite leading indicator.""" params = {p: v for p, v in params.items() if v} result = obb.economy.composite_leading_indicator(**params) @@ -417,6 +429,7 @@ def test_economy_composite_leading_indicator(params, obb): ) @pytest.mark.integration def test_economy_short_term_interest_rate(params, obb): + """Test economy short term interest rate.""" params = {p: v for p, v in params.items() if v} result = obb.economy.short_term_interest_rate(**params) @@ -442,6 +455,7 @@ def test_economy_short_term_interest_rate(params, obb): ) @pytest.mark.integration def test_economy_long_term_interest_rate(params, obb): + """Test economy long term interest rate.""" params = {p: v for p, v in params.items() if v} result = obb.economy.long_term_interest_rate(**params) @@ -489,6 +503,7 @@ def test_economy_long_term_interest_rate(params, obb): ) @pytest.mark.integration def test_economy_fred_regional(params, obb): + """Test economy fred regional.""" params = {p: v for p, v in params.items() if v} result = obb.economy.fred_regional(**params) diff --git a/openbb_platform/extensions/economy/openbb_economy/__init__.py b/openbb_platform/extensions/economy/openbb_economy/__init__.py index e69de29bb2d..8eb8dbd57c8 100644 --- a/openbb_platform/extensions/economy/openbb_economy/__init__.py +++ b/openbb_platform/extensions/economy/openbb_economy/__init__.py @@ -0,0 +1 @@ +"""OpenBB Economy Extension.""" diff --git a/openbb_platform/extensions/economy/openbb_economy/economy_router.py b/openbb_platform/extensions/economy/openbb_economy/economy_router.py index 9cf8fdfcfd8..9f3b6e05577 100644 --- a/openbb_platform/extensions/economy/openbb_economy/economy_router.py +++ b/openbb_platform/extensions/economy/openbb_economy/economy_router.py @@ -13,7 +13,7 @@ from openbb_core.app.router import Router from openbb_economy.gdp.gdp_router import router as gdp_router -router = Router(prefix="") +router = Router(prefix="", description="Economic data.") router.include_router(gdp_router) # pylint: disable=unused-argument @@ -69,7 +69,10 @@ async def cpi( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Consumer Price Index (CPI). Returns either the rescaled index value, or a rate of change (inflation).""" + """Get Consumer Price Index (CPI). + + Returns either the rescaled index value, or a rate of change (inflation). + """ return await OBBject.from_query(Query(**locals())) @@ -83,7 +86,7 @@ async def risk_premium( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Market Risk Premium by country.""" + """Get Market Risk Premium by country.""" return await OBBject.from_query(Query(**locals())) @@ -115,8 +118,8 @@ async def fred_search( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """ - Search for FRED series or economic releases by ID or string. + """Search for FRED series or economic releases by ID or string. + This does not return the observation values, only the metadata. Use this function to find series IDs for `fred_series()`. """ @@ -160,7 +163,10 @@ async def money_measures( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Money Measures (M1/M2 and components). The Federal Reserve publishes as part of the H.6 Release.""" + """Get Money Measures (M1/M2 and components). + + The Federal Reserve publishes as part of the H.6 Release. + """ return await OBBject.from_query(Query(**locals())) @@ -188,7 +194,7 @@ async def unemployment( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Global unemployment data.""" + """Get global unemployment data.""" return await OBBject.from_query(Query(**locals())) @@ -205,8 +211,11 @@ async def composite_leading_indicator( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """The composite leading indicator (CLI) is designed to provide early signals of turning points + """Use the composite leading indicator (CLI). + + It is designed to provide early signals of turning points in business cycles showing fluctuation of the economic activity around its long term potential level. + CLIs show short-term economic movements in qualitative rather than quantitative terms. """ return await OBBject.from_query(Query(**locals())) @@ -227,9 +236,11 @@ async def short_term_interest_rate( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """ - Short-term interest rates are the rates at which short-term borrowings are effected between + """Get Short-term interest rates. + + They are the rates at which short-term borrowings are effected between financial institutions or the rate at which short-term government paper is issued or traded in the market. + Short-term interest rates are generally averages of daily rates, measured as a percentage. Short-term interest rates are based on three-month money market rates where available. Typical standardised names are "money market rate" and "treasury bill rate". @@ -252,8 +263,8 @@ async def long_term_interest_rate( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """ - Long-term interest rates refer to government bonds maturing in ten years. + """Get Long-term interest rates that refer to government bonds maturing in ten years. + Rates are mainly determined by the price charged by the lender, the risk from the borrower and the fall in the capital value. Long-term interest rates are generally averages of daily rates, measured as a percentage. These interest rates are implied by the prices at which the government bonds are @@ -261,7 +272,8 @@ async def long_term_interest_rate( In all cases, they refer to bonds whose capital repayment is guaranteed by governments. Long-term interest rates are one of the determinants of business investment. Low long-term interest rates encourage investment in new equipment and high interest rates discourage it. - Investment is, in turn, a major source of economic growth.""" + Investment is, in turn, a major source of economic growth. + """ return await OBBject.from_query(Query(**locals())) @@ -289,8 +301,8 @@ async def fred_regional( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """ - Query the Geo Fred API for regional economic data by series group. + """Query the Geo Fred API for regional economic data by series group. + The series group ID is found by using `fred_search` and the `series_id` parameter. """ return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py b/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py index 024fc8e2ff8..a257a1e2c85 100644 --- a/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py +++ b/openbb_platform/extensions/economy/openbb_economy/gdp/gdp_router.py @@ -29,7 +29,7 @@ async def forecast( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Forecasted GDP Data.""" + """Get Forecasted GDP Data.""" return await OBBject.from_query(Query(**locals())) @@ -46,7 +46,7 @@ async def nominal( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Nominal GDP Data.""" + """Get Nominal GDP Data.""" return await OBBject.from_query(Query(**locals())) @@ -63,5 +63,5 @@ async def real( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Real GDP Data.""" + """Get Real GDP Data.""" return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/economy/poetry.lock b/openbb_platform/extensions/economy/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/extensions/economy/poetry.lock +++ b/openbb_platform/extensions/economy/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/economy/pyproject.toml b/openbb_platform/extensions/economy/pyproject.toml index cf43f9e6d75..b4482731c85 100644 --- a/openbb_platform/extensions/economy/pyproject.toml +++ b/openbb_platform/extensions/economy/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-economy" -version = "1.1.4" +version = "1.1.5" description = "Economy extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_economy" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/equity/integration/test_equity_api.py b/openbb_platform/extensions/equity/integration/test_equity_api.py index 511b4305417..84aaba03678 100644 --- a/openbb_platform/extensions/equity/integration/test_equity_api.py +++ b/openbb_platform/extensions/equity/integration/test_equity_api.py @@ -13,6 +13,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -74,6 +75,7 @@ def headers(): ) @pytest.mark.integration def test_equity_fundamental_balance(params, headers): + """Test the equity fundamental balance endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -89,6 +91,7 @@ def test_equity_fundamental_balance(params, headers): ) @pytest.mark.integration def test_equity_fundamental_balance_growth(params, headers): + """Test the equity fundamental balance growth endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -107,6 +110,7 @@ def test_equity_fundamental_balance_growth(params, headers): ) @pytest.mark.integration def test_equity_calendar_dividend(params, headers): + """Test the equity calendar dividend endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -124,6 +128,7 @@ def test_equity_calendar_dividend(params, headers): ) @pytest.mark.integration def test_equity_calendar_splits(params, headers): + """Test the equity calendar splits endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -143,6 +148,7 @@ def test_equity_calendar_splits(params, headers): ) @pytest.mark.integration def test_equity_calendar_earnings(params, headers): + """Test the equity calendar earnings endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -205,6 +211,7 @@ def test_equity_calendar_earnings(params, headers): ) @pytest.mark.integration def test_equity_fundamental_cash(params, headers): + """Test the equity fundamental cash endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -220,6 +227,7 @@ def test_equity_fundamental_cash(params, headers): ) @pytest.mark.integration def test_equity_fundamental_cash_growth(params, headers): + """Test the equity fundamental cash growth endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -257,6 +265,7 @@ def test_equity_fundamental_cash_growth(params, headers): ) @pytest.mark.integration def test_equity_fundamental_management_compensation(params, headers): + """Test the equity fundamental management compensation endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -272,6 +281,7 @@ def test_equity_fundamental_management_compensation(params, headers): ) @pytest.mark.integration def test_equity_fundamental_historical_splits(params, headers): + """Test the equity fundamental historical splits endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -333,6 +343,7 @@ def test_equity_fundamental_historical_splits(params, headers): ) @pytest.mark.integration def test_equity_fundamental_dividends(params, headers): + """Test the equity fundamental dividends endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -348,6 +359,7 @@ def test_equity_fundamental_dividends(params, headers): ) @pytest.mark.integration def test_equity_fundamental_employee_count(params, headers): + """Test the equity fundamental employee count endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -359,10 +371,11 @@ def test_equity_fundamental_employee_count(params, headers): @parametrize( "params", - [({"symbol": "AAPL", "period": "annual", "limit": 30})], + [({"symbol": "AAPL,MSFT", "period": "annual", "limit": 30})], ) @pytest.mark.integration def test_equity_estimates_historical(params, headers): + """Test the equity estimates historical endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -372,6 +385,69 @@ def test_equity_estimates_historical(params, headers): assert result.status_code == 200 +@parametrize( + "params", + [ + ( + { + "symbol": "AAPL,MSFT", + "fiscal_period": "fy", + "fiscal_year": None, + "calendar_year": None, + "calendar_period": None, + "provider": "intrinio", + } + ) + ], +) +@pytest.mark.integration +def test_equity_estimates_forward_sales(params, headers): + """Test the equity estimates forward sales endpoint.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/equity/estimates/forward_sales?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + +@parametrize( + "params", + [ + ( + { + "symbol": "AAPL,MSFT", + "fiscal_period": "fy", + "fiscal_year": None, + "calendar_year": None, + "calendar_period": None, + "provider": "intrinio", + } + ), + ( + { + "symbol": "AAPL,MSFT", + "fiscal_period": "annual", + "limit": None, + "include_historical": False, + "provider": "fmp", + } + ), + ], +) +@pytest.mark.integration +def test_equity_estimates_forward_eps(params, headers): + """Test the equity estimates forward EPS endpoint.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/equity/estimates/forward_eps?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + @parametrize( "params", [ @@ -426,6 +502,7 @@ def test_equity_estimates_historical(params, headers): ) @pytest.mark.integration def test_equity_fundamental_income(params, headers): + """Test the equity fundamental income endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -441,6 +518,7 @@ def test_equity_fundamental_income(params, headers): ) @pytest.mark.integration def test_equity_fundamental_income_growth(params, headers): + """Test the equity fundamental income growth endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -483,6 +561,7 @@ def test_equity_fundamental_income_growth(params, headers): ) @pytest.mark.integration def test_equity_ownership_insider_trading(params, headers): + """Test the equity ownership insider trading endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -515,6 +594,7 @@ def test_equity_ownership_insider_trading(params, headers): ) @pytest.mark.integration def test_equity_ownership_institutional(params, headers): + """Test the equity ownership institutional endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -549,6 +629,7 @@ def test_equity_ownership_institutional(params, headers): ) @pytest.mark.integration def test_equity_calendar_ipo(params, headers): + """Test the equity calendar IPO endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -577,6 +658,7 @@ def test_equity_calendar_ipo(params, headers): ) @pytest.mark.integration def test_equity_fundamental_metrics(params, headers): + """Test the equity fundamental metrics endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -595,6 +677,7 @@ def test_equity_fundamental_metrics(params, headers): ) @pytest.mark.integration def test_equity_fundamental_management(params, headers): + """Test the equity fundamental management endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -610,6 +693,7 @@ def test_equity_fundamental_management(params, headers): ) @pytest.mark.integration def test_equity_fundamental_overview(params, headers): + """Test the equity fundamental overview endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -625,6 +709,7 @@ def test_equity_fundamental_overview(params, headers): ) @pytest.mark.integration def test_equity_ownership_major_holders(params, headers): + """Test the equity ownership major holders endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -661,6 +746,7 @@ def test_equity_ownership_major_holders(params, headers): ) @pytest.mark.integration def test_equity_estimates_price_target(params, headers): + """Test the equity estimates price target endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -703,6 +789,7 @@ def test_equity_estimates_price_target(params, headers): ) @pytest.mark.integration def test_equity_estimates_analyst_search(params, headers): + """Test the equity estimates analyst search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -718,10 +805,18 @@ def test_equity_estimates_analyst_search(params, headers): ({"symbol": "AAPL", "provider": "fmp"}), ({"symbol": "AAPL,AMZN,RELIANCE.NS", "provider": "yfinance"}), ({"symbol": "TD:US", "provider": "tmx"}), + ( + { + "symbol": "AAPL,MSFT", + "industry_group_number": None, + "provider": "intrinio", + } + ), ], ) @pytest.mark.integration def test_equity_estimates_consensus(params, headers): + """Test the equity estimates consensus endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -748,6 +843,7 @@ def test_equity_estimates_consensus(params, headers): ) @pytest.mark.integration def test_equity_fundamental_ratios(params, headers): + """Test the equity fundamental ratios endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -763,6 +859,7 @@ def test_equity_fundamental_ratios(params, headers): ) @pytest.mark.integration def test_equity_fundamental_revenue_per_geography(params, headers): + """Test the equity fundamental revenue per geography endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -778,6 +875,7 @@ def test_equity_fundamental_revenue_per_geography(params, headers): ) @pytest.mark.integration def test_equity_fundamental_revenue_per_segment(params, headers): + """Test the equity fundamental revenue per segment endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -838,6 +936,7 @@ def test_equity_fundamental_revenue_per_segment(params, headers): ) @pytest.mark.integration def test_equity_fundamental_filings(params, headers): + """Test the equity fundamental filings endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -857,6 +956,7 @@ def test_equity_fundamental_filings(params, headers): ) @pytest.mark.integration def test_equity_ownership_share_statistics(params, headers): + """Test the equity ownership share statistics endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -872,6 +972,7 @@ def test_equity_ownership_share_statistics(params, headers): ) @pytest.mark.integration def test_equity_fundamental_transcript(params, headers): + """Test the equity fundamental transcript endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -887,6 +988,7 @@ def test_equity_fundamental_transcript(params, headers): ) @pytest.mark.integration def test_equity_compare_peers(params, headers): + """Test the equity compare peers endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -902,6 +1004,7 @@ def test_equity_compare_peers(params, headers): ) @pytest.mark.integration def test_equity_compare_groups(params, headers): + """Test the equity compare groups endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1095,6 +1198,7 @@ def test_equity_compare_groups(params, headers): ) @pytest.mark.integration def test_equity_price_historical(params, headers): + """Test the equity price historical endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1111,6 +1215,7 @@ def test_equity_price_historical(params, headers): ) @pytest.mark.integration def test_equity_fundamental_multiples(params, headers): + """Test the equity fundamental multiples endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1128,6 +1233,7 @@ def test_equity_fundamental_multiples(params, headers): ) @pytest.mark.integration def test_equity_fundamental_search_attributes(params, headers): + """Test the equity fundamental search attributes endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1209,6 +1315,7 @@ def test_equity_fundamental_search_attributes(params, headers): ) @pytest.mark.integration def test_equity_fundamental_historical_attributes(params, headers): + """Test the equity fundamental historical attributes endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1267,6 +1374,7 @@ def test_equity_fundamental_historical_attributes(params, headers): ) @pytest.mark.integration def test_equity_fundamental_latest_attributes(params, headers): + """Test the equity fundamental latest attributes endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1297,6 +1405,7 @@ def test_equity_fundamental_latest_attributes(params, headers): ) @pytest.mark.integration def test_equity_search(params, headers): + """Test the equity search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1335,6 +1444,7 @@ def test_equity_search(params, headers): ) @pytest.mark.integration def test_equity_screener(params, headers): + """Test the equity screener endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1357,6 +1467,7 @@ def test_equity_screener(params, headers): ) @pytest.mark.integration def test_equity_price_quote(params, headers): + """Test the equity price quote endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1379,6 +1490,7 @@ def test_equity_price_quote(params, headers): ) @pytest.mark.integration def test_equity_profile(params, headers): + """Test the equity profile endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1397,6 +1509,7 @@ def test_equity_profile(params, headers): ) @pytest.mark.integration def test_equity_discovery_gainers(params, headers): + """Test the equity discovery gainers endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1412,6 +1525,7 @@ def test_equity_discovery_gainers(params, headers): ) @pytest.mark.integration def test_equity_discovery_losers(params, headers): + """Test the equity discovery losers endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1427,6 +1541,7 @@ def test_equity_discovery_losers(params, headers): ) @pytest.mark.integration def test_equity_discovery_active(params, headers): + """Test the equity discovery active endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1445,6 +1560,7 @@ def test_equity_discovery_active(params, headers): ) @pytest.mark.integration def test_equity_price_performance(params, headers): + """Test the equity price performance endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1460,6 +1576,7 @@ def test_equity_price_performance(params, headers): ) @pytest.mark.integration def test_equity_discovery_undervalued_large_caps(params, headers): + """Test the equity discovery undervalued large caps endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1475,6 +1592,7 @@ def test_equity_discovery_undervalued_large_caps(params, headers): ) @pytest.mark.integration def test_equity_discovery_undervalued_growth(params, headers): + """Test the equity discovery undervalued growth endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1490,6 +1608,7 @@ def test_equity_discovery_undervalued_growth(params, headers): ) @pytest.mark.integration def test_equity_discovery_aggressive_small_caps(params, headers): + """Test the equity discovery aggressive small caps endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1507,6 +1626,7 @@ def test_equity_discovery_aggressive_small_caps(params, headers): ) @pytest.mark.integration def test_equity_discovery_growth_tech(params, headers): + """Test the equity discovery growth tech endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1522,6 +1642,7 @@ def test_equity_discovery_growth_tech(params, headers): ) @pytest.mark.integration def test_equity_discovery_top_retail(params, headers): + """Test the equity discovery top retail endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1537,6 +1658,7 @@ def test_equity_discovery_top_retail(params, headers): ) @pytest.mark.integration def test_equity_discovery_upcoming_release_days(params, headers): + """Test the equity discovery upcoming release days endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1575,6 +1697,7 @@ def test_equity_discovery_upcoming_release_days(params, headers): ) @pytest.mark.integration def test_equity_discovery_filings(params, headers): + """Test the equity discovery filings endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1593,6 +1716,7 @@ def test_equity_discovery_filings(params, headers): ) @pytest.mark.integration def test_equity_shorts_fails_to_deliver(params, headers): + """Test the equity shorts fails to deliver endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1608,6 +1732,7 @@ def test_equity_shorts_fails_to_deliver(params, headers): ) @pytest.mark.integration def test_equity_shorts_short_volume(params, headers): + """Test the equity shorts short volume endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1623,6 +1748,7 @@ def test_equity_shorts_short_volume(params, headers): ) @pytest.mark.integration def test_equity_shorts_short_interest(params, headers): + """Test the equity shorts short interest endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1651,6 +1777,7 @@ def test_equity_shorts_short_interest(params, headers): ) @pytest.mark.integration def test_equity_price_nbbo(params, headers): + """Test the equity price NBBO endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1669,6 +1796,7 @@ def test_equity_price_nbbo(params, headers): ) @pytest.mark.integration def test_equity_darkpool_otc(params, headers): + """Test the equity darkpool otc endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1693,6 +1821,7 @@ def test_equity_darkpool_otc(params, headers): ) @pytest.mark.integration def test_equity_market_snapshots(params, headers): + """Test the equity market snapshots endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1718,6 +1847,7 @@ def test_equity_market_snapshots(params, headers): ) @pytest.mark.integration def test_equity_fundamental_historical_eps(params, headers): + """Test the equity fundamental historical eps endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1733,6 +1863,7 @@ def test_equity_fundamental_historical_eps(params, headers): ) @pytest.mark.integration def test_equity_fundamental_trailing_dividend_yield(params, headers): + """Test the equity fundamental trailing dividend yield endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1779,6 +1910,7 @@ def test_equity_fundamental_trailing_dividend_yield(params, headers): ) @pytest.mark.integration def test_equity_fundamental_reported_financials(params, headers): + """Test the equity fundamental reported financials endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -1805,6 +1937,7 @@ def test_equity_fundamental_reported_financials(params, headers): ) @pytest.mark.integration def test_equity_ownership_form_13f(params, headers): + """Test the equity ownership form 13f endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/equity/integration/test_equity_python.py b/openbb_platform/extensions/equity/integration/test_equity_python.py index 671df076840..9b0f5bb530d 100644 --- a/openbb_platform/extensions/equity/integration/test_equity_python.py +++ b/openbb_platform/extensions/equity/integration/test_equity_python.py @@ -73,6 +73,7 @@ def obb(pytestconfig): ) @pytest.mark.integration def test_equity_fundamental_balance(params, obb): + """Test the equity fundamental balance endpoint.""" result = obb.equity.fundamental.balance(**params) assert result assert isinstance(result, OBBject) @@ -87,6 +88,7 @@ def test_equity_fundamental_balance(params, obb): ) @pytest.mark.integration def test_equity_fundamental_balance_growth(params, obb): + """Test the equity fundamental balance growth endpoint.""" result = obb.equity.fundamental.balance_growth(**params) assert result assert isinstance(result, OBBject) @@ -102,6 +104,7 @@ def test_equity_fundamental_balance_growth(params, obb): ) @pytest.mark.integration def test_equity_calendar_dividend(params, obb): + """Test the equity calendar dividend endpoint.""" result = obb.equity.calendar.dividend(**params) assert result assert isinstance(result, OBBject) @@ -116,6 +119,7 @@ def test_equity_calendar_dividend(params, obb): ) @pytest.mark.integration def test_equity_calendar_splits(params, obb): + """Test the equity calendar splits endpoint.""" result = obb.equity.calendar.splits(**params) assert result assert isinstance(result, OBBject) @@ -132,6 +136,7 @@ def test_equity_calendar_splits(params, obb): ) @pytest.mark.integration def test_equity_calendar_earnings(params, obb): + """Test the equity calendar earnings endpoint.""" result = obb.equity.calendar.earnings(**params) assert result assert isinstance(result, OBBject) @@ -191,6 +196,7 @@ def test_equity_calendar_earnings(params, obb): ) @pytest.mark.integration def test_equity_fundamental_cash(params, obb): + """Test the equity fundamental cash endpoint.""" result = obb.equity.fundamental.cash(**params) assert result assert isinstance(result, OBBject) @@ -205,6 +211,7 @@ def test_equity_fundamental_cash(params, obb): ) @pytest.mark.integration def test_equity_fundamental_cash_growth(params, obb): + """Test the equity fundamental cash growth endpoint.""" result = obb.equity.fundamental.cash_growth(**params) assert result assert isinstance(result, OBBject) @@ -239,6 +246,7 @@ def test_equity_fundamental_cash_growth(params, obb): ) @pytest.mark.integration def test_equity_fundamental_management_compensation(params, obb): + """Test the equity fundamental management compensation endpoint.""" result = obb.equity.fundamental.management_compensation(**params) assert result assert isinstance(result, OBBject) @@ -253,6 +261,7 @@ def test_equity_fundamental_management_compensation(params, obb): ) @pytest.mark.integration def test_equity_fundamental_historical_splits(params, obb): + """Test the equity fundamental historical splits endpoint.""" result = obb.equity.fundamental.historical_splits(**params) assert result assert isinstance(result, OBBject) @@ -311,6 +320,7 @@ def test_equity_fundamental_historical_splits(params, obb): ) @pytest.mark.integration def test_equity_fundamental_dividends(params, obb): + """Test the equity fundamental dividends endpoint.""" result = obb.equity.fundamental.dividends(**params) assert result assert isinstance(result, OBBject) @@ -325,6 +335,7 @@ def test_equity_fundamental_dividends(params, obb): ) @pytest.mark.integration def test_equity_fundamental_employee_count(params, obb): + """Test the equity fundamental employee count endpoint.""" result = obb.equity.fundamental.employee_count(**params) assert result assert isinstance(result, OBBject) @@ -334,11 +345,12 @@ def test_equity_fundamental_employee_count(params, obb): @parametrize( "params", [ - ({"symbol": "AAPL", "period": "annual", "limit": 30}), + ({"symbol": "AAPL,MSFT", "period": "annual", "limit": 30}), ], ) @pytest.mark.integration def test_equity_estimates_historical(params, obb): + """Test the equity estimates historical endpoint.""" result = obb.equity.estimates.historical(**params) assert result assert isinstance(result, OBBject) @@ -399,6 +411,7 @@ def test_equity_estimates_historical(params, obb): ) @pytest.mark.integration def test_equity_fundamental_income(params, obb): + """Test the equity fundamental income endpoint.""" result = obb.equity.fundamental.income(**params) assert result assert isinstance(result, OBBject) @@ -411,6 +424,7 @@ def test_equity_fundamental_income(params, obb): ) @pytest.mark.integration def test_equity_fundamental_income_growth(params, obb): + """Test the equity fundamental income growth endpoint.""" result = obb.equity.fundamental.income_growth(**params) assert result assert isinstance(result, OBBject) @@ -450,6 +464,7 @@ def test_equity_fundamental_income_growth(params, obb): ) @pytest.mark.integration def test_equity_ownership_insider_trading(params, obb): + """Test the equity ownership insider trading endpoint.""" result = obb.equity.ownership.insider_trading(**params) assert result assert isinstance(result, OBBject) @@ -479,6 +494,7 @@ def test_equity_ownership_insider_trading(params, obb): ) @pytest.mark.integration def test_equity_ownership_institutional(params, obb): + """Test the equity ownership institutional endpoint.""" result = obb.equity.ownership.institutional(**params) assert result assert isinstance(result, OBBject) @@ -510,6 +526,7 @@ def test_equity_ownership_institutional(params, obb): ) @pytest.mark.integration def test_equity_calendar_ipo(params, obb): + """Test the equity calendar IPO endpoint.""" result = obb.equity.calendar.ipo(**params) assert result assert isinstance(result, OBBject) @@ -536,6 +553,7 @@ def test_equity_calendar_ipo(params, obb): ) @pytest.mark.integration def test_equity_fundamental_metrics(params, obb): + """Test the equity fundamental metrics endpoint.""" result = obb.equity.fundamental.metrics(**params) assert result assert isinstance(result, OBBject) @@ -554,6 +572,7 @@ def test_equity_fundamental_metrics(params, obb): ) @pytest.mark.integration def test_equity_fundamental_management(params, obb): + """Test the equity fundamental management endpoint.""" result = obb.equity.fundamental.management(**params) assert result assert isinstance(result, OBBject) @@ -568,6 +587,7 @@ def test_equity_fundamental_management(params, obb): ) @pytest.mark.integration def test_equity_fundamental_overview(params, obb): + """Test the equity fundamental overview endpoint.""" result = obb.equity.fundamental.overview(**params) assert result assert isinstance(result, OBBject) @@ -582,6 +602,7 @@ def test_equity_fundamental_overview(params, obb): ) @pytest.mark.integration def test_equity_ownership_major_holders(params, obb): + """Test the equity ownership major holders endpoint.""" result = obb.equity.ownership.major_holders(**params) assert result assert isinstance(result, OBBject) @@ -615,6 +636,7 @@ def test_equity_ownership_major_holders(params, obb): ) @pytest.mark.integration def test_equity_estimates_price_target(params, obb): + """Test the equity estimates price target endpoint.""" result = obb.equity.estimates.price_target(**params) assert result assert isinstance(result, OBBject) @@ -640,6 +662,7 @@ def test_equity_estimates_price_target(params, obb): ) @pytest.mark.integration def test_equity_estimates_analyst_search(params, obb): + """Test the equity estimates analyst search endpoint.""" result = obb.equity.estimates.analyst_search(**params) assert result assert isinstance(result, OBBject) @@ -652,16 +675,81 @@ def test_equity_estimates_analyst_search(params, obb): ({"symbol": "AAPL", "provider": "fmp"}), ({"symbol": "AAPL,AMZN,RELIANCE.NS", "provider": "yfinance"}), ({"symbol": "TD:US", "provider": "tmx"}), + ( + { + "symbol": "AAPL,MSFT", + "industry_group_number": None, + "provider": "intrinio", + } + ), ], ) @pytest.mark.integration def test_equity_estimates_consensus(params, obb): + """Test the equity estimates consensus endpoint.""" result = obb.equity.estimates.consensus(**params) assert result assert isinstance(result, OBBject) assert result.results is not None +@parametrize( + "params", + [ + ( + { + "symbol": "AAPL,MSFT", + "fiscal_period": "fy", + "fiscal_year": None, + "calendar_year": None, + "calendar_period": None, + "provider": "intrinio", + } + ) + ], +) +@pytest.mark.integration +def test_equity_estimates_forward_sales(params, obb): + """Test the equity estimates forward sales endpoint.""" + result = obb.equity.estimates.forward_sales(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ( + { + "symbol": "AAPL,MSFT", + "fiscal_period": "fy", + "fiscal_year": None, + "calendar_year": None, + "calendar_period": None, + "provider": "intrinio", + } + ), + ( + { + "symbol": "AAPL,MSFT", + "fiscal_period": "annual", + "limit": None, + "include_historical": False, + "provider": "fmp", + } + ), + ], +) +@pytest.mark.integration +def test_equity_estimates_forward_eps(params, obb): + """Test the equity estimates forward EPS endpoint.""" + result = obb.equity.estimates.forward_eps(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + @parametrize( "params", [ @@ -679,6 +767,7 @@ def test_equity_estimates_consensus(params, obb): ) @pytest.mark.integration def test_equity_fundamental_ratios(params, obb): + """Test the equity fundamental ratios endpoint.""" result = obb.equity.fundamental.ratios(**params) assert result assert isinstance(result, OBBject) @@ -700,6 +789,7 @@ def test_equity_fundamental_ratios(params, obb): ) @pytest.mark.integration def test_equity_fundamental_revenue_per_geography(params, obb): + """Test the equity fundamental revenue per geography endpoint.""" result = obb.equity.fundamental.revenue_per_geography(**params) assert result assert isinstance(result, OBBject) @@ -721,6 +811,7 @@ def test_equity_fundamental_revenue_per_geography(params, obb): ) @pytest.mark.integration def test_equity_fundamental_revenue_per_segment(params, obb): + """Test the equity fundamental revenue per segment endpoint.""" result = obb.equity.fundamental.revenue_per_segment(**params) assert result assert isinstance(result, OBBject) @@ -774,6 +865,7 @@ def test_equity_fundamental_revenue_per_segment(params, obb): ) @pytest.mark.integration def test_equity_fundamental_filings(params, obb): + """Test the equity fundamental filings endpoint.""" result = obb.equity.fundamental.filings(**params) assert result assert isinstance(result, OBBject) @@ -790,6 +882,7 @@ def test_equity_fundamental_filings(params, obb): ) @pytest.mark.integration def test_equity_ownership_share_statistics(params, obb): + """Test the equity ownership share statistics endpoint.""" result = obb.equity.ownership.share_statistics(**params) assert result assert isinstance(result, OBBject) @@ -804,6 +897,7 @@ def test_equity_ownership_share_statistics(params, obb): ) @pytest.mark.integration def test_equity_fundamental_transcript(params, obb): + """Test the equity fundamental transcript endpoint.""" result = obb.equity.fundamental.transcript(**params) assert result assert isinstance(result, OBBject) @@ -818,6 +912,7 @@ def test_equity_fundamental_transcript(params, obb): ) @pytest.mark.integration def test_equity_compare_peers(params, obb): + """Test the equity compare peers endpoint.""" result = obb.equity.compare.peers(**params) assert result assert isinstance(result, OBBject) @@ -830,6 +925,7 @@ def test_equity_compare_peers(params, obb): ) @pytest.mark.integration def test_equity_compare_groups(params, obb): + """Test the equity compare groups endpoint.""" result = obb.equity.compare.groups(**params) assert result assert isinstance(result, OBBject) @@ -1020,6 +1116,7 @@ def test_equity_compare_groups(params, obb): ) @pytest.mark.integration def test_equity_price_historical(params, obb): + """Test the equity price historical endpoint.""" result = obb.equity.price.historical(**params) assert result assert isinstance(result, OBBject) @@ -1034,6 +1131,7 @@ def test_equity_price_historical(params, obb): ) @pytest.mark.integration def test_equity_fundamental_multiples(params, obb): + """Test the equity fundamental multiples endpoint.""" result = obb.equity.fundamental.multiples(**params) assert result assert isinstance(result, OBBject) @@ -1048,6 +1146,7 @@ def test_equity_fundamental_multiples(params, obb): ) @pytest.mark.integration def test_equity_fundamental_search_attributes(params, obb): + """Test the equity fundamental search attributes endpoint.""" result = obb.equity.fundamental.search_attributes(**params) assert result assert isinstance(result, OBBject) @@ -1126,6 +1225,7 @@ def test_equity_fundamental_search_attributes(params, obb): ) @pytest.mark.integration def test_equity_fundamental_historical_attributes(params, obb): + """Test the equity fundamental historical attributes endpoint.""" result = obb.equity.fundamental.historical_attributes(**params) assert result assert isinstance(result, OBBject) @@ -1181,6 +1281,7 @@ def test_equity_fundamental_historical_attributes(params, obb): ) @pytest.mark.integration def test_equity_fundamental_latest_attributes(params, obb): + """Test the equity fundamental latest attributes endpoint.""" result = obb.equity.fundamental.latest_attributes(**params) assert result assert isinstance(result, OBBject) @@ -1211,6 +1312,7 @@ def test_equity_fundamental_latest_attributes(params, obb): ) @pytest.mark.integration def test_equity_search(params, obb): + """Test the equity search endpoint.""" result = obb.equity.search(**params) assert result assert isinstance(result, OBBject) @@ -1246,6 +1348,7 @@ def test_equity_search(params, obb): ) @pytest.mark.integration def test_equity_screener(params, obb): + """Test the equity screener endpoint.""" result = obb.equity.screener(**params) assert result assert isinstance(result, OBBject) @@ -1266,6 +1369,7 @@ def test_equity_screener(params, obb): ) @pytest.mark.integration def test_equity_price_quote(params, obb): + """Test the equity price quote endpoint.""" result = obb.equity.price.quote(**params) assert result assert isinstance(result, OBBject) @@ -1285,6 +1389,7 @@ def test_equity_price_quote(params, obb): ) @pytest.mark.integration def test_equity_profile(params, obb): + """Test the equity profile endpoint.""" result = obb.equity.profile(**params) assert result assert isinstance(result, OBBject) @@ -1303,6 +1408,7 @@ def test_equity_profile(params, obb): ) @pytest.mark.integration def test_equity_discovery_gainers(params, obb): + """Test the equity discovery gainers endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.gainers(**params) @@ -1317,6 +1423,7 @@ def test_equity_discovery_gainers(params, obb): ) @pytest.mark.integration def test_equity_discovery_losers(params, obb): + """Test the equity discovery losers endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.losers(**params) @@ -1331,6 +1438,7 @@ def test_equity_discovery_losers(params, obb): ) @pytest.mark.integration def test_equity_discovery_active(params, obb): + """Test the equity discovery active endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.active(**params) @@ -1348,6 +1456,7 @@ def test_equity_discovery_active(params, obb): ) @pytest.mark.integration def test_equity_price_performance(params, obb): + """Test the equity price performance endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.price.performance(**params) @@ -1362,6 +1471,7 @@ def test_equity_price_performance(params, obb): ) @pytest.mark.integration def test_equity_discovery_undervalued_large_caps(params, obb): + """Test the equity discovery undervalued large caps endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.undervalued_large_caps(**params) @@ -1376,6 +1486,7 @@ def test_equity_discovery_undervalued_large_caps(params, obb): ) @pytest.mark.integration def test_equity_discovery_undervalued_growth(params, obb): + """Test the equity discovery undervalued growth endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.undervalued_growth(**params) @@ -1390,6 +1501,7 @@ def test_equity_discovery_undervalued_growth(params, obb): ) @pytest.mark.integration def test_equity_discovery_aggressive_small_caps(params, obb): + """Test the equity discovery aggressive small caps endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.aggressive_small_caps(**params) @@ -1404,6 +1516,7 @@ def test_equity_discovery_aggressive_small_caps(params, obb): ) @pytest.mark.integration def test_equity_discovery_growth_tech(params, obb): + """Test the equity discovery growth tech endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.growth_tech(**params) @@ -1418,6 +1531,7 @@ def test_equity_discovery_growth_tech(params, obb): ) @pytest.mark.integration def test_equity_discovery_top_retail(params, obb): + """Test the equity discovery top retail endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.top_retail(**params) @@ -1432,6 +1546,7 @@ def test_equity_discovery_top_retail(params, obb): ) @pytest.mark.integration def test_equity_discovery_upcoming_release_days(params, obb): + """Test the equity discovery upcoming release days endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.upcoming_release_days(**params) @@ -1467,6 +1582,7 @@ def test_equity_discovery_upcoming_release_days(params, obb): ) @pytest.mark.integration def test_equity_discovery_filings(params, obb): + """Test the equity discovery filings endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.discovery.filings(**params) @@ -1487,6 +1603,7 @@ def test_equity_discovery_filings(params, obb): ) @pytest.mark.integration def test_equity_shorts_fails_to_deliver(params, obb): + """Test the equity shorts fails to deliver endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.shorts.fails_to_deliver(**params) @@ -1501,6 +1618,7 @@ def test_equity_shorts_fails_to_deliver(params, obb): ) @pytest.mark.integration def test_equity_shorts_short_volume(params, obb): + """Test the equity shorts short volume endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.shorts.short_volume(**params) @@ -1515,6 +1633,7 @@ def test_equity_shorts_short_volume(params, obb): ) @pytest.mark.integration def test_equity_shorts_short_interest(params, obb): + """Test the equity shorts short interest endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.shorts.short_interest(**params) @@ -1542,6 +1661,7 @@ def test_equity_shorts_short_interest(params, obb): ) @pytest.mark.integration def test_equity_price_nbbo(params, obb): + """Test the equity price nbbo endpoint.""" result = obb.equity.price.nbbo(**params) assert result assert isinstance(result, OBBject) @@ -1557,6 +1677,7 @@ def test_equity_price_nbbo(params, obb): ) @pytest.mark.integration def test_equity_darkpool_otc(params, obb): + """Test the equity darkpool otc endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.darkpool.otc(**params) @@ -1575,6 +1696,7 @@ def test_equity_darkpool_otc(params, obb): ) @pytest.mark.integration def test_equity_market_snapshots(params, obb): + """Test the equity market snapshots endpoint.""" result = obb.equity.market_snapshots(**params) assert result assert isinstance(result, OBBject) @@ -1597,6 +1719,7 @@ def test_equity_market_snapshots(params, obb): ) @pytest.mark.integration def test_equity_fundamental_historical_eps(params, obb): + """Test the equity fundamental historical eps endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.fundamental.historical_eps(**params) @@ -1611,6 +1734,7 @@ def test_equity_fundamental_historical_eps(params, obb): ) @pytest.mark.integration def test_equity_fundamental_trailing_dividend_yield(params, obb): + """Test the equity fundamental trailing dividend yield endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.fundamental.trailing_dividend_yield(**params) @@ -1656,6 +1780,7 @@ def test_equity_fundamental_trailing_dividend_yield(params, obb): ) @pytest.mark.integration def test_equity_fundamental_reported_financials(params, obb): + """Test the equity fundamental reported financials endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.fundamental.reported_financials(**params) @@ -1679,6 +1804,7 @@ def test_equity_fundamental_reported_financials(params, obb): ) @pytest.mark.integration def test_equity_ownership_form_13f(params, obb): + """Test the equity ownership form 13f endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.equity.ownership.form_13f(**params) diff --git a/openbb_platform/extensions/equity/openbb_equity/compare/compare_router.py b/openbb_platform/extensions/equity/openbb_equity/compare/compare_router.py index 2f585055e3f..1737cd2dd08 100644 --- a/openbb_platform/extensions/equity/openbb_equity/compare/compare_router.py +++ b/openbb_platform/extensions/equity/openbb_equity/compare/compare_router.py @@ -28,7 +28,8 @@ async def peers( """Get the closest peers for a given company. Peers consist of companies trading on the same exchange, operating within the same sector - and with comparable market capitalizations.""" + and with comparable market capitalizations. + """ return await OBBject.from_query(Query(**locals())) @@ -67,5 +68,6 @@ async def groups( """Get company data grouped by sector, industry or country and display either performance or valuation metrics. Valuation metrics include price to earnings, price to book, price to sales ratios and price to cash flow. - Performance metrics include the stock price change for different time periods.""" + Performance metrics include the stock price change for different time periods. + """ return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/equity/openbb_equity/darkpool/darkpool_router.py b/openbb_platform/extensions/equity/openbb_equity/darkpool/darkpool_router.py index 67307cbeec0..e9db292bceb 100644 --- a/openbb_platform/extensions/equity/openbb_equity/darkpool/darkpool_router.py +++ b/openbb_platform/extensions/equity/openbb_equity/darkpool/darkpool_router.py @@ -35,5 +35,6 @@ async def otc( """Get the weekly aggregate trade data for Over The Counter deals. ATS and non-ATS trading data for each ATS/firm - with trade reporting obligations under FINRA rules.""" + with trade reporting obligations under FINRA rules. + """ return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/equity/openbb_equity/discovery/discovery_router.py b/openbb_platform/extensions/equity/openbb_equity/discovery/discovery_router.py index 86ccde2857d..b8fbbc1a7be 100644 --- a/openbb_platform/extensions/equity/openbb_equity/discovery/discovery_router.py +++ b/openbb_platform/extensions/equity/openbb_equity/discovery/discovery_router.py @@ -144,10 +144,11 @@ async def top_retail( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Tracks over $30B USD/day of individual investors trades. + """Track over $30B USD/day of individual investors trades. It gives a daily view into retail activity and sentiment for over 9,500 US traded stocks, - ADRs, and ETPs.""" + ADRs, and ETPs. + """ return await OBBject.from_query(Query(**locals())) @@ -186,8 +187,9 @@ async def filings( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more. SEC - filings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114, + """Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more. + + SEC filings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114, Foreign Investment Disclosures and others. The annual 10-K report is required to be filed annually and includes the company's financial statements, management discussion and analysis, and audited financial statements. diff --git a/openbb_platform/extensions/equity/openbb_equity/equity_router.py b/openbb_platform/extensions/equity/openbb_equity/equity_router.py index 9da54b7678c..1ba9b021587 100644 --- a/openbb_platform/extensions/equity/openbb_equity/equity_router.py +++ b/openbb_platform/extensions/equity/openbb_equity/equity_router.py @@ -21,7 +21,7 @@ from openbb_equity.ownership.ownership_router import router as ownership_router from openbb_equity.price.price_router import router as price_router from openbb_equity.shorts.shorts_router import router as shorts_router -router = Router(prefix="") +router = Router(prefix="", description="Equity market data.") router.include_router(calendar_router) router.include_router(compare_router) router.include_router(estimates_router) @@ -68,8 +68,10 @@ async def screener( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Screen for companies meeting various criteria. These criteria include - market cap, price, beta, volume, and dividend yield.""" + """Screen for companies meeting various criteria. + + These criteria include market cap, price, beta, volume, and dividend yield. + """ return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/equity/openbb_equity/estimates/estimates_router.py b/openbb_platform/extensions/equity/openbb_equity/estimates/estimates_router.py index 07c328c334c..d321c3a9d31 100644 --- a/openbb_platform/extensions/equity/openbb_equity/estimates/estimates_router.py +++ b/openbb_platform/extensions/equity/openbb_equity/estimates/estimates_router.py @@ -91,3 +91,49 @@ async def analyst_search( ) -> OBBject: """Search for specific analysts and get their forecast track record.""" return await OBBject.from_query(Query(**locals())) + + +@router.command( + model="ForwardSalesEstimates", + examples=[ + APIEx(parameters={"symbol": "AAPL", "provider": "intrinio"}), + APIEx( + parameters={ + "fiscal_year": 2025, + "fiscal_period": "fy", + "provider": "intrinio", + } + ), + ], +) +async def forward_sales( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get forward sales estimates.""" + return await OBBject.from_query(Query(**locals())) + + +@router.command( + model="ForwardEpsEstimates", + examples=[ + APIEx(parameters={"symbol": "AAPL", "provider": "intrinio"}), + APIEx( + parameters={ + "fiscal_year": 2025, + "fiscal_period": "fy", + "provider": "intrinio", + } + ), + ], +) +async def forward_eps( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get forward EPS estimates.""" + return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/equity/openbb_equity/ownership/ownership_router.py b/openbb_platform/extensions/equity/openbb_equity/ownership/ownership_router.py index 8095164823e..4f118d27b63 100644 --- a/openbb_platform/extensions/equity/openbb_equity/ownership/ownership_router.py +++ b/openbb_platform/extensions/equity/openbb_equity/ownership/ownership_router.py @@ -102,7 +102,8 @@ async def form_13f( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """ + """Get the form 13F. + The Securities and Exchange Commission's (SEC) Form 13F is a quarterly report that is required to be filed by all institutional investment managers with at least $100 million in assets under management. diff --git a/openbb_platform/extensions/equity/poetry.lock b/openbb_platform/extensions/equity/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/extensions/equity/poetry.lock +++ b/openbb_platform/extensions/equity/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/equity/pyproject.toml b/openbb_platform/extensions/equity/pyproject.toml index 0b4702b29d6..18b460a6f12 100644 --- a/openbb_platform/extensions/equity/pyproject.toml +++ b/openbb_platform/extensions/equity/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-equity" -version = "1.1.4" +version = "1.1.5" description = "Equity extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_equity" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/etf/integration/test_etf_api.py b/openbb_platform/extensions/etf/integration/test_etf_api.py index 850998dd540..04029f6d6d9 100644 --- a/openbb_platform/extensions/etf/integration/test_etf_api.py +++ b/openbb_platform/extensions/etf/integration/test_etf_api.py @@ -1,3 +1,5 @@ +"""Integration tests for the ETF API.""" + import base64 import pytest @@ -9,6 +11,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -43,6 +46,7 @@ def headers(): ) @pytest.mark.integration def test_etf_search(params, headers): + """Test the ETF search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -227,6 +231,7 @@ def test_etf_search(params, headers): ) @pytest.mark.integration def test_etf_historical(params, headers): + """Test the ETF historical endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -247,6 +252,7 @@ def test_etf_historical(params, headers): ) @pytest.mark.integration def test_etf_info(params, headers): + """Test the ETF info endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -265,6 +271,7 @@ def test_etf_info(params, headers): ) @pytest.mark.integration def test_etf_sectors(params, headers): + """Test the ETF sectors endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -282,6 +289,7 @@ def test_etf_sectors(params, headers): ) @pytest.mark.integration def test_etf_holdings_date(params, headers): + """Test the ETF holdings date endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -337,12 +345,21 @@ def test_etf_holdings_date(params, headers): { "symbol": "DJIA", "provider": "intrinio", + "date": None, + } + ), + ( + { + "symbol": "QQQ", + "provider": "intrinio", + "date": "2020-04-03", } ), ], ) @pytest.mark.integration def test_etf_holdings(params, headers): + """Test the ETF holdings endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -369,6 +386,7 @@ def test_etf_holdings(params, headers): ) @pytest.mark.integration def test_etf_price_performance(params, headers): + """Test the ETF price performance endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -387,6 +405,7 @@ def test_etf_price_performance(params, headers): ) @pytest.mark.integration def test_etf_countries(params, headers): + """Test the ETF countries endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -402,6 +421,7 @@ def test_etf_countries(params, headers): ) @pytest.mark.integration def test_etf_discovery_gainers(params, headers): + """Test the ETF discovery gainers endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -417,6 +437,7 @@ def test_etf_discovery_gainers(params, headers): ) @pytest.mark.integration def test_etf_discovery_losers(params, headers): + """Test the ETF discovery losers endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -432,6 +453,7 @@ def test_etf_discovery_losers(params, headers): ) @pytest.mark.integration def test_etf_discovery_active(params, headers): + """Test the ETF discovery active endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -450,6 +472,7 @@ def test_etf_discovery_active(params, headers): ) @pytest.mark.integration def test_etf_holdings_performance(params, headers): + """Test the ETF holdings performance endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -467,6 +490,7 @@ def test_etf_holdings_performance(params, headers): ) @pytest.mark.integration def test_etf_equity_exposure(params, headers): + """Test the ETF equity exposure endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/etf/integration/test_etf_python.py b/openbb_platform/extensions/etf/integration/test_etf_python.py index f3d966b831b..ed8ba2f99ce 100644 --- a/openbb_platform/extensions/etf/integration/test_etf_python.py +++ b/openbb_platform/extensions/etf/integration/test_etf_python.py @@ -42,6 +42,7 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements ) @pytest.mark.integration def test_etf_search(params, obb): + """Test the ETF search endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.search(**params) @@ -225,6 +226,7 @@ def test_etf_search(params, obb): ) @pytest.mark.integration def test_etf_historical(params, obb): + """Test the ETF historical endpoint.""" result = obb.equity.price.historical(**params) assert result assert isinstance(result, OBBject) @@ -242,6 +244,7 @@ def test_etf_historical(params, obb): ) @pytest.mark.integration def test_etf_info(params, obb): + """Test the ETF info endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.info(**params) @@ -259,6 +262,7 @@ def test_etf_info(params, obb): ) @pytest.mark.integration def test_etf_sectors(params, obb): + """Test the ETF sectors endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.sectors(**params) @@ -275,6 +279,7 @@ def test_etf_sectors(params, obb): ) @pytest.mark.integration def test_etf_holdings_date(params, obb): + """Test the ETF holdings date endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.holdings_date(**params) @@ -329,12 +334,21 @@ def test_etf_holdings_date(params, obb): { "symbol": "DJIA", "provider": "intrinio", + "date": None, + } + ), + ( + { + "symbol": "QQQ", + "provider": "intrinio", + "date": "2020-04-03", } ), ], ) @pytest.mark.integration def test_etf_holdings(params, obb): + """Test the ETF holdings endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.holdings(**params) @@ -360,6 +374,7 @@ def test_etf_holdings(params, obb): ) @pytest.mark.integration def test_etf_price_performance(params, obb): + """Test the ETF price performance endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.price_performance(**params) @@ -377,6 +392,7 @@ def test_etf_price_performance(params, obb): ) @pytest.mark.integration def test_etf_countries(params, obb): + """Test the ETF countries endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.countries(**params) @@ -391,6 +407,7 @@ def test_etf_countries(params, obb): ) @pytest.mark.integration def test_etf_discovery_gainers(params, obb): + """Test the ETF discovery gainers endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.discovery.gainers(**params) @@ -405,6 +422,7 @@ def test_etf_discovery_gainers(params, obb): ) @pytest.mark.integration def test_etf_discovery_losers(params, obb): + """Test the ETF discovery losers endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.discovery.losers(**params) @@ -419,6 +437,7 @@ def test_etf_discovery_losers(params, obb): ) @pytest.mark.integration def test_etf_discovery_active(params, obb): + """Test the ETF discovery active endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.discovery.active(**params) @@ -436,6 +455,7 @@ def test_etf_discovery_active(params, obb): ) @pytest.mark.integration def test_etf_holdings_performance(params, obb): + """Test the ETF holdings performance endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.holdings_performance(**params) @@ -452,6 +472,7 @@ def test_etf_holdings_performance(params, obb): ) @pytest.mark.integration def test_etf_equity_exposure(params, obb): + """Test the ETF equity exposure endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.etf.equity_exposure(**params) diff --git a/openbb_platform/extensions/etf/openbb_etf/etf_router.py b/openbb_platform/extensions/etf/openbb_etf/etf_router.py index 3476644510d..52c367864fe 100644 --- a/openbb_platform/extensions/etf/openbb_etf/etf_router.py +++ b/openbb_platform/extensions/etf/openbb_etf/etf_router.py @@ -1,5 +1,6 @@ """ETF Router.""" +from openbb_core.app.deprecation import OpenBBDeprecationWarning from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.example import APIEx from openbb_core.app.model.obbject import OBBject @@ -13,7 +14,7 @@ from openbb_core.app.router import Router from openbb_etf.discovery.discovery_router import router as discovery_router -router = Router(prefix="") +router = Router(prefix="", description="Exchange Traded Funds market data.") router.include_router(discovery_router) # pylint: disable=unused-argument @@ -172,6 +173,13 @@ async def holdings_date( @router.command( model="EtfHoldingsPerformance", + deprecated=True, + deprecation=OpenBBDeprecationWarning( + message="This endpoint is deprecated; pass a list of holdings symbols directly to" + + " `/equity/price/performance` instead.", + since=(4, 1), + expected_removal=(4, 2), + ), examples=[APIEx(parameters={"symbol": "XLK", "provider": "fmp"})], ) async def holdings_performance( diff --git a/openbb_platform/extensions/etf/poetry.lock b/openbb_platform/extensions/etf/poetry.lock index 36725a9dbe9..c19757ae31a 100644 --- a/openbb_platform/extensions/etf/poetry.lock +++ b/openbb_platform/extensions/etf/poetry.lock @@ -678,13 +678,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1397,4 +1397,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "75f551243cc84ea3dcba416d86f4ef5669b5b8b5fcf4781a0d8e3e69360b28e4" +content-hash = "df0539c34df30b9f361fb9099e221e5a86ba5c1ea1451a0748d7b87dba2203b0" diff --git a/openbb_platform/extensions/etf/pyproject.toml b/openbb_platform/extensions/etf/pyproject.toml index 05f6486a21e..0cc625ad03a 100644 --- a/openbb_platform/extensions/etf/pyproject.toml +++ b/openbb_platform/extensions/etf/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-etf" -version = "1.1.4" +version = "1.1.5" description = "ETF extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_etf" }] [tool.poetry.dependencies] python = ">=3.8,<3.12" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py index 95b759beaac..da9c88c77c4 100644 --- a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py +++ b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py @@ -1,3 +1,5 @@ +"""Test fixedincome API endpoints.""" + import base64 import pytest @@ -11,6 +13,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -24,6 +27,7 @@ def headers(): ) @pytest.mark.integration def test_fixedincome_government_treasury_rates(params, headers): + """Test the treasury rates endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -41,6 +45,7 @@ def test_fixedincome_government_treasury_rates(params, headers): ) @pytest.mark.integration def test_fixedincome_government_us_yield_curve(params, headers): + """Test the US yield curve endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -68,6 +73,7 @@ def test_fixedincome_government_us_yield_curve(params, headers): ) @pytest.mark.integration def test_fixedincome_sofr(params, headers): + """Test the SOFR endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -93,6 +99,7 @@ def test_fixedincome_sofr(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_estr(params, headers): + """Test the ESTR rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -118,6 +125,7 @@ def test_fixedincome_rate_estr(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_sonia(params, headers): + """Test the SONIA rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -143,6 +151,7 @@ def test_fixedincome_rate_sonia(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_ameribor(params, headers): + """Test the Ameribor rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -174,6 +183,7 @@ def test_fixedincome_rate_ameribor(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_effr(params, headers): + """Test the EFFR rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -189,6 +199,7 @@ def test_fixedincome_rate_effr(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_effr_forecast(params, headers): + """Test the EFFR forecast rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -204,6 +215,7 @@ def test_fixedincome_rate_effr_forecast(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_iorb(params, headers): + """Test the IORB rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -229,6 +241,7 @@ def test_fixedincome_rate_iorb(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_dpcredit(params, headers): + """Test the DPCredit rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -252,6 +265,7 @@ def test_fixedincome_rate_dpcredit(params, headers): ) @pytest.mark.integration def test_fixedincome_rate_ecb(params, headers): + """Test the ECB rate endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -281,6 +295,7 @@ def test_fixedincome_rate_ecb(params, headers): ) @pytest.mark.integration def test_fixedincome_corporate_ice_bofa(params, headers): + """Test the ICE BofA corporate yield index endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -296,6 +311,7 @@ def test_fixedincome_corporate_ice_bofa(params, headers): ) @pytest.mark.integration def test_fixedincome_corporate_moody(params, headers): + """Test the Moody's corporate yield index endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -322,6 +338,7 @@ def test_fixedincome_corporate_moody(params, headers): ) @pytest.mark.integration def test_fixedincome_corporate_commercial_paper(params, headers): + """Test the commercial paper endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -365,6 +382,7 @@ def test_fixedincome_corporate_commercial_paper(params, headers): ) @pytest.mark.integration def test_fixedincome_corporate_spot_rates(params, headers): + """Test the corporate spot rates endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -380,6 +398,7 @@ def test_fixedincome_corporate_spot_rates(params, headers): ) @pytest.mark.integration def test_fixedincome_corporate_hqm(params, headers): + """Test the HQM corporate yield curve endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -395,6 +414,7 @@ def test_fixedincome_corporate_hqm(params, headers): ) @pytest.mark.integration def test_fixedincome_spreads_tcm(params, headers): + """Test the TCM spreads endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -419,6 +439,7 @@ def test_fixedincome_spreads_tcm(params, headers): ) @pytest.mark.integration def test_fixedincome_spreads_tcm_effr(params, headers): + """Test the TCM EFFR spreads endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -443,6 +464,7 @@ def test_fixedincome_spreads_tcm_effr(params, headers): ) @pytest.mark.integration def test_fixedincome_spreads_treasury_effr(params, headers): + """Test the treasury EFFR spreads endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -467,6 +489,7 @@ def test_fixedincome_spreads_treasury_effr(params, headers): ) @pytest.mark.integration def test_fixedincome_government_eu_yield_curve(params, headers): + """Test the EU yield curve endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -507,6 +530,7 @@ def test_fixedincome_government_eu_yield_curve(params, headers): ) @pytest.mark.integration def test_fixedincome_government_treasury_auctions(params, headers): + """Test the treasury auctions endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -552,13 +576,14 @@ def test_fixedincome_government_treasury_auctions(params, headers): ) @pytest.mark.integration def test_fixedincome_government_treasury_prices(params, headers): + """Test the treasury prices endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) url = ( f"http://0.0.0.0:8000/api/v1/fixedincome/government/treasury_prices?{query_str}" ) - result = requests.get(url, headers=headers, timeout=30) + result = requests.get(url, headers=headers, timeout=40) assert isinstance(result, requests.Response) assert result.status_code == 200 @@ -590,10 +615,11 @@ def test_fixedincome_government_treasury_prices(params, headers): ) @pytest.mark.integration def test_fixedincome_corporate_bond_prices(params, headers): + """Test the corporate bond prices endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) url = f"http://0.0.0.0:8000/api/v1/fixedincome/corporate/bond_prices?{query_str}" - result = requests.get(url, headers=headers, timeout=30) + result = requests.get(url, headers=headers, timeout=40) assert isinstance(result, requests.Response) assert result.status_code == 200 diff --git a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py index 40c73bf077d..57ba30d7fad 100644 --- a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py +++ b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py @@ -26,6 +26,7 @@ def obb(pytestconfig): ) @pytest.mark.integration def test_fixedincome_government_treasury_rates(params, obb): + """Test the treasury rates endpoint.""" result = obb.fixedincome.government.treasury_rates(**params) assert result assert isinstance(result, OBBject) @@ -40,6 +41,7 @@ def test_fixedincome_government_treasury_rates(params, obb): ) @pytest.mark.integration def test_fixedincome_government_us_yield_curve(params, obb): + """Test the US yield curve endpoint.""" result = obb.fixedincome.government.us_yield_curve(**params) assert result assert isinstance(result, OBBject) @@ -62,6 +64,7 @@ def test_fixedincome_government_us_yield_curve(params, obb): ) @pytest.mark.integration def test_fixedincome_sofr(params, obb): + """Test the SOFR endpoint.""" result = obb.fixedincome.sofr(**params) assert result assert isinstance(result, OBBject) @@ -84,6 +87,7 @@ def test_fixedincome_sofr(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_estr(params, obb): + """Test the ESTR endpoint.""" result = obb.fixedincome.rate.estr(**params) assert result assert isinstance(result, OBBject) @@ -106,6 +110,7 @@ def test_fixedincome_rate_estr(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_sonia(params, obb): + """Test the SONIA endpoint.""" result = obb.fixedincome.rate.sonia(**params) assert result assert isinstance(result, OBBject) @@ -128,6 +133,7 @@ def test_fixedincome_rate_sonia(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_ameribor(params, obb): + """Test the Ameribor endpoint.""" result = obb.fixedincome.rate.ameribor(**params) assert result assert isinstance(result, OBBject) @@ -156,6 +162,7 @@ def test_fixedincome_rate_ameribor(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_effr(params, obb): + """Test the EFFR endpoint.""" result = obb.fixedincome.rate.effr(**params) assert result assert isinstance(result, OBBject) @@ -171,6 +178,7 @@ def test_fixedincome_rate_effr(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_effr_forecast(params, obb): + """Test the EFFR forecast endpoint.""" result = obb.fixedincome.rate.effr_forecast(**params) assert result assert isinstance(result, OBBject) @@ -185,6 +193,7 @@ def test_fixedincome_rate_effr_forecast(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_iorb(params, obb): + """Test the IORB endpoint.""" result = obb.fixedincome.rate.iorb(**params) assert result assert isinstance(result, OBBject) @@ -207,6 +216,7 @@ def test_fixedincome_rate_iorb(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_dpcredit(params, obb): + """Test the DPCREDIT endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.rate.dpcredit(**params) @@ -229,6 +239,7 @@ def test_fixedincome_rate_dpcredit(params, obb): ) @pytest.mark.integration def test_fixedincome_rate_ecb(params, obb): + """Test the ECB endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.rate.ecb(**params) @@ -257,6 +268,7 @@ def test_fixedincome_rate_ecb(params, obb): ) @pytest.mark.integration def test_fixedincome_corporate_ice_bofa(params, obb): + """Test the ICE BofA endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.corporate.ice_bofa(**params) @@ -271,6 +283,7 @@ def test_fixedincome_corporate_ice_bofa(params, obb): ) @pytest.mark.integration def test_fixedincome_corporate_moody(params, obb): + """Test the Moody endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.corporate.moody(**params) @@ -296,6 +309,7 @@ def test_fixedincome_corporate_moody(params, obb): ) @pytest.mark.integration def test_fixedincome_corporate_commercial_paper(params, obb): + """Test the commercial paper endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.corporate.commercial_paper(**params) @@ -336,6 +350,7 @@ def test_fixedincome_corporate_commercial_paper(params, obb): ) @pytest.mark.integration def test_fixedincome_corporate_spot_rates(params, obb): + """Test the spot rates endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.corporate.spot_rates(**params) @@ -350,6 +365,7 @@ def test_fixedincome_corporate_spot_rates(params, obb): ) @pytest.mark.integration def test_fixedincome_corporate_hqm(params, obb): + """Test the HQM endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.corporate.hqm(**params) @@ -364,6 +380,7 @@ def test_fixedincome_corporate_hqm(params, obb): ) @pytest.mark.integration def test_fixedincome_spreads_tcm(params, obb): + """Test the TCM endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.spreads.tcm(**params) @@ -387,6 +404,7 @@ def test_fixedincome_spreads_tcm(params, obb): ) @pytest.mark.integration def test_fixedincome_spreads_tcm_effr(params, obb): + """Test the TCM EFFR endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.spreads.tcm_effr(**params) @@ -410,6 +428,7 @@ def test_fixedincome_spreads_tcm_effr(params, obb): ) @pytest.mark.integration def test_fixedincome_spreads_treasury_effr(params, obb): + """Test the treasury EFFR endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.spreads.treasury_effr(**params) @@ -433,6 +452,7 @@ def test_fixedincome_spreads_treasury_effr(params, obb): ) @pytest.mark.integration def test_fixedincome_government_eu_yield_curve(params, obb): + """Test the EU yield curve endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.government.eu_yield_curve(**params) @@ -470,6 +490,7 @@ def test_fixedincome_government_eu_yield_curve(params, obb): ) @pytest.mark.integration def test_fixedincome_government_treasury_auctions(params, obb): + """Test the treasury auctions endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.government.treasury_auctions(**params) @@ -514,6 +535,7 @@ def test_fixedincome_government_treasury_auctions(params, obb): ) @pytest.mark.integration def test_fixedincome_government_treasury_prices(params, obb): + """Test the treasury prices endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.government.treasury_prices(**params) @@ -549,6 +571,7 @@ def test_fixedincome_government_treasury_prices(params, obb): ) @pytest.mark.integration def test_fixedincome_corporate_bond_prices(params, obb): + """Test the bond prices endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.fixedincome.corporate.bond_prices(**params) diff --git a/openbb_platform/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py b/openbb_platform/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py index feac9a5898e..0e232cb1cdb 100644 --- a/openbb_platform/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py +++ b/openbb_platform/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py @@ -18,7 +18,7 @@ from openbb_fixedincome.government.government_router import router as government from openbb_fixedincome.rate.rate_router import router as rate_router from openbb_fixedincome.spreads.spreads_router import router as spreads_router -router = Router(prefix="") +router = Router(prefix="", description="Fixed Income market data.") router.include_router(rate_router) router.include_router(spreads_router) router.include_router(government_router) diff --git a/openbb_platform/extensions/fixedincome/poetry.lock b/openbb_platform/extensions/fixedincome/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/extensions/fixedincome/poetry.lock +++ b/openbb_platform/extensions/fixedincome/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/fixedincome/pyproject.toml b/openbb_platform/extensions/fixedincome/pyproject.toml index 3b887303823..a0027750f20 100644 --- a/openbb_platform/extensions/fixedincome/pyproject.toml +++ b/openbb_platform/extensions/fixedincome/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-fixedincome" -version = "1.1.4" +version = "1.1.5" description = "Fixed income extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_fixedincome" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/index/integration/test_index_api.py b/openbb_platform/extensions/index/integration/test_index_api.py index 0b5006c80f5..c7ec360663d 100644 --- a/openbb_platform/extensions/index/integration/test_index_api.py +++ b/openbb_platform/extensions/index/integration/test_index_api.py @@ -1,3 +1,5 @@ +"""Test the index API endpoints.""" + import base64 import pytest @@ -9,6 +11,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -29,6 +32,7 @@ def headers(): ) @pytest.mark.integration def test_index_constituents(params, headers): + """Test the index constituents endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -114,6 +118,7 @@ def test_index_constituents(params, headers): ) @pytest.mark.integration def test_index_price_historical(params, headers): + """Test the index historical price endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -191,6 +196,7 @@ def test_index_price_historical(params, headers): @pytest.mark.integration @pytest.mark.skip(reason="Deprecating this endpoint") def test_index_market(params, headers): + """Test the index market endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -211,6 +217,7 @@ def test_index_market(params, headers): ) @pytest.mark.integration def test_index_available(params, headers): + """Test the index available endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -228,6 +235,7 @@ def test_index_available(params, headers): ) @pytest.mark.integration def test_index_search(params, headers): + """Test the index search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -246,6 +254,7 @@ def test_index_search(params, headers): ) @pytest.mark.integration def test_index_snapshots(params, headers): + """Test the index snapshots endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -272,6 +281,7 @@ def test_index_snapshots(params, headers): ) @pytest.mark.integration def test_index_sp500_multiples(params, headers): + """Test the index sp500 multiples endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -289,6 +299,7 @@ def test_index_sp500_multiples(params, headers): ) @pytest.mark.integration def test_index_sectors(params, headers): + """Test the index sectors endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/index/integration/test_index_python.py b/openbb_platform/extensions/index/integration/test_index_python.py index 1082fce00ba..af8d2b54983 100644 --- a/openbb_platform/extensions/index/integration/test_index_python.py +++ b/openbb_platform/extensions/index/integration/test_index_python.py @@ -28,6 +28,7 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements ) @pytest.mark.integration def test_index_constituents(params, obb): + """Test the index constituents endpoint.""" result = obb.index.constituents(**params) assert result assert isinstance(result, OBBject) @@ -110,6 +111,7 @@ def test_index_constituents(params, obb): ) @pytest.mark.integration def test_index_price_historical(params, obb): + """Test the index historical price endpoint.""" result = obb.index.price.historical(**params) assert result assert isinstance(result, OBBject) @@ -184,6 +186,7 @@ def test_index_price_historical(params, obb): @pytest.mark.integration @pytest.mark.skip(reason="Deprecating this endpoint") def test_index_market(params, obb): + """Test the index market endpoint.""" result = obb.index.market(**params) assert result assert isinstance(result, OBBject) @@ -202,6 +205,7 @@ def test_index_market(params, obb): ) @pytest.mark.integration def test_index_available(params, obb): + """Test the index available endpoint.""" result = obb.index.available(**params) assert result assert isinstance(result, OBBject) @@ -223,6 +227,7 @@ def test_index_available(params, obb): ) @pytest.mark.integration def test_index_search(params, obb): + """Test the index search endpoint.""" result = obb.index.search(**params) assert result assert isinstance(result, OBBject) @@ -238,6 +243,7 @@ def test_index_search(params, obb): ) @pytest.mark.integration def test_index_snapshots(params, obb): + """Test the index snapshots endpoint.""" result = obb.index.snapshots(**params) assert result assert isinstance(result, OBBject) @@ -261,6 +267,7 @@ def test_index_snapshots(params, obb): ) @pytest.mark.integration def test_index_sp500_multiples(params, obb): + """Test the index sp500 multiples endpoint.""" result = obb.index.sp500_multiples(**params) assert result assert isinstance(result, OBBject) @@ -275,6 +282,7 @@ def test_index_sp500_multiples(params, obb): ) @pytest.mark.integration def test_index_sectors(params, obb): + """Test the index sectors endpoint.""" result = obb.index.sectors(**params) assert result assert isinstance(result, OBBject) diff --git a/openbb_platform/extensions/index/openbb_index/index_router.py b/openbb_platform/extensions/index/openbb_index/index_router.py index 80c4b7bae5e..4ad7d393726 100644 --- a/openbb_platform/extensions/index/openbb_index/index_router.py +++ b/openbb_platform/extensions/index/openbb_index/index_router.py @@ -14,7 +14,7 @@ from openbb_core.app.router import Router from openbb_index.price.price_router import router as price_router -router = Router(prefix="") +router = Router(prefix="", description="Indices data.") router.include_router(price_router) # pylint: disable=unused-argument @@ -36,7 +36,7 @@ async def market( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Historical Market Indices.""" + """Get Historical Market Indices.""" return await OBBject.from_query(Query(**locals())) @@ -56,7 +56,7 @@ async def constituents( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Index Constituents.""" + """Get Index Constituents.""" return await OBBject.from_query(Query(**locals())) @@ -107,7 +107,7 @@ async def search( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Filters indices for rows containing the query.""" + """Filter indices for rows containing the query.""" return await OBBject.from_query(Query(**locals())) @@ -124,7 +124,7 @@ async def sp500_multiples( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Historical S&P 500 multiples and Shiller PE ratios.""" + """Get historical S&P 500 multiples and Shiller PE ratios.""" return await OBBject.from_query(Query(**locals())) @@ -138,5 +138,5 @@ async def sectors( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Index Sectors. Sector weighting of an index.""" + """Get Index Sectors. Sector weighting of an index.""" return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/index/poetry.lock b/openbb_platform/extensions/index/poetry.lock index 7f12dfce23c..f5cf8931f29 100644 --- a/openbb_platform/extensions/index/poetry.lock +++ b/openbb_platform/extensions/index/poetry.lock @@ -682,13 +682,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1401,4 +1401,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/index/pyproject.toml b/openbb_platform/extensions/index/pyproject.toml index 98784a0ee69..7589baac2ff 100644 --- a/openbb_platform/extensions/index/pyproject.toml +++ b/openbb_platform/extensions/index/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-index" -version = "1.1.4" +version = "1.1.5" description = "Index extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_index" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/news/integration/test_news_api.py b/openbb_platform/extensions/news/integration/test_news_api.py index 2b685a34857..fe8fc4dac53 100644 --- a/openbb_platform/extensions/news/integration/test_news_api.py +++ b/openbb_platform/extensions/news/integration/test_news_api.py @@ -1,3 +1,5 @@ +"""Test News API.""" + import base64 import pytest @@ -9,6 +11,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Generate headers for API requests with basic authentication.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -83,6 +86,7 @@ def headers(): ) @pytest.mark.integration def test_news_world(params, headers): + """Test retrieval of world news with various parameters.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -187,6 +191,7 @@ def test_news_world(params, headers): ) @pytest.mark.integration def test_news_company(params, headers): + """Test retrieval of company-specific news with various parameters.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/news/integration/test_news_python.py b/openbb_platform/extensions/news/integration/test_news_python.py index 38bbbbfded1..2b876d19391 100644 --- a/openbb_platform/extensions/news/integration/test_news_python.py +++ b/openbb_platform/extensions/news/integration/test_news_python.py @@ -82,6 +82,7 @@ def obb(pytestconfig): # pylint: disable=inconsistent-return-statements ) @pytest.mark.integration def test_news_world(params, obb): + """Test the news world endpoint.""" result = obb.news.world(**params) assert result assert isinstance(result, OBBject) @@ -172,6 +173,7 @@ def test_news_world(params, obb): ) @pytest.mark.integration def test_news_company(params, obb): + """Test the news company endpoint.""" params = {p: v for p, v in params.items() if v} result = obb.news.company(**params) diff --git a/openbb_platform/extensions/news/openbb_news/__init__.py b/openbb_platform/extensions/news/openbb_news/__init__.py index e69de29bb2d..5d818002605 100644 --- a/openbb_platform/extensions/news/openbb_news/__init__.py +++ b/openbb_platform/extensions/news/openbb_news/__init__.py @@ -0,0 +1 @@ +"""OpenBB News extension.""" diff --git a/openbb_platform/extensions/news/openbb_news/news_router.py b/openbb_platform/extensions/news/openbb_news/news_router.py index 1a964f363b9..bad1a7f21c4 100644 --- a/openbb_platform/extensions/news/openbb_news/news_router.py +++ b/openbb_platform/extensions/news/openbb_news/news_router.py @@ -12,7 +12,7 @@ from openbb_core.app.provider_interface import ( from openbb_core.app.query import Query from openbb_core.app.router import Router -router = Router(prefix="") +router = Router(prefix="", description="Financial market news data.") @router.command( diff --git a/openbb_platform/extensions/news/poetry.lock b/openbb_platform/extensions/news/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/extensions/news/poetry.lock +++ b/openbb_platform/extensions/news/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/extensions/news/pyproject.toml b/openbb_platform/extensions/news/pyproject.toml index 86899175603..ac1e05a120f 100644 --- a/openbb_platform/extensions/news/pyproject.toml +++ b/openbb_platform/extensions/news/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-news" -version = "1.1.4" +version = "1.1.5" description = "News extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_news" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/quantitative/README.md b/openbb_platform/extensions/quantitative/README.md index e6958f16ef6..b1193e287d5 100644 --- a/openbb_platform/extensions/quantitative/README.md +++ b/openbb_platform/extensions/quantitative/README.md @@ -11,7 +11,7 @@ This extension works nicely with a companion `openbb-charting` extension To install the extension, run the following command in this folder: ```bash -pip install openbb-qa +pip install openbb-quantitative ``` For development please check [Contribution Guidelines](https://github.com/OpenBB-finance/OpenBBTerminal/blob/develop/openbb_platform/CONTRIBUTING.md). diff --git a/openbb_platform/extensions/quantitative/integration/test_quantitative_api.py b/openbb_platform/extensions/quantitative/integration/test_quantitative_api.py index 57782126fc7..ce16394488b 100644 --- a/openbb_platform/extensions/quantitative/integration/test_quantitative_api.py +++ b/openbb_platform/extensions/quantitative/integration/test_quantitative_api.py @@ -1,3 +1,5 @@ +"""Integration tests for the quantitative extension.""" + import base64 import json import random @@ -15,6 +17,7 @@ data: dict = {} def get_headers(): + """Get the headers for the API request.""" if "headers" in data: return data["headers"] @@ -30,12 +33,13 @@ def request_data( menu: str, symbol: str, provider: str, start_date: str = "", end_date: str = "" ): """Randomly pick a symbol and a provider and get data from the selected menu.""" - url = f"http://0.0.0.0:8000/api/v1/{menu}/price/historical?symbol={symbol}&provider={provider}&start_date={start_date}&end_date={end_date}" + url = f"http://0.0.0.0:8000/api/v1/{menu}/price/historical?symbol={symbol}&provider={provider}&start_date={start_date}&end_date={end_date}" # pylint: disable=line-too-long # noqa: E501 result = requests.get(url, headers=get_headers(), timeout=10) return result.json()["results"] def get_stocks_data(): + """Get stocks data.""" if "stocks_data" in data: return data["stocks_data"] @@ -53,6 +57,7 @@ def get_stocks_data(): def get_crypto_data(): + """Get crypto data.""" if "crypto_data" in data: return data["crypto_data"] @@ -71,6 +76,7 @@ def get_crypto_data(): def get_data(menu: Literal["equity", "crypto"]): + """Get data based on the selected menu.""" funcs = {"equity": get_stocks_data, "crypto": get_crypto_data} return funcs[menu]() @@ -84,6 +90,7 @@ def get_data(menu: Literal["equity", "crypto"]): ) @pytest.mark.integration def test_quantitative_normality(params, data_type): + """Test the normality endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -103,6 +110,7 @@ def test_quantitative_normality(params, data_type): ) @pytest.mark.integration def test_quantitative_capm(params, data_type): + """Test the CAPM endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -138,6 +146,7 @@ def test_quantitative_capm(params, data_type): ) @pytest.mark.integration def test_quantitative_performance_omega_ratio(params, data_type): + """Test the Omega Ratio endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -157,6 +166,7 @@ def test_quantitative_performance_omega_ratio(params, data_type): ) @pytest.mark.integration def test_quantitative_rolling_kurtosis(params, data_type): + """Test the rolling kurtosis endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -192,6 +202,7 @@ def test_quantitative_rolling_kurtosis(params, data_type): ) @pytest.mark.integration def test_quantitative_unitroot_test(params, data_type): + """Test the unit root test endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -229,6 +240,7 @@ def test_quantitative_unitroot_test(params, data_type): ) @pytest.mark.integration def test_quantitative_performance_sharpe_ratio(params, data_type): + """Test the Sharpe Ratio endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -270,6 +282,7 @@ def test_quantitative_performance_sharpe_ratio(params, data_type): ) @pytest.mark.integration def test_quantitative_performance_sortino_ratio(params, data_type): + """Test the Sortino Ratio endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -290,6 +303,7 @@ def test_quantitative_performance_sortino_ratio(params, data_type): ) @pytest.mark.integration def test_quantitative_rolling_skew(params, data_type): + """Test the rolling skew endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -308,6 +322,7 @@ def test_quantitative_rolling_skew(params, data_type): ) @pytest.mark.integration def test_quantitative_rolling_variance(params, data_type): + """Test the rolling variance endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -326,6 +341,7 @@ def test_quantitative_rolling_variance(params, data_type): ) @pytest.mark.integration def test_quantitative_rolling_stdev(params, data_type): + """Test the rolling standard deviation endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -344,6 +360,7 @@ def test_quantitative_rolling_stdev(params, data_type): ) @pytest.mark.integration def test_quantitative_rolling_mean(params, data_type): + """Test the rolling mean endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -381,6 +398,7 @@ def test_quantitative_rolling_mean(params, data_type): ) @pytest.mark.integration def test_quantitative_rolling_quantile(params, data_type): + """Test the rolling quantile endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -400,6 +418,7 @@ def test_quantitative_rolling_quantile(params, data_type): ) @pytest.mark.integration def test_quantitative_summary(params, data_type): + """Test the summary endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -423,6 +442,7 @@ def test_quantitative_summary(params, data_type): ) @pytest.mark.integration def test_quantitative_stats_skew(params, data_type): + """Test the skew endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -441,6 +461,7 @@ def test_quantitative_stats_skew(params, data_type): ) @pytest.mark.integration def test_quantitative_stats_kurtosis(params, data_type): + """Test the kurtosis endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -459,6 +480,7 @@ def test_quantitative_stats_kurtosis(params, data_type): ) @pytest.mark.integration def test_quantitative_stats_mean(params, data_type): + """Test the mean endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -477,6 +499,7 @@ def test_quantitative_stats_mean(params, data_type): ) @pytest.mark.integration def test_quantitative_stats_stdev(params, data_type): + """Test the standard deviation endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -495,6 +518,7 @@ def test_quantitative_stats_stdev(params, data_type): ) @pytest.mark.integration def test_quantitative_stats_variance(params, data_type): + """Test the variance endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) @@ -530,6 +554,7 @@ def test_quantitative_stats_variance(params, data_type): ) @pytest.mark.integration def test_quantitative_stats_quantile(params, data_type): + """Test the quantile endpoint.""" params = {p: v for p, v in params.items() if v} data = json.dumps(get_data(data_type)) diff --git a/openbb_platform/extensions/quantitative/integration/test_quantitative_python.py b/openbb_platform/extensions/quantitative/integration/test_quantitative_python.py index f9fd73b832d..4a2433e8ba7 100644 --- a/openbb_platform/extensions/quantitative/integration/test_quantitative_python.py +++ b/openbb_platform/extensions/quantitative/integration/test_quantitative_python.py @@ -24,6 +24,7 @@ data: dict = {} def get_stocks_data(): + """Get stocks data.""" import openbb # pylint:disable=import-outside-toplevel if "stocks_data" in data: @@ -39,6 +40,7 @@ def get_stocks_data(): def get_crypto_data(): + """Get crypto data.""" import openbb # pylint:disable=import-outside-toplevel if "crypto_data" in data: @@ -55,6 +57,7 @@ def get_crypto_data(): def get_data(menu: Literal["equity", "crypto"]): + """Get data.""" funcs = {"equity": get_stocks_data, "crypto": get_crypto_data} return funcs[menu]() @@ -68,6 +71,7 @@ def get_data(menu: Literal["equity", "crypto"]): ) @pytest.mark.integration def test_quantitative_normality(params, data_type, obb): + """Test normality.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -85,6 +89,7 @@ def test_quantitative_normality(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_capm(params, data_type, obb): + """Test capm.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -118,6 +123,7 @@ def test_quantitative_capm(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_performance_omega_ratio(params, data_type, obb): + """Test omega ratio.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -135,6 +141,7 @@ def test_quantitative_performance_omega_ratio(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_rolling_kurtosis(params, data_type, obb): + """Test rolling kurtosis.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -169,6 +176,7 @@ def test_quantitative_rolling_kurtosis(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_unitroot_test(params, data_type, obb): + """Test unitroot test.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -204,6 +212,7 @@ def test_quantitative_unitroot_test(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_performance_sharpe_ratio(params, data_type, obb): + """Test sharpe ratio.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -241,6 +250,7 @@ def test_quantitative_performance_sharpe_ratio(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_performance_sortino_ratio(params, data_type, obb): + """Test sortino ratio.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -257,6 +267,7 @@ def test_quantitative_performance_sortino_ratio(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_rolling_skew(params, data_type, obb): + """Test rolling skew.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -293,6 +304,7 @@ def test_quantitative_rolling_skew(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_rolling_quantile(params, data_type, obb): + """Test rolling quantile.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -311,6 +323,7 @@ def test_quantitative_rolling_quantile(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_summary(params, data_type, obb): + """Test summary.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -344,6 +357,7 @@ def test_quantitative_summary(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_rolling_stdev(params, data_type, obb): + """Test rolling stdev.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -378,6 +392,7 @@ def test_quantitative_rolling_stdev(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_rolling_mean(params, data_type, obb): + """Test rolling mean.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -412,6 +427,7 @@ def test_quantitative_rolling_mean(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_rolling_variance(params, data_type, obb): + """Test rolling variance.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -429,6 +445,7 @@ def test_quantitative_rolling_variance(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_stats_skew(params, data_type, obb): + """Test skew.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -446,6 +463,7 @@ def test_quantitative_stats_skew(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_stats_kurtosis(params, data_type, obb): + """Test kurtosis.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -463,6 +481,7 @@ def test_quantitative_stats_kurtosis(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_stats_variance(params, data_type, obb): + """Test variance.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -480,6 +499,7 @@ def test_quantitative_stats_variance(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_stats_stdev(params, data_type, obb): + """Test stdev.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -497,6 +517,7 @@ def test_quantitative_stats_stdev(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_stats_mean(params, data_type, obb): + """Test mean.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -529,6 +550,7 @@ def test_quantitative_stats_mean(params, data_type, obb): ) @pytest.mark.integration def test_quantitative_stats_quantile(params, data_type, obb): + """Test quantile.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) diff --git a/openbb_platform/extensions/quantitative/openbb_quantitative/performance/performance_router.py b/openbb_platform/extensions/quantitative/openbb_quantitative/performance/performance_router.py index 025df52bb20..1f5110cc409 100644 --- a/openbb_platform/extensions/quantitative/openbb_quantitative/performance/performance_router.py +++ b/openbb_platform/extensions/quantitative/openbb_quantitative/performance/performance_router.py @@ -1,3 +1,5 @@ +"""OpenBB Performance Extension router.""" + from typing import List import numpy as np diff --git a/openbb_platform/extensions/quantitative/openbb_quantitative/quantitative_router.py b/openbb_platform/extensions/quantitative/openbb_quantitative/quantitative_router.py index 0065ec62011..9ccd89d550a 100644 --- a/openbb_platform/extensions/quantitative/openbb_quantitative/quantitative_router.py +++ b/openbb_platform/extensions/quantitative/openbb_quantitative/quantitative_router.py @@ -30,7 +30,7 @@ from .models import ( UnitRootModel, ) -router = Router(prefix="") +router = Router(prefix="", description="Quantitative analysis tools.") router.include_router(rolling_router) router.include_router(stats_router) router.include_router(performance_router) diff --git a/openbb_platform/extensions/quantitative/openbb_quantitative/rolling/rolling_router.py b/openbb_platform/extensions/quantitative/openbb_quantitative/rolling/rolling_router.py index 34ef9be67a1..8bcfaa05143 100644 --- a/openbb_platform/extensions/quantitative/openbb_quantitative/rolling/rolling_router.py +++ b/openbb_platform/extensions/quantitative/openbb_quantitative/rolling/rolling_router.py @@ -376,8 +376,7 @@ def quantile( def mean( data: List[Data], target: str, window: PositiveInt = 21, index: str = "date" ) -> OBBject[List[Data]]: - """ - Calculate the rolling mean (average) of a target column within a given window size. + """Calculate the rolling average of a target column within a given window size. The rolling mean is a simple moving average that calculates the average of a target variable over a specified window. This function is widely used in financial analysis to smooth short-term fluctuations and highlight longer-term trends diff --git a/openbb_platform/extensions/quantitative/openbb_quantitative/statistics.py b/openbb_platform/extensions/quantitative/openbb_quantitative/statistics.py index db137ac77cf..e3339107364 100644 --- a/openbb_platform/extensions/quantitative/openbb_quantitative/statistics.py +++ b/openbb_platform/extensions/quantitative/openbb_quantitative/statistics.py @@ -1,4 +1,4 @@ -"""Statistics Functions""" +"""Statistics Functions.""" from typing import Union @@ -16,26 +16,32 @@ from scipy import stats def kurtosis_(data: Union[DataFrame, Series, ndarray]) -> float: - """Kurtosis is a measure of the "tailedness" of the probability distribution of a real-valued random variable.""" + """Get Kurtosis. + + It is a measure of the "tailedness" of the probability distribution of a real-valued random variable. + """ return stats.kurtosis(data) def skew_(data: Union[DataFrame, Series, ndarray]) -> float: - """Skewness is a measure of the asymmetry of the probability distribution of a - real-valued random variable about its mean.""" + """Get Skewness. + + It is a measure of the asymmetry of the probability distribution of a + real-valued random variable about its mean. + """ return stats.skew(data) def mean_(data: Union[DataFrame, Series, ndarray]) -> float: - """Mean is the average of the numbers.""" + """Get Mean which is the average of the numbers.""" return mean_np(data) def std_dev_(data: Union[DataFrame, Series, ndarray]) -> float: - """Standard deviation is a measure of the amount of variation or dispersion of a set of values.""" + """Get Standard deviation that is a measure of the amount of variation or dispersion of a set of values.""" return std(data) def var_(data: Union[DataFrame, Series, ndarray]) -> float: - """Variance is a measure of the amount of variation or dispersion of a set of values.""" + """Get Variance that is a measure of the amount of variation or dispersion of a set of values.""" return var_np(data) diff --git a/openbb_platform/extensions/quantitative/openbb_quantitative/stats/stats_router.py b/openbb_platform/extensions/quantitative/openbb_quantitative/stats/stats_router.py index 68be4b675cf..2b32123aaac 100644 --- a/openbb_platform/extensions/quantitative/openbb_quantitative/stats/stats_router.py +++ b/openbb_platform/extensions/quantitative/openbb_quantitative/stats/stats_router.py @@ -101,8 +101,7 @@ def skew( ], ) def variance(data: List[Data], target: str) -> OBBject[List[Data]]: - """ - Calculate the variance of a target column. + """Calculate the variance of a target column. Variance measures the dispersion of a set of data points around their mean. It is a key metric for assessing the volatility and stability of financial returns or other time series data. @@ -150,8 +149,7 @@ def variance(data: List[Data], target: str) -> OBBject[List[Data]]: ], ) def stdev(data: List[Data], target: str) -> OBBject[List[Data]]: - """ - Calculate the rolling standard deviation of a target column. + """Calculate the rolling standard deviation of a target column. Standard deviation is a measure of the amount of variation or dispersion of a set of values. It is widely used to assess the risk and volatility of financial returns or other time series data @@ -200,8 +198,7 @@ def stdev(data: List[Data], target: str) -> OBBject[List[Data]]: ], ) def kurtosis(data: List[Data], target: str) -> OBBject[List[Data]]: - """ - Calculate the rolling kurtosis of a target column. + """Calculate the rolling kurtosis of a target column. Kurtosis measures the "tailedness" of the probability distribution of a real-valued random variable. High kurtosis indicates a distribution with heavy tails (outliers), suggesting a higher risk of extreme outcomes. @@ -255,8 +252,7 @@ def quantile( target: str, quantile_pct: NonNegativeFloat = 0.5, ) -> OBBject[List[Data]]: - """ - Calculate the quantile of a target column at a specified quantile percentage. + """Calculate the quantile of a target column at a specified quantile percentage. Quantiles are points dividing the range of a probability distribution into intervals with equal probabilities, or dividing the sample in the same way. @@ -312,8 +308,7 @@ def mean( data: List[Data], target: str, ) -> OBBject[List[Data]]: - """ - Calculate the mean (average) of a target column. + """Calculate the average of a target column. The rolling mean is a simple moving average that calculates the average of a target variable. This function is widely used in financial analysis to smooth short-term fluctuations and highlight longer-term trends diff --git a/openbb_platform/extensions/quantitative/poetry.lock b/openbb_platform/extensions/quantitative/poetry.lock index 9a36a8bfa16..550b59aa7cf 100644 --- a/openbb_platform/extensions/quantitative/poetry.lock +++ b/openbb_platform/extensions/quantitative/poetry.lock @@ -682,13 +682,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1538,4 +1538,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "104e6ac1cefb99e4d26f8bab3324422380c3e2bf884179d1bea5b0eede7ba294" +content-hash = "0a8ed0269b904ec3ca1254469e4d0bbfccc50252d668bf752acb02191b0918ad" diff --git a/openbb_platform/extensions/quantitative/pyproject.toml b/openbb_platform/extensions/quantitative/pyproject.toml index 8b0a5b376a0..37d4f4b2d3b 100644 --- a/openbb_platform/extensions/quantitative/pyproject.toml +++ b/openbb_platform/extensions/quantitative/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-quantitative" -version = "1.1.4" +version = "1.1.5" description = "Quantitative Analysis extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -11,7 +11,7 @@ python = ">=3.8,<3.12" # scipy forces python <4.0 explicitly scipy = "^1.10.1" statsmodels = "^0.14.0" pandas-ta = "^0.3.14b" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/quantitative/tests/test_quantitative_helpers.py b/openbb_platform/extensions/quantitative/tests/test_quantitative_helpers.py index 82f6ae52b15..8a175957a0a 100644 --- a/openbb_platform/extensions/quantitative/tests/test_quantitative_helpers.py +++ b/openbb_platform/extensions/quantitative/tests/test_quantitative_helpers.py @@ -7,6 +7,7 @@ from extensions.quantitative.openbb_quantitative.helpers import ( def test_validate_window(): + """Test the validate_window function.""" input_data = pd.Series(range(1, 100)) validate_window( input_data=input_data, diff --git a/openbb_platform/extensions/quantitative/tests/test_statistics.py b/openbb_platform/extensions/quantitative/tests/test_statistics.py index 11c1ce2ec43..d1a34e30c8c 100644 --- a/openbb_platform/extensions/quantitative/tests/test_statistics.py +++ b/openbb_platform/extensions/quantitative/tests/test_statistics.py @@ -1,3 +1,5 @@ +"""Tests for the statistics module.""" + import pandas as pd import pytest from openbb_quantitative.statistics import kurtosis_, mean_, skew_, std_dev_, var_ @@ -6,20 +8,25 @@ test_data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) def test_kurtosis(): + """Test the kurtosis function.""" assert kurtosis_(test_data) == pytest.approx(-1.224, abs=1e-3) def test_skew(): + """Test the skewness function.""" assert skew_(test_data) == pytest.approx(0.0, abs=1e-3) def test_std_dev(): + """Test the standard deviation function.""" assert std_dev_(test_data) == pytest.approx(2.872, abs=1e-3) def test_mean(): + """Test the mean function.""" assert mean_(test_data) == pytest.approx(5.5, abs=1e-3) def test_var(): + """Test the variance function.""" assert var_(test_data) == pytest.approx(8.25, abs=1e-3) diff --git a/openbb_platform/extensions/regulators/integration/test_regulators_api.py b/openbb_platform/extensions/regulators/integration/test_regulators_api.py index 997ce2a2a70..0ea5fa5a8f2 100644 --- a/openbb_platform/extensions/regulators/integration/test_regulators_api.py +++ b/openbb_platform/extensions/regulators/integration/test_regulators_api.py @@ -1,3 +1,5 @@ +"""Integration tests for the regulators API.""" + import base64 import pytest @@ -9,6 +11,7 @@ from openbb_core.provider.utils.helpers import get_querystring @pytest.fixture(scope="session") def headers(): + """Get the headers for the API request.""" userpass = f"{Env().API_USERNAME}:{Env().API_PASSWORD}" userpass_bytes = userpass.encode("ascii") base64_bytes = base64.b64encode(userpass_bytes) @@ -28,6 +31,7 @@ def headers(): ) @pytest.mark.integration def test_regulators_sec_cik_map(params, headers): + """Test the SEC CIK map endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -45,6 +49,7 @@ def test_regulators_sec_cik_map(params, headers): ) @pytest.mark.integration def test_regulators_sec_institutions_search(params, headers): + """Test the SEC institutions search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -70,6 +75,7 @@ def test_regulators_sec_institutions_search(params, headers): ) @pytest.mark.integration def test_regulators_sec_schema_files(params, headers): + """Test the SEC schema files endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -88,6 +94,7 @@ def test_regulators_sec_schema_files(params, headers): ) @pytest.mark.integration def test_regulators_sec_symbol_map(params, headers): + """Test the SEC symbol map endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -103,6 +110,7 @@ def test_regulators_sec_symbol_map(params, headers): ) @pytest.mark.integration def test_regulators_sec_rss_litigation(params, headers): + """Test the SEC RSS litigation endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -118,6 +126,7 @@ def test_regulators_sec_rss_litigation(params, headers): ) @pytest.mark.integration def test_regulators_sec_sic_search(params, headers): + """Test the SEC SIC search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -135,6 +144,7 @@ def test_regulators_sec_sic_search(params, headers): ) @pytest.mark.integration def test_regulators_cftc_cot_search(params, headers): + """Test the CFTC COT search endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -165,6 +175,7 @@ def test_regulators_cftc_cot_search(params, headers): ) @pytest.mark.integration def test_regulators_cftc_cot(params, headers): + """Test the CFTC COT endpoint.""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) diff --git a/openbb_platform/extensions/regulators/integration/test_regulators_python.py b/openbb_platform/extensions/regulators/integration/test_regulators_python.py index 6e5ce886686..77c2e811f53 100644 --- a/openbb_platform/extensions/regulators/integration/test_regulators_python.py +++ b/openbb_platform/extensions/regulators/integration/test_regulators_python.py @@ -28,6 +28,7 @@ def obb(pytestconfig): ) @pytest.mark.integration def test_regulators_sec_cik_map(params, obb): + """Test the SEC CIK map endpoint.""" result = obb.regulators.sec.cik_map(**params) assert result assert isinstance(result, OBBject) @@ -43,6 +44,7 @@ def test_regulators_sec_cik_map(params, obb): ) @pytest.mark.integration def test_regulators_sec_institutions_search(params, obb): + """Test the SEC institutions search endpoint.""" result = obb.regulators.sec.institutions_search(**params) assert result assert isinstance(result, OBBject) @@ -72,6 +74,7 @@ def test_regulators_sec_institutions_search(params, obb): ) @pytest.mark.integration def test_regulators_sec_schema_files(params, obb): + """Test the SEC schema files endpoint.""" result = obb.regulators.sec.schema_files(**params) assert result assert isinstance(result, OBBject) @@ -87,6 +90,7 @@ def test_regulators_sec_schema_files(params, obb): ) @pytest.mark.integration def test_regulators_sec_symbol_map(params, obb): + """Test the SEC symbol map endpoint.""" result = obb.regulators.sec.symbol_map(**params) assert result assert isinstance(result, OBBject) @@ -100,6 +104,7 @@ def test_regulators_sec_symbol_map(params, obb): ) @pytest.mark.integration def test_regulators_sec_rss_litigation(params, obb): + """Test the SEC RSS litigation endpoint.""" result = obb.regulators.sec.rss_litigation(**params) assert result assert isinstance(result, OBBject) @@ -112,6 +117,7 @@ def test_regulators_sec_rss_litigation(params, obb): ) @pytest.mark.integration def test_regulators_sec_sic_search(params, obb): + """Test the SEC SIC search endpoint.""" result = obb.regulators.sec.sic_search(**params) assert result assert isinstance(result, OBBject) @@ -126,6 +132,7 @@ def test_regulators_sec_sic_search(params, obb): ) @pytest.mark.integration def test_regulators_cftc_cot_search(params, obb): + """Test the CFTC COT search endpoint.""" result = obb.regulators.cftc.cot_search(**params) assert result assert isinstance(result, OBBject) @@ -153,6 +160,7 @@ def test_regulators_cftc_cot_search(params, obb): ) @pytest.mark.integration def test_regulators_cftc_cot(params, obb): + """Test the CFTC COT endpoint.""" result = obb.regulators.cftc.cot(**params) assert result assert isinstance(result, OBBject) diff --git a/openbb_platform/extensions/regulators/openbb_regulators/__init__.py b/openbb_platform/extensions/regulators/openbb_regulators/__init__.py index e69de29bb2d..4167ad3a36f 100644 --- a/openbb_platform/extensions/regulators/openbb_regulators/__init__.py +++ b/openbb_platform/extensions/regulators/openbb_regulators/__init__.py @@ -0,0 +1 @@ +"""OpenBB Regulators Extension.""" diff --git a/openbb_platform/extensions/regulators/openbb_regulators/cftc/cftc_router.py b/openbb_platform/extensions/regulators/openbb_regulators/cftc/cftc_router.py index eb5e1e642aa..b2a62a7ec42 100644 --- a/openbb_platform/extensions/regulators/openbb_regulators/cftc/cftc_router.py +++ b/openbb_platform/extensions/regulators/openbb_regulators/cftc/cftc_router.py @@ -59,5 +59,5 @@ async def cot( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """Commitment of Traders Reports.""" + """Get Commitment of Traders Reports.""" return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/regulators/openbb_regulators/regulators_router.py b/openbb_platform/extensions/regulators/openbb_regulators/regulators_router.py index 0a5a33f07dc..c9ad4217950 100644 --- a/openbb_platform/extensions/regulators/openbb_regulators/regulators_router.py +++ b/openbb_platform/extensions/regulators/openbb_regulators/regulators_router.py @@ -11,6 +11,6 @@ from .cftc.cftc_router import ( ) from .sec.sec_router import router as sec_router -router = Router(prefix="") +router = Router(prefix="", description="Financial market regulators data.") router.include_router(sec_router) router.include_router(cftc_router) diff --git a/openbb_platform/extensions/regulators/openbb_regulators/sec/__init__.py b/openbb_platform/extensions/regulators/openbb_regulators/sec/__init__.py index e69de29bb2d..4f3fc3a22e7 100644 --- a/openbb_platform/extensions/regulators/openbb_regulators/sec/__init__.py +++ b/openbb_platform/extensions/regulators/openbb_regulators/sec/__init__.py @@ -0,0 +1 @@ +"""Regulators for the SEC init.""" diff --git a/openbb_platform/extensions/regulators/openbb_regulators/sec/sec_router.py b/openbb_platform/extensions/regulators/openbb_regulators/sec/sec_router.py index df212ad35c7..6129d346c87 100644 --- a/openbb_platform/extensions/regulators/openbb_regulators/sec/sec_router.py +++ b/openbb_platform/extensions/regulators/openbb_regulators/sec/sec_router.py @@ -80,7 +80,7 @@ async def schema_files( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """A tool for navigating the directory of SEC XML schema files by year.""" + """Use tool for navigating the directory of SEC XML schema files by year.""" return await OBBject.from_query(Query(**locals())) @@ -108,7 +108,7 @@ async def rss_litigation( standard_params: StandardParams, extra_params: ExtraParams, ) -> OBBject: - """The RSS feed provides links to litigation releases concerning civil lawsuits brought by the Commission in federal court.""" # noqa: E501 pylint: disable=C0301 + """Get the RSS feed that provides links to litigation releases concerning civil lawsuits brought by the Commission in federal court.""" # noqa: E501 pylint: disable=C0301 return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/extensions/regulators/poetry.lock b/openbb_platform/extensions/regulators/poetry.lock index d556c640c19..9119c69fb52 100644 --- a/openbb_platform/extensions/regulators/poetry.lock +++ b/openbb_platform/extensions/regulators/poetry.lock @@ -678,13 +678,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1397,4 +1397,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "75f551243cc84ea3dcba416d86f4ef5669b5b8b5fcf4781a0d8e3e69360b28e4" +content-hash = "df0539c34df30b9f361fb9099e221e5a86ba5c1ea1451a0748d7b87dba2203b0" diff --git a/openbb_platform/extensions/regulators/pyproject.toml b/openbb_platform/extensions/regulators/pyproject.toml index f80ceb1db42..81479ba934b 100644 --- a/openbb_platform/extensions/regulators/pyproject.toml +++ b/openbb_platform/extensions/regulators/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-regulators" -version = "1.1.4" +version = "1.1.5" description = "Markets and Agency Regulators extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_regulators" }] [tool.poetry.dependencies] python = ">=3.8,<3.12" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/technical/integration/test_technical_api.py b/openbb_platform/extensions/technical/integration/test_technical_api.py index 2fec3060fa0..481fce9f356 100644 --- a/openbb_platform/extensions/technical/integration/test_technical_api.py +++ b/openbb_platform/extensions/technical/integration/test_technical_api.py @@ -1,3 +1,5 @@ +"""Test technical api.""" + import base64 import json import random @@ -957,3 +959,42 @@ def test_technical_ema(params, data_type): result = requests.post(url, headers=get_headers(), timeout=10, data=body) assert isinstance(result, requests.Response) assert result.status_code == 200 + + +@parametrize( + "params", + [ + ( + { + "data": "", + "study": "price", + "benchmark": "SPY", + "long_period": 252, + "short_period": 21, + "window": 21, + "trading_periods": 252, + "chart_params": {"show_tails": False}, + } + ), + ], +) +@pytest.mark.integration +def test_technical_relative_rotation(params): + params = {p: v for p, v in params.items() if v} + data_params = dict( + symbol="AAPL,MSFT,GOOGL,AMZN,SPY", + provider="yfinance", + start_date="2022-01-01", + end_date="2024-01-01", + ) + data_query_str = get_querystring(data_params, []) + data_url = f"http://0.0.0.0:8000/api/v1/equity/price/historical?{data_query_str}" + data_result = requests.get(data_url, headers=get_headers(), timeout=10).json()[ + "results" + ] + body = json.dumps({"data": data_result}) + query_str = get_querystring(params, ["data"]) + url = f"http://0.0.0.0:8000/api/v1/technical/relative_rotation?{query_str}" + result = requests.post(url, headers=get_headers(), timeout=10, data=body) + assert isinstance(result, requests.Response) + assert result.status_code == 200 diff --git a/openbb_platform/extensions/technical/integration/test_technical_python.py b/openbb_platform/extensions/technical/integration/test_technical_python.py index ab51354904e..d866c3623c8 100644 --- a/openbb_platform/extensions/technical/integration/test_technical_python.py +++ b/openbb_platform/extensions/technical/integration/test_technical_python.py @@ -24,6 +24,7 @@ data: dict = {} def get_stocks_data(): + """Get stocks data.""" import openbb # pylint:disable=import-outside-toplevel if "stocks_data" in data: @@ -39,6 +40,7 @@ def get_stocks_data(): def get_crypto_data(): + """Get crypto data.""" import openbb # pylint:disable=import-outside-toplevel if "crypto_data" in data: @@ -55,6 +57,7 @@ def get_crypto_data(): def get_data(menu: Literal["stocks", "crypto"]): + """Get data.""" funcs = {"stocks": get_stocks_data, "crypto": get_crypto_data} return funcs[menu]() @@ -88,6 +91,7 @@ def get_data(menu: Literal["stocks", "crypto"]): ) @pytest.mark.integration def test_technical_atr(params, data_type, obb): + """Test atr.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -126,6 +130,7 @@ def test_technical_atr(params, data_type, obb): ) @pytest.mark.integration def test_technical_fib(params, data_type, obb): + """Test fib.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -144,6 +149,7 @@ def test_technical_fib(params, data_type, obb): ) @pytest.mark.integration def test_technical_obv(params, data_type, obb): + """Test obv.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -162,6 +168,7 @@ def test_technical_obv(params, data_type, obb): ) @pytest.mark.integration def test_technical_fisher(params, data_type, obb): + """Test fisher.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -198,6 +205,7 @@ def test_technical_fisher(params, data_type, obb): ) @pytest.mark.integration def test_technical_adosc(params, data_type, obb): + """Test adosc.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -238,6 +246,7 @@ def test_technical_adosc(params, data_type, obb): ) @pytest.mark.integration def test_technical_bbands(params, data_type, obb): + """Test bbands.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -274,6 +283,7 @@ def test_technical_bbands(params, data_type, obb): ) @pytest.mark.integration def test_technical_zlma(params, data_type, obb): + """Test zlma.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -300,6 +310,7 @@ def test_technical_zlma(params, data_type, obb): ) @pytest.mark.integration def test_technical_aroon(params, data_type, obb): + """Test aroon.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -336,6 +347,7 @@ def test_technical_aroon(params, data_type, obb): ) @pytest.mark.integration def test_technical_sma(params, data_type, obb): + """Test sma.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -374,6 +386,7 @@ def test_technical_sma(params, data_type, obb): ) @pytest.mark.integration def test_technical_demark(params, data_type, obb): + """Test demark.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -392,6 +405,7 @@ def test_technical_demark(params, data_type, obb): ) @pytest.mark.integration def test_technical_vwap(params, data_type, obb): + """Test vwap.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -430,6 +444,7 @@ def test_technical_vwap(params, data_type, obb): ) @pytest.mark.integration def test_technical_macd(params, data_type, obb): + """Test macd.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -466,6 +481,7 @@ def test_technical_macd(params, data_type, obb): ) @pytest.mark.integration def test_technical_hma(params, data_type, obb): + """Test hma.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -502,6 +518,7 @@ def test_technical_hma(params, data_type, obb): ) @pytest.mark.integration def test_technical_donchian(params, data_type, obb): + """Test donchian.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -542,6 +559,7 @@ def test_technical_donchian(params, data_type, obb): ) @pytest.mark.integration def test_technical_ichimoku(params, data_type, obb): + """Test ichimoku.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -568,6 +586,7 @@ def test_technical_ichimoku(params, data_type, obb): ) @pytest.mark.integration def test_technical_clenow(params, data_type, obb): + """Test clenow.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -604,6 +623,7 @@ def test_technical_clenow(params, data_type, obb): ) @pytest.mark.integration def test_technical_adx(params, data_type, obb): + """Test adx.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -622,6 +642,7 @@ def test_technical_adx(params, data_type, obb): ) @pytest.mark.integration def test_technical_ad(params, data_type, obb): + """Test ad.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -658,6 +679,7 @@ def test_technical_ad(params, data_type, obb): ) @pytest.mark.integration def test_technical_wma(params, data_type, obb): + """Test wma.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -684,6 +706,7 @@ def test_technical_wma(params, data_type, obb): ) @pytest.mark.integration def test_technical_cci(params, data_type, obb): + """Test cci.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -722,6 +745,7 @@ def test_technical_cci(params, data_type, obb): ) @pytest.mark.integration def test_technical_rsi(params, data_type, obb): + """Test rsi.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -758,6 +782,7 @@ def test_technical_rsi(params, data_type, obb): ) @pytest.mark.integration def test_technical_stoch(params, data_type, obb): + """Test stoch.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -796,6 +821,7 @@ def test_technical_stoch(params, data_type, obb): ) @pytest.mark.integration def test_technical_kc(params, data_type, obb): + """Test kc.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -814,6 +840,7 @@ def test_technical_kc(params, data_type, obb): ) @pytest.mark.integration def test_technical_cg(params, data_type, obb): + """Test cg.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -854,6 +881,7 @@ def test_technical_cg(params, data_type, obb): ) @pytest.mark.integration def test_technical_cones(params, data_type, obb): + """Test cones.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -890,6 +918,7 @@ def test_technical_cones(params, data_type, obb): ) @pytest.mark.integration def test_technical_ema(params, data_type, obb): + """Test ema.""" params = {p: v for p, v in params.items() if v} params["data"] = get_data(data_type) @@ -897,3 +926,45 @@ def test_technical_ema(params, data_type, obb): assert result assert isinstance(result, OBBject) assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ( + { + "data": "", + "study": "price", + "benchmark": "SPY", + "long_period": 252, + "short_period": 21, + "window": 21, + "trading_periods": 252, + "chart_params": {"show_tails": False}, + } + ), + ], +) +@pytest.mark.integration +def test_technical_relative_rotation(params, obb): + params["data"] = obb.equity.price.historical( + "AAPL,MSFT,GOOGL,AMZN,SPY", + provider="yfinance", + start_date="2022-01-01", + end_date="2024-01-01", + ).results + result = obb.technical.relative_rotation( + data=params["data"], + benchmark=params["benchmark"], + study=params["study"], + long_period=params["long_period"], + short_period=params["short_period"], + window=params["window"], + trading_periods=params["trading_periods"], + ) + assert result + assert isinstance(result, OBBject) + assert hasattr(result.results, "rs_ratios") + assert len(result.results.rs_ratios) > 0 # type: ignore + assert hasattr(result.results, "rs_momentum") + assert len(result.results.rs_momentum) > 0 # type: ignore diff --git a/openbb_platform/extensions/technical/openbb_technical/helpers.py b/openbb_platform/extensions/technical/openbb_technical/helpers.py index 948a32fede3..7c7fec91dc7 100644 --- a/openbb_platform/extensions/technical/openbb_technical/helpers.py +++ b/openbb_platform/extensions/technical/openbb_technical/helpers.py @@ -1,13 +1,11 @@ """Technical Analysis Helpers.""" -import warnings from typing import Any, List, Literal, Optional, Tuple, Union +from warnings import warn import numpy as np import pandas as pd -_warn = warnings.warn - def validate_data(data: list, length: Union[int, List[int]]) -> None: """Validate data.""" @@ -51,11 +49,11 @@ def parkinson( Dataframe with results. """ if window < 1: - _warn("Error: Window must be at least 1, defaulting to 30.") + warn("Error: Window must be at least 1, defaulting to 30.") window = 30 if trading_periods and is_crypto: - _warn("is_crypto is overridden by trading_periods.") + warn("is_crypto is overridden by trading_periods.") if not trading_periods: trading_periods = 365 if is_crypto else 252 @@ -82,7 +80,7 @@ def standard_deviation( is_crypto: bool = False, clean: bool = True, ) -> pd.DataFrame: - """Standard deviation. + """Calculate the Standard deviation. Measures how widely returns are dispersed from the average return. It is the most common (and biased) estimator of volatility. @@ -106,11 +104,11 @@ def standard_deviation( Dataframe with results. """ if window < 2: - _warn("Error: Window must be at least 2, defaulting to 30.") + warn("Error: Window must be at least 2, defaulting to 30.") window = 30 if trading_periods and is_crypto: - _warn("is_crypto is overridden by trading_periods.") + warn("is_crypto is overridden by trading_periods.") if not trading_periods: trading_periods = 365 if is_crypto else 252 @@ -159,11 +157,11 @@ def garman_klass( Dataframe with results. """ if window < 1: - _warn("Error: Window must be at least 1, defaulting to 30.") + warn("Error: Window must be at least 1, defaulting to 30.") window = 30 if trading_periods and is_crypto: - _warn("is_crypto is overridden by trading_periods.") + warn("is_crypto is overridden by trading_periods.") if not trading_periods: trading_periods = 365 if is_crypto else 252 @@ -220,11 +218,11 @@ def hodges_tompkins( >>> df = obb.technical.hodges_tompkins(data, is_crypto = True) """ if window < 2: - _warn("Error: Window must be at least 2, defaulting to 30.") + warn("Error: Window must be at least 2, defaulting to 30.") window = 30 if trading_periods and is_crypto: - _warn("is_crypto is overridden by trading_periods.") + warn("is_crypto is overridden by trading_periods.") if not trading_periods: trading_periods = 365 if is_crypto else 252 @@ -280,11 +278,11 @@ def rogers_satchell( Pandas Series with results. """ if window < 1: - _warn("Error: Window must be at least 1, defaulting to 30.") + warn("Error: Window must be at least 1, defaulting to 30.") window = 30 if trading_periods and is_crypto: - _warn("is_crypto is overridden by trading_periods.") + warn("is_crypto is overridden by trading_periods.") if not trading_periods: trading_periods = 365 if is_crypto else 252 @@ -337,11 +335,11 @@ def yang_zhang( Dataframe with results. """ if window < 2: - _warn("Error: Window must be at least 2, defaulting to 30.") + warn("Error: Window must be at least 2, defaulting to 30.") window = 30 if trading_periods and is_crypto: - _warn("is_crypto is overridden by trading_periods.") + warn("is_crypto is overridden by trading_periods.") if not trading_periods: trading_periods = 365 if is_crypto else 252 @@ -547,12 +545,12 @@ def calculate_fib_levels( if start_date and end_date: if start_date not in data.index: date0 = data.index[data.index.get_indexer([end_date], method="nearest")[0]] - _warn(f"Start date not in data. Using nearest: {date0}") + warn(f"Start date not in data. Using nearest: {date0}") else: date0 = start_date if end_date not in data.index: date1 = data.index[data.index.get_indexer([end_date], method="nearest")[0]] - _warn(f"End date not in data. Using nearest: {date1}") + warn(f"End date not in data. Using nearest: {date1}") else: date1 = end_date diff --git a/openbb_platform/extensions/technical/openbb_technical/relative_rotation.py b/openbb_platform/extensions/technical/openbb_technical/relative_rotation.py new file mode 100644 index 00000000000..5bd3f7a295f --- /dev/null +++ b/openbb_platform/extensions/technical/openbb_technical/relative_rotation.py @@ -0,0 +1,554 @@ +"""Relative Rotation Model.""" + +# pylint: disable=too-many-arguments, too-many-instance-attributes, protected-access +# pylint: disable=too-many-locals, too-few-public-methods, unused-argument + +import contextlib +from typing import Any, Dict, List, Literal, Optional, Tuple, Union + +import numpy as np +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.utils import basemodel_to_df, convert_to_basemodel, df_to_basemodel +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.abstract.query_params import QueryParams +from pandas import DataFrame, Series, to_datetime +from pydantic import Field, field_validator + + +def absolute_maximum_scale(data: Series) -> Series: + """Absolute Maximum Scale Normaliztion Method.""" + return data / data.abs().max() + + +def min_max_scaling(data: Series) -> Series: + """Min/Max ScalingNormalization Method.""" + return (data - data.min()) / (data.max() - data.min()) + + +def z_score_standardization(data: Series) -> Series: + """Z-Score Standardization Method.""" + return (data - data.mean()) / data.std() + + +def normalize(data: DataFrame, method: Literal["z", "m", "a"] = "z") -> DataFrame: + """ + Normalize a Pandas DataFrame based on method. + + Parameters + ---------- + data: DataFrame + Pandas DataFrame with any number of columns to be normalized. + method: Literal["z", "m", "a"] + Normalization method. + z: Z-Score Standardization + m: Min/Max Scaling + a: Absolute Maximum Scale + + Returns + ------- + DataFrame + Normalized DataFrame. + """ + methods = { + "z": z_score_standardization, + "m": min_max_scaling, + "a": absolute_maximum_scale, + } + + df = data.copy() + + for col in df.columns: + df.loc[:, col] = methods[f"{method}"](df.loc[:, col]) + + return df + + +def standard_deviation( + data: DataFrame, + window: int = 21, + trading_periods: int = 252, +) -> DataFrame: + """ + Measures how widely returns are dispersed from the average return. + + It is the most common (and biased) estimator of volatility. + + Parameters + ---------- + data : pd.DataFrame + Dataframe of OHLC prices. + window : int [default: 21] + Length of window to calculate over. + trading_periods : Optional[int] [default: 252] + Number of trading periods in a year. + + Returns + ------- + pd.DataFrame : results + Dataframe with results. + """ + data = data.copy() + results = DataFrame() + if window < 2: + window = 21 + + for col in data.columns.tolist(): + log_return = (data[col] / data[col].shift(1)).apply(np.log) + + result = log_return.rolling(window=window, center=False).std() * np.sqrt( + trading_periods + ) + results[col] = result + + return results.dropna() + + +def calculate_momentum( + data: Series, long_period: int = 252, short_period: int = 21 +) -> Series: + """ + Momentum is calculated as the log trailing 12-month return minus trailing one-month return. + + Higher values indicate larger, positive momentum exposure. + + Momentum = ln(1 + r12) - ln(1 + r1) + + Parameters + ---------- + data: Series + Time series data to calculate the momentum for. + long_period: Optional[int] + Long period to base the calculation on. Default is one standard trading year. + short_period: Optional[int] + Short period to subtract from the long period. Default is one trading month. + + Returns + ------- + Series + Pandas Series with the calculated momentum. + """ + df = data.copy() + epsilon = 1e-10 + momentum_long = np.log(1 + df.pct_change(long_period) + epsilon) + momentum_short = np.log(1 + df.pct_change(short_period) + epsilon) + data = momentum_long - momentum_short # type: ignore + + return data + + +def get_momentum( + data: DataFrame, long_period: int = 252, short_period: int = 21 +) -> DataFrame: + """ + Calculate the Relative-Strength Momentum Indicator. + + Takes the Relative Strength Ratio as the input. + + Parameters + ---------- + data: DataFrame + Indexed time series data formatted with each column representing a ticker. + long_period: Optional[int] + Long period to base the calculation on. Default is one standard trading year. + short_period: Optional[int] + Short period to subtract from the long period. Default is one trading month. + + Returns + ------- + DataFrame + Pandas DataFrame with the calculated historical momentum factor exposure score. + """ + df = data.copy() + rs_momentum = DataFrame() + for ticker in df.columns.to_list(): + rs_momentum.loc[:, ticker] = calculate_momentum( + df.loc[:, ticker], long_period, short_period + ) # type: ignore + + return rs_momentum + + +def calculate_relative_strength_ratio( + symbols_data: DataFrame, + benchmark_data: DataFrame, +) -> DataFrame: + """Calculate the Relative Strength Ratio for each ticker (column) in a DataFrame against the benchmark. + + Symbols data and benchmark data should have the same index, + and each column should represent a ticker. + + Parameters + ---------- + symbols_data: DataFrame + Pandas DataFrame with the symbols data to compare against the benchmark. + benchmark_data: DataFrame + Pandas DataFrame with the benchmark data. + + Returns + ------- + DataFrame + Pandas DataFrame with the calculated relative strength + ratio for each ticker joined with the benchmark values. + """ + return ( + symbols_data.div(benchmark_data.iloc[:, 0], axis=0) + .multiply(100) + .join(benchmark_data.iloc[:, 0]) + .dropna() + ) + + +def process_data( + symbols_data: DataFrame, + benchmark_data: DataFrame, + long_period: int = 252, + short_period: int = 21, + normalize_method: Literal["z", "m", "a"] = "z", +) -> Tuple[DataFrame, DataFrame]: + """Process the raw data into normalized indicator values. + + Parameters + ---------- + symbols_data: DataFrame + Indexed time series data formatted with each column representing a ticker. + benchmark_data: DataFrame + Indexed time series data of the benchmark symbol. + long_period: Optional[int] + Long period to base the calculation on. Default is one standard trading year. + short_period: Optional[int] + Short period to subtract from the long period. Default is one trading month. + normalize_method: Literal["z", "m", "a"] + + Returns + ------- + Tuple[DataFrame, DataFrame] + Tuple of Pandas DataFrames with the normalized ratio and momentum indicator values. + """ + ratio_data = calculate_relative_strength_ratio(symbols_data, benchmark_data) + momentum_data = get_momentum(ratio_data, long_period, short_period) + normalized_ratio = normalize(ratio_data, normalize_method) + normalized_momentum = normalize(momentum_data, normalize_method) + + return normalized_ratio, normalized_momentum + + +class RelativeRotation: + """Relative Rotation Class.""" + + def __init__( + self, + data: Union[List[Data], DataFrame], + benchmark: str, + study: Optional[Literal["price", "volume", "volatility"]] = "price", + long_period: Optional[int] = 252, + short_period: Optional[int] = 21, + window: Optional[int] = 21, + trading_periods: Optional[int] = 252, + ): + """Initialize the class.""" + benchmark = benchmark.upper() + df = DataFrame() + + target_col = "volume" if study == "volume" else "close" + + if isinstance(data, OBBject): + data = data.results # type: ignore + + if isinstance(data, List) and ( + all(isinstance(d, Data) for d in data) + or all(isinstance(d, dict) for d in data) + ): + with contextlib.suppress(Exception): + df = basemodel_to_df(convert_to_basemodel(data), index="date") + + if isinstance(data, DataFrame) and not df.empty: + df = data.copy() + if "date" in df.columns: + df.set_index("date", inplace=True) + + if df.empty: + raise ValueError( + "Data must be a list of Data objects or a DataFrame with a 'date' column." + ) + + if "symbol" in df.columns: + df = df.pivot(columns="symbol", values=target_col) + + if benchmark not in df.columns: + raise RuntimeError("The benchmark symbol was not found in the data.") + + benchmark_data = df.pop(benchmark).to_frame() + symbols_data = df + + if len(symbols_data) <= 252 and study in ["price", "volume"]: # type: ignore + raise ValueError( + "Supplied data must be daily intervals and have more than one year of back data to calculate" + " the most recent day in the time series." + ) + + if study == "volatility" and len(symbols_data) <= 504: # type: ignore + raise ValueError( + "Supplied data must be daily intervals and have more than two years of back data to calculate" + " the most recent day in the time series as a volatility study." + ) + self.symbols = df.columns.to_list() + self.benchmark = benchmark + self.study = study + self.long_period = long_period + self.short_period = short_period + self.window = window + self.trading_periods = trading_periods + self.symbols_data = symbols_data # type: ignore + self.benchmark_data = benchmark_data # type: ignore + self._process_data() # type: ignore + self.symbols_data = df_to_basemodel(self.symbols_data.reset_index()) # type: ignore + self.benchmark_data = df_to_basemodel(self.benchmark_data.reset_index()) # type: ignore + + def _process_data(self): + """Process the data.""" + if self.study == "volatility": + self.symbols_data = standard_deviation( + self.symbols_data, # type: ignore + window=self.window, # type: ignore + trading_periods=self.trading_periods, # type: ignore + ) + self.benchmark_data = standard_deviation( + self.benchmark_data, # type: ignore + window=self.window, # type: ignore + trading_periods=self.trading_periods, # type: ignore + ) + ratios, momentum = process_data( + self.symbols_data, # type: ignore + self.benchmark_data, # type: ignore + long_period=self.long_period, # type: ignore + short_period=self.short_period, # type: ignore + ) + # Re-index rs_ratios using the new index + index_after_dropping_nans = momentum.dropna().index + ratios = ratios.reindex(index_after_dropping_nans) + self.rs_ratios = df_to_basemodel(ratios.reset_index()) + self.rs_momentum = df_to_basemodel(momentum.dropna().reset_index()) + self.end_date = to_datetime(ratios.index[-1]).strftime("%Y-%m-%d") + self.start_date = to_datetime(ratios.index[0]).strftime("%Y-%m-%d") + return self + + +def _get_type_name(t): + """Get the type name of a type hint.""" + if hasattr(t, "__origin__"): + if hasattr(t.__origin__, "__name__"): + return f"{t.__origin__.__name__}[{', '.join([_get_type_name(arg) for arg in t.__args__])}]" + if hasattr(t.__origin__, "_name"): + return f"{t.__origin__._name}[{', '.join([_get_type_name(arg) for arg in t.__args__])}]" + if isinstance(t, str): + return t + if hasattr(t, "__name__"): + return t.__name__ + if hasattr(t, "_name"): + return t._name + return str(t) + + +class RelativeRotationQueryParams(QueryParams): + """Relative Rotation Query Parameters.""" + + data: List[Data] = Field( + description="The data to be used for the relative rotation calculations." + + " This should be the multi-symbol output from the" + + " 'equity.price.historical' endpoint, or similar, at a daily interval." + + " Or a pivot table with the 'date' column as the index, the symbols as the columns," + + " and the 'study' as the values." + + " It is recommended to use the 'equity.price.historical' endpoint to get the data," + + " and feed the results as-is." + ) + benchmark: str = Field(description="The symbol to be used as the benchmark.") + study: Literal["price", "volume", "volatility"] = Field( + default="price", + description="The data point for the calculations." + + " If 'price', the closing price will be used." + + " If 'volatility', the standard deviation of the closing price will be used." + + " If 'data' is supplied as a pivot table," + + " the 'study' will assume the values are the closing price and 'volume' will be ignored.", + ) + long_period: Optional[int] = Field( + default=252, + description="The length of the long period for momentum calculation, by default is 252." + + " Adjust this value, to 365, when supplying assets such as crypto.", + ) + short_period: Optional[int] = Field( + default=21, + description="The length of the short period for momentum calculation, by default is 21." + + " Adjust this value, to 30, when supplying assets such as crypto.", + ) + window: Optional[int] = Field( + default=21, + description="The length of window for the standard deviation calculation, by default is 21." + + " Adjust this value, to 30, when supplying assets such as crypto.", + ) + trading_periods: Optional[int] = Field( + default=252, + description="The number of trading periods per year," + + " for the standard deviation calculation, by default is 252." + + " Adjust this value, to 365, when supplying assets such as crypto.", + ) + chart_params: Optional[Dict[str, Any]] = Field( + default=None, + description="Additional parameters to pass when `chart=True` and the `openbb-charting` extension is installed." + + " Parameters can be passed again to redraw the chart using the charting.to_chart() method of the response." + + "\n" + + "\n ChartParams" + + "\n -----------" + + "\n date: Optional[str]" + + "\n A target end date within the data, by default is the last date in the data." + + "\n show_tails: bool" + + "\n Show the tails on the chart, by default is True." + + "\n tail_periods: Optional[int]" + + "\n Number of periods to show in the tails, by default is 16." + + "\n tail_interval: Literal['day', 'week', 'month']" + + "\n Interval to show the tails, by default is 'week'." + + "\n title: Optional[str]" + + "\n Title of the chart.", + ) + + @field_validator("benchmark", mode="before", check_fields=False) + @classmethod + def to_upper(cls, v): + """Convert the benchmark symbol to uppercase.""" + return v.upper() + + @field_validator("data", mode="before", check_fields=False) + @classmethod + def convert_data(cls, v): + """Validate the data format.""" + if isinstance(v, OBBject): + return v.results + if isinstance(v, Data): + return v + if isinstance(v, (list, dict)): + return convert_to_basemodel(v) + if isinstance(v, DataFrame): + return df_to_basemodel(v.reset_index()) + return v + + def __init__(self, **data): + """Initialize the class.""" + super().__init__(**data) + fields = self.__class__.model_fields + doc_str = ( + "\n" + + self.__class__.__name__ + + "\n\n" + + " Parameters\n" + + " ----------\n" + + "\n".join( + [ + f" {k} : {_get_type_name(v.annotation)}\n {v.description}" + for k, v in fields.items() + ] + ) + + "\n" + ) + self.__doc__ = doc_str + + +class RelativeRotationData(Data): + """Relative Rotation Data Model.""" + + symbols: List[str] = Field( + description="The symbols that are being compared against the benchmark." + ) + benchmark: str = Field(description="The benchmark symbol, as entered by the user.") + study: Literal["price", "volume", "volatility"] = Field( + description="The data point for the study, as entered by the user." + ) + long_period: int = Field( + description="The length of the long period for momentum calculation," + + " as entered by the user." + ) + short_period: int = Field( + description="The length of the short period for momentum calculation," + + " as entered by the user." + ) + window: int = Field( + description="The length of window for the standard deviation calculation," + + " as entered by the user.", + ) + trading_periods: int = Field( + description="The number of trading periods per year," + + " for the standard deviation calculation, as entered by the user." + ) + start_date: str = Field( + description="The start date of the data after adjusting" + + " the length of the data for the calculations." + ) + end_date: str = Field(description="The end date of the data.") + symbols_data: List[Data] = Field( + description="The data representing the selected 'study' for each symbol." + ) + benchmark_data: List[Data] = Field( + description="The data representing the selected 'study' for the benchmark." + ) + rs_ratios: List[Data] = Field( + description="The normalized relative strength ratios data." + ) + rs_momentum: List[Data] = Field( + description="The normalized relative strength momentum data." + ) + + def __init__(self, **data): + """Initialize the class.""" + super().__init__(**data) + fields = self.__class__.model_fields + doc_str = ( + "\n" + + self.__class__.__name__ + + "\n\n" + + " Attributes\n" + + " ----------\n" + + "\n".join( + [ + f" {k} : {_get_type_name(v.annotation)}\n {v.description}" + for k, v in fields.items() + ] + ) + + "\n" + ) + self.__doc__ = doc_str + + +class RelativeRotationFetcher( + Fetcher[RelativeRotationQueryParams, RelativeRotationData] +): + """Relative Rotation Fetcher.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> RelativeRotationQueryParams: + """Transform the query parameters.""" + return RelativeRotationQueryParams.model_validate(**params) + + @staticmethod + def extract_data( + query: RelativeRotationQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> Dict: + """Extract the data.""" + return RelativeRotation( + query.data, + query.benchmark, + study=query.study, + long_period=query.long_period, + short_period=query.short_period, + window=query.window, + trading_periods=query.trading_periods, + ).__dict__ + + @staticmethod + def transform_data( + query: RelativeRotationQueryParams, + data: Dict, + **kwargs: Any, + ) -> RelativeRotationData: + """Transform the data.""" + return RelativeRotationData.model_validate(data) diff --git a/openbb_platform/extensions/technical/openbb_technical/technical_router.py b/openbb_platform/extensions/technical/openbb_technical/technical_router.py index e4faa20ef90..47aa24d2700 100644 --- a/openbb_platform/extensions/technical/openbb_technical/technical_router.py +++ b/openbb_platform/extensions/technical/openbb_technical/technical_router.py @@ -1,7 +1,7 @@ """Technical Analysis Router.""" # pylint: disable=too-many-lines -from typing import List, Literal, Optional +from typing import Any, Dict, List, Literal, Optional import pandas as pd import pandas_ta as ta @@ -17,15 +17,157 @@ from openbb_core.app.utils import ( from openbb_core.provider.abstract.data import Data from pydantic import NonNegativeFloat, NonNegativeInt, PositiveFloat, PositiveInt -from .helpers import ( +from openbb_technical.helpers import ( calculate_cones, calculate_fib_levels, clenow_momentum, validate_data, ) +from openbb_technical.relative_rotation import ( + RelativeRotationData, + RelativeRotationFetcher, + RelativeRotationQueryParams, +) # TODO: Split this into multiple files -router = Router(prefix="") +router = Router(prefix="", description="Technical Analysis tools.") + + +@router.command( + methods=["POST"], + examples=[ + PythonEx( + description="Calculate the Relative Strength Ratio and Relative Strength Momentum" + + " for a group of symbols against a benchmark.", + code=[ + "stock_data = obb.equity.price.historical(" + + "symbol='AAPL,MSFT,GOOGL,META,AMZN,TSLA,SPY', start_date='2022-01-01', provider='yfinance')", + "rr_data = obb.technical.relative_rotation(data=stock_data.results, benchmark='SPY')", + "rs_ratios = rr_data.results.rs_ratios", + "rs_momentum = rr_data.results.rs_momentum", + ], + ), + PythonEx( + description="When the assets are not traded 252 days per year," + + "adjust the momentum and volatility periods accordingly.", + code=[ + "crypto_data = obb.crypto.price.historical(" + + " symbol='BTCUSD,ETHUSD,SOLUSD', start_date='2021-01-01', provider='yfinance')", + "rr_data = obb.technical.relative_rotation(data=crypto_data.results, benchmark='BTCUSD'," + + " long_period=365, short_period=30, window=30, trading_periods=365)", + ], + ), + APIEx( + description="Note that the mock data displayed here is insufficient." + + " It must contain multiple symbols, with the benchmark, and be daily data at least 1 year in length.", + parameters={"benchmark": "SPY", "data": APIEx.mock_data("timeseries")}, + ), + ], +) +async def relative_rotation( + data: List[Data], + benchmark: str, + study: Literal["price", "volume", "volatility"] = "price", + long_period: Optional[int] = 252, + short_period: Optional[int] = 21, + window: Optional[int] = 21, + trading_periods: Optional[int] = 252, + chart_params: Optional[Dict[str, Any]] = None, +) -> OBBject[RelativeRotationData]: + """Calculate the Relative Strength Ratio and Relative Strength Momentum for a group of symbols against a benchmark. + + Parameters + ---------- + data : list[Data] + The data to be used for the relative rotation calculations. + This should be the multi-symbol output from the 'equity.price.historical' endpoint, or similar. + Or a pivot table with the 'date' column as the index, the symbols as the columns, and the 'study' as the values. + It is recommended to use the 'equity.price.historical' endpoint to get the data, and feed the results as-is. + benchmark : str + The symbol to be used as the benchmark. + study : Literal[price, volume, volatility] + The data point for the calculations. If 'price', the closing price will be used. + If 'volatility', the standard deviation of the closing price will be used. + If 'data' is supplied as a pivot table, + the 'study' will assume the values are the closing price and 'volume' will be ignored. + long_period : int, optional + The length of the long period for momentum calculation, by default 252. + Adjust this value when supplying a time series with an interval that is not daily. + For example, if the data is monthly, the long period should be 12. + short_period : int, optional + The length of the short period for momentum calculation, by default 21. + Adjust this value when supplying a time series with an interval that is not daily. + window : int, optional + The length of window for the standard deviation calculation, by default 21. + Adjust this value when supplying a time series with an interval that is not daily. + trading_periods : int, optional + The number of trading periods per year, for the standard deviation calculation, by default 252. + Adjust this value when supplying a time series with an interval that is not daily. + chart_params : dict[str, Any], optional + Additional parameters to pass when `chart=True` and the `openbb-charting` extension is installed. + Parameters can be passed again to redraw the chart using the charting.to_chart() method of the response. + + ChartParams + ----------- + date : str, optional + A target end date within the data to use for the chart, by default is the last date in the data. + show_tails : bool + Show the tails on the chart, by default True. + tail_periods : int + Number of periods to show in the tails, by default 16. + tail_interval : Literal[day, week, month] + Interval to show the tails, by default 'week'. + title : str, optional + Title of the chart. + + Returns + ------- + OBBject[RelativeRotationData] + results : RelativeRotationData + symbols : list[str]: + The symbols that are being compared against the benchmark. + benchmark : str + The benchmark symbol. + study : Literal[price, volume, volatility] + The data point for the selected. + long_period : int + The length of the long period for momentum calculation, as entered by the user. + short_period : int + The length of the short period for momentum calculation, as entered by the user. + window : int + The length of window for the standard deviation calculation. + trading_periods : int + The number of trading periods per year, for the standard deviation calculation. + start_date : str + The start date of the data after adjusting the length of the data for the calculations. + end_date : str + The end date of the data. + symbols_data : list[Data] + The data representing the selected 'study' for each symbol. + benchmark_data : list[Data] + The data representing the selected 'study' for the benchmark. + rs_ratios : list[Data] + The normalized relative strength ratios data. + rs_momentum : list[Data] + The normalized relative strength momentum data. + """ + + params = RelativeRotationQueryParams( + data=data, + benchmark=benchmark, + study=study, + long_period=long_period, + short_period=short_period, + window=window, + trading_periods=trading_periods, + chart_params=chart_params, + ) + + return OBBject( + results=RelativeRotationFetcher.transform_data( + params, RelativeRotationFetcher.extract_data(params, {}) + ) + ) @router.command( @@ -489,7 +631,7 @@ def aroon( data: List[Data], index: str = "date", length: int = 25, - scalar: int = 100, + scalar: float = 100, ) -> OBBject[List[Data]]: """Calculate the Aroon Indicator. @@ -513,7 +655,7 @@ def aroon( Index column name to use with `data`, by default "date". length : int, optional Number of periods to be used for the calculation, by default 25. - scalar : int, optional + scalar : float, optional Scalar to be used for the calculation, by default 100. Returns diff --git a/openbb_platform/extensions/technical/poetry.lock b/openbb_platform/extensions/technical/poetry.lock index ceb9ffc842f..d081a56833d 100644 --- a/openbb_platform/extensions/technical/poetry.lock +++ b/openbb_platform/extensions/technical/poetry.lock @@ -648,13 +648,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1562,4 +1562,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "0e3d117096b03b113888e7be6639504b3552aabcb58a4c9f648d7a6fd1c4c21e" +content-hash = "3d13f50e40aed069054b8016c306389ee3ff6649cdb88583fd2bc6d9501e7408" diff --git a/openbb_platform/extensions/technical/pyproject.toml b/openbb_platform/extensions/technical/pyproject.toml index 18b1eceb67c..8d38641d074 100644 --- a/openbb_platform/extensions/technical/pyproject.toml +++ b/openbb_platform/extensions/technical/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-technical" -version = "1.1.5" +version = "1.1.6" description = "Technical Analysis extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -12,7 +12,7 @@ scipy = "^1.10.1" statsmodels = "^0.14.0" scikit-learn = "^1.3.1" pandas-ta = "^0.3.14b" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/extensions/technical/tests/test_technical_helpers.py b/openbb_platform/extensions/technical/tests/test_technical_helpers.py index 82ef6919fed..9b4b7a9d102 100644 --- a/openbb_platform/extensions/technical/tests/test_technical_helpers.py +++ b/openbb_platform/extensions/technical/tests/test_technical_helpers.py @@ -20,6 +20,7 @@ from extensions.technical.openbb_technical.helpers import ( @pytest.fixture(scope="module") def mock_data(top_range: int = 100): + """Mock data for testing.""" _open = pd.Series(np.arange(1, top_range)) _high = pd.Series(np.arange(1, top_range)) _low = pd.Series(np.arange(1, top_range)) diff --git a/openbb_platform/extensions/tests/__init__.py b/openbb_platform/extensions/tests/__init__.py index e69de29bb2d..d420712d8bb 100644 --- a/openbb_platform/extensions/tests/__init__.py +++ b/openbb_platform/extensions/tests/__init__.py @@ -0,0 +1 @@ +"""Tests.""" diff --git a/openbb_platform/extensions/tests/conftest.py b/openbb_platform/extensions/tests/conftest.py index b8849169816..c71c47faab5 100644 --- a/openbb_platform/extensions/tests/conftest.py +++ b/openbb_platform/extensions/tests/conftest.py @@ -14,7 +14,7 @@ commands = list(cm.map.keys()) def parametrize(argnames: str, argvalues: List, **kwargs): - """Custom parametrize decorator that filters test cases based on the environment.""" + """Apply a custom parametrize decorator that filters test cases based on the environment.""" routers, providers, obbject_ext = list_openbb_extensions() diff --git a/openbb_platform/extensions/tests/utils/__init__.py b/openbb_platform/extensions/tests/utils/__init__.py index e69de29bb2d..479fdbbe1fb 100644 --- a/openbb_platform/extensions/tests/utils/__init__.py +++ b/openbb_platform/extensions/tests/utils/__init__.py @@ -0,0 +1 @@ +"""Testing utilities.""" diff --git a/openbb_platform/extensions/tests/utils/helpers.py b/openbb_platform/extensions/tests/utils/helpers.py index 8d35fced671..2411a85484b 100644 --- a/openbb_platform/extensions/tests/utils/helpers.py +++ b/openbb_platform/extensions/tests/utils/helpers.py @@ -242,7 +242,7 @@ def find_missing_router_function_models( def parse_example_string(example_string: str) -> Dict[str, Any]: - """Parses a string of examples into nested dictionaries. + """Parse a string of examples into nested dictionaries. This is capturing all instances of PythonEx and APIEx, including their "parameters", "code", and "description". """ diff --git a/openbb_platform/obbject_extensions/charting/integration/test_charting_api.py b/openbb_platform/obbject_extensions/charting/integration/test_charting_api.py index f89c1b318bf..5066d5a40b7 100644 --- a/openbb_platform/obbject_extensions/charting/integration/test_charting_api.py +++ b/openbb_platform/obbject_extensions/charting/integration/test_charting_api.py @@ -1,3 +1,5 @@ +"""Integration tests for charting API.""" + import base64 import json @@ -49,7 +51,7 @@ def get_equity_data(): [ ( { - "provider": "fmp", + "provider": "yfinance", "symbol": "AAPL", "chart": True, } @@ -58,7 +60,7 @@ def get_equity_data(): ) @pytest.mark.integration def test_charting_equity_price_historical(params, headers): - """Test chart equity load.""" + """Test chart equity price historical..""" params = {p: v for p, v in params.items() if v} query_str = get_querystring(params, []) @@ -75,6 +77,130 @@ def test_charting_equity_price_historical(params, headers): assert list(chart.keys()) == ["content", "format"] +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "USDGBP", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_currency_price_historical(params, headers): + """Test chart currency price historical.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/currency/price/historical?{query_str}" + result = requests.get(url, headers=headers, timeout=40) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] + + +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "QQQ", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_etf_historical(params, headers): + """Test chart etf historical.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/etf/historical?{query_str}" + result = requests.get(url, headers=headers, timeout=40) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] + + +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "NDX", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_index_price_historical(params, headers): + """Test chart index price historical.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/index/price/historical?{query_str}" + result = requests.get(url, headers=headers, timeout=40) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] + + +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "BTCUSD", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_crypto_price_historical(params, headers): + """Test chart crypto price historical.""" + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/crypto/price/historical?{query_str}" + result = requests.get(url, headers=headers, timeout=40) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] + + @parametrize( "params", [ @@ -444,3 +570,152 @@ def test_charting_economy_fred_series(params, headers): assert chart assert not fig assert list(chart.keys()) == ["content", "format"] + + +@parametrize( + "params", + [ + ( + { + "data": "", + "study": "price", + "benchmark": "SPY", + "long_period": 252, + "short_period": 21, + "window": 21, + "trading_periods": 252, + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_technical_relative_rotation(params): + params = {p: v for p, v in params.items() if v} + data_params = dict( + symbol="AAPL,MSFT,GOOGL,AMZN,SPY", + provider="yfinance", + start_date="2022-01-01", + end_date="2024-01-01", + ) + data_query_str = get_querystring(data_params, []) + data_url = f"http://0.0.0.0:8000/api/v1/equity/price/historical?{data_query_str}" + data_result = requests.get(data_url, headers=get_headers(), timeout=10).json()[ + "results" + ] + body = json.dumps({"data": data_result}) + query_str = get_querystring(params, ["data"]) + url = f"http://0.0.0.0:8000/api/v1/technical/relative_rotation?{query_str}" + result = requests.post(url, headers=get_headers(), timeout=10, data=body) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] + + +@parametrize( + "params", + [ + ( + { + "data": None, + "symbol": "XRT,XLB,XLI,XLH,XLC,XLY,XLU,XLK", + "chart": True, + "provider": "finviz", + } + ) + ], +) +@pytest.mark.integration +def test_charting_equity_price_performance(params, headers): + """Test chart equity price performance.""" + params = {p: v for p, v in params.items() if v} + body = ( + json.dumps( + {"extra_params": {"chart_params": {"limit": 4, "orientation": "h"}}} + ), + ) + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/equity/price/performance?{query_str}" + result = requests.get(url, headers=headers, timeout=10, json=body) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] + + +@parametrize( + "params", + [ + ( + { + "data": None, + "symbol": "XRT,XLB,XLI,XLH,XLC,XLY,XLU,XLK", + "chart": True, + "provider": "intrinio", + } + ) + ], +) +@pytest.mark.integration +def test_charting_etf_price_performance(params, headers): + """Test chart equity price performance.""" + params = {p: v for p, v in params.items() if v} + body = (json.dumps({"extra_params": {"chart_params": {"orientation": "v"}}}),) + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/etf/price_performance?{query_str}" + result = requests.get(url, headers=headers, timeout=10, json=body) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] + + +@parametrize( + "params", + [ + ( + { + "data": None, + "symbol": "XRT", + "chart": True, + "provider": "fmp", + } + ) + ], +) +@pytest.mark.integration +def test_charting_etf_holdings(params, headers): + """Test chart etf holdings.""" + params = {p: v for p, v in params.items() if v} + body = ( + json.dumps( + {"extra_params": {"chart_params": {"orientation": "v", "limit": 10}}} + ), + ) + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/etf/holdings?{query_str}" + result = requests.get(url, headers=headers, timeout=10, json=body) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + chart = result.json()["chart"] + fig = chart.pop("fig", {}) + + assert chart + assert not fig + assert list(chart.keys()) == ["content", "format"] diff --git a/openbb_platform/obbject_extensions/charting/integration/test_charting_python.py b/openbb_platform/obbject_extensions/charting/integration/test_charting_python.py index 1995eabf011..f8bc9275e59 100644 --- a/openbb_platform/obbject_extensions/charting/integration/test_charting_python.py +++ b/openbb_platform/obbject_extensions/charting/integration/test_charting_python.py @@ -42,7 +42,7 @@ def get_equity_data(): [ ( { - "provider": "fmp", + "provider": "yfinance", "symbol": "AAPL", "chart": True, } @@ -60,6 +60,98 @@ def test_charting_equity_price_historical(params, obb): assert isinstance(result.chart.fig, OpenBBFigure) +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "JPYUSD", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_currency_price_historical(params, obb): + """Test chart currency price historical.""" + result = obb.currency.price.historical(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.chart.content + assert isinstance(result.chart.fig, OpenBBFigure) + + +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "BTCUSD", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_crypto_price_historical(params, obb): + """Test chart crypto price historical.""" + result = obb.crypto.price.historical(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.chart.content + assert isinstance(result.chart.fig, OpenBBFigure) + + +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "NDX", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_index_price_historical(params, obb): + """Test chart index price historical.""" + result = obb.index.price.historical(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.chart.content + assert isinstance(result.chart.fig, OpenBBFigure) + + +@parametrize( + "params", + [ + ( + { + "provider": "yfinance", + "symbol": "QQQ", + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_etf_historical(params, obb): + """Test chart etf historical.""" + result = obb.etf.historical(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.chart.content + assert isinstance(result.chart.fig, OpenBBFigure) + + @parametrize( "params", [ @@ -381,3 +473,120 @@ def test_charting_economy_fred_series(params, obb): assert len(result.results) > 0 assert result.chart.content assert isinstance(result.chart.fig, OpenBBFigure) + + +@parametrize( + "params", + [ + ( + { + "data": "", + "study": "price", + "benchmark": "SPY", + "long_period": 252, + "short_period": 21, + "window": 21, + "trading_periods": 252, + "chart": True, + } + ), + ], +) +@pytest.mark.integration +def test_charting_technical_relative_rotation(params, obb): + params["data"] = obb.equity.price.historical( + "AAPL,MSFT,GOOGL,AMZN,SPY", + provider="yfinance", + start_date="2022-01-01", + end_date="2024-01-01", + ).results + result = obb.technical.relative_rotation( + data=params["data"], + benchmark=params["benchmark"], + study=params["study"], + long_period=params["long_period"], + short_period=params["short_period"], + window=params["window"], + trading_periods=params["trading_periods"], + chart=params["chart"], + ) + assert result + assert isinstance(result, OBBject) + assert len(result.results.rs_ratios) > 0 # type: ignore + assert result.chart.content # type: ignore + assert isinstance(result.chart.fig, OpenBBFigure) # type: ignore + + +@parametrize( + "params", + [ + ( + { + "data": None, + "symbol": "XRT,XLB,XLI,XLH,XLC,XLY,XLU,XLK", + "chart": True, + "provider": "finviz", + "chart_params": {"limit": 4, "orientation": "h"}, + } + ) + ], +) +@pytest.mark.integration +def test_charting_equity_price_performance(params, obb): + """Test chart equity price performance.""" + result = obb.equity.price.performance(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.chart.content + assert isinstance(result.chart.fig, OpenBBFigure) + + +@parametrize( + "params", + [ + ( + { + "data": None, + "symbol": "XRT,XLB,XLI,XLH,XLC,XLY,XLU,XLK", + "chart": True, + "provider": "intrinio", + "chart_params": {"orientation": "v"}, + } + ) + ], +) +@pytest.mark.integration +def test_charting_etf_price_performance(params, obb): + """Test chart etf price performance.""" + result = obb.etf.price_performance(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.chart.content + assert isinstance(result.chart.fig, OpenBBFigure) + + +@parametrize( + "params", + [ + ( + { + "data": None, + "symbol": "XRT", + "chart": True, + "provider": "fmp", + "chart_params": {"orientation": "v", "limit": 10}, + } + ) + ], +) +@pytest.mark.integration +def test_charting_etf_holdings(params, obb): + """Test chart etf holdings.""" + result = obb.etf.holdings(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + assert result.chart.content + assert isinstance(result.chart.fig, OpenBBFigure) diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py b/openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py index ac585fefada..c79dc270784 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py @@ -1,25 +1,40 @@ """OpenBB OBBject extension for charting.""" +# pylint: disable=too-many-arguments,unused-argument + +import warnings from typing import ( Any, Callable, Dict, List, + Literal, Optional, + Tuple, Union, ) +from warnings import warn import numpy as np import pandas as pd from openbb_core.app.model.charts.chart import Chart from openbb_core.app.model.extension import Extension +from openbb_core.app.model.obbject import OBBject from openbb_core.app.utils import basemodel_to_df, convert_to_basemodel from openbb_core.provider.abstract.data import Data +from plotly.graph_objs import Figure from openbb_charting import charting_router -from openbb_charting.core.to_chart import ChartIndicators, to_chart +from openbb_charting.core.backend import Backend, create_backend, get_backend +from openbb_charting.core.openbb_figure import OpenBBFigure +from openbb_charting.query_params import ChartParams, IndicatorsParams +from openbb_charting.utils.generic_charts import bar_chart, line_chart from openbb_charting.utils.helpers import get_charting_functions +warnings.filterwarnings( + "ignore", category=UserWarning, module="openbb_core.app.model.extension", lineno=47 +) + ext = Extension(name="charting") @@ -33,74 +48,323 @@ class Charting: show Display chart and save it to the OBBject. to_chart - Returns the plotly json representation of the chart. + Redraw the chart and save it to the OBBject, with an optional entry point for Data. functions - Returns a list of Platform commands with charting functions. + Return a list of Platform commands with charting functions. + get_params + Return the charting parameters for the function the OBBject was created from. indicators - Returns a list of the available indicators to use with the `to_chart` method. + Return the list of the available technical indicators to use with the `to_chart` method and OHLC+V data. + table + Display an interactive table. + create_line_chart + Create a line chart from external data. + create_bar_chart + Create a bar chart, on a single x-axis with one or more values for the y-axis, from external data. """ def __init__(self, obbject): """Initialize Charting extension.""" # pylint: disable=import-outside-toplevel from openbb_core.app.model.charts.charting_settings import ChartingSettings - from openbb_core.app.model.obbject import OBBject self._obbject: OBBject = obbject self._charting_settings = ChartingSettings( user_settings=self._obbject._user_settings, # type: ignore system_settings=self._obbject._system_settings, # type: ignore ) - self._handle_backend() + self._backend: Backend = self._handle_backend() @classmethod def indicators(cls): - """Returns a list of the available indicators.""" - return ChartIndicators.get_available_indicators() + """ + Return an instance of the IndicatorsParams class, containing all available indicators and their parameters. + Without assigning to a variable, it will print the the information to the console. + """ + return IndicatorsParams() @classmethod def functions(cls): - """Returns a list of the available functions.""" + """Return a list of the available functions.""" return get_charting_functions() - def _handle_backend(self): - # pylint: disable=import-outside-toplevel - from openbb_charting.core.backend import create_backend, get_backend + def _handle_backend(self) -> Backend: + """Create and start the backend.""" create_backend(self._charting_settings) - get_backend().start(debug=self._charting_settings.debug_mode) + backend = get_backend() + backend.start(debug=self._charting_settings.debug_mode) + return backend @staticmethod def _get_chart_function(route: str) -> Callable: """Given a route, it returns the chart function. The module must contain the given route.""" + + if route is None: + raise ValueError("OBBject was initialized with no function route.") adjusted_route = route.replace("/", "_")[1:] return getattr(charting_router, adjusted_route) - def show(self, render: bool = True, **kwargs): - """Display chart and save it to the OBBject.""" - charting_function = self._get_chart_function( + def get_params(self) -> ChartParams: + """ + Return the ChartQueryParams class for the function the OBBject was created from. + Without assigning to a variable, it will print the docstring to the console. + """ + if self._obbject._route is None: # pylint: disable=protected-access + raise ValueError("OBBject was initialized with no function route.") + charting_function = ( self._obbject._route # pylint: disable=protected-access + ).replace("/", "_")[1:] + if hasattr(ChartParams, charting_function): + return getattr(ChartParams, charting_function)() + raise ValueError( + f"Error: No chart parameters are defined for the route: {charting_function}" ) - kwargs["obbject_item"] = self._obbject.results - kwargs["charting_settings"] = self._charting_settings - if ( - hasattr(self._obbject, "_standard_params") - and self._obbject._standard_params # pylint: disable=protected-access - ): - kwargs["standard_params"] = ( - self._obbject._standard_params.__dict__ # pylint: disable=protected-access - ) - kwargs["provider"] = self._obbject.provider # pylint: disable=protected-access - kwargs["extra"] = self._obbject.extra # pylint: disable=protected-access - kwargs["warnings"] = self._obbject.warnings # pylint: disable=protected-access - fig, content = charting_function(**kwargs) - self._obbject.chart = Chart( - fig=fig, content=content, format=charting_router.CHART_FORMAT + + def _prepare_data_as_df( + self, data: Optional[Union[pd.DataFrame, pd.Series]] + ) -> Tuple[pd.DataFrame, bool]: + """Convert supplied data to a DataFrame.""" + has_data = ( + isinstance(data, (Data, pd.DataFrame, pd.Series)) and not data.empty + ) or (bool(data)) + index = ( + data.index.name + if has_data and isinstance(data, (pd.DataFrame, pd.Series)) + else None + ) + data_as_df: pd.DataFrame = ( + basemodel_to_df(convert_to_basemodel(data), index=index) + if has_data + else self._obbject.to_dataframe(index=index) + ) + if "date" in data_as_df.columns: + data_as_df = data_as_df.set_index("date") + if "provider" in data_as_df.columns: + data_as_df.drop(columns="provider", inplace=True) + return data_as_df, has_data + + # pylint: disable=too-many-locals + def create_line_chart( + self, + data: Union[ + list, + dict, + pd.DataFrame, + List[pd.DataFrame], + pd.Series, + List[pd.Series], + np.ndarray, + Data, + ], + index: Optional[str] = None, + target: Optional[str] = None, + title: Optional[str] = None, + x: Optional[str] = None, + xtitle: Optional[str] = None, + y: Optional[Union[str, List[str]]] = None, + ytitle: Optional[str] = None, + y2: Optional[Union[str, List[str]]] = None, + y2title: Optional[str] = None, + layout_kwargs: Optional[dict] = None, + scatter_kwargs: Optional[dict] = None, + normalize: bool = False, + returns: bool = False, + same_axis: bool = False, + render: bool = True, + **kwargs, + ) -> Union[OpenBBFigure, Figure, None]: + """Create a line chart from external data and render a chart or return the OpenBBFigure. + + Parameters + ---------- + data : Union[Data, pd.DataFrame, pd.Series] + Data to be plotted (OHLCV data). + index : Optional[str], optional + Index column, by default None + target : Optional[str], optional + Target column to be plotted, by default None + title : Optional[str], optional + Chart title, by default None + x : Optional[str], optional + X-axis column, by default None + xtitle : Optional[str], optional + X-axis title, by default None + y : Optional[Union[str, List[str]]], optional + Y-axis column(s), by default None + If None are supplied, the layout is optimized for the contents of data. + Where many units/scales are present, + it will attempt to divide based on the range of values. + ytitle : Optional[str], optional + Y-axis title, by default None + y2 : Optional[Union[str, List[str]]], optional + Y2-axis column(s), by default None + y2title : Optional[str], optional + Y2-axis title, by default None + layout_kwargs : Optional[dict], optional + Additional Plotly Layout parameters for `fig.update_layout`, by default None + scatter_kwargs : Optional[dict], optional + Additional Plotly parameters applied on creation of each scatter plot, by default None + normalize : bool, optional + Normalize the data with Z-Score Standardization, by default False + returns : bool, optional + Convert the data to cumulative returns, by default False + same_axis: bool, optional + If True, forces all data onto the same Y-axis, by default False + render: bool, optional + If True, the chart will be rendered, by default True + **kwargs: Dict[str, Any] + Extra parameters to be passed to `figure.show()` + """ + fig = line_chart( + data=data, + index=index, + target=target, + title=title, + x=x, + xtitle=xtitle, + y=y, + ytitle=ytitle, + y2=y2, + y2title=y2title, + layout_kwargs=layout_kwargs, + scatter_kwargs=scatter_kwargs, + normalize=normalize, + returns=returns, + same_axis=same_axis, + **kwargs, ) if render: - fig.show(**kwargs) + return fig.show(**kwargs) - # pylint: disable=too-many-arguments + return fig + + def create_bar_chart( + self, + data: Union[ + list, + dict, + pd.DataFrame, + List[pd.DataFrame], + pd.Series, + List[pd.Series], + np.ndarray, + Data, + ], + x: str, + y: Union[str, List[str]], + barmode: Literal["group", "stack", "relative", "overlay"] = "group", + xtype: Literal[ + "category", "multicategory", "date", "log", "linear" + ] = "category", + title: Optional[str] = None, + xtitle: Optional[str] = None, + ytitle: Optional[str] = None, + orientation: Literal["h", "v"] = "v", + colors: Optional[List[str]] = None, + layout_kwargs: Optional[Dict[str, Any]] = None, + bar_kwargs: Optional[Dict[str, Any]] = None, + render: bool = True, + **kwargs, + ) -> Union[OpenBBFigure, Figure, None]: + """Create a bar chart on a single x-axis with one or more values for the y-axis. + + Parameters + ---------- + data : Union[list, dict, pd.DataFrame, List[pd.DataFrame], pd.Series, List[pd.Series], np.ndarray, Data] + Data to plot. + x : str + The x-axis column name. + y : Union[str, List[str]] + The y-axis column name(s). + barmode : Literal["group", "stack", "relative", "overlay"], optional + The bar mode, by default "group". + xtype : Literal["category", "multicategory", "date", "log", "linear"], optional + The x-axis type, by default "category". + title : str, optional + The title of the chart, by default None. + xtitle : str, optional + The x-axis title, by default None. + ytitle : str, optional + The y-axis title, by default None. + colors: List[str], optional + Manually set the colors to cycle through for each column in 'y', by default None. + bar_kwargs : Dict[str, Any], optional + Additional keyword arguments to apply with figure.add_bar(), by default None. + layout_kwargs : Dict[str, Any], optional + Additional keyword arguments to apply with figure.update_layout(), by default None. + Returns + ------- + OpenBBFigure + The OpenBBFigure object. + """ + + fig = bar_chart( + data=data, + x=x, + y=y, + barmode=barmode, + xtype=xtype, + title=title, + xtitle=xtitle, + ytitle=ytitle, + orientation=orientation, + colors=colors, + bar_kwargs=bar_kwargs, + layout_kwargs=layout_kwargs, + ) + + if render: + return fig.show(**kwargs) + + return fig + + # pylint: disable=inconsistent-return-statements + def show(self, render: bool = True, **kwargs): + """Display chart and save it to the OBBject.""" + + try: + charting_function = self._get_chart_function( + self._obbject._route # pylint: disable=protected-access + ) + kwargs["obbject_item"] = self._obbject.results + kwargs["charting_settings"] = self._charting_settings + if ( + hasattr(self._obbject, "_standard_params") + and self._obbject._standard_params # pylint: disable=protected-access + ): + kwargs["standard_params"] = ( + self._obbject._standard_params.__dict__ # pylint: disable=protected-access + ) + kwargs["provider"] = ( + self._obbject.provider + ) # pylint: disable=protected-access + kwargs["extra"] = self._obbject.extra # pylint: disable=protected-access + + if "kwargs" in kwargs: + _kwargs = kwargs.pop("kwargs") + kwargs.update(_kwargs.get("chart_params", {})) + fig, content = charting_function(**kwargs) + self._obbject.chart = Chart( + fig=fig, content=content, format=charting_router.CHART_FORMAT + ) + if render: + fig.show(**kwargs) + except Exception: + try: + fig = self.create_line_chart(data=self._obbject.results, render=False, **kwargs) # type: ignore + content = fig.show(external=True, **kwargs).to_plotly_json() # type: ignore + self._obbject.chart = Chart( + fig=fig, content=content, format=charting_router.CHART_FORMAT + ) + if render: + return fig.show(**kwargs) # type: ignore + except Exception as e: + raise RuntimeError( + "Failed to automatically create a generic chart with the data provided." + ) from e + + # pylint: disable=too-many-locals,inconsistent-return-statements def to_chart( self, data: Optional[ @@ -115,100 +379,147 @@ class Charting: Data, ] ] = None, - indicators: Optional[Union[ChartIndicators, Dict[str, Dict[str, Any]]]] = None, + target: Optional[str] = None, + index: Optional[str] = None, + indicators: Optional[Dict[str, Dict[str, Any]]] = None, symbol: str = "", candles: bool = True, volume: bool = True, - prepost: bool = False, volume_ticks_x: int = 7, render: bool = True, **kwargs, ): """ - Creates a OpenBBFigure with user customizations (if any) and saves it to the OBBject. + Create an OpenBBFigure with user customizations (if any) and save it to the OBBject. + This function is used to populate, or re-populate, the OBBject with a chart using the data within + the OBBject or external data supplied via the `data` parameter. - This function is used so it can be called at the module level and used out of the box, - which allows some more flexibility, ease of use and doesn't require the user to know - about the PlotlyTA class. + This function modifies the original OBBject by overwriting the existing chart. Parameters ---------- - data : Union[pd.DataFrame, pd.Series] - Data to be plotted Data to be plotted (OHLCV data). - indicators : Optional[Union[ChartIndicators, Dict[str, Dict[str, Any]]]], optional + data : Union[Data, pd.DataFrame, pd.Series] + Data to be plotted. + indicators : Dict[str, Dict[str, Any]], optional Indicators to be plotted, by default None symbol : str, optional - Symbol to be plotted, by default "" + Symbol to be plotted. This is used for labels and titles, by default "" candles : bool, optional If True, candles will be plotted, by default True volume : bool, optional If True, volume will be plotted, by default True - prepost : bool, optional - If True, prepost will be plotted, by default False volume_ticks_x : int, optional Volume ticks, by default 7 render : bool, optional If True, the chart will be rendered, by default True + kwargs: Dict[str, Any] + Extra parameters to be passed to the chart constructor. Examples -------- - 1) Plotting a time series with TA indicators - > from openbb import obb - > res = obb.equity.price.historical("AAPL") - > indicators = dict( - > sma=dict(length=[20,30,50]), - > adx=dict(length=14), - > rsi=dict(length=14), - > macd=dict(fast=12, slow=26, signal=9), - > bbands=dict(length=20, std=2), - > stoch=dict(length=14), - > ema=dict(length=[20,30,50]), - > ) - > res.charting.to_chart(**{"indicators": indicators}) + Plotting a time series with TA indicators - 2) Get all the available indicators - > from openbb_charting.core.plotly_ta.data_classes import ChartIndicators - > ChartIndicators.get_available_indicators() - or - > from openbb_charting import Charting - > Charting.indicators() + >>> from openbb import obb + >>> res = obb.equity.price.historical("AAPL") + >>> indicators = dict( + >>> sma=dict(length=[20,30,50]), + >>> adx=dict(length=14), + >>> rsi=dict(length=14), + >>> macd=dict(fast=12, slow=26, signal=9), + >>> bbands=dict(length=20, std=2), + >>> stoch=dict(length=14), + >>> ema=dict(length=[20,30,50]), + >>> ) + >>> res.charting.to_chart(**{"indicators": indicators}) + + Get all the available indicators + + >>> res = obb.equity.price.historical("AAPL") + >>> indicators = res.charting.indicators() + >>> indicators? """ - has_data = (isinstance(data, (pd.DataFrame, pd.Series)) and not data.empty) or ( - data - ) - index = ( - data.index.name - if has_data and isinstance(data, (pd.DataFrame, pd.Series)) - else None - ) - data_as_df: pd.DataFrame = ( - basemodel_to_df(convert_to_basemodel(data), index=index) - if has_data - else self._obbject.to_dataframe() - ) - if "date" in data_as_df.columns: - data_as_df = data_as_df.set_index("date") + data_as_df, has_data = self._prepare_data_as_df(data) # type: ignore + if target is not None: + data_as_df = data_as_df[[target]] + kwargs["candles"] = candles + kwargs["volume"] = volume + kwargs["volume_ticks_x"] = volume_ticks_x + kwargs["indicators"] = indicators if indicators else {} + kwargs["symbol"] = symbol + kwargs["target"] = target + kwargs["index"] = index + kwargs["obbject_item"] = self._obbject.results + kwargs["charting_settings"] = self._charting_settings + if ( + hasattr(self._obbject, "_standard_params") + and self._obbject._standard_params # pylint: disable=protected-access + ): + kwargs["standard_params"] = ( + self._obbject._standard_params.__dict__ # pylint: disable=protected-access + ) + kwargs["provider"] = self._obbject.provider # pylint: disable=protected-access + kwargs["extra"] = self._obbject.extra # pylint: disable=protected-access + if "kwargs" in kwargs: + _kwargs = kwargs.pop("kwargs") + kwargs.update(_kwargs.get("chart_params", {})) try: - fig, content = to_chart( - data_as_df, - indicators=indicators, - symbol=symbol, - candles=candles, - volume=volume, - prepost=prepost, - volume_ticks_x=volume_ticks_x, - ) - self._obbject.chart = Chart( - fig=fig, content=content, format=charting_router.CHART_FORMAT - ) - if render: - fig.show(**kwargs) - + if has_data: + self.show(data=data_as_df, render=render, **kwargs) + else: + self.show(**kwargs, render=render) except Exception: try: - if has_data: - self.show(data=data_as_df, symbol=symbol, render=render, **kwargs) - else: - self.show(**kwargs) + fig = self.create_line_chart(data=data_as_df, render=False, **kwargs) + content = fig.show(external=True, **kwargs).to_plotly_json() # type: ignore + self._obbject.chart = Chart( + fig=fig, content=content, format=charting_router.CHART_FORMAT + ) + if render: + return fig.show(**kwargs) # type: ignore except Exception as e: - raise RuntimeError("Could not create chart from the OBBject.") from e + raise RuntimeError( + "Failed to automatically create a generic chart with the data provided." + ) from e + + def table( + self, + data: Optional[Union[pd.DataFrame, pd.Series]] = None, + title: str = "", + ): + """ + Display an interactive table. + + Parameters + ---------- + data : Optional[Union[pd.DataFrame, pd.Series]], optional + Data to be plotted, by default None. + If no data is provided the OBBject results will be used. + title : str, optional + Title of the table, by default "". + """ + data_as_df, _ = self._prepare_data_as_df(data) + if isinstance(data_as_df.index, pd.RangeIndex): + data_as_df.reset_index(inplace=True, drop=True) + else: + data_as_df.reset_index(inplace=True) + if self._backend.isatty: + try: + self._backend.send_table( + df_table=data_as_df, + title=title + or self._obbject._route, # pylint: disable=protected-access + theme=self._charting_settings.table_style, + ) + except Exception as e: + warn(f"Failed to show figure with backend. {e}") + + else: + from plotly import ( # pylint:disable=import-outside-toplevel + optional_imports, + ) + + ipython_display = optional_imports.get_module("IPython.display") + if ipython_display: + ipython_display.display(ipython_display.HTML(data_as_df.to_html())) + else: + warn("IPython.display is not available.") diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py b/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py index 08c27d8c12c..fc271fbeaa1 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py @@ -1,145 +1,793 @@ """Charting router.""" -import json +# pylint: disable=too-many-arguments, too-many-locals, too-many-branches, too-many-statements, unused-argument, too-many-lines + from typing import Any, Dict, Optional, Tuple, Union +from warnings import warn import pandas as pd from openbb_core.app.model.charts.chart import ChartFormat from openbb_core.app.utils import basemodel_to_df +from plotly.graph_objs import Figure from openbb_charting.core.chart_style import ChartStyle from openbb_charting.core.openbb_figure import OpenBBFigure from openbb_charting.core.plotly_ta.ta_class import PlotlyTA -from openbb_charting.query_params import ( - FredSeriesChartQueryParams, - TechnicalConesChartQueryParams, +from openbb_charting.core.to_chart import to_chart +from openbb_charting.styles.colors import LARGE_CYCLER +from openbb_charting.utils import relative_rotation +from openbb_charting.utils.generic_charts import bar_chart +from openbb_charting.utils.helpers import ( + calculate_returns, + heikin_ashi, + should_share_axis, + z_score_standardization, ) CHART_FORMAT = ChartFormat.plotly -# if TYPE_CHECKING: -# from .core.openbb_figure_table import OpenBBFigureTable +def equity_price_performance( + **kwargs, +) -> Tuple[Union[OpenBBFigure, Figure], Dict[str, Any]]: # noqa: PLR0912 + """Equity Price Performance Chart.""" + if "data" in kwargs and isinstance(kwargs["data"], pd.DataFrame): + data = kwargs["data"] + elif "data" in kwargs and isinstance(kwargs["data"], list): + data = basemodel_to_df(kwargs["data"], index=kwargs.get("index", "symbol")) # type: ignore + else: + data = basemodel_to_df( + kwargs["obbject_item"], index=kwargs.get("index", "symbol") # type: ignore + ) -def equity_price_historical(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: - """Equity price chart.""" + cols = [ + "one_day", + "one_week", + "one_month", + "three_month", + "six_month", + "ytd", + "one_year", + "two_year", + "three_year", + "four_year", + "five_year", + ] - def handle_indicators(ma): - """Handle indicators.""" - k = {} - if ma: - k["rma"] = dict(length=ma) - return k + df = pd.DataFrame() + chart_df = pd.DataFrame() - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) - standard_params = kwargs["standard_params"] - ma = standard_params.get("ma", None) - prepost = standard_params.get("prepost", False) - symbol = standard_params.get("symbol", "") + if "symbol" in data.columns: + data = data.set_index("symbol") + chart_cols = [] - ta = PlotlyTA() - fig = ta.plot( - data, - indicators=dict(**handle_indicators(ma)), - symbol=f"{symbol} historical data", - prepost=prepost, + if len(data) == 0: + raise ValueError("No data was found in the DataFrame.") + + data = data.drop_duplicates(keep="first") + + for col in cols: + if col in data.columns and data[col].notnull().any(): + df[col.replace("_", " ").title() if col != "ytd" else col.upper()] = data[ + col + ].apply(lambda x: round(x * 100, 4) if x is not None else None) + + if df.empty: + raise ValueError(f"No columns matching, {cols}, were found in the data.") + + chart_df = df.T + chart_cols = chart_df.columns.to_list() + + if "limit" in kwargs and isinstance(kwargs.get("limit"), int): + limit = kwargs.pop("limit", 10) + chart_df = chart_df.head(limit) # type: ignore + + layout_kwargs: Dict[str, Any] = kwargs["layout_kwargs"] if "layout_kwargs" in kwargs else {} # type: ignore + + title = ( + f"{kwargs.pop('title')}" if "title" in kwargs else "Equity Price Performance" ) + orientation = ( + kwargs.pop("orientation") + if "orientation" in kwargs and kwargs.get("orientation") is not None + else "v" + ) + + ytitle = "Performance (%)" + xtitle = None + + if orientation == "h": + xtitle = ytitle # type: ignore + ytitle = None # type: ignore + + fig = bar_chart( + chart_df.reset_index(), + x="index", + y=chart_cols, + title=title, + xtitle=xtitle, + ytitle=ytitle, + orientation=orientation, # type: ignore + ) + fig.update_traces( + hovertemplate=( + "%{fullData.name}:%{y:.2f}%" + if orientation == "v" + else "%{fullData.name}:%{x:.2f}%" + ) + ) + + fig.update_layout(**layout_kwargs) + content = fig.show(external=True).to_plotly_json() # type: ignore + + return fig, content + + +def etf_price_performance( + **kwargs, +) -> Tuple[Union[OpenBBFigure, Figure], Dict[str, Any]]: + """ETF Historical Chart.""" + fig, content = equity_price_performance(**kwargs) + if "title" in kwargs and kwargs.get("title") is not None: + fig.set_title(kwargs.get("title")) # type: ignore + else: + fig.set_title("ETF Price Performance") # type: ignore + + content = fig.show(external=True).to_plotly_json() # type: ignore + return fig, content + + +def etf_holdings(**kwargs) -> Tuple[Union[OpenBBFigure, Figure], Dict[str, Any]]: + """Equity Compare Groups Chart.""" + + if "data" in kwargs and isinstance(kwargs["data"], pd.DataFrame): + data = kwargs["data"] + elif "data" in kwargs and isinstance(kwargs["data"], list): + data = basemodel_to_df(kwargs["data"], index=None) # type: ignore + else: + data = basemodel_to_df(kwargs["obbject_item"], index=None) # type: ignore + + if "weight" not in data.columns: + raise ValueError("No 'weight' column found in the data.") + + orientation = kwargs.get("orientation", "h") + limit = kwargs.get("limit", 20) + symbol = kwargs["standard_params"].get("symbol") # type: ignore + title = kwargs.get("title", f"Top {limit} {symbol} Holdings") + layout_kwargs = kwargs.get("layout_kwargs", {}) + + data = data.sort_values("weight", ascending=False) + limit = min(limit, len(data)) # type: ignore + target = data.head(limit)[["symbol", "weight"]].set_index("symbol") + target = target.multiply(100) + axis_title = "Weight (%)" + + fig = bar_chart( + target.reset_index(), + "symbol", + ["weight"], + title=title, # type: ignore + xtitle=axis_title if orientation == "h" else None, + ytitle=axis_title if orientation == "v" else None, + orientation=orientation, # type: ignore + ) + + fig.update_layout( + hovermode="x" if orientation == "v" else "y", + margin=dict(r=0, l=50) if orientation == "h" else None, + ) + + fig.update_traces( + hovertemplate=( + "%{y:.3f}%" + if orientation == "v" + else "%{x:.3f}%" + ) + ) + + if layout_kwargs: + fig.update_layout(**layout_kwargs) # type: ignore + + content = fig.show(external=True).to_plotly_json() # type: ignore + + return fig, content + + +def equity_price_historical( # noqa: PLR0912 + **kwargs, +) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Equity Price Historical Chart.""" + + if "data" in kwargs and isinstance(kwargs["data"], pd.DataFrame): + data = kwargs["data"] + elif "data" in kwargs and isinstance(kwargs["data"], list): + data = basemodel_to_df(kwargs["data"], index=kwargs.get("index", "date")) # type: ignore + else: + data = basemodel_to_df( + kwargs["obbject_item"], index=kwargs.get("index", "date") # type: ignore + ) + + if "date" in data.columns: + data = data.set_index("date") + + target = str(kwargs.get("target")) + normalize = kwargs.get("normalize") is True + returns = kwargs.get("returns") is True + same_axis = kwargs.get("same_axis") is True + text_color = "black" if ChartStyle().plt_style == "light" else "white" + title = f"{kwargs.get('title')}" if "title" in kwargs else "Historical Prices" + y1title = "" + y2title = "" + candles = True + multi_symbol = ( + bool(kwargs.get("multi_symbol") is True) + or ( + "symbol" in data.columns + and target in data.columns + and len(data.symbol.unique()) > 1 + ) + or ("target" in kwargs and kwargs.get("target") is not None) + or "symbol" in data.columns + or ( + "symbol" not in data.columns + and bool(data.columns.isin(["open", "high", "low", "close"]).all()) + ) + ) + target = "close" if target is None or target == "None" or target == "" else target + + if multi_symbol is True: + if "symbol" not in data.columns and target in data.columns: + data = data[[target]] + y1title = target.title() + if "symbol" in data.columns and target in data.columns: + data = data.pivot(columns="symbol", values=target) + y1title = target + title = f"Historical {target.title()}" + + indicators = kwargs.get("indicators", {}) + candles = bool(~data.columns.isin(["open", "high", "low", "close"]).all()) + candles = candles if kwargs.get("candles", True) else False + volume = kwargs.get("volume", True) if "volume" in data.columns else False + + if normalize is True: + if "symbol" not in data.columns and target in data.columns: + data = data[[target]] + multi_symbol = True + candles = False + volume = False + + if returns is True: + if "symbol" not in data.columns and target in data.columns: + data = data[[target]] + multi_symbol = True + candles = False + volume = False + if ( # pylint: disable = R0916 + multi_symbol is False + and normalize is False + and returns is False + and candles is True + ) or (indicators and multi_symbol is False): + if ( + "heikin_ashi" in kwargs + and kwargs["heikin_ashi"] is True + and candles is True + ): + data = heikin_ashi(data) + title = f"{title} - Heikin Ashi" + _volume = False + if "atr" in indicators: # type: ignore + _volume = volume + volume = False + ta = PlotlyTA() + fig = ta.plot( # type: ignore + data, + indicators=indicators if indicators else {}, # type: ignore + symbol=target if candles is False else "", + candles=candles, + volume=volume, # type: ignore + ) + if _volume is True and "atr" in indicators: # type: ignore + fig.add_inchart_volume(data) + fig.update_layout( + paper_bgcolor="rgba(0,0,0,0)", + plot_bgcolor="rgba(0,0,0,0)", + font=dict(color=text_color), + showlegend=True, + legend=dict( + orientation="v", + yanchor="top", + xanchor="right", + y=0.95, + x=-0.01, + xref="paper", + font=dict(size=12), + bgcolor="rgba(0,0,0,0)", + ), + xaxis=dict( + ticklen=0, + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + zeroline=True, + mirror=True, + showline=True, + ), + xaxis2=dict( + ticklen=0, + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + zeroline=True, + mirror=True, + showline=True, + ), + yaxis=dict( + ticklen=0, + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + zeroline=True, + mirror=True, + showline=True, + tickfont=dict(size=14), + ), + yaxis2=dict( + ticklen=0, + gridcolor="rgba(128,128,128,0.3)", + ), + yaxis3=dict( + ticklen=0, + gridcolor="rgba(128,128,128,0.3)", + ), + dragmode="pan", + hovermode="x", + ) + + if kwargs.get("title"): + title = kwargs["title"] + fig.update_layout(title=dict(text=title, x=0.5)) + + content = fig.to_plotly_json() + + return fig, content + + if multi_symbol is True or candles is False: + + if "symbol" not in data.columns and target in data.columns: + data = data[[target]] + + if "symbol" in data.columns: + data = data.pivot(columns="symbol", values=target) + + title: str = kwargs.get("title", "Historical Prices") # type: ignore + + y1title = data.iloc[:, 0].name + y2title = "" + + if len(data.columns) > 2 or normalize is True or returns is True: + if returns is True or (len(data.columns) > 2 and normalize is False): + data = data.apply(calculate_returns) + title = f"{title} - Cumulative Returns" + y1title = "Percent" + if normalize is True: + if returns is True: + title = f"{title.replace(' - Cumulative Returns', '')} - Normalized Cumulative Returns" + else: + title = title + " - Normalized" + data = data.apply(z_score_standardization) + y1title = None # type: ignore + y2title = None # type: ignore + + fig = OpenBBFigure() + + for i, col in enumerate(data.columns): + + hovertemplate = f"{data[col].name}: %{{y}}" + yaxis = "y1" + if y1title and y1title != "Percent": + yaxis = ( + ( + "y1" + if should_share_axis(data, col, y1title) # type: ignore + or col == y1title + or normalize is True + or returns is True + else "y2" + ) + if same_axis is False + else "y1" + ) + + if yaxis == "y2": + y2title = data[col].name + + fig.add_scatter( + x=data.index, + y=data[col], + name=data[col].name, + mode="lines", + hovertemplate=hovertemplate, + line=dict(width=1, color=LARGE_CYCLER[i % len(LARGE_CYCLER)]), + yaxis=yaxis, + ) + + if normalize is True or returns is True: + y1title = "Percent" if returns is True else None # type: ignore + y2title = None # type: ignore + + if same_axis is True: + y1title = None # type: ignore + y2title = None # type: ignore + + fig.update_layout( + paper_bgcolor="rgba(0,0,0,0)", + plot_bgcolor="rgba(0,0,0,0)", + legend=( + dict( + orientation="v", + yanchor="top", + xanchor="right", + y=0.95, + x=-0.01, + bgcolor="rgba(0,0,0,0)", + ) + if len(data.columns) > 2 + else dict( + orientation="h", + yanchor="bottom", + xanchor="right", + y=1.02, + x=0.98, + bgcolor="rgba(0,0,0,0)", + ) + ), + yaxis1=( + dict( + side="right", + ticklen=0, + showgrid=True, + showline=True, + mirror=True, + gridcolor="rgba(128,128,128,0.3)", + title=dict( + text=y1title if y1title else None, standoff=20, font=dict(size=20) + ), + tickfont=dict(size=14), + anchor="x", + ) + ), + yaxis2=( + dict( + overlaying="y", + side="left", + ticklen=0, + showgrid=False, + title=dict( + text=y2title if y2title else None, standoff=10, font=dict(size=20) + ), + tickfont=dict(size=14), + anchor="x", + ) + if y2title + else None + ), + xaxis=dict( + ticklen=0, + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + showline=True, + mirror=True, + ), + margin=dict(l=20, r=20, b=20, t=20), + dragmode="pan", + hovermode="x", + ) + if kwargs.get("title"): + title = kwargs["title"] + fig.update_layout(title=dict(text=title, x=0.5)) + content = fig.show(external=True).to_plotly_json() return fig, content -def _ta_ma(ma_type: str, **kwargs): - """Plot moving average helper.""" - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) - window = kwargs.get("window", 50) - offset = kwargs.get("offset", 0) - symbol = kwargs.get("symbol", "") +def etf_historical(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """ETF Historical Chart.""" + return equity_price_historical(**kwargs) - ta = PlotlyTA() - fig = ta.plot( - data, - {f"{ma_type.lower()}": dict(length=window, offset=offset)}, - f"{symbol.upper()} {ma_type.upper()}", - False, - volume=False, + +def index_price_historical(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Index Price Historical Chart.""" + return equity_price_historical(**kwargs) + + +def currency_price_historical(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Currency Price Historical Chart.""" + return equity_price_historical(**kwargs) + + +def crypto_price_historical(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Crypto Price Historical Chart.""" + return equity_price_historical(**kwargs) + + +def _ta_ma(**kwargs): + """Plot moving average helper.""" + + index = ( + kwargs.get("index") + if "index" in kwargs and kwargs.get("index") is not None + else "date" + ) + data = kwargs.get("data") + ma_type = ( + kwargs["ma_type"] + if "ma_type" in kwargs and kwargs.get("ma_type") is not None + else "sma" + ) + ma_types = ma_type.split(",") if isinstance(ma_type, str) else ma_type + + if isinstance(data, pd.DataFrame) and not data.empty: + data = data.set_index(index) if index in data.columns else data + + if data is None: + data = basemodel_to_df(kwargs["obbject_item"], index=index) + + if isinstance(data, list): + data = basemodel_to_df(data, index=index) + + window = ( + kwargs.get("length", []) + if "length" in kwargs and kwargs.get("length") is not None + else [50] + ) + offset = kwargs.get("offset", 0) + target = ( + kwargs.get("target") + if "target" in kwargs and kwargs.get("target") is not None + else "close" + ) + + if target not in data.columns and "close" in data.columns: + target = "close" + + if target not in data.columns and "close" not in data.columns: + raise ValueError(f"Column '{target}', or 'close', not found in the data.") + + df = data.copy() + if target in data.columns: + df = df[[target]] + df.columns = ["close"] + title = ( + kwargs.get("title") + if "title" in kwargs and kwargs.get("title") is not None + else f"{ma_type.upper()}" + ) + + fig = OpenBBFigure() + fig = fig.create_subplots( + 1, + 1, + shared_xaxes=True, + vertical_spacing=0.06, + horizontal_spacing=0.01, + row_width=[1], + specs=[[{"secondary_y": True}]], ) fig.update_layout(ChartStyle().plotly_template.get("layout", {})) + + ma_df = pd.DataFrame() + window = [window] if isinstance(window, int) else window + for w in window: + for ma_type in ma_types: + ma_df[f"{ma_type.upper()} {w}"] = getattr(df.ta, ma_type)( + length=w, offset=offset + ) + + if kwargs.get("dropnan") is True: + ma_df = ma_df.dropna() + data = data.iloc[-len(ma_df) :] + + color = 0 + + if ( + "candles" in kwargs + and kwargs.get("candles") is True + and kwargs.get("target") is None + ): + volume = kwargs.get("volume") is True + fig, _ = to_chart(data, candles=True, volume=volume) + + else: + ma_df[f"{target}".title()] = data[target] + + for col in ma_df.columns: + name = col.replace("_", " ") + fig.add_scatter( + x=ma_df.index, + y=ma_df[col], + name=name, + mode="lines", + hovertemplate=f"{name}: %{{y}}", + line=dict(width=1, color=LARGE_CYCLER[color]), + showlegend=True, + ) + color += 1 + + fig.update_layout( + title=dict(text=title, x=0.5, font=dict(size=16)), + paper_bgcolor="rgba(0,0,0,0)", + plot_bgcolor="rgba(0,0,0,0)", + showlegend=True, + legend=dict( + orientation="h", + yanchor="bottom", + xanchor="right", + y=1.02, + x=0.95, + bgcolor="rgba(0,0,0,0)", + ), + xaxis=dict( + ticklen=0, + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + zeroline=True, + mirror=True, + ), + yaxis=dict( + ticklen=0, + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + zeroline=True, + mirror=True, + autorange=True, + ), + ) + content = fig.show(external=True).to_plotly_json() return fig, content -def technical_zlma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: +def technical_sma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Plot simple moving average chart.""" + if "ma_type" not in kwargs: + kwargs["ma_type"] = "sma" + return _ta_ma(**kwargs) + + +def technical_ema(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Exponential moving average chart.""" + if "ma_type" not in kwargs: + kwargs["ma_type"] = "ema" + return _ta_ma(**kwargs) + + +def technical_hma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Hull moving average chart.""" + if "ma_type" not in kwargs: + kwargs["ma_type"] = "hma" + return _ta_ma(**kwargs) + + +def technical_wma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Weighted moving average chart.""" + if "ma_type" not in kwargs: + kwargs["ma_type"] = "wma" + return _ta_ma(**kwargs) + + +def technical_zlma(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: """Zero lag moving average chart.""" - ma_type = "zlma" - return _ta_ma(ma_type, **kwargs) + if "ma_type" not in kwargs: + kwargs["ma_type"] = "zlma" + return _ta_ma(**kwargs) -def technical_aroon(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: - """Aroon chart.""" - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) +def technical_aroon(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: + """Technical Aroon Chart.""" + + if "data" in kwargs and isinstance(kwargs["data"], pd.DataFrame): + data = kwargs["data"] + else: + data = basemodel_to_df( + kwargs["obbject_item"], index=kwargs.get("index", "date") + ) + + if "date" in data.columns: + data = data.set_index("date") + + if "symbol" in data.columns and len(data.symbol.unique()) > 1: + raise ValueError( + "Please provide data with only one symbol and columns for OHLC." + ) + + symbol = kwargs.get("symbol", "") + + volume = kwargs.get("volume") is True + title = f"Aroon Indicator & Oscillator {symbol}" + length = kwargs.get("length", 25) scalar = kwargs.get("scalar", 100) symbol = kwargs.get("symbol", "") ta = PlotlyTA() - fig = ta.plot( + fig = ta.plot( # type: ignore data, dict(aroon=dict(length=length, scalar=scalar)), - f"Aroon on {symbol}", + title, False, - volume=False, + volume=volume, ) + content = fig.show(external=True).to_plotly_json() return fig, content -def technical_sma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: - """Plot simple moving average chart.""" - ma_type = "sma" - return _ta_ma(ma_type, **kwargs) - - -def technical_macd(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: +def technical_macd(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: """Plot moving average convergence divergence chart.""" - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) + + if "data" in kwargs and isinstance(kwargs["data"], pd.DataFrame): + data = kwargs["data"] + else: + data = basemodel_to_df( + kwargs["obbject_item"], index=kwargs.get("index", "date") + ) + + if "date" in data.columns: + data = data.set_index("date") + + if "symbol" in data.columns and len(data.symbol.unique()) > 1: + raise ValueError( + "Please provide data with only one symbol and columns for OHLC." + ) + fast = kwargs.get("fast", 12) slow = kwargs.get("slow", 26) signal = kwargs.get("signal", 9) symbol = kwargs.get("symbol", "") + title = f"{symbol.upper()} MACD" + volume = kwargs.get("volume") is True + ta = PlotlyTA() - fig = ta.plot( + fig = ta.plot( # type: ignore data, dict(macd=dict(fast=fast, slow=slow, signal=signal)), - f"{symbol.upper()} MACD", + title, False, - volume=False, + volume=volume, ) content = fig.show(external=True).to_plotly_json() return fig, content -def technical_hma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: - """Hull moving average chart.""" - ma_type = "hma" - return _ta_ma(ma_type, **kwargs) - - -def technical_adx(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: +def technical_adx(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: """Average directional movement index chart.""" - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) + + if "data" in kwargs and isinstance(kwargs["data"], pd.DataFrame): + data = kwargs["data"] + else: + data = basemodel_to_df( + kwargs["obbject_item"], index=kwargs.get("index", "date") + ) + + if "date" in data.columns: + data = data.set_index("date") + + if "symbol" in data.columns and len(data.symbol.unique()) > 1: + raise ValueError( + "Please provide data with only one symbol and columns for OHLC." + ) + length = kwargs.get("length", 14) scalar = kwargs.get("scalar", 100.0) drift = kwargs.get("drift", 1) symbol = kwargs.get("symbol", "") ta = PlotlyTA() - fig = ta.plot( + fig = ta.plot( # type: ignore data, dict(adx=dict(length=length, scalar=scalar, drift=drift)), f"Average Directional Movement Index (ADX) {symbol}", @@ -151,22 +799,31 @@ def technical_adx(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: return fig, content -def technical_wma(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: - """Weighted moving average chart.""" - ma_type = "wma" - return _ta_ma(ma_type, **kwargs) - - -def technical_rsi(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: +def technical_rsi(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: """Relative strength index chart.""" - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) + + if "data" in kwargs and isinstance(kwargs["data"], pd.DataFrame): + data = kwargs["data"] + else: + data = basemodel_to_df( + kwargs["obbject_item"], index=kwargs.get("index", "date") + ) + + if "date" in data.columns: + data = data.set_index("date") + + if "symbol" in data.columns and len(data.symbol.unique()) > 1: + raise ValueError( + "Please provide data with only one symbol and columns for OHLC." + ) + window = kwargs.get("window", 14) scalar = kwargs.get("scalar", 100.0) drift = kwargs.get("drift", 1) symbol = kwargs.get("symbol", "") ta = PlotlyTA() - fig = ta.plot( + fig = ta.plot( # type: ignore data, dict(rsi=dict(length=window, scalar=scalar, drift=drift)), f"{symbol.upper()} RSI {window}", @@ -178,15 +835,7 @@ def technical_rsi(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: return fig, content -def technical_ema(**kwargs) -> Tuple["OpenBBFigure", Dict[str, Any]]: - """Exponential moving average chart.""" - ma_type = "ema" - return _ta_ma(ma_type, **kwargs) - - -def technical_cones( - **kwargs: TechnicalConesChartQueryParams, -) -> Tuple["OpenBBFigure", Dict[str, Any]]: +def technical_cones(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: """Volatility Cones Chart.""" data = kwargs.get("data") @@ -264,6 +913,11 @@ def technical_cones( ), yaxis=dict( ticklen=0, + showgrid=True, + showline=True, + mirror=True, + zeroline=False, + gridcolor="rgba(128,128,128,0.3)", ), xaxis=dict( type="category", @@ -273,6 +927,8 @@ def technical_cones( ticktext=df_ta.index, title_text="Period", showgrid=False, + showline=True, + mirror=True, zeroline=False, ), margin=dict(l=20, r=20, b=20), @@ -284,9 +940,9 @@ def technical_cones( return fig, content -def economy_fred_series( - **kwargs: Union[Any, FredSeriesChartQueryParams], -) -> Tuple["OpenBBFigure", Dict[str, Any]]: +def economy_fred_series( # noqa: PLR0912 + **kwargs, +) -> Tuple[OpenBBFigure, Dict[str, Any]]: """FRED Series Chart.""" ytitle_dict = { "chg": "Change", @@ -299,20 +955,6 @@ def economy_fred_series( "log": "Natural Log", } - colors = [ - "#1f77b4", - "#7f7f7f", - "#ff7f0e", - "#2ca02c", - "#d62728", - "#9467bd", - "#8c564b", - "#e377c2", - "#7f7f7f", - "#bcbd22", - "#17becf", - ] - provider = kwargs.get("provider") if provider != "fred": @@ -352,21 +994,12 @@ def economy_fred_series( if df_ta.empty or len(df_ta) < 2: raise ValueError( "No data is left after dropping NaN values. Try setting `dropnan = False`," - + " or use the `frequency` parameter on request ." + + " or use the `frequency` parameter on request." ) columns = df_ta.columns.to_list() - def z_score_standardization(data: pd.Series) -> pd.Series: - """Z-Score Standardization Method.""" - return (data - data.mean()) / data.std() - - if normalize: - df_ta = df_ta.apply(z_score_standardization) - - # Extract the metadata from the warnings. - warnings = kwargs.get("warnings") - metadata = json.loads(warnings[0].message) if warnings else {} # type: ignore + metadata = kwargs["extra"].get("results_metadata", {}) # type: ignore # Check if the request was transformed by the FRED API. params = kwargs["extra_params"] if kwargs.get("extra_params") else {} @@ -374,8 +1007,23 @@ def economy_fred_series( # Get a unique list of all units of measurement in the DataFrame. y_units = list({metadata.get(col).get("units") for col in columns if col in metadata}) # type: ignore + if has_params is True and not y_units: + y_units = [ytitle_dict.get(params.transform)] # type: ignore - if len(y_units) > 2 and has_params is False and allow_unsafe is True: + if normalize or ( + kwargs.get("bar") is True + and len(y_units) > 1 + and ( + has_params is False + or not any( + i in params.transform for i in ["pc1", "pch", "pca", "cch", "cca", "log"] # type: ignore + ) + ) + ): + normalize = True + df_ta = df_ta.apply(z_score_standardization) + + if len(y_units) > 2 and has_params is False and allow_unsafe is False: raise RuntimeError( "This method supports up to 2 y-axis units." + " Please use the 'transform' parameter, in the data request," @@ -386,7 +1034,7 @@ def economy_fred_series( y1_units = y_units[0] if y_units else None y1title = y1_units y2title = y_units[1] if len(y_units) > 1 else None - xtitle = "" + xtitle = str(kwargs.get("xtitle", "")) # If the request was transformed, the y-axis will be shared under these conditions. if has_params and any( @@ -398,9 +1046,9 @@ def economy_fred_series( # Set the title for the chart. title: str = "" if isinstance(kwargs, dict) and title in kwargs: - title = kwargs["title"] + title = kwargs["title"] # type: ignore else: - if metadata.get(columns[0]): + if metadata.get(columns[0]): # type: ignore title = metadata.get(columns[0]).get("title") if len(columns) == 1 else "FRED Series" # type: ignore else: title = "FRED Series" @@ -410,12 +1058,39 @@ def economy_fred_series( # Define this to use as a check. y3title: Optional[str] = "" + if kwargs.get("plot_bar") is True or len(df_ta.index) < 100: + margin = dict(l=10, r=5, b=75 if xtitle else 30) + try: + if normalize: + y1title = None + title = f"{title} - Normalized" if title else "Normalized" + bar_mode = kwargs["barmode"] if "barmode" in kwargs else "group" + fig = bar_chart( + df_ta.reset_index(), + "date", + df_ta.columns.to_list(), + title=title, + xtitle=xtitle, + ytitle=y1title, + barmode=bar_mode, # type: ignore + layout_kwargs=dict(margin=margin), # type: ignore + ) + if kwargs.get("layout_kwargs"): + fig.update_layout(kwargs.get("layout_kwargs")) + + if kwargs.get("title"): + fig.set_title(str(kwargs.get("title"))) # type: ignore + + content = fig.to_plotly_json() + + return fig, content # type: ignore + except Exception as _: + warn("Bar chart failed. Attempting line chart.") + # Create the figure object with subplots. fig = OpenBBFigure().create_subplots( rows=1, cols=1, shared_xaxes=True, shared_yaxes=False ) - fig.update_layout(ChartStyle().plotly_template.get("layout", {})) - text_color = "black" if ChartStyle().plt_style == "light" else "white" # For each series in the DataFrame, add a scatter plot. for i, col in enumerate(df_ta.columns): @@ -423,27 +1098,29 @@ def economy_fred_series( # Check if the y-axis should be shared for this series. on_y1 = ( ( - metadata.get(col).get("units") == y1_units + metadata.get(col).get("units") == y1_units # type: ignore or y2title is None # type: ignore + or kwargs.get("same_axis") is True ) - if metadata.get(col) + if metadata.get(col) # type: ignore else False ) if normalize: on_y1 = True + yaxes = "y2" if not on_y1 else "y1" - on_y3 = not metadata.get(col) and normalize is False + on_y3 = not metadata.get(col) and normalize is False # type: ignore if on_y3: yaxes = "y3" - y3title = df_ta[col].name + y3title = df_ta[col].name # type: ignore fig.add_scatter( x=df_ta.index, y=df_ta[col], name=df_ta[col].name, mode="lines", hovertemplate=f"{df_ta[col].name}: %{{y}}", - line=dict(width=1, color=colors[i % len(colors)]), - yaxis=yaxes, + line=dict(width=1, color=LARGE_CYCLER[i % len(LARGE_CYCLER)]), + yaxis="y1" if kwargs.get("same_axis") is True else yaxes, ) # Set the y-axis titles, if supplied. @@ -466,22 +1143,25 @@ def economy_fred_series( title=dict(text=title, x=0.5, font=dict(size=16)), paper_bgcolor="rgba(0,0,0,0)", plot_bgcolor="rgba(0,0,0,0)", - font=dict(color=text_color), legend=dict( orientation="h", yanchor="bottom", xanchor="right", y=1.02, - x=1, + x=0.95, bgcolor="rgba(0,0,0,0)", + font=dict(size=12), ), yaxis=( dict( ticklen=0, side="right", - title=dict(text=y1title, standoff=30, font=dict(size=18)), + showline=True, + mirror=True, + title=dict(text=y1title, standoff=30, font=dict(size=16)), tickfont=dict(size=14), anchor="x", + gridcolor="rgba(128,128,128,0.3)", ) if y1title else None @@ -493,7 +1173,7 @@ def economy_fred_series( ticklen=0, showgrid=False, title=dict( - text=y2title if y2title else None, standoff=10, font=dict(size=18) + text=y2title if y2title else None, standoff=10, font=dict(size=16) ), tickfont=dict(size=14), anchor="x", @@ -514,7 +1194,7 @@ def economy_fred_series( if y3title else None ), - tickfont=dict(size=12, color="rgba(128,128,128,0.75)"), + tickfont=dict(size=12, color="rgba(128,128,128,0.9)"), anchor="free", ) if y3title @@ -522,17 +1202,93 @@ def economy_fred_series( ), xaxis=dict( ticklen=0, - showgrid=False, + showgrid=True, + showline=True, + mirror=True, title=( - dict(text=xtitle, standoff=30, font=dict(size=18)) if xtitle else None + dict(text=xtitle, standoff=30, font=dict(size=16)) if xtitle else None ), + gridcolor="rgba(128,128,128,0.3)", domain=[0.095, 0.95] if y3title else None, ), - margin=dict(r=25, l=25) if normalize is False else None, + margin=dict(r=25, l=25, b=75 if xtitle else 30) if normalize is False else None, autosize=True, dragmode="pan", ) - + if kwargs.get("layout_kwargs"): + fig.update_layout(kwargs.get("layout_kwargs")) + if kwargs.get("title"): + fig.set_title(str(kwargs.get("title"))) content = fig.to_plotly_json() return fig, content + + +def technical_relative_rotation( + **kwargs: Any, +) -> Tuple["OpenBBFigure", Dict[str, Any]]: + """Relative Rotation Chart.""" + + ratios_df = basemodel_to_df(kwargs["obbject_item"].rs_ratios, index="date") # type: ignore + momentum_df = basemodel_to_df(kwargs["obbject_item"].rs_momentum, index="date") # type: ignore + benchmark_symbol = kwargs["obbject_item"].benchmark # type: ignore + study = kwargs.get("study", None) + study = str(kwargs["obbject_item"].study) if study is None else str(study) + show_tails = kwargs.get("show_tails") + show_tails = True if show_tails is None else show_tails + tail_periods = int(kwargs.get("tail_periods")) if "tail_periods" in kwargs else 16 # type: ignore + tail_interval = str(kwargs.get("tail_interval")) if "tail_interval" in kwargs else "week" # type: ignore + date = kwargs.get("date") if "date" in kwargs else None # type: ignore + show_tails = False if date is not None else show_tails + if ratios_df.empty or momentum_df.empty: + raise RuntimeError("Error: No data to plot.") + + if show_tails is True: + fig = relative_rotation.create_rrg_with_tails( + ratios_df, momentum_df, study, benchmark_symbol, tail_periods, tail_interval # type: ignore + ) + + if show_tails is False: + fig = relative_rotation.create_rrg_without_tails( + ratios_df, momentum_df, benchmark_symbol, study, date # type: ignore + ) + + figure = OpenBBFigure(fig) + font_color = "black" if ChartStyle().plt_style == "light" else "white" + figure.update_layout( + paper_bgcolor="rgba(0,0,0,0)", + plot_bgcolor="rgba(255,255,255,1)", + font=dict(color=font_color), + yaxis=dict( + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + side="left", + showline=True, + zeroline=True, + mirror=True, + ticklen=0, + tickfont=dict(size=14), + titlefont=dict(size=16), + ), + xaxis=dict( + showgrid=True, + gridcolor="rgba(128,128,128,0.3)", + showline=True, + zeroline=True, + mirror=True, + ticklen=0, + tickfont=dict(size=14), + titlefont=dict(size=16), + hoverformat="", + ), + hoverlabel=dict( + font_size=12, + ), + hovermode="x", + hoverdistance=50, + ) + if kwargs.get("title") is not None: + figure.set_title(str(kwargs.get("title"))) + content = figure.to_plotly_json() + + return figure, content diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/__init__.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/__init__.py index e69de29bb2d..91c890e79c2 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/__init__.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/__init__.py @@ -0,0 +1 @@ +"""OpenBB Charting core.""" diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/backend.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/backend.py index 2307f3993fc..79d4c56e18b 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/backend.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/backend.py @@ -74,6 +74,7 @@ class Backend(PyWry): max_retries: int = 30, proc_name: str = "OpenBB Terminal", ): + """Create a new instance of the backend.""" self.charting_settings = charting_settings has_version = hasattr(PyWry, "__version__") diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/__init__.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/__init__.py index e69de29bb2d..9997eeed1a7 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/__init__.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/__init__.py @@ -0,0 +1 @@ +"""OpenBB Charting core configuration.""" diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/openbb_styles.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/openbb_styles.py index c3e60e66528..1872e689822 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/openbb_styles.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/config/openbb_styles.py @@ -1,3 +1,5 @@ +"""OpenBB Charting Styles.""" + from typing import Any, List, Optional import pandas as pd @@ -35,10 +37,10 @@ PLT_CANDLESTICKS = dict( increasing=dict(line_color=PLT_STYLE_INCREASING, fillcolor=PLT_STYLE_INCREASING), decreasing=dict(line_color=PLT_STYLE_DECREASING, fillcolor=PLT_STYLE_DECREASING), ) -PLT_STYLE_INCREASING_GREEN = "#009600" -PLT_STYLE_DECREASING_RED = "#c80000" -PLT_FONT = dict(family="Fira Code", size=16) -PLOTLY_FONT = dict(family="Fira Code", size=18) +PLT_STYLE_INCREASING_GREEN = "#00ACFF" +PLT_STYLE_DECREASING_RED = "#e4003a" +PLT_FONT = dict(family="Arial", size=16) +PLOTLY_FONT = dict(family="Arial", size=16) PLT_COLORWAY = [ "#ffed00", @@ -153,8 +155,9 @@ def de_increasing_color_list( increasing_color: str = PLT_STYLE_INCREASING, decreasing_color: str = PLT_STYLE_DECREASING, ) -> List[str]: - """Makes a colorlist for decrease/increase if value in df_column - contains "{contains_str}" default is "-" + """Make a colorlist for decrease/increase if value in df_column. + + Contains "{contains_str}" default is "-" Parameters ---------- @@ -197,8 +200,10 @@ PLOTLY_THEME = dict( nticks=15, showline=True, showgrid=True, + ticklen=0, ), yaxis2=dict( + side="left", zeroline=False, fixedrange=False, anchor="x", @@ -207,8 +212,9 @@ PLOTLY_THEME = dict( nticks=6, tick0=0.5, title_standoff=10, - tickfont=dict(size=15), - showline=True, + tickfont=dict(size=12), + showline=False, + ticklen=0, ), yaxis3=dict( zeroline=False, @@ -219,8 +225,9 @@ PLOTLY_THEME = dict( nticks=6, tick0=0.5, title_standoff=10, - tickfont=dict(size=15), + tickfont=dict(size=12), showline=True, + ticklen=0, ), yaxis4=dict( zeroline=False, @@ -231,24 +238,53 @@ PLOTLY_THEME = dict( nticks=6, tick0=0.5, title_standoff=10, - tickfont=dict(size=15), + tickfont=dict(size=12), showline=True, + ticklen=0, ), xaxis=dict( showgrid=True, - zeroline=True, + zeroline=False, showline=True, rangeslider=dict(visible=False), tickfont=dict(size=16), title_standoff=20, + ticklen=0, + ), + xaxis2=dict( + showgrid=True, + zeroline=False, + showline=True, + rangeslider=dict(visible=False), + tickfont=dict(size=12), + title_standoff=20, + ticklen=0, + ), + xaxis3=dict( + showgrid=True, + zeroline=False, + showline=True, + rangeslider=dict(visible=False), + tickfont=dict(size=12), + title_standoff=20, + ticklen=0, + ), + xaxis4=dict( + showgrid=True, + zeroline=False, + showline=True, + rangeslider=dict(visible=False), + tickfont=dict(size=12), + title_standoff=20, + ticklen=0, ), legend=dict( - yanchor="top", - y=0.99, - xanchor="left", - font_size=15, - bgcolor="rgba(0, 0, 0, 0)", - x=0.01, + orientation="h", + yanchor="bottom", + y=1.02, + xanchor="right", + x=0.95, + font=dict(size=12), ), dragmode="pan", hovermode="x", diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/dummy_backend.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/dummy_backend.py index 2742185f768..8b584bff6aa 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/dummy_backend.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/dummy_backend.py @@ -1,3 +1,5 @@ +"""Dummy backend for charting to avoid import errors.""" + import asyncio import warnings from queue import Queue @@ -52,7 +54,7 @@ class DummyBackend: return cls.instance def __init__(self, daemon: bool = True, max_retries: int = 30): - """Dummy init to avoid import errors.""" + """Use cummy init to avoid import errors.""" self.daemon = daemon self.max_retries = max_retries try: @@ -66,14 +68,14 @@ class DummyBackend: dotenv.set_key(SETTINGS_ENV_FILE, "PLOT_ENABLE_PYWRY", "0") def close(self, reset: bool = False): # pylint: disable=W0613 - pass + """Close the backend.""" def start(self, debug: bool = False): # pylint: disable=W0613 - pass + """Start the backend.""" def send_outgoing(self, outgoing: dict): - pass + """Send outgoing data to the backend.""" async def check_backend(self): - """Dummy check backend method to avoid errors and revert to browser.""" + """Check backend method to avoid errors and revert to browser.""" raise Exception diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/openbb_figure.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/openbb_figure.py index 32e5876817f..6d3315feee3 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/openbb_figure.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/openbb_figure.py @@ -42,6 +42,8 @@ if TYPE_CHECKING: TimeSeriesT = TypeVar("TimeSeriesT", bound="TimeSeries") +pio.default_renderers = "notebook" + class OpenBBFigure(go.Figure): """Custom Figure class for OpenBB Terminal. @@ -84,6 +86,7 @@ class OpenBBFigure(go.Figure): plotlyjs_path: Path = PLOTLYJS_PATH def __init__(self, fig: Optional[go.Figure] = None, **kwargs) -> None: + """Initialize the OpenBBFigure.""" super().__init__() if fig: self.__dict__ = fig.__dict__ @@ -238,8 +241,7 @@ class OpenBBFigure(go.Figure): secondary_y: bool = False, **kwargs, ): - """ - Add a trend line to the figure. + """Add a trend line to the figure. Parameters ---------- @@ -291,8 +293,7 @@ class OpenBBFigure(go.Figure): row: int = 1, col: int = 1, ) -> None: - """ - Add a histogram with a curve and rug plot if desired. + """Add a histogram with a curve and rug plot if desired. Parameters ---------- @@ -560,8 +561,7 @@ class OpenBBFigure(go.Figure): legendrank: Optional[int] = None, **kwargs, ) -> None: - """ - Add a horizontal line with a legend label. + """Add a horizontal line with a legend label. Parameters ---------- @@ -598,8 +598,7 @@ class OpenBBFigure(go.Figure): legendrank: Optional[int] = None, **kwargs, ) -> None: - """ - Add a vertical line with a legend label. + """Add a vertical line with a legend label. Parameters ---------- @@ -667,8 +666,7 @@ class OpenBBFigure(go.Figure): def chart_volume_scaling( df_volume: pd.DataFrame, volume_ticks_x: int = 7 ) -> Dict[str, list]: - """ - Takes df_volume and returns volume_ticks, tickvals for chart volume scaling. + """Take df_volume and returns volume_ticks, tickvals for chart volume scaling. Parameters ---------- @@ -716,8 +714,7 @@ class OpenBBFigure(go.Figure): col: Optional[int] = 1, volume_ticks_x: int = 7, ) -> None: - """ - Add in-chart volume to a subplot. + """Add in-chart volume to a subplot. Parameters ---------- @@ -748,15 +745,18 @@ class OpenBBFigure(go.Figure): yaxis="y2", row=row, col=col, - opacity=0.7, + opacity=0.5, secondary_y=True, + showlegend=False, + hovertemplate="%{y}", ) ticksize = 13 - (self.subplots_kwargs["rows"] // 2) self.update_layout( yaxis2=dict( - fixedrange=True, + fixedrange=False, side="left", - nticks=10, + nticks=8, + autorange=False, range=vol_scale["range"], tickvals=vol_scale["ticks"], showgrid=False, @@ -846,8 +846,7 @@ class OpenBBFigure(go.Figure): export_image: Optional[Union[Path, str]] = "", **kwargs, ) -> "OpenBBFigure": - """ - Show the figure. + """Show the figure. Parameters ---------- @@ -1234,8 +1233,7 @@ class OpenBBFigure(go.Figure): def to_plotly_json( self, ndarray: bool = False, np_nan: bool = False ) -> Dict[str, Any]: - """ - Convert figure to a JSON representation as a Python dict. + """Convert figure to a JSON representation as a Python dict. Parameters ---------- diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly.html b/openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly.html index 0968c0a6998..6912deac3b6 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly.html +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly.html @@ -4008,7 +4008,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho l-51.45-160.536h39.787l19.526,67.894c5.479,19.046,10.479,37.386,14.299,57.397h0.709c4.048-19.298,9.045-38.352,14.526-56.693 l20.487-68.598h38.599L427.518,380.583z`, width: 550, height: 550, transform: "translate(4, 0)" }, downloadImage: { path: "M22.71,6.29a1,1,0,0,0-1.42,0L20,7.59V2a1,1,0,0,0-2,0V7.59l-1.29-1.3a1,1,0,0,0-1.42,1.42l3,3a1,1,0,0,0,.33.21.94.94,0,0,0,.76,0,1,1,0,0,0,.33-.21l3-3A1,1,0,0,0,22.71,6.29ZM19,13a1,1,0,0,0-1,1v.38L16.52,12.9a2.79,2.79,0,0,0-3.93,0l-.7.7L9.41,11.12a2.85,2.85,0,0,0-3.93,0L4,12.6V7A1,1,0,0,1,5,6h8a1,1,0,0,0,0-2H5A3,3,0,0,0,2,7V19a3,3,0,0,0,3,3H17a3,3,0,0,0,3-3V14A1,1,0,0,0,19,13ZM5,20a1,1,0,0,1-1-1V15.43l2.9-2.9a.79.79,0,0,1,1.09,0l3.17,3.17,0,0L15.46,20Zm13-1a.89.89,0,0,1-.18.53L13.31,15l.7-.7a.77.77,0,0,1,1.1,0L18,17.21Z", width: 21, height: 21, transform: "translate(-2, -2)" } - }, $7 = { data: { candlestick: [{ decreasing: { fillcolor: "#e4003a", line: { color: "#e4003a" } }, increasing: { fillcolor: "#00ACFF", line: { color: "#00ACFF" } }, type: "candlestick" }] }, layout: { annotationdefaults: { showarrow: !1 }, autotypenumbers: "strict", colorway: ["#ffed00", "#ef7d00", "#e4003a", "#c13246", "#822661", "#48277c", "#005ca9", "#00aaff", "#9b30d9", "#af005f", "#5f00af", "#af87ff"], dragmode: "pan", font: { family: "Fira Code", size: 18 }, hoverlabel: { align: "left" }, mapbox: { style: "dark" }, hovermode: "x", legend: { bgcolor: "rgba(0, 0, 0, 0)", x: .01, xanchor: "left", y: .99, yanchor: "top", font: { size: 15 } }, paper_bgcolor: "#000000", plot_bgcolor: "#000000", xaxis: { automargin: !0, autorange: !0, rangeslider: { visible: !1 }, showgrid: !0, showline: !0, tickfont: { size: 14 }, zeroline: !1, tick0: 1, title: { standoff: 20 }, linecolor: "#F5EFF3", mirror: !0, ticks: "outside" }, yaxis: { anchor: "x", automargin: !0, fixedrange: !1, zeroline: !1, showgrid: !0, showline: !0, side: "right", tick0: .5, title: { standoff: 20 }, gridcolor: "#283442", linecolor: "#F5EFF3", mirror: !0, ticks: "outside" } } }, K7 = { data: { barpolar: [{ marker: { line: { color: "white", width: .5 }, pattern: { fillmode: "overlay", size: 10, solidity: .2 } }, type: "barpolar" }], bar: [{ error_x: { color: "#2a3f5f" }, error_y: { color: "#2a3f5f" }, marker: { line: { color: "white", width: .5 }, pattern: { fillmode: "overlay", size: 10, solidity: .2 } }, type: "bar" }], carpet: [{ aaxis: { endlinecolor: "#2a3f5f", gridcolor: "#C8D4E3", linecolor: "#C8D4E3", minorgridcolor: "#C8D4E3", startlinecolor: "#2a3f5f" }, baxis: { endlinecolor: "#2a3f5f", gridcolor: "#C8D4E3", linecolor: "#C8D4E3", minorgridcolor: "#C8D4E3", startlinecolor: "#2a3f5f" }, type: "carpet" }], choropleth: [{ colorbar: { outlinewidth: 0, ticks: "" }, type: "choropleth" }], contourcarpet: [{ colorbar: { outlinewidth: 0, ticks: "" }, type: "contourcarpet" }], contour: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "contour" }], heatmapgl: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "heatmapgl" }], heatmap: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "heatmap" }], histogram2dcontour: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "histogram2dcontour" }], histogram2d: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "histogram2d" }], histogram: [{ marker: { pattern: { fillmode: "overlay", size: 10, solidity: .2 } }, type: "histogram" }], mesh3d: [{ colorbar: { outlinewidth: 0, ticks: "" }, type: "mesh3d" }], parcoords: [{ line: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "parcoords" }], pie: [{ automargin: !0, type: "pie" }], scatter3d: [{ line: { colorbar: { outlinewidth: 0, ticks: "" } }, marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatter3d" }], scattercarpet: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattercarpet" }], scattergeo: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattergeo" }], scattergl: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattergl" }], scattermapbox: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattermapbox" }], scatterpolargl: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatterpolargl" }], scatterpolar: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatterpolar" }], scatter: [{ fillpattern: { fillmode: "overlay", size: 10, solidity: .2 }, type: "scatter" }], scatterternary: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatterternary" }], surface: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "surface" }], table: [{ cells: { fill: { color: "#EBF0F8" }, line: { color: "white" } }, header: { fill: { color: "#C8D4E3" }, line: { color: "white" } }, type: "table" }], candlestick: [{ decreasing: { fillcolor: "#c80000", line: { color: "#990000" } }, increasing: { fillcolor: "#009600", line: { color: "#007500" } }, type: "candlestick" }] }, layout: { annotationdefaults: { arrowcolor: "#2a3f5f", arrowhead: 0, arrowwidth: 1, showarrow: !1 }, autotypenumbers: "strict", coloraxis: { colorbar: { outlinewidth: 0, ticks: "" } }, colorscale: { diverging: [[0, "#8e0152"], [.1, "#c51b7d"], [.2, "#de77ae"], [.3, "#f1b6da"], [.4, "#fde0ef"], [.5, "#f7f7f7"], [.6, "#e6f5d0"], [.7, "#b8e186"], [.8, "#7fbc41"], [.9, "#4d9221"], [1, "#276419"]], sequential: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], sequentialminus: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]] }, colorway: ["#254495", "#c13246", "#48277c", "#e4003a", "#ef7d00", "#822661", "#ffed00", "#00aaff", "#9b30d9", "#af005f", "#5f00af", "#af87ff"], font: { color: "#2a3f5f" }, geo: { bgcolor: "white", lakecolor: "white", landcolor: "white", showlakes: !0, showland: !0, subunitcolor: "#C8D4E3" }, hoverlabel: { align: "left" }, hovermode: "x", mapbox: { style: "light" }, paper_bgcolor: "white", plot_bgcolor: "white", polar: { angularaxis: { gridcolor: "#EBF0F8", linecolor: "#EBF0F8", ticks: "" }, bgcolor: "white", radialaxis: { gridcolor: "#EBF0F8", linecolor: "#EBF0F8", ticks: "" } }, scene: { xaxis: { backgroundcolor: "white", gridcolor: "#DFE8F3", gridwidth: 2, linecolor: "#EBF0F8", showbackground: !0, ticks: "", zerolinecolor: "#EBF0F8" }, yaxis: { backgroundcolor: "white", gridcolor: "#DFE8F3", gridwidth: 2, linecolor: "#EBF0F8", showbackground: !0, ticks: "", zerolinecolor: "#EBF0F8" }, zaxis: { backgroundcolor: "white", gridcolor: "#DFE8F3", gridwidth: 2, linecolor: "#EBF0F8", showbackground: !0, ticks: "", zerolinecolor: "#EBF0F8" } }, shapedefaults: { line: { color: "#2a3f5f" } }, ternary: { aaxis: { gridcolor: "#DFE8F3", linecolor: "#A2B1C6", ticks: "" }, baxis: { gridcolor: "#DFE8F3", linecolor: "#A2B1C6", ticks: "" }, bgcolor: "white", caxis: { gridcolor: "#DFE8F3", linecolor: "#A2B1C6", ticks: "" } }, title: { x: .05 }, xaxis: { automargin: !0, ticks: "outside", zerolinewidth: 2, rangeslider: { visible: !1 }, showgrid: !0, showline: !0, tickfont: { size: 15 }, title: { standoff: 20 }, mirror: !0, zeroline: !1 }, yaxis: { automargin: !0, ticks: "outside", tickfont: { size: 15 }, zerolinewidth: 2, fixedrange: !1, title: { standoff: 20 }, nticks: 8, showgrid: !0, showline: !0, side: "right", mirror: !0, zeroline: !1 }, dragmode: "pan", legend: { bgcolor: "rgba(0, 0, 0, 0)", x: 1.03, xanchor: "left", y: .99, yanchor: "top" } } }; function zo() { return zo = Object.assign ? Object.assign.bind() : function (L) { for (var I = 1; I < arguments.length; I++) { var $ = arguments[I]; for (var se in $) Object.prototype.hasOwnProperty.call($, se) && (L[se] = $[se]) } return L }, zo.apply(this, arguments) } function wf(L, I, { checkForDefaultPrevented: $ = !0 } = {}) { return function (Pe) { if (L == null || L(Pe), $ === !1 || !Pe.defaultPrevented) return I == null ? void 0 : I(Pe) } } function J7(L, I) { typeof L == "function" ? L(I) : L != null && (L.current = I) } function S5(...L) { return I => L.forEach($ => J7($, I)) } function pd(...L) { return In.useCallback(S5(...L), L) } function Q7(L, I = []) { let $ = []; function se(R, E) { const e = In.createContext(E), w = $.length; $ = [...$, E]; function k(_) { const { scope: y, children: h, ...l } = _, t = (y == null ? void 0 : y[L][w]) || e, o = In.useMemo(() => l, Object.values(l)); return In.createElement(t.Provider, { value: o }, h) } function i(_, y) { const h = (y == null ? void 0 : y[L][w]) || e, l = In.useContext(h); if (l) return l; if (E !== void 0) return E; throw new Error(`\`${_}\` must be used within \`${R}\``) } return k.displayName = R + "Provider", [k, i] } const Pe = () => { const R = $.map(E => In.createContext(E)); return function (e) { const w = (e == null ? void 0 : e[L]) || R; return In.useMemo(() => ({ [`__scope${L}`]: { ...e, [L]: w } }), [e, w]) } }; return Pe.scopeName = L, [se, eA(Pe, ...I)] } function eA(...L) { const I = L[0]; if (L.length === 1) return I; const $ = () => { const se = L.map(Pe => ({ useScope: Pe(), scopeName: Pe.scopeName })); return function (R) { const E = se.reduce((e, { useScope: w, scopeName: k }) => { const _ = w(R)[`__scope${k}`]; return { ...e, ..._ } }, {}); return In.useMemo(() => ({ [`__scope${I.scopeName}`]: E }), [E]) } }; return $.scopeName = I.scopeName, $ } const Tm = globalThis != null && globalThis.document ? In.useLayoutEffect : () => { }, tA = Z6["useId".toString()] || (() => { }); let nA = 0; function sv(L) { const [I, $] = In.useState(tA()); return Tm(() => { L || $(se => se ?? String(nA++)) }, [L]), L || (I ? `radix-${I}` : "") } function Cf(L) { const I = In.useRef(L); return In.useEffect(() => { I.current = L }), In.useMemo(() => (...$) => { var se; return (se = I.current) === null || se === void 0 ? void 0 : se.call(I, ...$) }, []) } function rA({ prop: L, defaultProp: I, onChange: $ = () => { } }) { const [se, Pe] = iA({ defaultProp: I, onChange: $ }), R = L !== void 0, E = R ? L : se, e = Cf($), w = In.useCallback(k => { if (R) { const _ = typeof k == "function" ? k(L) : k; _ !== L && e(_) } else Pe(k) }, [R, L, Pe, e]); return [E, w] } function iA({ defaultProp: L, onChange: I }) { const $ = In.useState(L), [se] = $, Pe = In.useRef(se), R = Cf(I); return In.useEffect(() => { Pe.current !== se && (R(se), Pe.current = se) }, [se, Pe, R]), $ } const Fy = In.forwardRef((L, I) => { const { children: $, ...se } = L, Pe = In.Children.toArray($), R = Pe.find(oA); if (R) { const E = R.props.children, e = Pe.map(w => w === R ? In.Children.count(E) > 1 ? In.Children.only(null) : In.isValidElement(E) ? E.props.children : null : w); return In.createElement(Am, zo({}, se, { ref: I }), In.isValidElement(E) ? In.cloneElement(E, void 0, e) : null) } return In.createElement(Am, zo({}, se, { ref: I }), $) }); Fy.displayName = "Slot"; const Am = In.forwardRef((L, I) => { const { children: $, ...se } = L; return In.isValidElement($) ? In.cloneElement($, { ...sA(se, $.props), ref: I ? S5(I, $.ref) : $.ref }) : In.Children.count($) > 1 ? In.Children.only(null) : null }); Am.displayName = "SlotClone"; const aA = ({ children: L }) => In.createElement(In.Fragment, null, L); function oA(L) { return In.isValidElement(L) && L.type === aA } function sA(L, I) { const $ = { ...I }; for (const se in I) { const Pe = L[se], R = I[se]; /^on[A-Z]/.test(se) ? Pe && R ? $[se] = (...e) => { R(...e), Pe(...e) } : Pe && ($[se] = Pe) : se === "style" ? $[se] = { ...Pe, ...R } : se === "className" && ($[se] = [Pe, R].filter(Boolean).join(" ")) } return { ...L, ...$ } } const lA = ["a", "button", "div", "form", "h2", "h3", "img", "input", "label", "li", "nav", "ol", "p", "span", "svg", "ul"], Nh = lA.reduce((L, I) => { const $ = In.forwardRef((se, Pe) => { const { asChild: R, ...E } = se, e = R ? Fy : I; return In.useEffect(() => { window[Symbol.for("radix-ui")] = !0 }, []), In.createElement(e, zo({}, E, { ref: Pe })) }); return $.displayName = `Primitive.${I}`, { ...L, [I]: $ } }, {}); function uA(L, I) { L && Ay.flushSync(() => L.dispatchEvent(I)) } function cA(L, I = globalThis == null ? void 0 : globalThis.document) { const $ = Cf(L); In.useEffect(() => { const se = Pe => { Pe.key === "Escape" && $(Pe) }; return I.addEventListener("keydown", se), () => I.removeEventListener("keydown", se) }, [$, I]) } const Mm = "dismissableLayer.update", fA = "dismissableLayer.pointerDownOutside", hA = "dismissableLayer.focusOutside"; let f_; const pA = In.createContext({ layers: new Set, layersWithOutsidePointerEventsDisabled: new Set, branches: new Set }), dA = In.forwardRef((L, I) => { var $; const { disableOutsidePointerEvents: se = !1, onEscapeKeyDown: Pe, onPointerDownOutside: R, onFocusOutside: E, onInteractOutside: e, onDismiss: w, ...k } = L, i = In.useContext(pA), [_, y] = In.useState(null), h = ($ = _ == null ? void 0 : _.ownerDocument) !== null && $ !== void 0 ? $ : globalThis == null ? void 0 : globalThis.document, [, l] = In.useState({}), t = pd(I, b => y(b)), o = Array.from(i.layers), [r] = [...i.layersWithOutsidePointerEventsDisabled].slice(-1), n = o.indexOf(r), a = _ ? o.indexOf(_) : -1, s = i.layersWithOutsidePointerEventsDisabled.size > 0, u = a >= n, p = gA(b => { const g = b.target, f = [...i.branches].some(v => v.contains(g)); !u || f || (R == null || R(b), e == null || e(b), b.defaultPrevented || w == null || w()) }, h), c = vA(b => { const g = b.target;[...i.branches].some(v => v.contains(g)) || (E == null || E(b), e == null || e(b), b.defaultPrevented || w == null || w()) }, h); return cA(b => { a === i.layers.size - 1 && (Pe == null || Pe(b), !b.defaultPrevented && w && (b.preventDefault(), w())) }, h), In.useEffect(() => { if (_) return se && (i.layersWithOutsidePointerEventsDisabled.size === 0 && (f_ = h.body.style.pointerEvents, h.body.style.pointerEvents = "none"), i.layersWithOutsidePointerEventsDisabled.add(_)), i.layers.add(_), h_(), () => { se && i.layersWithOutsidePointerEventsDisabled.size === 1 && (h.body.style.pointerEvents = f_) } }, [_, h, se, i]), In.useEffect(() => () => { _ && (i.layers.delete(_), i.layersWithOutsidePointerEventsDisabled.delete(_), h_()) }, [_, i]), In.useEffect(() => { const b = () => l({}); return document.addEventListener(Mm, b), () => document.removeEventListener(Mm, b) }, []), In.createElement(Nh.div, zo({}, k, { ref: t, style: { pointerEvents: s ? u ? "auto" : "none" : void 0, ...L.style }, onFocusCapture: wf(L.onFocusCapture, c.onFocusCapture), onBlurCapture: wf(L.onBlurCapture, c.onBlurCapture), onPointerDownCapture: wf(L.onPointerDownCapture, p.onPointerDownCapture) })) }); function gA(L, I = globalThis == null ? void 0 : globalThis.document) { const $ = Cf(L), se = In.useRef(!1), Pe = In.useRef(() => { }); return In.useEffect(() => { const R = e => { if (e.target && !se.current) { let i = function () { E5(fA, $, k, { discrete: !0 }) }; var w = i; const k = { originalEvent: e }; e.pointerType === "touch" ? (I.removeEventListener("click", Pe.current), Pe.current = i, I.addEventListener("click", Pe.current, { once: !0 })) : i() } se.current = !1 }, E = window.setTimeout(() => { I.addEventListener("pointerdown", R) }, 0); return () => { window.clearTimeout(E), I.removeEventListener("pointerdown", R), I.removeEventListener("click", Pe.current) } }, [I, $]), { onPointerDownCapture: () => se.current = !0 } } function vA(L, I = globalThis == null ? void 0 : globalThis.document) { const $ = Cf(L), se = In.useRef(!1); return In.useEffect(() => { const Pe = R => { R.target && !se.current && E5(hA, $, { originalEvent: R }, { discrete: !1 }) }; return I.addEventListener("focusin", Pe), () => I.removeEventListener("focusin", Pe) }, [I, $]), { onFocusCapture: () => se.current = !0, onBlurCapture: () => se.current = !1 } } function h_() { const L = new CustomEvent(Mm); document.dispatchEvent(L) } function E5(L, I, $, { discrete: se }) { const Pe = $.originalEvent.target, R = new CustomEvent(L, { bubbles: !1, cancelable: !0, detail: $ }); I && Pe.addEventListener(L, I, { once: !0 }), se ? uA(Pe, R) : Pe.dispatchEvent(R) } const lv = "focusScope.autoFocusOnMount", uv = "focusScope.autoFocusOnUnmount", p_ = { bubbles: !1, cancelable: !0 }, mA = In.forwardRef((L, I) => { const { loop: $ = !1, trapped: se = !1, onMountAutoFocus: Pe, onUnmountAutoFocus: R, ...E } = L, [e, w] = In.useState(null), k = Cf(Pe), i = Cf(R), _ = In.useRef(null), y = pd(I, t => w(t)), h = In.useRef({ paused: !1, pause() { this.paused = !0 }, resume() { this.paused = !1 } }).current; In.useEffect(() => { if (se) { let n = function (p) { if (h.paused || !e) return; const c = p.target; e.contains(c) ? _.current = c : kc(_.current, { select: !0 }) }, a = function (p) { if (h.paused || !e) return; const c = p.relatedTarget; c !== null && (e.contains(c) || kc(_.current, { select: !0 })) }, s = function (p) { const c = document.activeElement; for (const b of p) b.removedNodes.length > 0 && (e != null && e.contains(c) || kc(e)) }; var t = n, o = a, r = s; document.addEventListener("focusin", n), document.addEventListener("focusout", a); const u = new MutationObserver(s); return e && u.observe(e, { childList: !0, subtree: !0 }), () => { document.removeEventListener("focusin", n), document.removeEventListener("focusout", a), u.disconnect() } } }, [se, e, h.paused]), In.useEffect(() => { if (e) { g_.add(h); const t = document.activeElement; if (!e.contains(t)) { const r = new CustomEvent(lv, p_); e.addEventListener(lv, k), e.dispatchEvent(r), r.defaultPrevented || (yA(kA(C5(e)), { select: !0 }), document.activeElement === t && kc(e)) } return () => { e.removeEventListener(lv, k), setTimeout(() => { const r = new CustomEvent(uv, p_); e.addEventListener(uv, i), e.dispatchEvent(r), r.defaultPrevented || kc(t ?? document.body, { select: !0 }), e.removeEventListener(uv, i), g_.remove(h) }, 0) } } }, [e, k, i, h]); const l = In.useCallback(t => { if (!$ && !se || h.paused) return; const o = t.key === "Tab" && !t.altKey && !t.ctrlKey && !t.metaKey, r = document.activeElement; if (o && r) { const n = t.currentTarget, [a, s] = xA(n); a && s ? !t.shiftKey && r === s ? (t.preventDefault(), $ && kc(a, { select: !0 })) : t.shiftKey && r === a && (t.preventDefault(), $ && kc(s, { select: !0 })) : r === n && t.preventDefault() } }, [$, se, h.paused]); return In.createElement(Nh.div, zo({ tabIndex: -1 }, E, { ref: y, onKeyDown: l })) }); function yA(L, { select: I = !1 } = {}) { const $ = document.activeElement; for (const se of L) if (kc(se, { select: I }), document.activeElement !== $) return } function xA(L) { const I = C5(L), $ = d_(I, L), se = d_(I.reverse(), L); return [$, se] } function C5(L) { const I = [], $ = document.createTreeWalker(L, NodeFilter.SHOW_ELEMENT, { acceptNode: se => { const Pe = se.tagName === "INPUT" && se.type === "hidden"; return se.disabled || se.hidden || Pe ? NodeFilter.FILTER_SKIP : se.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP } }); for (; $.nextNode();)I.push($.currentNode); return I } function d_(L, I) { for (const $ of L) if (!bA($, { upTo: I })) return $ } function bA(L, { upTo: I }) { if (getComputedStyle(L).visibility === "hidden") return !0; for (; L;) { if (I !== void 0 && L === I) return !1; if (getComputedStyle(L).display === "none") return !0; L = L.parentElement } return !1 } function _A(L) { return L instanceof HTMLInputElement && "select" in L } function kc(L, { select: I = !1 } = {}) { if (L && L.focus) { const $ = document.activeElement; L.focus({ preventScroll: !0 }), L !== $ && _A(L) && I && L.select() } } const g_ = wA(); function wA() { let L = []; return { add(I) { const $ = L[0]; I !== $ && ($ == null || $.pause()), L = v_(L, I), L.unshift(I) }, remove(I) { var $; L = v_(L, I), ($ = L[0]) === null || $ === void 0 || $.resume() } } } function v_(L, I) { const $ = [...L], se = $.indexOf(I); return se !== -1 && $.splice(se, 1), $ } function kA(L) { return L.filter(I => I.tagName !== "A") } function TA(L, I) { return In.useReducer(($, se) => { const Pe = I[$][se]; return Pe ?? $ }, L) } const By = L => { const { present: I, children: $ } = L, se = AA(I), Pe = typeof $ == "function" ? $({ present: se.isPresent }) : In.Children.only($), R = pd(se.ref, Pe.ref); return typeof $ == "function" || se.isPresent ? In.cloneElement(Pe, { ref: R }) : null }; By.displayName = "Presence"; function AA(L) { const [I, $] = In.useState(), se = In.useRef({}), Pe = In.useRef(L), R = In.useRef("none"), E = L ? "mounted" : "unmounted", [e, w] = TA(E, { mounted: { UNMOUNT: "unmounted", ANIMATION_OUT: "unmountSuspended" }, unmountSuspended: { MOUNT: "mounted", ANIMATION_END: "unmounted" }, unmounted: { MOUNT: "mounted" } }); return In.useEffect(() => { const k = b0(se.current); R.current = e === "mounted" ? k : "none" }, [e]), Tm(() => { const k = se.current, i = Pe.current; if (i !== L) { const y = R.current, h = b0(k); L ? w("MOUNT") : h === "none" || (k == null ? void 0 : k.display) === "none" ? w("UNMOUNT") : w(i && y !== h ? "ANIMATION_OUT" : "UNMOUNT"), Pe.current = L } }, [L, w]), Tm(() => { if (I) { const k = _ => { const h = b0(se.current).includes(_.animationName); _.target === I && h && Ay.flushSync(() => w("ANIMATION_END")) }, i = _ => { _.target === I && (R.current = b0(se.current)) }; return I.addEventListener("animationstart", i), I.addEventListener("animationcancel", k), I.addEventListener("animationend", k), () => { I.removeEventListener("animationstart", i), I.removeEventListener("animationcancel", k), I.removeEventListener("animationend", k) } } else w("ANIMATION_END") }, [I, w]), { isPresent: ["mounted", "unmountSuspended"].includes(e), ref: In.useCallback(k => { k && (se.current = getComputedStyle(k)), $(k) }, []) } } function b0(L) { return (L == null ? void 0 : L.animationName) || "none" } let cv = 0; function MA() { In.useEffect(() => { var L, I; const $ = document.querySelectorAll("[data-radix-focus-guard]"); return document.body.insertAdjacentElement("afterbegin", (L = $[0]) !== null && L !== void 0 ? L : m_()), document.body.insertAdjacentElement("beforeend", (I = $[1]) !== null && I !== void 0 ? I : m_()), cv++, () => { cv === 1 && document.querySelectorAll("[data-radix-focus-guard]").forEach(se => se.remove()), cv-- } }, []) } function m_() { const L = document.createElement("span"); return L.setAttribute("data-radix-focus-guard", ""), L.tabIndex = 0, L.style.cssText = "outline: none; opacity: 0; position: fixed; pointer-events: none", L } var ku = function () { return ku = Object.assign || function (I) { for (var $, se = 1, Pe = arguments.length; se < Pe; se++) { $ = arguments[se]; for (var R in $) Object.prototype.hasOwnProperty.call($, R) && (I[R] = $[R]) } return I }, ku.apply(this, arguments) }; function L5(L, I) { var $ = {}; for (var se in L) Object.prototype.hasOwnProperty.call(L, se) && I.indexOf(se) < 0 && ($[se] = L[se]); if (L != null && typeof Object.getOwnPropertySymbols == "function") for (var Pe = 0, se = Object.getOwnPropertySymbols(L); Pe < se.length; Pe++)I.indexOf(se[Pe]) < 0 && Object.prototype.propertyIsEnumerable.call(L, se[Pe]) && ($[se[Pe]] = L[se[Pe]]); return $ } function SA(L, I, $) { if ($ || arguments.length === 2) for (var se = 0, Pe = I.length, R; se < Pe; se++)(R || !(se in I)) && (R || (R = Array.prototype.slice.call(I, 0, se)), R[se] = I[se]); return L.concat(R || Array.prototype.slice.call(I)) } var H0 = "right-scroll-bar-position", q0 = "width-before-scroll-bar", EA = "with-scroll-bars-hidden", CA = "--removed-body-scroll-bar-size"; function LA(L, I) { return typeof L == "function" ? L(I) : L && (L.current = I), L } function PA(L, I) { var $ = In.useState(function () { return { value: L, callback: I, facade: { get current() { return $.value }, set current(se) { var Pe = $.value; Pe !== se && ($.value = se, $.callback(se, Pe)) } } } })[0]; return $.callback = I, $.facade } function OA(L, I) { return PA(I || null, function ($) { return L.forEach(function (se) { return LA(se, $) }) }) } function IA(L) { return L } function RA(L, I) { I === void 0 && (I = IA); var $ = [], se = !1, Pe = { read: function () { if (se) throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`."); return $.length ? $[$.length - 1] : L }, useMedium: function (R) { var E = I(R, se); return $.push(E), function () { $ = $.filter(function (e) { return e !== E }) } }, assignSyncMedium: function (R) { for (se = !0; $.length;) { var E = $; $ = [], E.forEach(R) } $ = { push: function (e) { return R(e) }, filter: function () { return $ } } }, assignMedium: function (R) { se = !0; var E = []; if ($.length) { var e = $; $ = [], e.forEach(R), E = $ } var w = function () { var i = E; E = [], i.forEach(R) }, k = function () { return Promise.resolve().then(w) }; k(), $ = { push: function (i) { E.push(i), k() }, filter: function (i) { return E = E.filter(i), $ } } } }; return Pe } function zA(L) { L === void 0 && (L = {}); var I = RA(null); return I.options = ku({ async: !0, ssr: !1 }, L), I } var P5 = function (L) { var I = L.sideCar, $ = L5(L, ["sideCar"]); if (!I) throw new Error("Sidecar: please provide `sideCar` property to import the right car"); var se = I.read(); if (!se) throw new Error("Sidecar medium not found"); return In.createElement(se, ku({}, $)) }; P5.isSideCarExport = !0; function DA(L, I) { return L.useMedium(I), P5 } var O5 = zA(), fv = function () { }, B1 = In.forwardRef(function (L, I) { var $ = In.useRef(null), se = In.useState({ onScrollCapture: fv, onWheelCapture: fv, onTouchMoveCapture: fv }), Pe = se[0], R = se[1], E = L.forwardProps, e = L.children, w = L.className, k = L.removeScrollBar, i = L.enabled, _ = L.shards, y = L.sideCar, h = L.noIsolation, l = L.inert, t = L.allowPinchZoom, o = L.as, r = o === void 0 ? "div" : o, n = L5(L, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "as"]), a = y, s = OA([$, I]), u = ku(ku({}, n), Pe); return In.createElement(In.Fragment, null, i && In.createElement(a, { sideCar: O5, removeScrollBar: k, shards: _, noIsolation: h, inert: l, setCallbacks: R, allowPinchZoom: !!t, lockRef: $ }), E ? In.cloneElement(In.Children.only(e), ku(ku({}, u), { ref: s })) : In.createElement(r, ku({}, u, { className: w, ref: s }), e)) }); B1.defaultProps = { enabled: !0, removeScrollBar: !0, inert: !1 }; B1.classNames = { fullWidth: q0, zeroRight: H0 }; var y_, FA = function () { if (y_) return y_; if (typeof __webpack_nonce__ < "u") return __webpack_nonce__ }; function BA() { if (!document) return null; var L = document.createElement("style"); L.type = "text/css"; var I = FA(); return I && L.setAttribute("nonce", I), L } function NA(L, I) { L.styleSheet ? L.styleSheet.cssText = I : L.appendChild(document.createTextNode(I)) } function jA(L) { var I = document.head || document.getElementsByTagName("head")[0]; I.appendChild(L) } var UA = function () { var L = 0, I = null; return { add: function ($) { L == 0 && (I = BA()) && (NA(I, $), jA(I)), L++ }, remove: function () { L--, !L && I && (I.parentNode && I.parentNode.removeChild(I), I = null) } } }, VA = function () { var L = UA(); return function (I, $) { In.useEffect(function () { return L.add(I), function () { L.remove() } }, [I && $]) } }, I5 = function () { var L = VA(), I = function ($) { var se = $.styles, Pe = $.dynamic; return L(se, Pe), null }; return I }, HA = { left: 0, top: 0, right: 0, gap: 0 }, hv = function (L) { return parseInt(L || "", 10) || 0 }, qA = function (L) { var I = window.getComputedStyle(document.body), $ = I[L === "padding" ? "paddingLeft" : "marginLeft"], se = I[L === "padding" ? "paddingTop" : "marginTop"], Pe = I[L === "padding" ? "paddingRight" : "marginRight"]; return [hv($), hv(se), hv(Pe)] }, GA = function (L) { if (L === void 0 && (L = "margin"), typeof window > "u") return HA; var I = qA(L), $ = document.documentElement.clientWidth, se = window.innerWidth; return { left: I[0], top: I[1], right: I[2], gap: Math.max(0, se - $ + I[2] - I[0]) } }, WA = I5(), ZA = function (L, I, $, se) { + }, $7 = { data: { candlestick: [{ decreasing: { fillcolor: "#e4003a", line: { color: "#e4003a" } }, increasing: { fillcolor: "#00ACFF", line: { color: "#00ACFF" } }, type: "candlestick" }] }, layout: { annotationdefaults: { showarrow: !1 }, autotypenumbers: "strict", colorway: ["#ffed00", "#ef7d00", "#e4003a", "#c13246", "#822661", "#48277c", "#005ca9", "#00aaff", "#9b30d9", "#af005f", "#5f00af", "#af87ff"], dragmode: "pan", font: { family: "Arial", size: 18 }, hoverlabel: { align: "left" }, mapbox: { style: "dark" }, hovermode: "x", legend: { bgcolor: "rgba(0, 0, 0, 0)", x: .01, xanchor: "left", y: .99, yanchor: "top", font: { size: 15 } }, paper_bgcolor: "#000000", plot_bgcolor: "#000000", xaxis: { automargin: !0, autorange: !0, rangeslider: { visible: !1 }, showgrid: !0, showline: !0, tickfont: { size: 14 }, zeroline: !1, tick0: 1, title: { standoff: 20 }, linecolor: "#F5EFF3", mirror: !0, ticks: "outside" }, yaxis: { anchor: "x", automargin: !0, fixedrange: !1, zeroline: !1, showgrid: !0, showline: !0, side: "right", tick0: .5, title: { standoff: 20 }, gridcolor: "#283442", linecolor: "#F5EFF3", mirror: !0, ticks: "outside" } } }, K7 = { data: { barpolar: [{ marker: { line: { color: "white", width: .5 }, pattern: { fillmode: "overlay", size: 10, solidity: .2 } }, type: "barpolar" }], bar: [{ error_x: { color: "#2a3f5f" }, error_y: { color: "#2a3f5f" }, marker: { line: { color: "white", width: .5 }, pattern: { fillmode: "overlay", size: 10, solidity: .2 } }, type: "bar" }], carpet: [{ aaxis: { endlinecolor: "#2a3f5f", gridcolor: "#C8D4E3", linecolor: "#C8D4E3", minorgridcolor: "#C8D4E3", startlinecolor: "#2a3f5f" }, baxis: { endlinecolor: "#2a3f5f", gridcolor: "#C8D4E3", linecolor: "#C8D4E3", minorgridcolor: "#C8D4E3", startlinecolor: "#2a3f5f" }, type: "carpet" }], choropleth: [{ colorbar: { outlinewidth: 0, ticks: "" }, type: "choropleth" }], contourcarpet: [{ colorbar: { outlinewidth: 0, ticks: "" }, type: "contourcarpet" }], contour: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "contour" }], heatmapgl: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "heatmapgl" }], heatmap: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "heatmap" }], histogram2dcontour: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "histogram2dcontour" }], histogram2d: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "histogram2d" }], histogram: [{ marker: { pattern: { fillmode: "overlay", size: 10, solidity: .2 } }, type: "histogram" }], mesh3d: [{ colorbar: { outlinewidth: 0, ticks: "" }, type: "mesh3d" }], parcoords: [{ line: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "parcoords" }], pie: [{ automargin: !0, type: "pie" }], scatter3d: [{ line: { colorbar: { outlinewidth: 0, ticks: "" } }, marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatter3d" }], scattercarpet: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattercarpet" }], scattergeo: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattergeo" }], scattergl: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattergl" }], scattermapbox: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scattermapbox" }], scatterpolargl: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatterpolargl" }], scatterpolar: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatterpolar" }], scatter: [{ fillpattern: { fillmode: "overlay", size: 10, solidity: .2 }, type: "scatter" }], scatterternary: [{ marker: { colorbar: { outlinewidth: 0, ticks: "" } }, type: "scatterternary" }], surface: [{ colorbar: { outlinewidth: 0, ticks: "" }, colorscale: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], type: "surface" }], table: [{ cells: { fill: { color: "#EBF0F8" }, line: { color: "white" } }, header: { fill: { color: "#C8D4E3" }, line: { color: "white" } }, type: "table" }], candlestick: [{ decreasing: { fillcolor: "#e4003a", line: { color: "#990000" } }, increasing: { fillcolor: "#00ACFF", line: { color: "#00ACFF" } }, type: "candlestick" }] }, layout: { annotationdefaults: { arrowcolor: "#2a3f5f", arrowhead: 0, arrowwidth: 1, showarrow: !1 }, autotypenumbers: "strict", coloraxis: { colorbar: { outlinewidth: 0, ticks: "" } }, colorscale: { diverging: [[0, "#8e0152"], [.1, "#c51b7d"], [.2, "#de77ae"], [.3, "#f1b6da"], [.4, "#fde0ef"], [.5, "#f7f7f7"], [.6, "#e6f5d0"], [.7, "#b8e186"], [.8, "#7fbc41"], [.9, "#4d9221"], [1, "#276419"]], sequential: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]], sequentialminus: [[0, "#0d0887"], [.1111111111111111, "#46039f"], [.2222222222222222, "#7201a8"], [.3333333333333333, "#9c179e"], [.4444444444444444, "#bd3786"], [.5555555555555556, "#d8576b"], [.6666666666666666, "#ed7953"], [.7777777777777778, "#fb9f3a"], [.8888888888888888, "#fdca26"], [1, "#f0f921"]] }, colorway: ["#254495", "#c13246", "#48277c", "#e4003a", "#ef7d00", "#822661", "#ffed00", "#00aaff", "#9b30d9", "#af005f", "#5f00af", "#af87ff"], font: { color: "#2a3f5f" }, geo: { bgcolor: "white", lakecolor: "white", landcolor: "white", showlakes: !0, showland: !0, subunitcolor: "#C8D4E3" }, hoverlabel: { align: "left" }, hovermode: "x", mapbox: { style: "light" }, paper_bgcolor: "white", plot_bgcolor: "white", polar: { angularaxis: { gridcolor: "#EBF0F8", linecolor: "#EBF0F8", ticks: "" }, bgcolor: "white", radialaxis: { gridcolor: "#EBF0F8", linecolor: "#EBF0F8", ticks: "" } }, scene: { xaxis: { backgroundcolor: "white", gridcolor: "#DFE8F3", gridwidth: 2, linecolor: "#EBF0F8", showbackground: !0, ticks: "", zerolinecolor: "#EBF0F8" }, yaxis: { backgroundcolor: "white", gridcolor: "#DFE8F3", gridwidth: 2, linecolor: "#EBF0F8", showbackground: !0, ticks: "", zerolinecolor: "#EBF0F8" }, zaxis: { backgroundcolor: "white", gridcolor: "#DFE8F3", gridwidth: 2, linecolor: "#EBF0F8", showbackground: !0, ticks: "", zerolinecolor: "#EBF0F8" } }, shapedefaults: { line: { color: "#2a3f5f" } }, ternary: { aaxis: { gridcolor: "#DFE8F3", linecolor: "#A2B1C6", ticks: "" }, baxis: { gridcolor: "#DFE8F3", linecolor: "#A2B1C6", ticks: "" }, bgcolor: "white", caxis: { gridcolor: "#DFE8F3", linecolor: "#A2B1C6", ticks: "" } }, title: { x: .05 }, xaxis: { automargin: !0, ticks: "outside", zerolinewidth: 2, rangeslider: { visible: !1 }, showgrid: !0, showline: !0, tickfont: { size: 15 }, title: { standoff: 20 }, mirror: !0, zeroline: !1 }, yaxis: { automargin: !0, ticks: "outside", tickfont: { size: 15 }, zerolinewidth: 2, fixedrange: !1, title: { standoff: 20 }, nticks: 8, showgrid: !0, showline: !0, side: "right", mirror: !0, zeroline: !1 }, dragmode: "pan", legend: { bgcolor: "rgba(0, 0, 0, 0)", x: 1.03, xanchor: "left", y: .99, yanchor: "top" } } }; function zo() { return zo = Object.assign ? Object.assign.bind() : function (L) { for (var I = 1; I < arguments.length; I++) { var $ = arguments[I]; for (var se in $) Object.prototype.hasOwnProperty.call($, se) && (L[se] = $[se]) } return L }, zo.apply(this, arguments) } function wf(L, I, { checkForDefaultPrevented: $ = !0 } = {}) { return function (Pe) { if (L == null || L(Pe), $ === !1 || !Pe.defaultPrevented) return I == null ? void 0 : I(Pe) } } function J7(L, I) { typeof L == "function" ? L(I) : L != null && (L.current = I) } function S5(...L) { return I => L.forEach($ => J7($, I)) } function pd(...L) { return In.useCallback(S5(...L), L) } function Q7(L, I = []) { let $ = []; function se(R, E) { const e = In.createContext(E), w = $.length; $ = [...$, E]; function k(_) { const { scope: y, children: h, ...l } = _, t = (y == null ? void 0 : y[L][w]) || e, o = In.useMemo(() => l, Object.values(l)); return In.createElement(t.Provider, { value: o }, h) } function i(_, y) { const h = (y == null ? void 0 : y[L][w]) || e, l = In.useContext(h); if (l) return l; if (E !== void 0) return E; throw new Error(`\`${_}\` must be used within \`${R}\``) } return k.displayName = R + "Provider", [k, i] } const Pe = () => { const R = $.map(E => In.createContext(E)); return function (e) { const w = (e == null ? void 0 : e[L]) || R; return In.useMemo(() => ({ [`__scope${L}`]: { ...e, [L]: w } }), [e, w]) } }; return Pe.scopeName = L, [se, eA(Pe, ...I)] } function eA(...L) { const I = L[0]; if (L.length === 1) return I; const $ = () => { const se = L.map(Pe => ({ useScope: Pe(), scopeName: Pe.scopeName })); return function (R) { const E = se.reduce((e, { useScope: w, scopeName: k }) => { const _ = w(R)[`__scope${k}`]; return { ...e, ..._ } }, {}); return In.useMemo(() => ({ [`__scope${I.scopeName}`]: E }), [E]) } }; return $.scopeName = I.scopeName, $ } const Tm = globalThis != null && globalThis.document ? In.useLayoutEffect : () => { }, tA = Z6["useId".toString()] || (() => { }); let nA = 0; function sv(L) { const [I, $] = In.useState(tA()); return Tm(() => { L || $(se => se ?? String(nA++)) }, [L]), L || (I ? `radix-${I}` : "") } function Cf(L) { const I = In.useRef(L); return In.useEffect(() => { I.current = L }), In.useMemo(() => (...$) => { var se; return (se = I.current) === null || se === void 0 ? void 0 : se.call(I, ...$) }, []) } function rA({ prop: L, defaultProp: I, onChange: $ = () => { } }) { const [se, Pe] = iA({ defaultProp: I, onChange: $ }), R = L !== void 0, E = R ? L : se, e = Cf($), w = In.useCallback(k => { if (R) { const _ = typeof k == "function" ? k(L) : k; _ !== L && e(_) } else Pe(k) }, [R, L, Pe, e]); return [E, w] } function iA({ defaultProp: L, onChange: I }) { const $ = In.useState(L), [se] = $, Pe = In.useRef(se), R = Cf(I); return In.useEffect(() => { Pe.current !== se && (R(se), Pe.current = se) }, [se, Pe, R]), $ } const Fy = In.forwardRef((L, I) => { const { children: $, ...se } = L, Pe = In.Children.toArray($), R = Pe.find(oA); if (R) { const E = R.props.children, e = Pe.map(w => w === R ? In.Children.count(E) > 1 ? In.Children.only(null) : In.isValidElement(E) ? E.props.children : null : w); return In.createElement(Am, zo({}, se, { ref: I }), In.isValidElement(E) ? In.cloneElement(E, void 0, e) : null) } return In.createElement(Am, zo({}, se, { ref: I }), $) }); Fy.displayName = "Slot"; const Am = In.forwardRef((L, I) => { const { children: $, ...se } = L; return In.isValidElement($) ? In.cloneElement($, { ...sA(se, $.props), ref: I ? S5(I, $.ref) : $.ref }) : In.Children.count($) > 1 ? In.Children.only(null) : null }); Am.displayName = "SlotClone"; const aA = ({ children: L }) => In.createElement(In.Fragment, null, L); function oA(L) { return In.isValidElement(L) && L.type === aA } function sA(L, I) { const $ = { ...I }; for (const se in I) { const Pe = L[se], R = I[se]; /^on[A-Z]/.test(se) ? Pe && R ? $[se] = (...e) => { R(...e), Pe(...e) } : Pe && ($[se] = Pe) : se === "style" ? $[se] = { ...Pe, ...R } : se === "className" && ($[se] = [Pe, R].filter(Boolean).join(" ")) } return { ...L, ...$ } } const lA = ["a", "button", "div", "form", "h2", "h3", "img", "input", "label", "li", "nav", "ol", "p", "span", "svg", "ul"], Nh = lA.reduce((L, I) => { const $ = In.forwardRef((se, Pe) => { const { asChild: R, ...E } = se, e = R ? Fy : I; return In.useEffect(() => { window[Symbol.for("radix-ui")] = !0 }, []), In.createElement(e, zo({}, E, { ref: Pe })) }); return $.displayName = `Primitive.${I}`, { ...L, [I]: $ } }, {}); function uA(L, I) { L && Ay.flushSync(() => L.dispatchEvent(I)) } function cA(L, I = globalThis == null ? void 0 : globalThis.document) { const $ = Cf(L); In.useEffect(() => { const se = Pe => { Pe.key === "Escape" && $(Pe) }; return I.addEventListener("keydown", se), () => I.removeEventListener("keydown", se) }, [$, I]) } const Mm = "dismissableLayer.update", fA = "dismissableLayer.pointerDownOutside", hA = "dismissableLayer.focusOutside"; let f_; const pA = In.createContext({ layers: new Set, layersWithOutsidePointerEventsDisabled: new Set, branches: new Set }), dA = In.forwardRef((L, I) => { var $; const { disableOutsidePointerEvents: se = !1, onEscapeKeyDown: Pe, onPointerDownOutside: R, onFocusOutside: E, onInteractOutside: e, onDismiss: w, ...k } = L, i = In.useContext(pA), [_, y] = In.useState(null), h = ($ = _ == null ? void 0 : _.ownerDocument) !== null && $ !== void 0 ? $ : globalThis == null ? void 0 : globalThis.document, [, l] = In.useState({}), t = pd(I, b => y(b)), o = Array.from(i.layers), [r] = [...i.layersWithOutsidePointerEventsDisabled].slice(-1), n = o.indexOf(r), a = _ ? o.indexOf(_) : -1, s = i.layersWithOutsidePointerEventsDisabled.size > 0, u = a >= n, p = gA(b => { const g = b.target, f = [...i.branches].some(v => v.contains(g)); !u || f || (R == null || R(b), e == null || e(b), b.defaultPrevented || w == null || w()) }, h), c = vA(b => { const g = b.target;[...i.branches].some(v => v.contains(g)) || (E == null || E(b), e == null || e(b), b.defaultPrevented || w == null || w()) }, h); return cA(b => { a === i.layers.size - 1 && (Pe == null || Pe(b), !b.defaultPrevented && w && (b.preventDefault(), w())) }, h), In.useEffect(() => { if (_) return se && (i.layersWithOutsidePointerEventsDisabled.size === 0 && (f_ = h.body.style.pointerEvents, h.body.style.pointerEvents = "none"), i.layersWithOutsidePointerEventsDisabled.add(_)), i.layers.add(_), h_(), () => { se && i.layersWithOutsidePointerEventsDisabled.size === 1 && (h.body.style.pointerEvents = f_) } }, [_, h, se, i]), In.useEffect(() => () => { _ && (i.layers.delete(_), i.layersWithOutsidePointerEventsDisabled.delete(_), h_()) }, [_, i]), In.useEffect(() => { const b = () => l({}); return document.addEventListener(Mm, b), () => document.removeEventListener(Mm, b) }, []), In.createElement(Nh.div, zo({}, k, { ref: t, style: { pointerEvents: s ? u ? "auto" : "none" : void 0, ...L.style }, onFocusCapture: wf(L.onFocusCapture, c.onFocusCapture), onBlurCapture: wf(L.onBlurCapture, c.onBlurCapture), onPointerDownCapture: wf(L.onPointerDownCapture, p.onPointerDownCapture) })) }); function gA(L, I = globalThis == null ? void 0 : globalThis.document) { const $ = Cf(L), se = In.useRef(!1), Pe = In.useRef(() => { }); return In.useEffect(() => { const R = e => { if (e.target && !se.current) { let i = function () { E5(fA, $, k, { discrete: !0 }) }; var w = i; const k = { originalEvent: e }; e.pointerType === "touch" ? (I.removeEventListener("click", Pe.current), Pe.current = i, I.addEventListener("click", Pe.current, { once: !0 })) : i() } se.current = !1 }, E = window.setTimeout(() => { I.addEventListener("pointerdown", R) }, 0); return () => { window.clearTimeout(E), I.removeEventListener("pointerdown", R), I.removeEventListener("click", Pe.current) } }, [I, $]), { onPointerDownCapture: () => se.current = !0 } } function vA(L, I = globalThis == null ? void 0 : globalThis.document) { const $ = Cf(L), se = In.useRef(!1); return In.useEffect(() => { const Pe = R => { R.target && !se.current && E5(hA, $, { originalEvent: R }, { discrete: !1 }) }; return I.addEventListener("focusin", Pe), () => I.removeEventListener("focusin", Pe) }, [I, $]), { onFocusCapture: () => se.current = !0, onBlurCapture: () => se.current = !1 } } function h_() { const L = new CustomEvent(Mm); document.dispatchEvent(L) } function E5(L, I, $, { discrete: se }) { const Pe = $.originalEvent.target, R = new CustomEvent(L, { bubbles: !1, cancelable: !0, detail: $ }); I && Pe.addEventListener(L, I, { once: !0 }), se ? uA(Pe, R) : Pe.dispatchEvent(R) } const lv = "focusScope.autoFocusOnMount", uv = "focusScope.autoFocusOnUnmount", p_ = { bubbles: !1, cancelable: !0 }, mA = In.forwardRef((L, I) => { const { loop: $ = !1, trapped: se = !1, onMountAutoFocus: Pe, onUnmountAutoFocus: R, ...E } = L, [e, w] = In.useState(null), k = Cf(Pe), i = Cf(R), _ = In.useRef(null), y = pd(I, t => w(t)), h = In.useRef({ paused: !1, pause() { this.paused = !0 }, resume() { this.paused = !1 } }).current; In.useEffect(() => { if (se) { let n = function (p) { if (h.paused || !e) return; const c = p.target; e.contains(c) ? _.current = c : kc(_.current, { select: !0 }) }, a = function (p) { if (h.paused || !e) return; const c = p.relatedTarget; c !== null && (e.contains(c) || kc(_.current, { select: !0 })) }, s = function (p) { const c = document.activeElement; for (const b of p) b.removedNodes.length > 0 && (e != null && e.contains(c) || kc(e)) }; var t = n, o = a, r = s; document.addEventListener("focusin", n), document.addEventListener("focusout", a); const u = new MutationObserver(s); return e && u.observe(e, { childList: !0, subtree: !0 }), () => { document.removeEventListener("focusin", n), document.removeEventListener("focusout", a), u.disconnect() } } }, [se, e, h.paused]), In.useEffect(() => { if (e) { g_.add(h); const t = document.activeElement; if (!e.contains(t)) { const r = new CustomEvent(lv, p_); e.addEventListener(lv, k), e.dispatchEvent(r), r.defaultPrevented || (yA(kA(C5(e)), { select: !0 }), document.activeElement === t && kc(e)) } return () => { e.removeEventListener(lv, k), setTimeout(() => { const r = new CustomEvent(uv, p_); e.addEventListener(uv, i), e.dispatchEvent(r), r.defaultPrevented || kc(t ?? document.body, { select: !0 }), e.removeEventListener(uv, i), g_.remove(h) }, 0) } } }, [e, k, i, h]); const l = In.useCallback(t => { if (!$ && !se || h.paused) return; const o = t.key === "Tab" && !t.altKey && !t.ctrlKey && !t.metaKey, r = document.activeElement; if (o && r) { const n = t.currentTarget, [a, s] = xA(n); a && s ? !t.shiftKey && r === s ? (t.preventDefault(), $ && kc(a, { select: !0 })) : t.shiftKey && r === a && (t.preventDefault(), $ && kc(s, { select: !0 })) : r === n && t.preventDefault() } }, [$, se, h.paused]); return In.createElement(Nh.div, zo({ tabIndex: -1 }, E, { ref: y, onKeyDown: l })) }); function yA(L, { select: I = !1 } = {}) { const $ = document.activeElement; for (const se of L) if (kc(se, { select: I }), document.activeElement !== $) return } function xA(L) { const I = C5(L), $ = d_(I, L), se = d_(I.reverse(), L); return [$, se] } function C5(L) { const I = [], $ = document.createTreeWalker(L, NodeFilter.SHOW_ELEMENT, { acceptNode: se => { const Pe = se.tagName === "INPUT" && se.type === "hidden"; return se.disabled || se.hidden || Pe ? NodeFilter.FILTER_SKIP : se.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP } }); for (; $.nextNode();)I.push($.currentNode); return I } function d_(L, I) { for (const $ of L) if (!bA($, { upTo: I })) return $ } function bA(L, { upTo: I }) { if (getComputedStyle(L).visibility === "hidden") return !0; for (; L;) { if (I !== void 0 && L === I) return !1; if (getComputedStyle(L).display === "none") return !0; L = L.parentElement } return !1 } function _A(L) { return L instanceof HTMLInputElement && "select" in L } function kc(L, { select: I = !1 } = {}) { if (L && L.focus) { const $ = document.activeElement; L.focus({ preventScroll: !0 }), L !== $ && _A(L) && I && L.select() } } const g_ = wA(); function wA() { let L = []; return { add(I) { const $ = L[0]; I !== $ && ($ == null || $.pause()), L = v_(L, I), L.unshift(I) }, remove(I) { var $; L = v_(L, I), ($ = L[0]) === null || $ === void 0 || $.resume() } } } function v_(L, I) { const $ = [...L], se = $.indexOf(I); return se !== -1 && $.splice(se, 1), $ } function kA(L) { return L.filter(I => I.tagName !== "A") } function TA(L, I) { return In.useReducer(($, se) => { const Pe = I[$][se]; return Pe ?? $ }, L) } const By = L => { const { present: I, children: $ } = L, se = AA(I), Pe = typeof $ == "function" ? $({ present: se.isPresent }) : In.Children.only($), R = pd(se.ref, Pe.ref); return typeof $ == "function" || se.isPresent ? In.cloneElement(Pe, { ref: R }) : null }; By.displayName = "Presence"; function AA(L) { const [I, $] = In.useState(), se = In.useRef({}), Pe = In.useRef(L), R = In.useRef("none"), E = L ? "mounted" : "unmounted", [e, w] = TA(E, { mounted: { UNMOUNT: "unmounted", ANIMATION_OUT: "unmountSuspended" }, unmountSuspended: { MOUNT: "mounted", ANIMATION_END: "unmounted" }, unmounted: { MOUNT: "mounted" } }); return In.useEffect(() => { const k = b0(se.current); R.current = e === "mounted" ? k : "none" }, [e]), Tm(() => { const k = se.current, i = Pe.current; if (i !== L) { const y = R.current, h = b0(k); L ? w("MOUNT") : h === "none" || (k == null ? void 0 : k.display) === "none" ? w("UNMOUNT") : w(i && y !== h ? "ANIMATION_OUT" : "UNMOUNT"), Pe.current = L } }, [L, w]), Tm(() => { if (I) { const k = _ => { const h = b0(se.current).includes(_.animationName); _.target === I && h && Ay.flushSync(() => w("ANIMATION_END")) }, i = _ => { _.target === I && (R.current = b0(se.current)) }; return I.addEventListener("animationstart", i), I.addEventListener("animationcancel", k), I.addEventListener("animationend", k), () => { I.removeEventListener("animationstart", i), I.removeEventListener("animationcancel", k), I.removeEventListener("animationend", k) } } else w("ANIMATION_END") }, [I, w]), { isPresent: ["mounted", "unmountSuspended"].includes(e), ref: In.useCallback(k => { k && (se.current = getComputedStyle(k)), $(k) }, []) } } function b0(L) { return (L == null ? void 0 : L.animationName) || "none" } let cv = 0; function MA() { In.useEffect(() => { var L, I; const $ = document.querySelectorAll("[data-radix-focus-guard]"); return document.body.insertAdjacentElement("afterbegin", (L = $[0]) !== null && L !== void 0 ? L : m_()), document.body.insertAdjacentElement("beforeend", (I = $[1]) !== null && I !== void 0 ? I : m_()), cv++, () => { cv === 1 && document.querySelectorAll("[data-radix-focus-guard]").forEach(se => se.remove()), cv-- } }, []) } function m_() { const L = document.createElement("span"); return L.setAttribute("data-radix-focus-guard", ""), L.tabIndex = 0, L.style.cssText = "outline: none; opacity: 0; position: fixed; pointer-events: none", L } var ku = function () { return ku = Object.assign || function (I) { for (var $, se = 1, Pe = arguments.length; se < Pe; se++) { $ = arguments[se]; for (var R in $) Object.prototype.hasOwnProperty.call($, R) && (I[R] = $[R]) } return I }, ku.apply(this, arguments) }; function L5(L, I) { var $ = {}; for (var se in L) Object.prototype.hasOwnProperty.call(L, se) && I.indexOf(se) < 0 && ($[se] = L[se]); if (L != null && typeof Object.getOwnPropertySymbols == "function") for (var Pe = 0, se = Object.getOwnPropertySymbols(L); Pe < se.length; Pe++)I.indexOf(se[Pe]) < 0 && Object.prototype.propertyIsEnumerable.call(L, se[Pe]) && ($[se[Pe]] = L[se[Pe]]); return $ } function SA(L, I, $) { if ($ || arguments.length === 2) for (var se = 0, Pe = I.length, R; se < Pe; se++)(R || !(se in I)) && (R || (R = Array.prototype.slice.call(I, 0, se)), R[se] = I[se]); return L.concat(R || Array.prototype.slice.call(I)) } var H0 = "right-scroll-bar-position", q0 = "width-before-scroll-bar", EA = "with-scroll-bars-hidden", CA = "--removed-body-scroll-bar-size"; function LA(L, I) { return typeof L == "function" ? L(I) : L && (L.current = I), L } function PA(L, I) { var $ = In.useState(function () { return { value: L, callback: I, facade: { get current() { return $.value }, set current(se) { var Pe = $.value; Pe !== se && ($.value = se, $.callback(se, Pe)) } } } })[0]; return $.callback = I, $.facade } function OA(L, I) { return PA(I || null, function ($) { return L.forEach(function (se) { return LA(se, $) }) }) } function IA(L) { return L } function RA(L, I) { I === void 0 && (I = IA); var $ = [], se = !1, Pe = { read: function () { if (se) throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`."); return $.length ? $[$.length - 1] : L }, useMedium: function (R) { var E = I(R, se); return $.push(E), function () { $ = $.filter(function (e) { return e !== E }) } }, assignSyncMedium: function (R) { for (se = !0; $.length;) { var E = $; $ = [], E.forEach(R) } $ = { push: function (e) { return R(e) }, filter: function () { return $ } } }, assignMedium: function (R) { se = !0; var E = []; if ($.length) { var e = $; $ = [], e.forEach(R), E = $ } var w = function () { var i = E; E = [], i.forEach(R) }, k = function () { return Promise.resolve().then(w) }; k(), $ = { push: function (i) { E.push(i), k() }, filter: function (i) { return E = E.filter(i), $ } } } }; return Pe } function zA(L) { L === void 0 && (L = {}); var I = RA(null); return I.options = ku({ async: !0, ssr: !1 }, L), I } var P5 = function (L) { var I = L.sideCar, $ = L5(L, ["sideCar"]); if (!I) throw new Error("Sidecar: please provide `sideCar` property to import the right car"); var se = I.read(); if (!se) throw new Error("Sidecar medium not found"); return In.createElement(se, ku({}, $)) }; P5.isSideCarExport = !0; function DA(L, I) { return L.useMedium(I), P5 } var O5 = zA(), fv = function () { }, B1 = In.forwardRef(function (L, I) { var $ = In.useRef(null), se = In.useState({ onScrollCapture: fv, onWheelCapture: fv, onTouchMoveCapture: fv }), Pe = se[0], R = se[1], E = L.forwardProps, e = L.children, w = L.className, k = L.removeScrollBar, i = L.enabled, _ = L.shards, y = L.sideCar, h = L.noIsolation, l = L.inert, t = L.allowPinchZoom, o = L.as, r = o === void 0 ? "div" : o, n = L5(L, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "as"]), a = y, s = OA([$, I]), u = ku(ku({}, n), Pe); return In.createElement(In.Fragment, null, i && In.createElement(a, { sideCar: O5, removeScrollBar: k, shards: _, noIsolation: h, inert: l, setCallbacks: R, allowPinchZoom: !!t, lockRef: $ }), E ? In.cloneElement(In.Children.only(e), ku(ku({}, u), { ref: s })) : In.createElement(r, ku({}, u, { className: w, ref: s }), e)) }); B1.defaultProps = { enabled: !0, removeScrollBar: !0, inert: !1 }; B1.classNames = { fullWidth: q0, zeroRight: H0 }; var y_, FA = function () { if (y_) return y_; if (typeof __webpack_nonce__ < "u") return __webpack_nonce__ }; function BA() { if (!document) return null; var L = document.createElement("style"); L.type = "text/css"; var I = FA(); return I && L.setAttribute("nonce", I), L } function NA(L, I) { L.styleSheet ? L.styleSheet.cssText = I : L.appendChild(document.createTextNode(I)) } function jA(L) { var I = document.head || document.getElementsByTagName("head")[0]; I.appendChild(L) } var UA = function () { var L = 0, I = null; return { add: function ($) { L == 0 && (I = BA()) && (NA(I, $), jA(I)), L++ }, remove: function () { L--, !L && I && (I.parentNode && I.parentNode.removeChild(I), I = null) } } }, VA = function () { var L = UA(); return function (I, $) { In.useEffect(function () { return L.add(I), function () { L.remove() } }, [I && $]) } }, I5 = function () { var L = VA(), I = function ($) { var se = $.styles, Pe = $.dynamic; return L(se, Pe), null }; return I }, HA = { left: 0, top: 0, right: 0, gap: 0 }, hv = function (L) { return parseInt(L || "", 10) || 0 }, qA = function (L) { var I = window.getComputedStyle(document.body), $ = I[L === "padding" ? "paddingLeft" : "marginLeft"], se = I[L === "padding" ? "paddingTop" : "marginTop"], Pe = I[L === "padding" ? "paddingRight" : "marginRight"]; return [hv($), hv(se), hv(Pe)] }, GA = function (L) { if (L === void 0 && (L = "margin"), typeof window > "u") return HA; var I = qA(L), $ = document.documentElement.clientWidth, se = window.innerWidth; return { left: I[0], top: I[1], right: I[2], gap: Math.max(0, se - $ + I[2] - I[0]) } }, WA = I5(), ZA = function (L, I, $, se) { var Pe = L.left, R = L.top, E = L.right, e = L.gap; return $ === void 0 && ($ = "margin"), ` .`.concat(EA, ` { overflow: hidden `).concat(se, `; @@ -4068,7 +4068,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho }) }) } function z9({ csvData: L, plotlyData: I, yaxisOptions: $, traceType: se, traceColor: Pe, traceName: R, options: E, increasingColor: e, decreasingColor: w }) { console.log("options", E); const k = I.data[0] || {}; k.xaxis === void 0 && (k.xaxis = "x"), k.yaxis === void 0 && (k.yaxis = "y"); let i = k.yaxis, _; const h = Object.keys(I.layout).filter(o => o.startsWith("yaxis")).map(o => I.layout[o]).filter(o => o.side === "left" && (o.overlaying === "y" || o.fixedrange !== void 0 && o.fixedrange === !0)).length > 0 ? " " : ""; if ($.sameYaxis !== !0) { const o = Object.keys(I.layout).filter(r => r.startsWith("yaxis")).map(r => I.layout[r]); _ = `y${o.length + 1}`, i = `yaxis${o.length + 1}`, I.layout[i] = { ...I9, title: { text: R, font: { size: 14 }, standoff: 0 }, ticksuffix: h, layer: "below traces" } } else _ = k.yaxis.replace("yaxis", "y"); const l = { type: se, name: R, showlegend: !0, yaxis: _ }; let t = {}; if (["scatter", "bar"].includes(se)) { if (!L || L.length === 0) return I; const o = L.findIndex(n => n[E.y] !== null && n[E.y] !== 0); if (o === -1) return I; const r = { x: [], y: [], customdata: [] }; L.forEach(n => { let a = n[E.y]; r.customdata.push(a), $.percentChange && (se === "scatter" || se === "line") && (a = (n[E.y] - L[o][E.y]) / L[o][E.y]), r.x.push(n[E.x]), r.y.push(a) }), t = { ...l, x: r.x, y: r.y, customdata: r.customdata, hovertemplate: "%{customdata:.2f}", connectgaps: !0, marker: { color: Pe } }, se === "bar" && (t.orientation = E.orientation, t.marker.opacity = .7, t.connectgaps = void 0, t.hovertemplate = void 0, t.customdata = void 0) } else if (se === "candlestick") { const o = { x: [], open: [], high: [], low: [], close: [] }; L.forEach(r => { o.x.push(r[E.x]), o.open.push(r[E.open]), o.high.push(r[E.high]), o.low.push(r[E.low]), o.close.push(r[E.close]) }), t = { ...l, x: o.x, open: o.open, high: o.high, low: o.low, close: o.close, increasing: { line: { color: e, width: .8 }, fillcolor: e }, decreasing: { line: { color: w, width: .8 }, fillcolor: w } } } return { ...I, data: [...I.data, t] } } const A_ = { padding: "5px 2px 2px 5px", margin: "2px 0" }; function D9({ open: L, close: I, addAnnotation: $, deleteAnnotation: se, popupData: Pe }) { var l, t, o, r, n; const R = { text: "", color: "#0088CC", size: 18, bordercolor: "#822661", yanchor: "above" }, [E, e] = In.useState(R), [w, k] = In.useState(R); Pe && Pe !== E && Pe.annotation && (Pe.annotation = (Pe == null ? void 0 : Pe.annotation) || {}, e(Pe), k(Pe)); function i() { console.log("closing"), e(R), k(R), I() } function _(a) { console.log(a.target.id.replace("addtext_", ""), a.target.value); const s = a.target.id.replace("addtext_", ""), u = a.target.value; k({ ...w, [s]: u }) } function y() { console.log("submitting", w), w.text !== "" ? (E != null && E.annotation && k({ ...w, annotation: E.annotation }), $(w), I()) : (document.getElementById("popup_textarea_warning").style.display = "block", document.getElementById("addtext_text").style.border = "1px solid red") } function h() { se(E), i() } return hr(dd, { title: "Add Text to Chart", description: "Change the titles on the chart.", open: L, close: i, children: Xr("div", { id: "popup_title", className: "popup_content", children: [Xr("div", { style: { display: "flex", flexDirection: "column", gap: 6 }, children: [Xr("div", { style: { marginBottom: 20 }, children: [Xr("label", { htmlFor: "popup_text", children: [hr("b", { children: "Text:" }), hr("div", { id: "popup_textarea_warning", className: "popup_warning", children: "Text is required" })] }), hr("textarea", { id: "addtext_text", style: { ...A_, width: "100%", maxWidth: "100%", maxHeight: "200px", marginTop: "8px" }, rows: 4, cols: 50, placeholder: "Enter text here", onChange: _, defaultValue: ((l = E == null ? void 0 : E.annotation) == null ? void 0 : l.text) || (w == null ? void 0 : w.text) })] }), Xr("div", { style: { display: "flex", gap: 15, alignItems: "center", flexWrap: "wrap", columnCount: 2, justifyContent: "space-between", marginBottom: 20 }, children: [hr("label", { htmlFor: "addtext_color", children: hr("b", { children: "Font color" }) }), hr("input", { type: "color", id: "addtext_color", style: { margin: "2px 2px 2px 15px" }, defaultValue: ((t = E == null ? void 0 : E.annotation) == null ? void 0 : t.color) || (w == null ? void 0 : w.color), onChange: _ }), hr("label", { htmlFor: "addtext_bordercolor", style: { marginLeft: 20 }, children: hr("b", { children: "Border color" }) }), hr("input", { type: "color", id: "addtext_bordercolor", style: { margin: "2px 2px 10px 15px" }, defaultValue: ((o = E == null ? void 0 : E.annotation) == null ? void 0 : o.bordercolor) || (w == null ? void 0 : w.bordercolor), onChange: _ }), hr("label", { htmlFor: "addtext_size", children: hr("b", { children: "Font size" }) }), hr("input", { style: { ...A_, width: "52px", margin: "0px 0px 0px 2px" }, type: "number", id: "addtext_size", onChange: _, defaultValue: ((r = E == null ? void 0 : E.annotation) == null ? void 0 : r.size) || (w == null ? void 0 : w.size) }), Xr("div", { children: [hr("label", { htmlFor: "addtext_yanchor", style: { marginRight: 31 }, children: hr("b", { children: "Position" }) }), Xr("select", { id: "addtext_yanchor", name: "yanchor", style: { width: "100px" }, defaultValue: ((n = E == null ? void 0 : E.annotation) == null ? void 0 : n.yanchor) || (w == null ? void 0 : w.yanchor), onChange: _, children: [hr("option", { value: "above", children: "Above" }), hr("option", { value: "below", children: "Below" })] })] })] })] }), Xr("div", { style: { float: "right", marginTop: 20 }, children: [hr("button", { className: "_btn-tertiary ph-capture", id: "title_cancel", onClick: i, children: "Cancel" }), hr("button", { className: "_btn ph-capture", id: "title_delete", onClick: h, children: "Delete" }), hr("button", { className: "_btn ph-capture", id: "title_submit", onClick: y, children: "Submit" })] })] }) }) } function F9({ plotlyData: L, open: I, close: $, defaultTitle: se, updateTitle: Pe, updateAxesTitles: R }) { const [E, e] = In.useState(se), w = Object.keys(L.layout || {}).filter(y => y.startsWith("yaxis") && L.layout[y].range != null), k = Object.keys(L.layout || {}).filter(y => { var h; return y.startsWith("xaxis") && L.layout[y].showticklabels != null && ((h = L.layout[y]) == null ? void 0 : h.anchor) }), [i, _] = In.useState({}); return hr(dd, { title: "Chart Titles", description: "Change the titles on the chart.", open: I, close: $, children: Xr("div", { id: "popup_title", className: "popup_content", children: [Xr("div", { style: { display: "flex", flexDirection: "column", gap: 0 }, children: [Xr("div", { children: [hr("label", { htmlFor: "title_text", children: hr("b", { children: "Title:" }) }), hr("textarea", { id: "title_text", style: { ...q5, width: "100%", maxWidth: "100%", maxHeight: "200px", marginTop: "8px", marginLeft: "0px" }, rows: 2, cols: 20, value: E, onChange: y => e(y.target.value) })] }), hr("div", { id: "xaxis_div", className: "csv_column_container", style: { marginTop: 5, marginBottom: -5 }, children: k.map((y, h) => { var l, t; return Xr("div", { style: { marginTop: 5, marginBottom: 5 }, children: [hr("label", { htmlFor: `title_${y}`, children: h === 0 ? hr("b", { children: "X axis:" }) : Xr("b", { children: ["X axis ", h + 1, ":"] }) }), hr("input", { id: `title_${y}`, style: { marginLeft: "0px", padding: "5px 2px 2px 5px" }, type: "text", defaultValue: ((t = (l = L == null ? void 0 : L.layout[y]) == null ? void 0 : l.title) == null ? void 0 : t.text) || "", onChange: o => { _({ ...i, [y]: o.target.value }) } })] }, y) }) }), hr("div", { id: "yaxis_div", className: "csv_column_container", style: { marginTop: 5, marginBottom: 5 }, children: w.map((y, h) => { var l, t; return Xr("div", { style: { marginTop: 10 }, children: [hr("label", { htmlFor: `title_${y}`, children: h === 0 ? hr("b", { children: "Y axis:" }) : Xr("b", { children: ["Y axis ", h + 1, ":"] }) }), hr("input", { id: `title_${y}`, style: { marginLeft: "0px", padding: "5px 2px 2px 5px" }, type: "text", defaultValue: ((t = (l = L == null ? void 0 : L.layout[y]) == null ? void 0 : l.title) == null ? void 0 : t.text) || "", onChange: o => { _({ ...i, [y]: o.target.value }) } })] }, y) }) })] }), Xr("div", { style: { float: "right", marginTop: 20 }, children: [hr("button", { className: "_btn-tertiary ph-capture", id: "title_cancel", onClick: $, children: "Cancel" }), hr("button", { className: "_btn ph-capture", id: "title_submit", onClick: () => { Pe(E), R(i), $() }, children: "Submit" })] })] }) }) } function Cm() { return Cm = Object.assign ? Object.assign.bind() : function (L) { for (var I = 1; I < arguments.length; I++) { var $ = arguments[I]; for (var se in $) Object.prototype.hasOwnProperty.call($, se) && (L[se] = $[se]) } return L }, Cm.apply(this, arguments) } var G5 = ["shift", "alt", "meta", "mod", "ctrl"], B9 = { esc: "escape", return: "enter", ".": "period", ",": "comma", "-": "slash", " ": "space", "`": "backquote", "#": "backslash", "+": "bracketright", ShiftLeft: "shift", ShiftRight: "shift", AltLeft: "alt", AltRight: "alt", MetaLeft: "meta", MetaRight: "meta", OSLeft: "meta", OSRight: "meta", ControlLeft: "ctrl", ControlRight: "ctrl" }; function Ic(L) { return (B9[L] || L).trim().toLowerCase().replace(/key|digit|numpad|arrow/, "") } function N9(L) { return G5.includes(L) } function dv(L, I) { return I === void 0 && (I = ","), L.split(I) } function gv(L, I, $) { I === void 0 && (I = "+"); var se = L.toLocaleLowerCase().split(I).map(function (E) { return Ic(E) }), Pe = { alt: se.includes("alt"), ctrl: se.includes("ctrl") || se.includes("control"), shift: se.includes("shift"), meta: se.includes("meta"), mod: se.includes("mod") }, R = se.filter(function (E) { return !G5.includes(E) }); return Cm({}, Pe, { keys: R, description: $ }) } (function () { typeof document < "u" && (document.addEventListener("keydown", function (L) { L.key !== void 0 && W5([Ic(L.key), Ic(L.code)]) }), document.addEventListener("keyup", function (L) { L.key !== void 0 && Z5([Ic(L.key), Ic(L.code)]) })), typeof window < "u" && window.addEventListener("blur", function () { Rc.clear() }) })(); var Rc = new Set; function j9(L, I) { I === void 0 && (I = ","); var $ = Array.isArray(L) ? L : L.split(I); return $.every(function (se) { return Rc.has(se.trim().toLowerCase()) }) } function W5(L) { var I = Array.isArray(L) ? L : [L]; Rc.has("meta") && Rc.forEach(function ($) { return !N9($) && Rc.delete($.toLowerCase()) }), I.forEach(function ($) { return Rc.add($.toLowerCase()) }) } function Z5(L) { var I = Array.isArray(L) ? L : [L]; L === "meta" ? Rc.clear() : I.forEach(function ($) { return Rc.delete($.toLowerCase()) }) } function U9(L, I, $) { (typeof $ == "function" && $(L, I) || $ === !0) && L.preventDefault() } function V9(L, I, $) { return typeof $ == "function" ? $(L, I) : $ === !0 || $ === void 0 } function H9(L) { return Y5(L, ["input", "textarea", "select"]) } function Y5(L, I) { var $ = L.target; I === void 0 && (I = !1); var se = $ && $.tagName; return I instanceof Array ? !!(se && I && I.some(function (Pe) { return Pe.toLowerCase() === se.toLowerCase() })) : !!(se && I && I === !0) } function q9(L, I) { return L.length === 0 && I ? (console.warn('A hotkey has the "scopes" option set, however no active scopes were found. If you want to use the global scopes feature, you need to wrap your app in a '), !0) : I ? L.some(function ($) { return I.includes($) }) || L.includes("*") : !0 } var G9 = function (I, $, se) { se === void 0 && (se = !1); var Pe = $.alt, R = $.meta, E = $.mod, e = $.shift, w = $.ctrl, k = $.keys, i = I.key, _ = I.code, y = I.ctrlKey, h = I.metaKey, l = I.shiftKey, t = I.altKey, o = Ic(_), r = i.toLowerCase(); if (!se) { if (Pe === !t && r !== "alt" || e === !l && r !== "shift") return !1; if (E) { if (!h && !y) return !1 } else if (R === !h && r !== "meta" && r !== "os" || w === !y && r !== "ctrl" && r !== "control") return !1 } return k && k.length === 1 && (k.includes(r) || k.includes(o)) ? !0 : k ? j9(k) : !k }, W9 = In.createContext(void 0), Z9 = function () { return In.useContext(W9) }; function X5(L, I) { return L && I && typeof L == "object" && typeof I == "object" ? Object.keys(L).length === Object.keys(I).length && Object.keys(L).reduce(function ($, se) { return $ && X5(L[se], I[se]) }, !0) : L === I } var Y9 = In.createContext({ hotkeys: [], enabledScopes: [], toggleScope: function () { }, enableScope: function () { }, disableScope: function () { } }), X9 = function () { return In.useContext(Y9) }; function $9(L) { var I = In.useRef(void 0); return X5(I.current, L) || (I.current = L), I.current } var M_ = function (I) { I.stopPropagation(), I.preventDefault(), I.stopImmediatePropagation() }, K9 = typeof window < "u" ? In.useLayoutEffect : In.useEffect; function _c(L, I, $, se) { var Pe = In.useRef(null), R = In.useRef(!1), E = $ instanceof Array ? se instanceof Array ? void 0 : se : $, e = L instanceof Array ? L.join(E == null ? void 0 : E.splitKey) : L, w = $ instanceof Array ? $ : se instanceof Array ? se : void 0, k = In.useCallback(I, w ?? []), i = In.useRef(k); w ? i.current = k : i.current = I; var _ = $9(E), y = X9(), h = y.enabledScopes, l = Z9(); return K9(function () { if (!((_ == null ? void 0 : _.enabled) === !1 || !q9(h, _ == null ? void 0 : _.scopes))) { var t = function (s, u) { var p; if (u === void 0 && (u = !1), !(H9(s) && !Y5(s, _ == null ? void 0 : _.enableOnFormTags)) && !(_ != null && _.ignoreEventWhen != null && _.ignoreEventWhen(s))) { if (Pe.current !== null && document.activeElement !== Pe.current && !Pe.current.contains(document.activeElement)) { M_(s); return } (p = s.target) != null && p.isContentEditable && !(_ != null && _.enableOnContentEditable) || dv(e, _ == null ? void 0 : _.splitKey).forEach(function (c) { var b, g = gv(c, _ == null ? void 0 : _.combinationKey); if (G9(s, g, _ == null ? void 0 : _.ignoreModifiers) || (b = g.keys) != null && b.includes("*")) { if (u && R.current) return; if (U9(s, g, _ == null ? void 0 : _.preventDefault), !V9(s, g, _ == null ? void 0 : _.enabled)) { M_(s); return } i.current(s, g), u || (R.current = !0) } }) } }, o = function (s) { s.key !== void 0 && (W5(Ic(s.code)), ((_ == null ? void 0 : _.keydown) === void 0 && (_ == null ? void 0 : _.keyup) !== !0 || _ != null && _.keydown) && t(s)) }, r = function (s) { s.key !== void 0 && (Z5(Ic(s.code)), R.current = !1, _ != null && _.keyup && t(s, !0)) }, n = Pe.current || (E == null ? void 0 : E.document) || document; return n.addEventListener("keyup", r), n.addEventListener("keydown", o), l && dv(e, _ == null ? void 0 : _.splitKey).forEach(function (a) { return l.addHotkey(gv(a, _ == null ? void 0 : _.combinationKey, _ == null ? void 0 : _.description)) }), function () { n.removeEventListener("keyup", r), n.removeEventListener("keydown", o), l && dv(e, _ == null ? void 0 : _.splitKey).forEach(function (a) { return l.removeHotkey(gv(a, _ == null ? void 0 : _.combinationKey, _ == null ? void 0 : _.description)) }) } } }, [e, _, h]), Pe } function Lc(L = !0) { return new Promise(I => { window.MODEBAR || (window.MODEBAR = window.document.getElementsByClassName("modebar-container")[0], window.MODEBAR.style.cssText = `${window.MODEBAR.style.cssText}; display:flex;`), window.MODEBAR && (window.MODEBAR.style.cssText.includes("display: none") || !L ? window.MODEBAR.style.cssText = `${window.MODEBAR.style.cssText}; display:flex;` : window.MODEBAR.style.cssText = `${window.MODEBAR.style.cssText}; display:none;`, I(!0)) }) } function J9({ setModal: L, changeTheme: I, autoScaling: $, Loading: se, changeColor: Pe, downloadFinished: R }) { return _c("ctrl+shift+t", () => { L({ name: "titleDialog" }) }, { preventDefault: !0 }), _c("ctrl+t", () => { L({ name: "textDialog" }) }, { preventDefault: !0 }), _c("ctrl+o", () => { L({ name: "overlayChart" }) }, { preventDefault: !0 }), _c(["ctrl+shift+h", "ctrl+h"], () => { Lc() }, { preventDefault: !0 }), _c("ctrl+e", () => { Pe(!0) }, { preventDefault: !0 }), _c("ctrl+shift+s", async () => { L({ name: "downloadCsv" }), await s_(document.getElementById("plotlyChart"), R) }, { preventDefault: !0 }), _c("ctrl+s", async () => { Lc(), u_("MainChart", Lc, se, R) }, { preventDefault: !0 }), _c("ctrl+w", () => { window.close() }, { preventDefault: !0 }), { plotGlPixelRatio: 1, scrollZoom: !0, responsive: !0, displaylogo: !1, displayModeBar: !0, modeBarButtonsToRemove: ["lasso2d", "select2d", "downloadImage"], modeBarButtons: [[{ name: "Download CSV (Ctrl+Shift+S)", icon: qu.downloadCsv, click: async function (e) { await s_(e, R) } }, { name: "Download Chart as Image (Ctrl+S)", icon: qu.downloadImage, click: async function () { Lc(), await u_("MainChart", Lc, se, R) } }], [{ name: "Edit Color (Ctrl+E)", icon: qu.changeColor, click: function () { Pe(!0) } }, "drawline", "drawopenpath", "drawcircle", "drawrect", "eraseshape"], [{ name: "Overlay chart from CSV (Ctrl+O)", icon: qu.plotCsv, click: function () { L({ name: "overlayChart" }) } }, { name: "Add Text (Ctrl+T)", icon: qu.addText, click: function () { L({ name: "textDialog", data: { text: "" } }) } }, { name: "Change Titles (Ctrl+Shift+T)", icon: qu.changeTitle, click: function () { L({ name: "titleDialog" }) } }, { name: "Change Theme", icon: qu.sunIcon, click: function () { I(!0) } }], ["hoverClosestCartesian", "hoverCompareCartesian", "toggleSpikelines"], [{ name: "Auto Scale (Ctrl+Shift+A)", icon: ds.Icons.autoscale, click: function () { $(!0) } }, "zoomIn2d", "zoomOut2d", "autoScale2d", "zoom2d", "pan2d"]] } } async function Q9({ plotData: L, volumeBars: I, setMaximizePlot: $ }) { const se = Object.keys(L.layout).filter(i => i.startsWith("xaxis")).filter(i => L.layout[i].showticklabels || L.layout[i].matches === void 0), Pe = L.data.filter(i => { var _; return ((_ = i == null ? void 0 : i.name) == null ? void 0 : _.trim()) === "Volume" }), R = {}, E = I || { old_nticks: {} }, e = window.innerWidth, w = window.innerHeight, k = w > 420 && e < 920 ? 8 : w > 420 && e < 500 ? 9 : 7; return e < 750 ? (Pe.forEach(i => { i.type === "bar" && (i.opacity = 1, i.marker.line.width = .09, I.yaxis === void 0 && (E.yaxis = `yaxis${i.yaxis.replace("y", "")}`, R[`${E.yaxis}.tickfont.size`] = k, E.tickfont = L.layout[E.yaxis].tickfont || {}, L.layout.margin.l -= 40)) }), se.forEach(i => { var _; ((_ = I.old_nticks) == null ? void 0 : _[i]) === void 0 && (R[`${i}.nticks`] = 6, E.old_nticks[i] = L.layout[i].nticks || 10) }), $(!0), await Lc()) : window.MODEBAR.style.cssText.includes("display: none") && (await Lc(!1), $(!1), I.old_nticks !== void 0 && se.forEach(i => { I.old_nticks[i] !== void 0 && (R[`${i}.nticks`] = E.old_nticks[i], E.old_nticks[i] = void 0) }), I.yaxis !== void 0 && Pe.forEach(i => { i.type === "bar" && (i.opacity = .5, i.marker.line.width = .2, R[`${E.yaxis}.tickfont.size`] = E.tickfont.size + 3, L.layout.margin.l += 40, E.yaxis = void 0) })), { volume_update: E, layout_update: R, plotData: L } } const eM = j7(R7); function $5(L, I) { var se, Pe; I || (I = [(se = L[0]) == null ? void 0 : se.x[L[0].x.length - 1e3], (Pe = L[0]) == null ? void 0 : Pe.x[L[0].x.length - 1]]); const $ = []; return L.forEach(R => { const E = { ...R }, e = ["x", "y", "low", "high", "open", "close", "text", "customdata"], w = R.x ? R.x : [], k = []; for (let _ = 0; _ < w.length; _++)w[_] >= I[0] && w[_] <= I[1] && k.push(_); e.forEach(_ => { R[_] && Array.isArray(R[_]) && (E[_] = R[_].filter((y, h) => k.includes(h))) }), ["marker", "line"].forEach(_ => { var y; (y = R[_]) != null && y.color && Array.isArray(R[_].color) && (E[_] = { ...R[_] }, E[_].color = R[_].color.filter((h, l) => k.includes(l))) }), $.push(E) }), $.length === 0 ? L : $ } async function S_({ event: L, figure: I }) { var $, se; try { const Pe = I.data.filter(e => e.x !== void 0 && e.x.length > 0 && e.x[0] !== void 0); if (Pe.length === 0) return I; const R = L ? [L["xaxis.range[0]"], L["xaxis.range[1]"]] : [($ = Pe[0]) == null ? void 0 : $.x[Pe[0].x.length - 1e3], (se = Pe[0]) == null ? void 0 : se.x[Pe[0].x.length - 1]], E = $5(I.data, R); return I.data = E, I.layout.xaxis.range = R, I } catch (Pe) { console.log("error", Pe) } } function tM({ json: L, date: I, cmd: $, title: se, globals: Pe, theme: R, info: E }) { - var De, Ee, Me, he; const e = P7(); In.useEffect(() => { e && e.capture("chart", E) }, []), L.layout.width = void 0, L.layout.height = void 0, (Ee = (De = L.layout) == null ? void 0 : De.title) != null && Ee.text && (L.layout.title.text = ""); const [w, k] = In.useState(L), [i, _] = In.useState({}), [y, h] = In.useState(!1), [l, t] = In.useState(se), [o, r] = In.useState({}), [n, a] = In.useState(!1), [s, u] = In.useState({ name: "" }), [p, c] = In.useState(!1), [b, g] = In.useState(null), [f, v] = In.useState({ old_nticks: {} }), [m, x] = In.useState(!1), [T, d] = In.useState(!1), [M, A] = In.useState(!1), [C, P] = In.useState(w), [O, z] = In.useState([]), [B, Y] = In.useState(!1), [D, G] = In.useState(!0), [V, j] = In.useState(!1), [W, Z] = In.useState(!1), [ie, te] = In.useState(!1), [J, X] = In.useState({}), [ee, re] = In.useState([]), [oe, ue] = In.useState([]), ce = () => u({ name: "" }); function de(fe) { var be, Ie, Te, Ne, qe; console.log("onDeleteAnnotation", fe); const ae = (Ie = (be = C == null ? void 0 : C.layout) == null ? void 0 : be.annotations) == null ? void 0 : Ie.findIndex(ve => ve.text === fe.text); console.log("index", ae), ae > -1 && ((Ne = (Te = C == null ? void 0 : C.layout) == null ? void 0 : Te.annotations) == null || Ne.splice(ae, 1), P({ ...C }), z((qe = C == null ? void 0 : C.layout) == null ? void 0 : qe.annotations)) } function me(fe) { V7({ plotData: C, popupData: fe, setPlotData: P, setModal: u, setOnAnnotationClick: X, setAnnotations: z, onAnnotationClick: J, ohlcAnnotation: ee, setOhlcAnnotation: re, annotations: O, plotDiv: b }) } In.useEffect(() => { T && (u({ name: "downloadFinished" }), d(!1)) }, [T]), In.useEffect(() => { o && Object.keys(o).length > 0 && (Object.keys(o).forEach(fe => { C.layout[fe].title = { ...C.layout[fe].title || {}, text: o[fe] }, C.layout[fe].showticklabels = !0 }), r({})) }, [o]); function _e(fe) { const ae = b.layout.shapes; if (!ae || ae.length === 0) return; const be = ae[ae.length - 1]; be.line.color = fe, ds.update(b, {}, { shapes: ae }) } function Se(fe, ae = !1) { const be = i[fe] || document.querySelector(`[data-title="${fe}"]`); ae ? (be.style.border = "transparent", be.style.boxShadow = "none") : (be.style.border = "1px solid rgba(0, 151, 222, 1.0)", be.style.borderRadius = "5px", be.style.borderpadding = "5px", be.style.boxShadow = "0 0 5px rgba(0, 151, 222, 1.0)"), _({ ...i, [fe]: be }) } function we() { const fe = "Auto Scale (Ctrl+Shift+A)", ae = i[fe] || document.querySelector(`[data-title="${fe}"]`); let be = !0; ae.style.border === "transparent" ? (b.removeAllListeners("plotly_relayout"), be = !1, b.on("plotly_relayout", Sh(async function (Ie) { if (Ie["xaxis.range[0]"] !== void 0) if (M) { const Te = { ...w }; await S_({ event: Ie, figure: Te }).then(async Ne => { P(Ne), ds.react(b, Ne.data, Ne.layout); const qe = await c_(Ie, b); ue(qe.yaxis_fixedrange), ds.update(b, {}, qe.to_update) }) } else { const Te = await c_(Ie, b); ue(Te.yaxis_fixedrange), ds.update(b, {}, Te.to_update) } }, 100))) : (b.removeAllListeners("plotly_relayout"), oe.forEach(Ie => { b.layout[Ie].fixedrange = !1 }), ue([]), M && b.on("plotly_relayout", Sh(async function (Ie) { if (Ie["xaxis.range[0]"] === void 0) return; const Te = { ...w }; await S_({ event: Ie, figure: Te }).then(async Ne => { P(Ne), ds.react(b, Ne.data, Ne.layout) }) }, 100))), Se(fe, be) } function xe() { const fe = "Edit Color (Ctrl+E)", ae = i[fe] || document.querySelector(`[data-title="${fe}"]`); let be = !0; ae.style.border === "transparent" && (be = !1), te(!be), Se(fe, be) } return In.useEffect(() => { V && (console.log("activateAutoScale", !V), we(), j(!1)) }, [V]), In.useEffect(() => { W && (xe(), Z(!1)) }, [W]), In.useEffect(() => { if (B) try { console.log("changeTheme", B); const fe = C == null ? void 0 : C.data.filter(qe => { var ve; return ((ve = qe == null ? void 0 : qe.name) == null ? void 0 : ve.trim()) === "Volume" }), ae = !D; window.document.body.style.backgroundColor = ae ? "#000" : "#fff", C.layout.font = { ...C.layout.font || {}, color: ae ? "#fff" : "#000" }; const be = ae ? qu.sunIcon : qu.moonIcon; document.querySelector('[data-title="Change Theme"]').getElementsByTagName("path")[0].setAttribute("d", be.path), document.querySelector('[data-title="Change Theme"]').getElementsByTagName("svg")[0].setAttribute("viewBox", be.viewBox); const Ne = ae ? { "#009600": "#00ACFF", "#c80000": "#e4003a" } : { "#e4003a": "#c80000", "#00ACFF": "#009600" }; fe.forEach(qe => { qe.type === "bar" && Array.isArray(qe.marker.color) && (qe.marker.color = qe.marker.color.map(ve => Ne[ve] || ve)) }), C.layout.template = ae ? $7 : K7, P({ ...C }), ds.react(b, C.data, C.layout), G(ae), Y(!1) } catch (fe) { console.log("error", fe) } }, [B]), In.useEffect(() => { + var De, Ee, Me, he; const e = P7(); In.useEffect(() => { e && e.capture("chart", E) }, []), L.layout.width = void 0, L.layout.height = void 0, (Ee = (De = L.layout) == null ? void 0 : De.title) != null && Ee.text && (L.layout.title.text = ""); const [w, k] = In.useState(L), [i, _] = In.useState({}), [y, h] = In.useState(!1), [l, t] = In.useState(se), [o, r] = In.useState({}), [n, a] = In.useState(!1), [s, u] = In.useState({ name: "" }), [p, c] = In.useState(!1), [b, g] = In.useState(null), [f, v] = In.useState({ old_nticks: {} }), [m, x] = In.useState(!1), [T, d] = In.useState(!1), [M, A] = In.useState(!1), [C, P] = In.useState(w), [O, z] = In.useState([]), [B, Y] = In.useState(!1), [D, G] = In.useState(!0), [V, j] = In.useState(!1), [W, Z] = In.useState(!1), [ie, te] = In.useState(!1), [J, X] = In.useState({}), [ee, re] = In.useState([]), [oe, ue] = In.useState([]), ce = () => u({ name: "" }); function de(fe) { var be, Ie, Te, Ne, qe; console.log("onDeleteAnnotation", fe); const ae = (Ie = (be = C == null ? void 0 : C.layout) == null ? void 0 : be.annotations) == null ? void 0 : Ie.findIndex(ve => ve.text === fe.text); console.log("index", ae), ae > -1 && ((Ne = (Te = C == null ? void 0 : C.layout) == null ? void 0 : Te.annotations) == null || Ne.splice(ae, 1), P({ ...C }), z((qe = C == null ? void 0 : C.layout) == null ? void 0 : qe.annotations)) } function me(fe) { V7({ plotData: C, popupData: fe, setPlotData: P, setModal: u, setOnAnnotationClick: X, setAnnotations: z, onAnnotationClick: J, ohlcAnnotation: ee, setOhlcAnnotation: re, annotations: O, plotDiv: b }) } In.useEffect(() => { T && (u({ name: "downloadFinished" }), d(!1)) }, [T]), In.useEffect(() => { o && Object.keys(o).length > 0 && (Object.keys(o).forEach(fe => { C.layout[fe].title = { ...C.layout[fe].title || {}, text: o[fe] }, C.layout[fe].showticklabels = !0 }), r({})) }, [o]); function _e(fe) { const ae = b.layout.shapes; if (!ae || ae.length === 0) return; const be = ae[ae.length - 1]; be.line.color = fe, ds.update(b, {}, { shapes: ae }) } function Se(fe, ae = !1) { const be = i[fe] || document.querySelector(`[data-title="${fe}"]`); ae ? (be.style.border = "transparent", be.style.boxShadow = "none") : (be.style.border = "1px solid rgba(0, 151, 222, 1.0)", be.style.borderRadius = "5px", be.style.borderpadding = "5px", be.style.boxShadow = "0 0 5px rgba(0, 151, 222, 1.0)"), _({ ...i, [fe]: be }) } function we() { const fe = "Auto Scale (Ctrl+Shift+A)", ae = i[fe] || document.querySelector(`[data-title="${fe}"]`); let be = !0; ae.style.border === "transparent" ? (b.removeAllListeners("plotly_relayout"), be = !1, b.on("plotly_relayout", Sh(async function (Ie) { if (Ie["xaxis.range[0]"] !== void 0) if (M) { const Te = { ...w }; await S_({ event: Ie, figure: Te }).then(async Ne => { P(Ne), ds.react(b, Ne.data, Ne.layout); const qe = await c_(Ie, b); ue(qe.yaxis_fixedrange), ds.update(b, {}, qe.to_update) }) } else { const Te = await c_(Ie, b); ue(Te.yaxis_fixedrange), ds.update(b, {}, Te.to_update) } }, 100))) : (b.removeAllListeners("plotly_relayout"), oe.forEach(Ie => { b.layout[Ie].fixedrange = !1 }), ue([]), M && b.on("plotly_relayout", Sh(async function (Ie) { if (Ie["xaxis.range[0]"] === void 0) return; const Te = { ...w }; await S_({ event: Ie, figure: Te }).then(async Ne => { P(Ne), ds.react(b, Ne.data, Ne.layout) }) }, 100))), Se(fe, be) } function xe() { const fe = "Edit Color (Ctrl+E)", ae = i[fe] || document.querySelector(`[data-title="${fe}"]`); let be = !0; ae.style.border === "transparent" && (be = !1), te(!be), Se(fe, be) } return In.useEffect(() => { V && (console.log("activateAutoScale", !V), we(), j(!1)) }, [V]), In.useEffect(() => { W && (xe(), Z(!1)) }, [W]), In.useEffect(() => { if (B) try { console.log("changeTheme", B); const fe = C == null ? void 0 : C.data.filter(qe => { var ve; return ((ve = qe == null ? void 0 : qe.name) == null ? void 0 : ve.trim()) === "Volume" }), ae = !D; window.document.body.style.backgroundColor = ae ? "#000" : "#fff", C.layout.font = { ...C.layout.font || {}, color: ae ? "#fff" : "#000" }; const be = ae ? qu.sunIcon : qu.moonIcon; document.querySelector('[data-title="Change Theme"]').getElementsByTagName("path")[0].setAttribute("d", be.path), document.querySelector('[data-title="Change Theme"]').getElementsByTagName("svg")[0].setAttribute("viewBox", be.viewBox); const Ne = ae ? { "#00ACFF": "#00ACFF", "#c80000": "#e4003a" } : { "#e4003a": "#c80000", "#00ACFF": "#00ACFF" }; fe.forEach(qe => { qe.type === "bar" && Array.isArray(qe.marker.color) && (qe.marker.color = qe.marker.color.map(ve => Ne[ve] || ve)) }), C.layout.template = ae ? $7 : K7, P({ ...C }), ds.react(b, C.data, C.layout), G(ae), Y(!1) } catch (fe) { console.log("error", fe) } }, [B]), In.useEffect(() => { var fe, ae, be, Ie; if (n) { G(!0), j(!1); const Te = ["Download CSV", "Download Chart as Image", "Overlay chart from CSV", "Add Text", "Change Titles", "Auto Scale (Ctrl+Shift+A)", "Reset Axes"], Ne = document.querySelector('[data-title="Autoscale"]'); Ne && (Ne.getElementsByTagName("path")[0].setAttribute("d", ds.Icons.home.path), Ne.setAttribute("data-title", "Reset Axes")), window.MODEBAR = document.getElementsByClassName("modebar-container")[0]; const qe = window.MODEBAR.getElementsByClassName("modebar-btn"); if (window.MODEBAR.style.cssText = `${window.MODEBAR.style.cssText}; display:flex;`, qe) { const Ae = {}; for (let ze = 0; ze < qe.length; ze++) { const Ue = qe[ze]; Te.includes(Ue.getAttribute("data-title")) && Ue.classList.add("ph-capture"), Ue.style.border = "transparent", Ae[Ue.getAttribute("data-title")] = Ue } _(Ae) } if (((ae = (fe = C == null ? void 0 : C.layout) == null ? void 0 : fe.yaxis) == null ? void 0 : ae.type) !== void 0 && (C.layout.yaxis.type === "log" && !y && (console.log("yaxis.type changed to log"), h(!0)), C.layout.yaxis.type === "linear" && y)) { console.log("yaxis.type changed to linear"), h(!1); const Ae = { "yaxis.exponentformat": "none", "yaxis.tickformat": null, "yaxis.exponentbase": 10 }; ds.update(b, {}, Ae) } if (window.export_image !== void 0) { const Ae = window.export_image.split("/").pop(), ze = Ae.split(".").pop().replace("jpg", "jpeg"); if (["jpeg", "png", "svg", "pdf"].includes(ze)) return Sh(async function () { await Lc(), await M5("MainChart", Ae.split(".")[0], ze) }, 2)() } window.addEventListener("resize", async function () { const Ae = await Q9({ plotData: C, volumeBars: f, setMaximizePlot: x }), ze = Ae.layout_update, Ue = Ae.plotData, Ve = Ae.volume_update; Object.keys(ze).length > 0 && (P(Ue), v(Ve), ds.relayout(b, ze)) }), R !== "dark" && Y(!0); const ve = w.data.map(Ae => Ae.type === "candlestick"); if (((be = w.data[0]) == null ? void 0 : be.x) !== void 0 && ((Ie = w.data[0]) == null ? void 0 : Ie.x.length) <= 1e3 || !ve.includes(!0)) return; u({ name: "alertDialog", data: { @@ -4082,7 +4082,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho + + - + - - - - -
    - - - - \ No newline at end of file +`),e.join("")}function fR(e){var t={};t.i=e.read_shift(4);var r={};r.r=e.read_shift(4),r.c=e.read_shift(4),t.r=Ue(r);var n=e.read_shift(1);return n&2&&(t.l="1"),n&8&&(t.a="1"),t}var Xi=1024;function Dw(e,t){for(var r=[21600,21600],n=["m0,0l0",r[1],r[0],r[1],r[0],"0xe"].join(","),i=[fe("xml",null,{"xmlns:v":Qt.v,"xmlns:o":Qt.o,"xmlns:x":Qt.x,"xmlns:mv":Qt.mv}).replace(/\/>/,">"),fe("o:shapelayout",fe("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"}),fe("v:shapetype",[fe("v:stroke",null,{joinstyle:"miter"}),fe("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:r.join(","),path:n})];Xi",u,fe("v:shadow",null,c),fe("v:path",null,{"o:connecttype":"none"}),'
    ','',"","",Et("x:Anchor",[a.c+1,0,a.r+1,0,a.c+3,20,a.r+5,20].join(",")),Et("x:AutoFill","False"),Et("x:Row",String(a.r)),Et("x:Column",String(a.c)),o[1].hidden?"":"","",""])}),i.push(""),i.join("")}function Pw(e){var t=[at,fe("comments",null,{xmlns:Oo[0]})],r=[];return t.push(""),e.forEach(function(n){n[1].forEach(function(i){var o=Be(i.a);r.indexOf(o)==-1&&(r.push(o),t.push(""+o+"")),i.T&&i.ID&&r.indexOf("tc="+i.ID)==-1&&(r.push("tc="+i.ID),t.push("tc="+i.ID+""))})}),r.length==0&&(r.push("SheetJ5"),t.push("SheetJ5")),t.push(""),t.push(""),e.forEach(function(n){var i=0,o=[];if(n[1][0]&&n[1][0].T&&n[1][0].ID?i=r.indexOf("tc="+n[1][0].ID):n[1].forEach(function(l){l.a&&(i=r.indexOf(Be(l.a))),o.push(l.t||"")}),t.push(''),o.length<=1)t.push(Et("t",Be(o[0]||"")));else{for(var a=`Comment: + `+o[0]+` +`,s=1;s")}),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function dR(e,t,r){var n=[at,fe("ThreadedComments",null,{xmlns:ft.TCMNT}).replace(/[\/]>/,">")];return e.forEach(function(i){var o="";(i[1]||[]).forEach(function(a,s){if(!a.T){delete a.ID;return}a.a&&t.indexOf(a.a)==-1&&t.push(a.a);var l={ref:i[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+r.tcid++).slice(-12)+"}"};s==0?o=l.id:l.parentId=o,a.ID=l.id,a.a&&(l.personId="{54EE7950-7262-4200-6969-"+("000000000000"+t.indexOf(a.a)).slice(-12)+"}"),n.push(fe("threadedComment",Et("text",a.t||""),l))})}),n.push(""),n.join("")}function hR(e){var t=[at,fe("personList",null,{xmlns:ft.TCMNT,"xmlns:x":Oo[0]}).replace(/[\/]>/,">")];return e.forEach(function(r,n){t.push(fe("person",null,{displayName:r,id:"{54EE7950-7262-4200-6969-"+("000000000000"+n).slice(-12)+"}",userId:r,providerId:"None"}))}),t.push(""),t.join("")}function pR(e){var t={};t.iauthor=e.read_shift(4);var r=Si(e);return t.rfx=r.s,t.ref=Ue(r.s),e.l+=16,t}function gR(e,t){return t==null&&(t=Z(36)),t.write_shift(4,e[1].iauthor),Do(e[0],t),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t}var mR=Dt;function vR(e){return ht(e.slice(0,54))}function xR(e){var t=jt(),r=[];return ie(t,628),ie(t,630),e.forEach(function(n){n[1].forEach(function(i){r.indexOf(i.a)>-1||(r.push(i.a.slice(0,54)),ie(t,632,vR(i.a)))})}),ie(t,631),ie(t,633),e.forEach(function(n){n[1].forEach(function(i){i.iauthor=r.indexOf(i.a);var o={s:dt(n[0]),e:dt(n[0])};ie(t,635,gR([o,i])),i.t&&i.t.length>0&&ie(t,637,y3(i)),ie(t,636),delete i.iauthor})}),ie(t,634),ie(t,629),t.end()}function wR(e,t){t.FullPaths.forEach(function(r,n){if(n!=0){var i=r.replace(/[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");i.slice(-1)!=="/"&&He.utils.cfb_add(e,i,t.FileIndex[n].content)}})}var Iw=["xlsb","xlsm","xlam","biff8","xla"],yR=function(){var e=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,t={r:0,c:0};function r(n,i,o,a){var s=!1,l=!1;o.length==0?l=!0:o.charAt(0)=="["&&(l=!0,o=o.slice(1,-1)),a.length==0?s=!0:a.charAt(0)=="["&&(s=!0,a=a.slice(1,-1));var u=o.length>0?parseInt(o,10)|0:0,c=a.length>0?parseInt(a,10)|0:0;return s?c+=t.c:--c,l?u+=t.r:--u,i+(s?"":"$")+Ft(c)+(l?"":"$")+_t(u)}return function(i,o){return t=o,i.replace(e,r)}}(),jd=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g,Xd=function(){return function(t,r){return t.replace(jd,function(n,i,o,a,s,l){var u=Ud(a)-(o?0:r.c),c=Bd(l)-(s?0:r.r),f=c==0?"":s?c+1:"["+c+"]",d=u==0?"":o?u+1:"["+u+"]";return i+"R"+f+"C"+d})}}();function ER(e,t){return e.replace(jd,function(r,n,i,o,a,s){return n+(i=="$"?i+o:Ft(Ud(o)+t.c))+(a=="$"?a+s:_t(Bd(s)+t.r))})}function _R(e){return e.length!=1}function it(e){e.l+=1}function Mn(e,t){var r=e.read_shift(t==1?1:2);return[r&16383,r>>14&1,r>>15&1]}function bw(e,t,r){var n=2;if(r){if(r.biff>=2&&r.biff<=5)return kw(e);r.biff==12&&(n=4)}var i=e.read_shift(n),o=e.read_shift(n),a=Mn(e,2),s=Mn(e,2);return{s:{r:i,c:a[0],cRel:a[1],rRel:a[2]},e:{r:o,c:s[0],cRel:s[1],rRel:s[2]}}}function kw(e){var t=Mn(e,2),r=Mn(e,2),n=e.read_shift(1),i=e.read_shift(1);return{s:{r:t[0],c:n,cRel:t[1],rRel:t[2]},e:{r:r[0],c:i,cRel:r[1],rRel:r[2]}}}function SR(e,t,r){if(r.biff<8)return kw(e);var n=e.read_shift(r.biff==12?4:2),i=e.read_shift(r.biff==12?4:2),o=Mn(e,2),a=Mn(e,2);return{s:{r:n,c:o[0],cRel:o[1],rRel:o[2]},e:{r:i,c:a[0],cRel:a[1],rRel:a[2]}}}function $w(e,t,r){if(r&&r.biff>=2&&r.biff<=5)return TR(e);var n=e.read_shift(r&&r.biff==12?4:2),i=Mn(e,2);return{r:n,c:i[0],cRel:i[1],rRel:i[2]}}function TR(e){var t=Mn(e,2),r=e.read_shift(1);return{r:t[0],c:r,cRel:t[1],rRel:t[2]}}function CR(e){var t=e.read_shift(2),r=e.read_shift(2);return{r:t,c:r&255,fQuoted:!!(r&16384),cRel:r>>15,rRel:r>>15}}function AR(e,t,r){var n=r&&r.biff?r.biff:8;if(n>=2&&n<=5)return RR(e);var i=e.read_shift(n>=12?4:2),o=e.read_shift(2),a=(o&16384)>>14,s=(o&32768)>>15;if(o&=16383,s==1)for(;i>524287;)i-=1048576;if(a==1)for(;o>8191;)o=o-16384;return{r:i,c:o,cRel:a,rRel:s}}function RR(e){var t=e.read_shift(2),r=e.read_shift(1),n=(t&32768)>>15,i=(t&16384)>>14;return t&=16383,n==1&&t>=8192&&(t=t-16384),i==1&&r>=128&&(r=r-256),{r:t,c:r,cRel:i,rRel:n}}function OR(e,t,r){var n=(e[e.l++]&96)>>5,i=bw(e,r.biff>=2&&r.biff<=5?6:8,r);return[n,i]}function FR(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2,"i"),o=8;if(r)switch(r.biff){case 5:e.l+=12,o=6;break;case 12:o=12;break}var a=bw(e,o,r);return[n,i,a]}function DR(e,t,r){var n=(e[e.l++]&96)>>5;return e.l+=r&&r.biff>8?12:r.biff<8?6:8,[n]}function PR(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2),o=8;if(r)switch(r.biff){case 5:e.l+=12,o=6;break;case 12:o=12;break}return e.l+=o,[n,i]}function IR(e,t,r){var n=(e[e.l++]&96)>>5,i=SR(e,t-1,r);return[n,i]}function bR(e,t,r){var n=(e[e.l++]&96)>>5;return e.l+=r.biff==2?6:r.biff==12?14:7,[n]}function Gg(e){var t=e[e.l+1]&1,r=1;return e.l+=4,[t,r]}function kR(e,t,r){e.l+=2;for(var n=e.read_shift(r&&r.biff==2?1:2),i=[],o=0;o<=n;++o)i.push(e.read_shift(r&&r.biff==2?1:2));return i}function $R(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=2,[n,e.read_shift(r&&r.biff==2?1:2)]}function NR(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=2,[n,e.read_shift(r&&r.biff==2?1:2)]}function MR(e){var t=e[e.l+1]&255?1:0;return e.l+=2,[t,e.read_shift(2)]}function LR(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=r&&r.biff==2?3:4,[n]}function Nw(e){var t=e.read_shift(1),r=e.read_shift(1);return[t,r]}function BR(e){return e.read_shift(2),Nw(e)}function UR(e){return e.read_shift(2),Nw(e)}function HR(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=$w(e,0,r);return[n,i]}function VR(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=AR(e,0,r);return[n,i]}function WR(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=e.read_shift(2);r&&r.biff==5&&(e.l+=12);var o=$w(e,0,r);return[n,i,o]}function zR(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=e.read_shift(r&&r.biff<=3?1:2);return[zO[i],Bw[i],n]}function GR(e,t,r){var n=e[e.l++],i=e.read_shift(1),o=r&&r.biff<=3?[n==88?-1:0,e.read_shift(1)]:jR(e);return[i,(o[0]===0?Bw:WO)[o[1]]]}function jR(e){return[e[e.l+1]>>7,e.read_shift(2)&32767]}function XR(e,t,r){e.l+=r&&r.biff==2?3:4}function KR(e,t,r){if(e.l++,r&&r.biff==12)return[e.read_shift(4,"i"),0];var n=e.read_shift(2),i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function YR(e){return e.l++,ss[e.read_shift(1)]}function qR(e){return e.l++,e.read_shift(2)}function QR(e){return e.l++,e.read_shift(1)!==0}function ZR(e){return e.l++,Po(e)}function JR(e,t,r){return e.l++,xw(e,t-1,r)}function eO(e,t){var r=[e.read_shift(1)];if(t==12)switch(r[0]){case 2:r[0]=4;break;case 4:r[0]=16;break;case 0:r[0]=1;break;case 1:r[0]=2;break}switch(r[0]){case 4:r[1]=W3(e,1)?"TRUE":"FALSE",t!=12&&(e.l+=7);break;case 37:case 16:r[1]=ss[e[e.l]],e.l+=t==12?4:8;break;case 0:e.l+=8;break;case 1:r[1]=Po(e);break;case 2:r[1]=X3(e,0,{biff:t>0&&t<8?2:t});break;default:throw new Error("Bad SerAr: "+r[0])}return r}function tO(e,t,r){for(var n=e.read_shift(r.biff==12?4:2),i=[],o=0;o!=n;++o)i.push((r.biff==12?Si:q3)(e));return i}function rO(e,t,r){var n=0,i=0;r.biff==12?(n=e.read_shift(4),i=e.read_shift(4)):(i=1+e.read_shift(1),n=1+e.read_shift(2)),r.biff>=2&&r.biff<8&&(--n,--i==0&&(i=256));for(var o=0,a=[];o!=n&&(a[o]=[]);++o)for(var s=0;s!=i;++s)a[o][s]=eO(e,r.biff);return a}function nO(e,t,r){var n=e.read_shift(1)>>>5&3,i=!r||r.biff>=8?4:2,o=e.read_shift(i);switch(r.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12;break}return[n,0,o]}function iO(e,t,r){if(r.biff==5)return oO(e);var n=e.read_shift(1)>>>5&3,i=e.read_shift(2),o=e.read_shift(4);return[n,i,o]}function oO(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2,"i");e.l+=8;var n=e.read_shift(2);return e.l+=12,[t,r,n]}function aO(e,t,r){var n=e.read_shift(1)>>>5&3;e.l+=r&&r.biff==2?3:4;var i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function sO(e,t,r){var n=e.read_shift(1)>>>5&3,i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function lO(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=4,r.biff<8&&e.l--,r.biff==12&&(e.l+=2),[n]}function uO(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2),o=4;if(r)switch(r.biff){case 5:o=15;break;case 12:o=6;break}return e.l+=o,[n,i]}var cO=$r,fO=$r,dO=$r;function ls(e,t,r){return e.l+=2,[CR(e)]}function Kd(e){return e.l+=6,[]}var hO=ls,pO=Kd,gO=Kd,mO=ls;function Mw(e){return e.l+=2,[mw(e),e.read_shift(2)&1]}var vO=ls,xO=Mw,wO=Kd,yO=ls,EO=ls,_O=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"];function SO(e){e.l+=2;var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(4),i=e.read_shift(2),o=e.read_shift(2),a=_O[r>>2&31];return{ixti:t,coltype:r&3,rt:a,idx:n,c:i,C:o}}function TO(e){return e.l+=2,[e.read_shift(4)]}function CO(e,t,r){return e.l+=5,e.l+=2,e.l+=r.biff==2?1:4,["PTGSHEET"]}function AO(e,t,r){return e.l+=r.biff==2?4:5,["PTGENDSHEET"]}function RO(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2);return[t,r]}function OO(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2);return[t,r]}function FO(e){return e.l+=4,[0,0]}var jg={1:{n:"PtgExp",f:KR},2:{n:"PtgTbl",f:dO},3:{n:"PtgAdd",f:it},4:{n:"PtgSub",f:it},5:{n:"PtgMul",f:it},6:{n:"PtgDiv",f:it},7:{n:"PtgPower",f:it},8:{n:"PtgConcat",f:it},9:{n:"PtgLt",f:it},10:{n:"PtgLe",f:it},11:{n:"PtgEq",f:it},12:{n:"PtgGe",f:it},13:{n:"PtgGt",f:it},14:{n:"PtgNe",f:it},15:{n:"PtgIsect",f:it},16:{n:"PtgUnion",f:it},17:{n:"PtgRange",f:it},18:{n:"PtgUplus",f:it},19:{n:"PtgUminus",f:it},20:{n:"PtgPercent",f:it},21:{n:"PtgParen",f:it},22:{n:"PtgMissArg",f:it},23:{n:"PtgStr",f:JR},26:{n:"PtgSheet",f:CO},27:{n:"PtgEndSheet",f:AO},28:{n:"PtgErr",f:YR},29:{n:"PtgBool",f:QR},30:{n:"PtgInt",f:qR},31:{n:"PtgNum",f:ZR},32:{n:"PtgArray",f:bR},33:{n:"PtgFunc",f:zR},34:{n:"PtgFuncVar",f:GR},35:{n:"PtgName",f:nO},36:{n:"PtgRef",f:HR},37:{n:"PtgArea",f:OR},38:{n:"PtgMemArea",f:aO},39:{n:"PtgMemErr",f:cO},40:{n:"PtgMemNoMem",f:fO},41:{n:"PtgMemFunc",f:sO},42:{n:"PtgRefErr",f:lO},43:{n:"PtgAreaErr",f:DR},44:{n:"PtgRefN",f:VR},45:{n:"PtgAreaN",f:IR},46:{n:"PtgMemAreaN",f:RO},47:{n:"PtgMemNoMemN",f:OO},57:{n:"PtgNameX",f:iO},58:{n:"PtgRef3d",f:WR},59:{n:"PtgArea3d",f:FR},60:{n:"PtgRefErr3d",f:uO},61:{n:"PtgAreaErr3d",f:PR},255:{}},DO={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61},PO={1:{n:"PtgElfLel",f:Mw},2:{n:"PtgElfRw",f:yO},3:{n:"PtgElfCol",f:hO},6:{n:"PtgElfRwV",f:EO},7:{n:"PtgElfColV",f:mO},10:{n:"PtgElfRadical",f:vO},11:{n:"PtgElfRadicalS",f:wO},13:{n:"PtgElfColS",f:pO},15:{n:"PtgElfColSV",f:gO},16:{n:"PtgElfRadicalLel",f:xO},25:{n:"PtgList",f:SO},29:{n:"PtgSxName",f:TO},255:{}},IO={0:{n:"PtgAttrNoop",f:FO},1:{n:"PtgAttrSemi",f:LR},2:{n:"PtgAttrIf",f:NR},4:{n:"PtgAttrChoose",f:kR},8:{n:"PtgAttrGoto",f:$R},16:{n:"PtgAttrSum",f:XR},32:{n:"PtgAttrBaxcel",f:Gg},33:{n:"PtgAttrBaxcel",f:Gg},64:{n:"PtgAttrSpace",f:BR},65:{n:"PtgAttrSpaceSemi",f:UR},128:{n:"PtgAttrIfError",f:MR},255:{}};function bO(e,t,r,n){if(n.biff<8)return $r(e,t);for(var i=e.l+t,o=[],a=0;a!==r.length;++a)switch(r[a][0]){case"PtgArray":r[a][1]=rO(e,0,n),o.push(r[a][1]);break;case"PtgMemArea":r[a][2]=tO(e,r[a][1],n),o.push(r[a][2]);break;case"PtgExp":n&&n.biff==12&&(r[a][1][1]=e.read_shift(4),o.push(r[a][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+r[a][0]}return t=i-e.l,t!==0&&o.push($r(e,t)),o}function kO(e,t,r){for(var n=e.l+t,i,o,a=[];n!=e.l;)t=n-e.l,o=e[e.l],i=jg[o]||jg[DO[o]],(o===24||o===25)&&(i=(o===24?PO:IO)[e[e.l+1]]),!i||!i.f?$r(e,t):a.push([i.n,i.f(e,t,r)]);return a}function $O(e){for(var t=[],r=0;r=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function MO(e,t){if(!e&&!(t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(e)?"'"+e+"'":e}function Lw(e,t,r){if(!e)return"SH33TJSERR0";if(r.biff>8&&(!e.XTI||!e.XTI[t]))return e.SheetNames[t];if(!e.XTI)return"SH33TJSERR6";var n=e.XTI[t];if(r.biff<8)return t>1e4&&(t-=65536),t<0&&(t=-t),t==0?"":e.XTI[t-1];if(!n)return"SH33TJSERR1";var i="";if(r.biff>8)switch(e[n[0]][0]){case 357:return i=n[1]==-1?"#REF":e.SheetNames[n[1]],n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 358:return r.SID!=null?e.SheetNames[r.SID]:"SH33TJSSAME"+e[n[0]][0];case 355:default:return"SH33TJSSRC"+e[n[0]][0]}switch(e[n[0]][0][0]){case 1025:return i=n[1]==-1?"#REF":e.SheetNames[n[1]]||"SH33TJSERR3",n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 14849:return e[n[0]].slice(1).map(function(o){return o.Name}).join(";;");default:return e[n[0]][0][3]?(i=n[1]==-1?"#REF":e[n[0]][0][3][n[1]]||"SH33TJSERR4",n[1]==n[2]?i:i+":"+e[n[0]][0][3][n[2]]):"SH33TJSERR2"}}function Xg(e,t,r){var n=Lw(e,t,r);return n=="#REF"?n:MO(n,r)}function xo(e,t,r,n,i){var o=i&&i.biff||8,a={s:{c:0,r:0},e:{c:0,r:0}},s=[],l,u,c,f=0,d=0,h,m="";if(!e[0]||!e[0][0])return"";for(var p=-1,g="",v=0,w=e[0].length;v=0){switch(e[0][p][1][0]){case 0:g=Je(" ",e[0][p][1][1]);break;case 1:g=Je("\r",e[0][p][1][1]);break;default:if(g="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][p][1][0])}u=u+g,p=-1}s.push(u+NO[y[0]]+l);break;case"PtgIsect":l=s.pop(),u=s.pop(),s.push(u+" "+l);break;case"PtgUnion":l=s.pop(),u=s.pop(),s.push(u+","+l);break;case"PtgRange":l=s.pop(),u=s.pop(),s.push(u+":"+l);break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgAttrIfError":break;case"PtgRef":c=_a(y[1][1],a,i),s.push(Sa(c,o));break;case"PtgRefN":c=r?_a(y[1][1],r,i):y[1][1],s.push(Sa(c,o));break;case"PtgRef3d":f=y[1][1],c=_a(y[1][2],a,i),m=Xg(n,f,i),s.push(m+"!"+Sa(c,o));break;case"PtgFunc":case"PtgFuncVar":var E=y[1][0],b=y[1][1];E||(E=0),E&=127;var k=E==0?[]:s.slice(-E);s.length-=E,b==="User"&&(b=k.shift()),s.push(b+"("+k.join(",")+")");break;case"PtgBool":s.push(y[1]?"TRUE":"FALSE");break;case"PtgInt":s.push(y[1]);break;case"PtgNum":s.push(String(y[1]));break;case"PtgStr":s.push('"'+y[1].replace(/"/g,'""')+'"');break;case"PtgErr":s.push(y[1]);break;case"PtgAreaN":h=Pg(y[1][1],r?{s:r}:a,i),s.push(kc(h,i));break;case"PtgArea":h=Pg(y[1][1],a,i),s.push(kc(h,i));break;case"PtgArea3d":f=y[1][1],h=y[1][2],m=Xg(n,f,i),s.push(m+"!"+kc(h,i));break;case"PtgAttrSum":s.push("SUM("+s.pop()+")");break;case"PtgAttrBaxcel":case"PtgAttrSemi":break;case"PtgName":d=y[1][2];var S=(n.names||[])[d-1]||(n[0]||[])[d],C=S?S.Name:"SH33TJSNAME"+String(d);C&&C.slice(0,6)=="_xlfn."&&!i.xlfn&&(C=C.slice(6)),s.push(C);break;case"PtgNameX":var A=y[1][1];d=y[1][2];var L;if(i.biff<=5)A<0&&(A=-A),n[A]&&(L=n[A][d]);else{var B="";if(((n[A]||[])[0]||[])[0]==14849||(((n[A]||[])[0]||[])[0]==1025?n[A][d]&&n[A][d].itab>0&&(B=n.SheetNames[n[A][d].itab-1]+"!"):B=n.SheetNames[d-1]+"!"),n[A]&&n[A][d])B+=n[A][d].Name;else if(n[0]&&n[0][d])B+=n[0][d].Name;else{var U=(Lw(n,A,i)||"").split(";;");U[d-1]?B=U[d-1]:B+="SH33TJSERRX"}s.push(B);break}L||(L={Name:"SH33TJSERRY"}),s.push(L.Name);break;case"PtgParen":var H="(",G=")";if(p>=0){switch(g="",e[0][p][1][0]){case 2:H=Je(" ",e[0][p][1][1])+H;break;case 3:H=Je("\r",e[0][p][1][1])+H;break;case 4:G=Je(" ",e[0][p][1][1])+G;break;case 5:G=Je("\r",e[0][p][1][1])+G;break;default:if(i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][p][1][0])}p=-1}s.push(H+s.pop()+G);break;case"PtgRefErr":s.push("#REF!");break;case"PtgRefErr3d":s.push("#REF!");break;case"PtgExp":c={c:y[1][1],r:y[1][0]};var ee={c:r.c,r:r.r};if(n.sharedf[Ue(c)]){var ae=n.sharedf[Ue(c)];s.push(xo(ae,a,ee,n,i))}else{var he=!1;for(l=0;l!=n.arrayf.length;++l)if(u=n.arrayf[l],!(c.cu[0].e.c)&&!(c.ru[0].e.r)){s.push(xo(u[1],a,ee,n,i)),he=!0;break}he||s.push(y[1])}break;case"PtgArray":s.push("{"+$O(y[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":p=v;break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":s.push("");break;case"PtgAreaErr":s.push("#REF!");break;case"PtgAreaErr3d":s.push("#REF!");break;case"PtgList":s.push("Table"+y[1].idx+"[#"+y[1].rt+"]");break;case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":break;case"PtgMemFunc":break;case"PtgMemNoMem":break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");case"PtgSxName":throw new Error("Unrecognized Formula Token: "+String(y));default:throw new Error("Unrecognized Formula Token: "+String(y))}var Te=["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"];if(i.biff!=3&&p>=0&&Te.indexOf(e[0][v][0])==-1){y=e[0][p];var oe=!0;switch(y[1][0]){case 4:oe=!1;case 0:g=Je(" ",y[1][1]);break;case 5:oe=!1;case 1:g=Je("\r",y[1][1]);break;default:if(g="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+y[1][0])}s.push((oe?g:"")+s.pop()+(oe?"":g)),p=-1}}if(s.length>1&&i.WTF)throw new Error("bad formula stack");return s[0]}function LO(e){if(e==null){var t=Z(8);return t.write_shift(1,3),t.write_shift(1,0),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(2,65535),t}else if(typeof e=="number")return li(e);return li(0)}function BO(e,t,r,n,i){var o=ui(t,r,i),a=LO(e.v),s=Z(6),l=33;s.write_shift(2,l),s.write_shift(4,0);for(var u=Z(e.bf.length),c=0;c0?bO(e,o,i,r):null;return[i,a]}var UO=Au,Ru=Au,HO=Au,VO=Au,WO={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"},Bw={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"},zO={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};function GO(e){var t="of:="+e.replace(jd,"$1[.$2$3$4$5]").replace(/\]:\[/g,":");return t.replace(/;/g,"|").replace(/,/g,";")}function jO(e){return e.replace(/\./,"!")}var Ta=typeof Map<"u";function Yd(e,t,r){var n=0,i=e.length;if(r){if(Ta?r.has(t):Object.prototype.hasOwnProperty.call(r,t)){for(var o=Ta?r.get(t):r[t];n-1?(r.width=e0(n),r.customWidth=1):t.width!=null&&(r.width=t.width),t.hidden&&(r.hidden=!0),t.level!=null&&(r.outlineLevel=r.level=t.level),r}function Uw(e,t){if(e){var r=[.7,.7,.75,.75,.3,.3];t=="xlml"&&(r=[1,1,1,1,.5,.5]),e.left==null&&(e.left=r[0]),e.right==null&&(e.right=r[1]),e.top==null&&(e.top=r[2]),e.bottom==null&&(e.bottom=r[3]),e.header==null&&(e.header=r[4]),e.footer==null&&(e.footer=r[5])}}function Wn(e,t,r){var n=r.revssf[t.z!=null?t.z:"General"],i=60,o=e.length;if(n==null&&r.ssf){for(;i<392;++i)if(r.ssf[i]==null){$x(t.z,i),r.ssf[i]=t.z,r.revssf[t.z]=n=i;break}}for(i=0;i!=o;++i)if(e[i].numFmtId===n)return i;return e[o]={numFmtId:n,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},o}function XO(e,t,r){if(e&&e["!ref"]){var n=Xe(e["!ref"]);if(n.e.c',r=0;r!=e.length;++r)t+='';return t+""}function YO(e,t,r,n,i){var o=!1,a={},s=null;if(n.bookType!=="xlsx"&&t.vbaraw){var l=t.SheetNames[r];try{t.Workbook&&(l=t.Workbook.Sheets[r].CodeName||l)}catch{}o=!0,a.codeName=Xr(Be(l))}if(e&&e["!outline"]){var u={summaryBelow:1,summaryRight:1};e["!outline"].above&&(u.summaryBelow=0),e["!outline"].left&&(u.summaryRight=0),s=(s||"")+fe("outlinePr",null,u)}!o&&!s||(i[i.length]=fe("sheetPr",s,a))}var qO=["objects","scenarios","selectLockedCells","selectUnlockedCells"],QO=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];function ZO(e){var t={sheet:1};return qO.forEach(function(r){e[r]!=null&&e[r]&&(t[r]="1")}),QO.forEach(function(r){e[r]!=null&&!e[r]&&(t[r]="0")}),e.password&&(t.password=Sw(e.password).toString(16).toUpperCase()),fe("sheetProtection",null,t)}function JO(e){return Uw(e),fe("pageMargins",null,e)}function eF(e,t){for(var r=[""],n,i=0;i!=t.length;++i)(n=t[i])&&(r[r.length]=fe("col",null,Ou(i,n)));return r[r.length]="",r.join("")}function tF(e,t,r,n){var i=typeof e.ref=="string"?e.ref:ot(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var o=r.Workbook.Names,a=tr(i);a.s.r==a.e.r&&(a.e.r=tr(t["!ref"]).e.r,i=ot(a));for(var s=0;s"u"&&(e.z=rt[14]);break;default:i=e.v;break}var s=Et("v",Be(i)),l={r:t},u=Wn(n.cellXfs,e,n);switch(u!==0&&(l.s=u),e.t){case"n":break;case"d":l.t="d";break;case"b":l.t="b";break;case"e":l.t="e";break;case"z":break;default:if(e.v==null){delete e.t;break}if(e.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(n&&n.bookSST){s=Et("v",""+Yd(n.Strings,e.v,n.revStrings)),l.t="s";break}l.t="str";break}if(e.t!=o&&(e.t=o,e.v=a),typeof e.f=="string"&&e.f){var c=e.F&&e.F.slice(0,t.length)==t?{t:"array",ref:e.F}:null;s=fe("f",Be(e.f),c)+(e.v!=null?s:"")}return e.l&&r["!links"].push([t,e.l]),e.D&&(l.cm=1),fe("c",s,l)}function iF(e,t,r,n){var i=[],o=[],a=Xe(e["!ref"]),s="",l,u="",c=[],f=0,d=0,h=e["!rows"],m=Array.isArray(e),p={r:u},g,v=-1;for(d=a.s.c;d<=a.e.c;++d)c[d]=Ft(d);for(f=a.s.r;f<=a.e.r;++f){for(o=[],u=_t(f),d=a.s.c;d<=a.e.c;++d){l=c[d]+u;var w=m?(e[f]||[])[d]:e[l];w!==void 0&&(s=nF(w,l,e,t))!=null&&o.push(s)}(o.length>0||h&&h[f])&&(p={r:u},h&&h[f]&&(g=h[f],g.hidden&&(p.hidden=1),v=-1,g.hpx?v=jl(g.hpx):g.hpt&&(v=g.hpt),v>-1&&(p.ht=v,p.customHeight=1),g.level&&(p.outlineLevel=g.level)),i[i.length]=fe("row",o.join(""),p))}if(h)for(;f-1&&(p.ht=v,p.customHeight=1),g.level&&(p.outlineLevel=g.level),i[i.length]=fe("row","",p));return i.join("")}function Hw(e,t,r,n){var i=[at,fe("worksheet",null,{xmlns:Oo[0],"xmlns:r":ft.r})],o=r.SheetNames[e],a=0,s="",l=r.Sheets[o];l==null&&(l={});var u=l["!ref"]||"A1",c=Xe(u);if(c.e.c>16383||c.e.r>1048575){if(t.WTF)throw new Error("Range "+u+" exceeds format limit A1:XFD1048576");c.e.c=Math.min(c.e.c,16383),c.e.r=Math.min(c.e.c,1048575),u=ot(c)}n||(n={}),l["!comments"]=[];var f=[];YO(l,r,e,t,i),i[i.length]=fe("dimension",null,{ref:u}),i[i.length]=rF(l,t,e,r),t.sheetFormat&&(i[i.length]=fe("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),l["!cols"]!=null&&l["!cols"].length>0&&(i[i.length]=eF(l,l["!cols"])),i[a=i.length]="",l["!links"]=[],l["!ref"]!=null&&(s=iF(l,t),s.length>0&&(i[i.length]=s)),i.length>a+1&&(i[i.length]="",i[a]=i[a].replace("/>",">")),l["!protect"]&&(i[i.length]=ZO(l["!protect"])),l["!autofilter"]!=null&&(i[i.length]=tF(l["!autofilter"],l,r,e)),l["!merges"]!=null&&l["!merges"].length>0&&(i[i.length]=KO(l["!merges"]));var d=-1,h,m=-1;return l["!links"].length>0&&(i[i.length]="",l["!links"].forEach(function(p){p[1].Target&&(h={ref:p[0]},p[1].Target.charAt(0)!="#"&&(m=Le(n,-1,Be(p[1].Target).replace(/#.*$/,""),ke.HLINK),h["r:id"]="rId"+m),(d=p[1].Target.indexOf("#"))>-1&&(h.location=Be(p[1].Target.slice(d+1))),p[1].Tooltip&&(h.tooltip=Be(p[1].Tooltip)),i[i.length]=fe("hyperlink",null,h))}),i[i.length]=""),delete l["!links"],l["!margins"]!=null&&(i[i.length]=JO(l["!margins"])),(!t||t.ignoreEC||t.ignoreEC==null)&&(i[i.length]=Et("ignoredErrors",fe("ignoredError",null,{numberStoredAsText:1,sqref:u}))),f.length>0&&(m=Le(n,-1,"../drawings/drawing"+(e+1)+".xml",ke.DRAW),i[i.length]=fe("drawing",null,{"r:id":"rId"+m}),l["!drawing"]=f),l["!comments"].length>0&&(m=Le(n,-1,"../drawings/vmlDrawing"+(e+1)+".vml",ke.VML),i[i.length]=fe("legacyDrawing",null,{"r:id":"rId"+m}),l["!legacy"]=m),i.length>1&&(i[i.length]="",i[1]=i[1].replace("/>",">")),i.join("")}function oF(e,t){var r={},n=e.l+t;r.r=e.read_shift(4),e.l+=4;var i=e.read_shift(2);e.l+=1;var o=e.read_shift(1);return e.l=n,o&7&&(r.level=o&7),o&16&&(r.hidden=!0),o&32&&(r.hpt=i/20),r}function aF(e,t,r){var n=Z(145),i=(r["!rows"]||[])[e]||{};n.write_shift(4,e),n.write_shift(4,0);var o=320;i.hpx?o=jl(i.hpx)*20:i.hpt&&(o=i.hpt*20),n.write_shift(2,o),n.write_shift(1,0);var a=0;i.level&&(a|=i.level),i.hidden&&(a|=16),(i.hpx||i.hpt)&&(a|=32),n.write_shift(1,a),n.write_shift(1,0);var s=0,l=n.l;n.l+=4;for(var u={r:e,c:0},c=0;c<16;++c)if(!(t.s.c>c+1<<10||t.e.cn.l?n.slice(0,n.l):n}function sF(e,t,r,n){var i=aF(n,r,t);(i.length>17||(t["!rows"]||[])[n])&&ie(e,0,i)}var lF=Si,uF=Do;function cF(){}function fF(e,t){var r={},n=e[e.l];return++e.l,r.above=!(n&64),r.left=!(n&128),e.l+=18,r.name=E3(e),r}function dF(e,t,r){r==null&&(r=Z(84+4*e.length));var n=192;t&&(t.above&&(n&=-65),t.left&&(n&=-129)),r.write_shift(1,n);for(var i=1;i<3;++i)r.write_shift(1,0);return Vl({auto:1},r),r.write_shift(-4,-1),r.write_shift(-4,-1),rw(e,r),r.slice(0,r.l)}function hF(e){var t=gr(e);return[t]}function pF(e,t,r){return r==null&&(r=Z(8)),yi(t,r)}function gF(e){var t=Ei(e);return[t]}function mF(e,t,r){return r==null&&(r=Z(4)),_i(t,r)}function vF(e){var t=gr(e),r=e.read_shift(1);return[t,r,"b"]}function xF(e,t,r){return r==null&&(r=Z(9)),yi(t,r),r.write_shift(1,e.v?1:0),r}function wF(e){var t=Ei(e),r=e.read_shift(1);return[t,r,"b"]}function yF(e,t,r){return r==null&&(r=Z(5)),_i(t,r),r.write_shift(1,e.v?1:0),r}function EF(e){var t=gr(e),r=e.read_shift(1);return[t,r,"e"]}function _F(e,t,r){return r==null&&(r=Z(9)),yi(t,r),r.write_shift(1,e.v),r}function SF(e){var t=Ei(e),r=e.read_shift(1);return[t,r,"e"]}function TF(e,t,r){return r==null&&(r=Z(8)),_i(t,r),r.write_shift(1,e.v),r.write_shift(2,0),r.write_shift(1,0),r}function CF(e){var t=gr(e),r=e.read_shift(4);return[t,r,"s"]}function AF(e,t,r){return r==null&&(r=Z(12)),yi(t,r),r.write_shift(4,t.v),r}function RF(e){var t=Ei(e),r=e.read_shift(4);return[t,r,"s"]}function OF(e,t,r){return r==null&&(r=Z(8)),_i(t,r),r.write_shift(4,t.v),r}function FF(e){var t=gr(e),r=Po(e);return[t,r,"n"]}function DF(e,t,r){return r==null&&(r=Z(16)),yi(t,r),li(e.v,r),r}function PF(e){var t=Ei(e),r=Po(e);return[t,r,"n"]}function IF(e,t,r){return r==null&&(r=Z(12)),_i(t,r),li(e.v,r),r}function bF(e){var t=gr(e),r=nw(e);return[t,r,"n"]}function kF(e,t,r){return r==null&&(r=Z(12)),yi(t,r),iw(e.v,r),r}function $F(e){var t=Ei(e),r=nw(e);return[t,r,"n"]}function NF(e,t,r){return r==null&&(r=Z(8)),_i(t,r),iw(e.v,r),r}function MF(e){var t=gr(e),r=Hd(e);return[t,r,"is"]}function LF(e){var t=gr(e),r=Dt(e);return[t,r,"str"]}function BF(e,t,r){return r==null&&(r=Z(12+4*e.v.length)),yi(t,r),ht(e.v,r),r.length>r.l?r.slice(0,r.l):r}function UF(e){var t=Ei(e),r=Dt(e);return[t,r,"str"]}function HF(e,t,r){return r==null&&(r=Z(8+4*e.v.length)),_i(t,r),ht(e.v,r),r.length>r.l?r.slice(0,r.l):r}function VF(e,t,r){var n=e.l+t,i=gr(e);i.r=r["!row"];var o=e.read_shift(1),a=[i,o,"b"];if(r.cellFormula){e.l+=2;var s=Ru(e,n-e.l,r);a[3]=xo(s,null,i,r.supbooks,r)}else e.l=n;return a}function WF(e,t,r){var n=e.l+t,i=gr(e);i.r=r["!row"];var o=e.read_shift(1),a=[i,o,"e"];if(r.cellFormula){e.l+=2;var s=Ru(e,n-e.l,r);a[3]=xo(s,null,i,r.supbooks,r)}else e.l=n;return a}function zF(e,t,r){var n=e.l+t,i=gr(e);i.r=r["!row"];var o=Po(e),a=[i,o,"n"];if(r.cellFormula){e.l+=2;var s=Ru(e,n-e.l,r);a[3]=xo(s,null,i,r.supbooks,r)}else e.l=n;return a}function GF(e,t,r){var n=e.l+t,i=gr(e);i.r=r["!row"];var o=Dt(e),a=[i,o,"str"];if(r.cellFormula){e.l+=2;var s=Ru(e,n-e.l,r);a[3]=xo(s,null,i,r.supbooks,r)}else e.l=n;return a}var jF=Si,XF=Do;function KF(e,t){return t==null&&(t=Z(4)),t.write_shift(4,e),t}function YF(e,t){var r=e.l+t,n=Si(e),i=Vd(e),o=Dt(e),a=Dt(e),s=Dt(e);e.l=r;var l={rfx:n,relId:i,loc:o,display:s};return a&&(l.Tooltip=a),l}function qF(e,t){var r=Z(50+4*(e[1].Target.length+(e[1].Tooltip||"").length));Do({s:dt(e[0]),e:dt(e[0])},r),Wd("rId"+t,r);var n=e[1].Target.indexOf("#"),i=n==-1?"":e[1].Target.slice(n+1);return ht(i||"",r),ht(e[1].Tooltip||"",r),ht("",r),r.slice(0,r.l)}function QF(){}function ZF(e,t,r){var n=e.l+t,i=ow(e),o=e.read_shift(1),a=[i];if(a[2]=o,r.cellFormula){var s=UO(e,n-e.l,r);a[1]=s}else e.l=n;return a}function JF(e,t,r){var n=e.l+t,i=Si(e),o=[i];if(r.cellFormula){var a=VO(e,n-e.l,r);o[1]=a,e.l=n}else e.l=n;return o}function eD(e,t,r){r==null&&(r=Z(18));var n=Ou(e,t);r.write_shift(-4,e),r.write_shift(-4,e),r.write_shift(4,(n.width||10)*256),r.write_shift(4,0);var i=0;return t.hidden&&(i|=1),typeof n.width=="number"&&(i|=2),t.level&&(i|=t.level<<8),r.write_shift(2,i),r}var Vw=["left","right","top","bottom","header","footer"];function tD(e){var t={};return Vw.forEach(function(r){t[r]=Po(e)}),t}function rD(e,t){return t==null&&(t=Z(6*8)),Uw(e),Vw.forEach(function(r){li(e[r],t)}),t}function nD(e){var t=e.read_shift(2);return e.l+=28,{RTL:t&32}}function iD(e,t,r){r==null&&(r=Z(30));var n=924;return(((t||{}).Views||[])[0]||{}).RTL&&(n|=32),r.write_shift(2,n),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(2,0),r.write_shift(2,100),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(4,0),r}function oD(e){var t=Z(24);return t.write_shift(4,4),t.write_shift(4,1),Do(e,t),t}function aD(e,t){return t==null&&(t=Z(16*4+2)),t.write_shift(2,e.password?Sw(e.password):0),t.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach(function(r){r[1]?t.write_shift(4,e[r[0]]!=null&&!e[r[0]]?1:0):t.write_shift(4,e[r[0]]!=null&&e[r[0]]?0:1)}),t}function sD(){}function lD(){}function uD(e,t,r,n,i,o,a){if(t.v===void 0)return!1;var s="";switch(t.t){case"b":s=t.v?"1":"0";break;case"d":t=Kt(t),t.z=t.z||rt[14],t.v=Xt(Lt(t.v)),t.t="n";break;case"n":case"e":s=""+t.v;break;default:s=t.v;break}var l={r,c:n};switch(l.s=Wn(i.cellXfs,t,i),t.l&&o["!links"].push([Ue(l),t.l]),t.c&&o["!comments"].push([Ue(l),t.c]),t.t){case"s":case"str":return i.bookSST?(s=Yd(i.Strings,t.v,i.revStrings),l.t="s",l.v=s,a?ie(e,18,OF(t,l)):ie(e,7,AF(t,l))):(l.t="str",a?ie(e,17,HF(t,l)):ie(e,6,BF(t,l))),!0;case"n":return t.v==(t.v|0)&&t.v>-1e3&&t.v<1e3?a?ie(e,13,NF(t,l)):ie(e,2,kF(t,l)):a?ie(e,16,IF(t,l)):ie(e,5,DF(t,l)),!0;case"b":return l.t="b",a?ie(e,15,yF(t,l)):ie(e,4,xF(t,l)),!0;case"e":return l.t="e",a?ie(e,14,TF(t,l)):ie(e,3,_F(t,l)),!0}return a?ie(e,12,mF(t,l)):ie(e,1,pF(t,l)),!0}function cD(e,t,r,n){var i=Xe(t["!ref"]||"A1"),o,a="",s=[];ie(e,145);var l=Array.isArray(t),u=i.e.r;t["!rows"]&&(u=Math.max(i.e.r,t["!rows"].length-1));for(var c=i.s.r;c<=u;++c){a=_t(c),sF(e,t,i,c);var f=!1;if(c<=i.e.r)for(var d=i.s.c;d<=i.e.c;++d){c===i.s.r&&(s[d]=Ft(d)),o=s[d]+a;var h=l?(t[c]||[])[d]:t[o];if(!h){f=!1;continue}f=uD(e,h,c,d,n,t,f)}}ie(e,146)}function fD(e,t){!t||!t["!merges"]||(ie(e,177,KF(t["!merges"].length)),t["!merges"].forEach(function(r){ie(e,176,XF(r))}),ie(e,178))}function dD(e,t){!t||!t["!cols"]||(ie(e,390),t["!cols"].forEach(function(r,n){r&&ie(e,60,eD(n,r))}),ie(e,391))}function hD(e,t){!t||!t["!ref"]||(ie(e,648),ie(e,649,oD(Xe(t["!ref"]))),ie(e,650))}function pD(e,t,r){t["!links"].forEach(function(n){if(n[1].Target){var i=Le(r,-1,n[1].Target.replace(/#.*$/,""),ke.HLINK);ie(e,494,qF(n,i))}}),delete t["!links"]}function gD(e,t,r,n){if(t["!comments"].length>0){var i=Le(n,-1,"../drawings/vmlDrawing"+(r+1)+".vml",ke.VML);ie(e,551,Wd("rId"+i)),t["!legacy"]=i}}function mD(e,t,r,n){if(t["!autofilter"]){var i=t["!autofilter"],o=typeof i.ref=="string"?i.ref:ot(i.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var a=r.Workbook.Names,s=tr(o);s.s.r==s.e.r&&(s.e.r=tr(t["!ref"]).e.r,o=ot(s));for(var l=0;l16383||l.e.r>1048575){if(t.WTF)throw new Error("Range "+(a["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");l.e.c=Math.min(l.e.c,16383),l.e.r=Math.min(l.e.c,1048575)}return a["!links"]=[],a["!comments"]=[],ie(i,129),(r.vbaraw||a["!outline"])&&ie(i,147,dF(s,a["!outline"])),ie(i,148,uF(l)),vD(i,a,r.Workbook),dD(i,a),cD(i,a,e,t),xD(i,a),mD(i,a,r,e),fD(i,a),pD(i,a,n),a["!margins"]&&ie(i,476,rD(a["!margins"])),(!t||t.ignoreEC||t.ignoreEC==null)&&hD(i,a),gD(i,a,e,n),ie(i,130),i.end()}function yD(e,t){e.l+=10;var r=Dt(e);return{name:r}}var ED=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]];function _D(e){return!e.Workbook||!e.Workbook.WBProps?"false":J4(e.Workbook.WBProps.date1904)?"true":"false"}var SD="][*?/\\".split("");function Ww(e,t){if(e.length>31){if(t)return!1;throw new Error("Sheet names cannot exceed 31 chars")}var r=!0;return SD.forEach(function(n){if(e.indexOf(n)!=-1){if(!t)throw new Error("Sheet name cannot contain : \\ / ? * [ ]");r=!1}}),r}function TD(e,t,r){e.forEach(function(n,i){Ww(n);for(var o=0;o22)throw new Error("Bad Code Name: Worksheet"+a)}})}function CD(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error("Invalid Workbook");if(!e.SheetNames.length)throw new Error("Workbook is empty");var t=e.Workbook&&e.Workbook.Sheets||[];TD(e.SheetNames,t,!!e.vbaraw);for(var r=0;r0,n={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(ED.forEach(function(s){e.Workbook.WBProps[s[0]]!=null&&e.Workbook.WBProps[s[0]]!=s[1]&&(n[s[0]]=e.Workbook.WBProps[s[0]])}),e.Workbook.WBProps.CodeName&&(n.codeName=e.Workbook.WBProps.CodeName,delete n.CodeName)),t[t.length]=fe("workbookPr",null,n);var i=e.Workbook&&e.Workbook.Sheets||[],o=0;if(i&&i[0]&&i[0].Hidden){for(t[t.length]="",o=0;o!=e.SheetNames.length&&!(!i[o]||!i[o].Hidden);++o);o==e.SheetNames.length&&(o=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",o=0;o!=e.SheetNames.length;++o){var a={name:Be(e.SheetNames[o].slice(0,31))};if(a.sheetId=""+(o+1),a["r:id"]="rId"+(o+1),i[o])switch(i[o].Hidden){case 1:a.state="hidden";break;case 2:a.state="veryHidden";break}t[t.length]=fe("sheet",null,a)}return t[t.length]="",r&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach(function(s){var l={name:s.Name};s.Comment&&(l.comment=s.Comment),s.Sheet!=null&&(l.localSheetId=""+s.Sheet),s.Hidden&&(l.hidden="1"),s.Ref&&(t[t.length]=fe("definedName",Be(s.Ref),l))}),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function AD(e,t){var r={};return r.Hidden=e.read_shift(4),r.iTabID=e.read_shift(4),r.strRelID=Jf(e),r.name=Dt(e),r}function RD(e,t){return t||(t=Z(127)),t.write_shift(4,e.Hidden),t.write_shift(4,e.iTabID),Wd(e.strRelID,t),ht(e.name.slice(0,31),t),t.length>t.l?t.slice(0,t.l):t}function OD(e,t){var r={},n=e.read_shift(4);r.defaultThemeVersion=e.read_shift(4);var i=t>8?Dt(e):"";return i.length>0&&(r.CodeName=i),r.autoCompressPictures=!!(n&65536),r.backupFile=!!(n&64),r.checkCompatibility=!!(n&4096),r.date1904=!!(n&1),r.filterPrivacy=!!(n&8),r.hidePivotFieldList=!!(n&1024),r.promptedSolutions=!!(n&16),r.publishItems=!!(n&2048),r.refreshAllConnections=!!(n&262144),r.saveExternalLinkValues=!!(n&128),r.showBorderUnselectedTables=!!(n&4),r.showInkAnnotation=!!(n&32),r.showObjects=["all","placeholders","none"][n>>13&3],r.showPivotChartFilter=!!(n&32768),r.updateLinks=["userSet","never","always"][n>>8&3],r}function FD(e,t){t||(t=Z(72));var r=0;return e&&e.filterPrivacy&&(r|=8),t.write_shift(4,r),t.write_shift(4,0),rw(e&&e.CodeName||"ThisWorkbook",t),t.slice(0,t.l)}function DD(e,t,r){var n=e.l+t;e.l+=4,e.l+=1;var i=e.read_shift(4),o=_3(e),a=HO(e,0,r),s=Vd(e);e.l=n;var l={Name:o,Ptg:a};return i<268435455&&(l.Sheet=i),s&&(l.Comment=s),l}function PD(e,t){ie(e,143);for(var r=0;r!=t.SheetNames.length;++r){var n=t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[r]&&t.Workbook.Sheets[r].Hidden||0,i={Hidden:n,iTabID:r+1,strRelID:"rId"+(r+1),name:t.SheetNames[r]};ie(e,156,RD(i))}ie(e,144)}function ID(e,t){t||(t=Z(127));for(var r=0;r!=4;++r)t.write_shift(4,0);return ht("SheetJS",t),ht($l.version,t),ht($l.version,t),ht("7262",t),t.length>t.l?t.slice(0,t.l):t}function bD(e,t){t||(t=Z(29)),t.write_shift(-4,0),t.write_shift(-4,460),t.write_shift(4,28800),t.write_shift(4,17600),t.write_shift(4,500),t.write_shift(4,e),t.write_shift(4,e);var r=120;return t.write_shift(1,r),t.length>t.l?t.slice(0,t.l):t}function kD(e,t){if(!(!t.Workbook||!t.Workbook.Sheets)){for(var r=t.Workbook.Sheets,n=0,i=-1,o=-1;ni||(ie(e,135),ie(e,158,bD(i)),ie(e,136))}}function $D(e,t){var r=jt();return ie(r,131),ie(r,128,ID()),ie(r,153,FD(e.Workbook&&e.Workbook.WBProps||null)),kD(r,e),PD(r,e),ie(r,132),r.end()}function ND(e,t,r){return(t.slice(-4)===".bin"?$D:zw)(e)}function MD(e,t,r,n,i){return(t.slice(-4)===".bin"?wD:Hw)(e,r,n,i)}function LD(e,t,r){return(t.slice(-4)===".bin"?rR:Aw)(e,r)}function BD(e,t,r){return(t.slice(-4)===".bin"?FA:_w)(e,r)}function UD(e,t,r){return(t.slice(-4)===".bin"?xR:Pw)(e)}function HD(e){return(e.slice(-4)===".bin"?cR:Fw)()}function VD(e,t){var r=[];return e.Props&&r.push(L3(e.Props,t)),e.Custprops&&r.push(B3(e.Props,e.Custprops)),r.join("")}function WD(){return""}function zD(e,t){var r=[''];return t.cellXfs.forEach(function(n,i){var o=[];o.push(fe("NumberFormat",null,{"ss:Format":Be(rt[n.numFmtId])}));var a={"ss:ID":"s"+(21+i)};r.push(fe("Style",o.join(""),a))}),fe("Styles",r.join(""))}function Gw(e){return fe("NamedRange",null,{"ss:Name":e.Name,"ss:RefersTo":"="+Xd(e.Ref,{r:0,c:0})})}function GD(e){if(!((e||{}).Workbook||{}).Names)return"";for(var t=e.Workbook.Names,r=[],n=0;n"),e["!margins"].header&&i.push(fe("Header",null,{"x:Margin":e["!margins"].header})),e["!margins"].footer&&i.push(fe("Footer",null,{"x:Margin":e["!margins"].footer})),i.push(fe("PageMargins",null,{"x:Bottom":e["!margins"].bottom||"0.75","x:Left":e["!margins"].left||"0.7","x:Right":e["!margins"].right||"0.7","x:Top":e["!margins"].top||"0.75"})),i.push("")),n&&n.Workbook&&n.Workbook.Sheets&&n.Workbook.Sheets[r])if(n.Workbook.Sheets[r].Hidden)i.push(fe("Visible",n.Workbook.Sheets[r].Hidden==1?"SheetHidden":"SheetVeryHidden",{}));else{for(var o=0;o")}return((((n||{}).Workbook||{}).Views||[])[0]||{}).RTL&&i.push(""),e["!protect"]&&(i.push(Et("ProtectContents","True")),e["!protect"].objects&&i.push(Et("ProtectObjects","True")),e["!protect"].scenarios&&i.push(Et("ProtectScenarios","True")),e["!protect"].selectLockedCells!=null&&!e["!protect"].selectLockedCells?i.push(Et("EnableSelection","NoSelection")):e["!protect"].selectUnlockedCells!=null&&!e["!protect"].selectUnlockedCells&&i.push(Et("EnableSelection","UnlockedCells")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(a){e["!protect"][a[0]]&&i.push("<"+a[1]+"/>")})),i.length==0?"":fe("WorksheetOptions",i.join(""),{xmlns:Qt.x})}function KD(e){return e.map(function(t){var r=Z4(t.t||""),n=fe("ss:Data",r,{xmlns:"http://www.w3.org/TR/REC-html40"});return fe("Comment",n,{"ss:Author":t.a})}).join("")}function YD(e,t,r,n,i,o,a){if(!e||e.v==null&&e.f==null)return"";var s={};if(e.f&&(s["ss:Formula"]="="+Be(Xd(e.f,a))),e.F&&e.F.slice(0,t.length)==t){var l=dt(e.F.slice(t.length+1));s["ss:ArrayRange"]="RC:R"+(l.r==a.r?"":"["+(l.r-a.r)+"]")+"C"+(l.c==a.c?"":"["+(l.c-a.c)+"]")}if(e.l&&e.l.Target&&(s["ss:HRef"]=Be(e.l.Target),e.l.Tooltip&&(s["x:HRefScreenTip"]=Be(e.l.Tooltip))),r["!merges"])for(var u=r["!merges"],c=0;c!=u.length;++c)u[c].s.c!=a.c||u[c].s.r!=a.r||(u[c].e.c>u[c].s.c&&(s["ss:MergeAcross"]=u[c].e.c-u[c].s.c),u[c].e.r>u[c].s.r&&(s["ss:MergeDown"]=u[c].e.r-u[c].s.r));var f="",d="";switch(e.t){case"z":if(!n.sheetStubs)return"";break;case"n":f="Number",d=String(e.v);break;case"b":f="Boolean",d=e.v?"1":"0";break;case"e":f="Error",d=ss[e.v];break;case"d":f="DateTime",d=new Date(e.v).toISOString(),e.z==null&&(e.z=e.z||rt[14]);break;case"s":f="String",d=Q4(e.v||"");break}var h=Wn(n.cellXfs,e,n);s["ss:StyleID"]="s"+(21+h),s["ss:Index"]=a.c+1;var m=e.v!=null?d:"",p=e.t=="z"?"":''+m+"";return(e.c||[]).length>0&&(p+=KD(e.c)),fe("Cell",p,s)}function qD(e,t){var r='"}function QD(e,t,r,n){if(!e["!ref"])return"";var i=Xe(e["!ref"]),o=e["!merges"]||[],a=0,s=[];e["!cols"]&&e["!cols"].forEach(function(g,v){Gd(g);var w=!!g.width,y=Ou(v,g),E={"ss:Index":v+1};w&&(E["ss:Width"]=zl(y.width)),g.hidden&&(E["ss:Hidden"]="1"),s.push(fe("Column",null,E))});for(var l=Array.isArray(e),u=i.s.r;u<=i.e.r;++u){for(var c=[qD(u,(e["!rows"]||[])[u])],f=i.s.c;f<=i.e.c;++f){var d=!1;for(a=0;a!=o.length;++a)if(!(o[a].s.c>f)&&!(o[a].s.r>u)&&!(o[a].e.c"),c.length>2&&s.push(c.join(""))}return s.join("")}function ZD(e,t,r){var n=[],i=r.SheetNames[e],o=r.Sheets[i],a=o?jD(o,t,e,r):"";return a.length>0&&n.push(""+a+""),a=o?QD(o,t,e,r):"",a.length>0&&n.push(""+a+"
    "),n.push(XD(o,t,e,r)),n.join("")}function JD(e,t){t||(t={}),e.SSF||(e.SSF=Kt(rt)),e.SSF&&(Su(),_u(e.SSF),t.revssf=Tu(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],Wn(t.cellXfs,{},{revssf:{General:0}}));var r=[];r.push(VD(e,t)),r.push(WD()),r.push(""),r.push("");for(var n=0;n-1||dw.indexOf(i[o][0])>-1||i[o][1]!=null&&u.push(i[o]);n.length&&He.utils.cfb_add(t,"/SummaryInformation",Bg(n,Mc.SI,l,kg)),(r.length||u.length)&&He.utils.cfb_add(t,"/DocumentSummaryInformation",Bg(r,Mc.DSI,s,bg,u.length?u:null,Mc.UDI))}function t6(e,t){var r=t||{},n=He.utils.cfb_new({root:"R"}),i="/Workbook";switch(r.bookType||"xls"){case"xls":r.bookType="biff8";case"xla":r.bookType||(r.bookType="xla");case"biff8":i="/Workbook",r.biff=8;break;case"biff5":i="/Book",r.biff=5;break;default:throw new Error("invalid type "+r.bookType+" for XLS CFB")}return He.utils.cfb_add(n,i,jw(e,r)),r.biff==8&&(e.Props||e.Custprops)&&e6(e,n),r.biff==8&&e.vbaraw&&wR(n,He.read(e.vbaraw,{type:typeof e.vbaraw=="string"?"binary":"buffer"})),n}var r6={0:{f:oF},1:{f:hF},2:{f:bF},3:{f:EF},4:{f:vF},5:{f:FF},6:{f:LF},7:{f:CF},8:{f:GF},9:{f:zF},10:{f:VF},11:{f:WF},12:{f:gF},13:{f:$F},14:{f:SF},15:{f:wF},16:{f:PF},17:{f:UF},18:{f:RF},19:{f:Hd},20:{},21:{},22:{},23:{},24:{},25:{},26:{},27:{},28:{},29:{},30:{},31:{},32:{},33:{},34:{},35:{T:1},36:{T:-1},37:{T:1},38:{T:-1},39:{f:DD},40:{},42:{},43:{f:LA},44:{f:NA},45:{f:HA},46:{f:WA},47:{f:VA},48:{},49:{f:g3},50:{},51:{f:oR},52:{T:1},53:{T:-1},54:{T:1},55:{T:-1},56:{T:1},57:{T:-1},58:{},59:{},60:{f:mA},62:{f:MF},63:{f:fR},64:{f:sD},65:{},66:{},67:{},68:{},69:{},70:{},128:{},129:{T:1},130:{T:-1},131:{T:1,f:$r,p:0},132:{T:-1},133:{T:1},134:{T:-1},135:{T:1},136:{T:-1},137:{T:1,f:nD},138:{T:-1},139:{T:1},140:{T:-1},141:{T:1},142:{T:-1},143:{T:1},144:{T:-1},145:{T:1},146:{T:-1},147:{f:fF},148:{f:lF,p:16},151:{f:QF},152:{},153:{f:OD},154:{},155:{},156:{f:AD},157:{},158:{},159:{T:1,f:AA},160:{T:-1},161:{T:1,f:Si},162:{T:-1},163:{T:1},164:{T:-1},165:{T:1},166:{T:-1},167:{},168:{},169:{},170:{},171:{},172:{T:1},173:{T:-1},174:{},175:{},176:{f:jF},177:{T:1},178:{T:-1},179:{T:1},180:{T:-1},181:{T:1},182:{T:-1},183:{T:1},184:{T:-1},185:{T:1},186:{T:-1},187:{T:1},188:{T:-1},189:{T:1},190:{T:-1},191:{T:1},192:{T:-1},193:{T:1},194:{T:-1},195:{T:1},196:{T:-1},197:{T:1},198:{T:-1},199:{T:1},200:{T:-1},201:{T:1},202:{T:-1},203:{T:1},204:{T:-1},205:{T:1},206:{T:-1},207:{T:1},208:{T:-1},209:{T:1},210:{T:-1},211:{T:1},212:{T:-1},213:{T:1},214:{T:-1},215:{T:1},216:{T:-1},217:{T:1},218:{T:-1},219:{T:1},220:{T:-1},221:{T:1},222:{T:-1},223:{T:1},224:{T:-1},225:{T:1},226:{T:-1},227:{T:1},228:{T:-1},229:{T:1},230:{T:-1},231:{T:1},232:{T:-1},233:{T:1},234:{T:-1},235:{T:1},236:{T:-1},237:{T:1},238:{T:-1},239:{T:1},240:{T:-1},241:{T:1},242:{T:-1},243:{T:1},244:{T:-1},245:{T:1},246:{T:-1},247:{T:1},248:{T:-1},249:{T:1},250:{T:-1},251:{T:1},252:{T:-1},253:{T:1},254:{T:-1},255:{T:1},256:{T:-1},257:{T:1},258:{T:-1},259:{T:1},260:{T:-1},261:{T:1},262:{T:-1},263:{T:1},264:{T:-1},265:{T:1},266:{T:-1},267:{T:1},268:{T:-1},269:{T:1},270:{T:-1},271:{T:1},272:{T:-1},273:{T:1},274:{T:-1},275:{T:1},276:{T:-1},277:{},278:{T:1},279:{T:-1},280:{T:1},281:{T:-1},282:{T:1},283:{T:1},284:{T:-1},285:{T:1},286:{T:-1},287:{T:1},288:{T:-1},289:{T:1},290:{T:-1},291:{T:1},292:{T:-1},293:{T:1},294:{T:-1},295:{T:1},296:{T:-1},297:{T:1},298:{T:-1},299:{T:1},300:{T:-1},301:{T:1},302:{T:-1},303:{T:1},304:{T:-1},305:{T:1},306:{T:-1},307:{T:1},308:{T:-1},309:{T:1},310:{T:-1},311:{T:1},312:{T:-1},313:{T:-1},314:{T:1},315:{T:-1},316:{T:1},317:{T:-1},318:{T:1},319:{T:-1},320:{T:1},321:{T:-1},322:{T:1},323:{T:-1},324:{T:1},325:{T:-1},326:{T:1},327:{T:-1},328:{T:1},329:{T:-1},330:{T:1},331:{T:-1},332:{T:1},333:{T:-1},334:{T:1},335:{f:nR},336:{T:-1},337:{f:lR,T:1},338:{T:-1},339:{T:1},340:{T:-1},341:{T:1},342:{T:-1},343:{T:1},344:{T:-1},345:{T:1},346:{T:-1},347:{T:1},348:{T:-1},349:{T:1},350:{T:-1},351:{},352:{},353:{T:1},354:{T:-1},355:{f:Jf},357:{},358:{},359:{},360:{T:1},361:{},362:{f:cA},363:{},364:{},366:{},367:{},368:{},369:{},370:{},371:{},372:{T:1},373:{T:-1},374:{T:1},375:{T:-1},376:{T:1},377:{T:-1},378:{T:1},379:{T:-1},380:{T:1},381:{T:-1},382:{T:1},383:{T:-1},384:{T:1},385:{T:-1},386:{T:1},387:{T:-1},388:{T:1},389:{T:-1},390:{T:1},391:{T:-1},392:{T:1},393:{T:-1},394:{T:1},395:{T:-1},396:{},397:{},398:{},399:{},400:{},401:{T:1},403:{},404:{},405:{},406:{},407:{},408:{},409:{},410:{},411:{},412:{},413:{},414:{},415:{},416:{},417:{},418:{},419:{},420:{},421:{},422:{T:1},423:{T:1},424:{T:-1},425:{T:-1},426:{f:ZF},427:{f:JF},428:{},429:{T:1},430:{T:-1},431:{T:1},432:{T:-1},433:{T:1},434:{T:-1},435:{T:1},436:{T:-1},437:{T:1},438:{T:-1},439:{T:1},440:{T:-1},441:{T:1},442:{T:-1},443:{T:1},444:{T:-1},445:{T:1},446:{T:-1},447:{T:1},448:{T:-1},449:{T:1},450:{T:-1},451:{T:1},452:{T:-1},453:{T:1},454:{T:-1},455:{T:1},456:{T:-1},457:{T:1},458:{T:-1},459:{T:1},460:{T:-1},461:{T:1},462:{T:-1},463:{T:1},464:{T:-1},465:{T:1},466:{T:-1},467:{T:1},468:{T:-1},469:{T:1},470:{T:-1},471:{},472:{},473:{T:1},474:{T:-1},475:{},476:{f:tD},477:{},478:{},479:{T:1},480:{T:-1},481:{T:1},482:{T:-1},483:{T:1},484:{T:-1},485:{f:cF},486:{T:1},487:{T:-1},488:{T:1},489:{T:-1},490:{T:1},491:{T:-1},492:{T:1},493:{T:-1},494:{f:YF},495:{T:1},496:{T:-1},497:{T:1},498:{T:-1},499:{},500:{T:1},501:{T:-1},502:{T:1},503:{T:-1},504:{},505:{T:1},506:{T:-1},507:{},508:{T:1},509:{T:-1},510:{T:1},511:{T:-1},512:{},513:{},514:{T:1},515:{T:-1},516:{T:1},517:{T:-1},518:{T:1},519:{T:-1},520:{T:1},521:{T:-1},522:{},523:{},524:{},525:{},526:{},527:{},528:{T:1},529:{T:-1},530:{T:1},531:{T:-1},532:{T:1},533:{T:-1},534:{},535:{},536:{},537:{},538:{T:1},539:{T:-1},540:{T:1},541:{T:-1},542:{T:1},548:{},549:{},550:{f:Jf},551:{},552:{},553:{},554:{T:1},555:{T:-1},556:{T:1},557:{T:-1},558:{T:1},559:{T:-1},560:{T:1},561:{T:-1},562:{},564:{},565:{T:1},566:{T:-1},569:{T:1},570:{T:-1},572:{},573:{T:1},574:{T:-1},577:{},578:{},579:{},580:{},581:{},582:{},583:{},584:{},585:{},586:{},587:{},588:{T:-1},589:{},590:{T:1},591:{T:-1},592:{T:1},593:{T:-1},594:{T:1},595:{T:-1},596:{},597:{T:1},598:{T:-1},599:{T:1},600:{T:-1},601:{T:1},602:{T:-1},603:{T:1},604:{T:-1},605:{T:1},606:{T:-1},607:{},608:{T:1},609:{T:-1},610:{},611:{T:1},612:{T:-1},613:{T:1},614:{T:-1},615:{T:1},616:{T:-1},617:{T:1},618:{T:-1},619:{T:1},620:{T:-1},625:{},626:{T:1},627:{T:-1},628:{T:1},629:{T:-1},630:{T:1},631:{T:-1},632:{f:mR},633:{T:1},634:{T:-1},635:{T:1,f:pR},636:{T:-1},637:{f:w3},638:{T:1},639:{},640:{T:-1},641:{T:1},642:{T:-1},643:{T:1},644:{},645:{T:-1},646:{T:1},648:{T:1},649:{},650:{T:-1},651:{f:yD},652:{},653:{T:1},654:{T:-1},655:{T:1},656:{T:-1},657:{T:1},658:{T:-1},659:{},660:{T:1},661:{},662:{T:-1},663:{},664:{T:1},665:{},666:{T:-1},667:{},668:{},669:{},671:{T:1},672:{T:-1},673:{T:1},674:{T:-1},675:{},676:{},677:{},678:{},679:{},680:{},681:{},1024:{},1025:{},1026:{T:1},1027:{T:-1},1028:{T:1},1029:{T:-1},1030:{},1031:{T:1},1032:{T:-1},1033:{T:1},1034:{T:-1},1035:{},1036:{},1037:{},1038:{T:1},1039:{T:-1},1040:{},1041:{T:1},1042:{T:-1},1043:{},1044:{},1045:{},1046:{T:1},1047:{T:-1},1048:{T:1},1049:{T:-1},1050:{},1051:{T:1},1052:{T:1},1053:{f:lD},1054:{T:1},1055:{},1056:{T:1},1057:{T:-1},1058:{T:1},1059:{T:-1},1061:{},1062:{T:1},1063:{T:-1},1064:{T:1},1065:{T:-1},1066:{T:1},1067:{T:-1},1068:{T:1},1069:{T:-1},1070:{T:1},1071:{T:-1},1072:{T:1},1073:{T:-1},1075:{T:1},1076:{T:-1},1077:{T:1},1078:{T:-1},1079:{T:1},1080:{T:-1},1081:{T:1},1082:{T:-1},1083:{T:1},1084:{T:-1},1085:{},1086:{T:1},1087:{T:-1},1088:{T:1},1089:{T:-1},1090:{T:1},1091:{T:-1},1092:{T:1},1093:{T:-1},1094:{T:1},1095:{T:-1},1096:{},1097:{T:1},1098:{},1099:{T:-1},1100:{T:1},1101:{T:-1},1102:{},1103:{},1104:{},1105:{},1111:{},1112:{},1113:{T:1},1114:{T:-1},1115:{T:1},1116:{T:-1},1117:{},1118:{T:1},1119:{T:-1},1120:{T:1},1121:{T:-1},1122:{T:1},1123:{T:-1},1124:{T:1},1125:{T:-1},1126:{},1128:{T:1},1129:{T:-1},1130:{},1131:{T:1},1132:{T:-1},1133:{T:1},1134:{T:-1},1135:{T:1},1136:{T:-1},1137:{T:1},1138:{T:-1},1139:{T:1},1140:{T:-1},1141:{},1142:{T:1},1143:{T:-1},1144:{T:1},1145:{T:-1},1146:{},1147:{T:1},1148:{T:-1},1149:{T:1},1150:{T:-1},1152:{T:1},1153:{T:-1},1154:{T:-1},1155:{T:-1},1156:{T:-1},1157:{T:1},1158:{T:-1},1159:{T:1},1160:{T:-1},1161:{T:1},1162:{T:-1},1163:{T:1},1164:{T:-1},1165:{T:1},1166:{T:-1},1167:{T:1},1168:{T:-1},1169:{T:1},1170:{T:-1},1171:{},1172:{T:1},1173:{T:-1},1177:{},1178:{T:1},1180:{},1181:{},1182:{},2048:{T:1},2049:{T:-1},2050:{},2051:{T:1},2052:{T:-1},2053:{},2054:{},2055:{T:1},2056:{T:-1},2057:{T:1},2058:{T:-1},2060:{},2067:{},2068:{T:1},2069:{T:-1},2070:{},2071:{},2072:{T:1},2073:{T:-1},2075:{},2076:{},2077:{T:1},2078:{T:-1},2079:{},2080:{T:1},2081:{T:-1},2082:{},2083:{T:1},2084:{T:-1},2085:{T:1},2086:{T:-1},2087:{T:1},2088:{T:-1},2089:{T:1},2090:{T:-1},2091:{},2092:{},2093:{T:1},2094:{T:-1},2095:{},2096:{T:1},2097:{T:-1},2098:{T:1},2099:{T:-1},2100:{T:1},2101:{T:-1},2102:{},2103:{T:1},2104:{T:-1},2105:{},2106:{T:1},2107:{T:-1},2108:{},2109:{T:1},2110:{T:-1},2111:{T:1},2112:{T:-1},2113:{T:1},2114:{T:-1},2115:{},2116:{},2117:{},2118:{T:1},2119:{T:-1},2120:{},2121:{T:1},2122:{T:-1},2123:{T:1},2124:{T:-1},2125:{},2126:{T:1},2127:{T:-1},2128:{},2129:{T:1},2130:{T:-1},2131:{T:1},2132:{T:-1},2133:{T:1},2134:{},2135:{},2136:{},2137:{T:1},2138:{T:-1},2139:{T:1},2140:{T:-1},2141:{},3072:{},3073:{},4096:{T:1},4097:{T:-1},5002:{T:1},5003:{T:-1},5081:{T:1},5082:{T:-1},5083:{},5084:{T:1},5085:{T:-1},5086:{T:1},5087:{T:-1},5088:{},5089:{},5090:{},5092:{T:1},5093:{T:-1},5094:{},5095:{T:1},5096:{T:-1},5097:{},5099:{},65535:{n:""}};function de(e,t,r,n){var i=t;if(!isNaN(i)){var o=n||(r||[]).length||0,a=e.next(4);a.write_shift(2,i),a.write_shift(2,o),o>0&&Ld(r)&&e.push(r)}}function n6(e,t,r,n){var i=n||(r||[]).length||0;if(i<=8224)return de(e,t,r,i);var o=t;if(!isNaN(o)){for(var a=r.parts||[],s=0,l=0,u=0;u+(a[s]||8224)<=8224;)u+=a[s]||8224,s++;var c=e.next(4);for(c.write_shift(2,o),c.write_shift(2,u),e.push(r.slice(l,l+u)),l+=u;l=0&&i<65536?de(e,2,yA(r,n,i)):de(e,3,wA(r,n,i));return;case"b":case"e":de(e,5,i6(r,n,t.v,t.t));return;case"s":case"str":de(e,4,o6(r,n,(t.v||"").slice(0,255)));return}de(e,1,us(null,r,n))}function s6(e,t,r,n){var i=Array.isArray(t),o=Xe(t["!ref"]||"A1"),a,s="",l=[];if(o.e.c>255||o.e.r>16383){if(n.WTF)throw new Error("Range "+(t["!ref"]||"A1")+" exceeds format limit A1:IV16384");o.e.c=Math.min(o.e.c,255),o.e.r=Math.min(o.e.c,16383),a=ot(o)}for(var u=o.s.r;u<=o.e.r;++u){s=_t(u);for(var c=o.s.c;c<=o.e.c;++c){u===o.s.r&&(l[c]=Ft(c)),a=l[c]+s;var f=i?(t[u]||[])[c]:t[a];f&&a6(e,f,u,c)}}}function l6(e,t){for(var r=t||{},n=jt(),i=0,o=0;o255||h.e.r>=m){if(t.WTF)throw new Error("Range "+(o["!ref"]||"A1")+" exceeds format limit A1:IV16384");h.e.c=Math.min(h.e.c,255),h.e.r=Math.min(h.e.c,m-1)}de(n,2057,zd(r,16,t)),de(n,13,ar(1)),de(n,12,ar(100)),de(n,15,$t(!0)),de(n,17,$t(!1)),de(n,16,li(.001)),de(n,95,$t(!0)),de(n,42,$t(!1)),de(n,43,$t(!1)),de(n,130,ar(1)),de(n,128,sA([0,0])),de(n,131,$t(!1)),de(n,132,$t(!1)),u&&p6(n,o["!cols"]),de(n,512,aA(h,t)),u&&(o["!links"]=[]);for(var p=h.s.r;p<=h.e.r;++p){f=_t(p);for(var g=h.s.c;g<=h.e.c;++g){p===h.s.r&&(d[g]=Ft(g)),c=d[g]+f;var v=l?(o[p]||[])[g]:o[c];v&&(g6(n,v,p,g,t),u&&v.l&&o["!links"].push([c,v.l]))}}var w=s.CodeName||s.name||i;return u&&de(n,574,tA((a.Views||[])[0])),u&&(o["!merges"]||[]).length&&de(n,229,dA(o["!merges"])),u&&h6(n,o),de(n,442,ww(w)),u&&f6(n,o),de(n,10),n.end()}function v6(e,t,r){var n=jt(),i=(e||{}).Workbook||{},o=i.Sheets||[],a=i.WBProps||{},s=r.biff==8,l=r.biff==5;if(de(n,2057,zd(e,5,r)),r.bookType=="xla"&&de(n,135),de(n,225,s?ar(1200):null),de(n,193,V3(2)),l&&de(n,191),l&&de(n,192),de(n,226),de(n,92,Q3("SheetJS",r)),de(n,66,ar(s?1200:1252)),s&&de(n,353,ar(0)),s&&de(n,448),de(n,317,xA(e.SheetNames.length)),s&&e.vbaraw&&de(n,211),s&&e.vbaraw){var u=a.CodeName||"ThisWorkbook";de(n,442,ww(u))}de(n,156,ar(17)),de(n,25,$t(!1)),de(n,18,$t(!1)),de(n,19,ar(0)),s&&de(n,431,$t(!1)),s&&de(n,444,ar(0)),de(n,61,eA()),de(n,64,$t(!1)),de(n,141,ar(0)),de(n,34,$t(_D(e)=="true")),de(n,14,$t(!0)),s&&de(n,439,$t(!1)),de(n,218,ar(0)),u6(n,e,r),c6(n,e.SSF,r),d6(n,r),s&&de(n,352,$t(!1));var c=n.end(),f=jt();s&&de(f,140,gA()),s&&r.Strings&&n6(f,252,J3(r.Strings)),de(f,10);var d=f.end(),h=jt(),m=0,p=0;for(p=0;p255&&typeof console<"u"&&console.error&&console.error("Worksheet '"+e.SheetNames[r]+"' extends beyond column IV (255). Data may be lost.")}}var o=t||{};switch(o.biff||2){case 8:case 5:return x6(e,t);case 4:case 3:case 2:return l6(e,t)}throw new Error("invalid type "+o.bookType+" for BIFF")}function w6(e,t,r,n){for(var i=e["!merges"]||[],o=[],a=t.s.c;a<=t.e.c;++a){for(var s=0,l=0,u=0;ur||i[u].s.c>a)&&!(i[u].e.r1&&(h.rowspan=s),l>1&&(h.colspan=l),n.editable?d=''+d+"":f&&(h["data-t"]=f&&f.t||"z",f.v!=null&&(h["data-v"]=f.v),f.z!=null&&(h["data-z"]=f.z),f.l&&(f.l.Target||"#").charAt(0)!="#"&&(d=''+d+"")),h.id=(n.id||"sjs")+"-"+c,o.push(fe("td",d,h))}}var m="";return m+o.join("")+""}var y6='SheetJS Table Export',E6="";function _6(e,t,r){var n=[];return n.join("")+""}function Xw(e,t){var r=t||{},n=r.header!=null?r.header:y6,i=r.footer!=null?r.footer:E6,o=[n],a=tr(e["!ref"]);r.dense=Array.isArray(e),o.push(_6(e,a,r));for(var s=a.s.r;s<=a.e.r;++s)o.push(w6(e,a,s,r));return o.push(""+i),o.join("")}function Kw(e,t,r){var n=r||{},i=0,o=0;if(n.origin!=null)if(typeof n.origin=="number")i=n.origin;else{var a=typeof n.origin=="string"?dt(n.origin):n.origin;i=a.r,o=a.c}var s=t.getElementsByTagName("tr"),l=Math.min(n.sheetRows||1e7,s.length),u={s:{r:0,c:0},e:{r:i,c:o}};if(e["!ref"]){var c=tr(e["!ref"]);u.s.r=Math.min(u.s.r,c.s.r),u.s.c=Math.min(u.s.c,c.s.c),u.e.r=Math.max(u.e.r,c.e.r),u.e.c=Math.max(u.e.c,c.e.c),i==-1&&(u.e.r=i=c.e.r+1)}var f=[],d=0,h=e["!rows"]||(e["!rows"]=[]),m=0,p=0,g=0,v=0,w=0,y=0;for(e["!cols"]||(e["!cols"]=[]);m1||y>1)&&f.push({s:{r:p+i,c:v+o},e:{r:p+i+(w||1)-1,c:v+o+(y||1)-1}});var L={t:"s",v:S},B=k.getAttribute("data-t")||k.getAttribute("t")||"";S!=null&&(S.length==0?L.t=B||"z":n.raw||S.trim().length==0||B=="s"||(S==="TRUE"?L={t:"b",v:!0}:S==="FALSE"?L={t:"b",v:!1}:isNaN(Qr(S))?isNaN(Wa(S).getDate())||(L={t:"d",v:Lt(S)},n.cellDates||(L={t:"n",v:Xt(L.v)}),L.z=n.dateNF||rt[14]):L={t:"n",v:Qr(S)})),L.z===void 0&&C!=null&&(L.z=C);var U="",H=k.getElementsByTagName("A");if(H&&H.length)for(var G=0;G=l&&(e["!fullref"]=ot((u.e.r=s.length-m+p-1+i,u))),e}function Yw(e,t){var r=t||{},n=r.dense?[]:{};return Kw(n,e,t)}function S6(e,t){return wi(Yw(e,t),t)}function Kg(e){var t="",r=T6(e);return r&&(t=r(e).getPropertyValue("display")),t||(t=e.style&&e.style.display),t==="none"}function T6(e){return e.ownerDocument.defaultView&&typeof e.ownerDocument.defaultView.getComputedStyle=="function"?e.ownerDocument.defaultView.getComputedStyle:typeof getComputedStyle=="function"?getComputedStyle:null}var C6=function(){var e=["",'',"",'',"",'',"",""].join(""),t=""+e+"";return function(){return at+t}}(),Yg=function(){var e=function(o){return Be(o).replace(/ +/g,function(a){return''}).replace(/\t/g,"").replace(/\n/g,"").replace(/^ /,"").replace(/ $/,"")},t=` +`,r=` +`,n=function(o,a,s){var l=[];l.push(' +`);var u=0,c=0,f=tr(o["!ref"]||"A1"),d=o["!merges"]||[],h=0,m=Array.isArray(o);if(o["!cols"])for(c=0;c<=f.e.c;++c)l.push(" +`);var p="",g=o["!rows"]||[];for(u=0;u +`);for(;u<=f.e.r;++u){for(p=g[u]?' table:style-name="ro'+g[u].ods+'"':"",l.push(" +`),c=0;cc)&&!(d[h].s.r>u)&&!(d[h].e.c +`)}return l.push(` +`),l.join("")},i=function(o,a){o.push(` +`),o.push(` +`),o.push(` +`),o.push(` / +`),o.push(` +`),o.push(` / +`),o.push(` +`),o.push(` +`);var s=0;a.SheetNames.map(function(u){return a.Sheets[u]}).forEach(function(u){if(u&&u["!cols"]){for(var c=0;c +`),o.push(' +`),o.push(` +`),++s}}});var l=0;a.SheetNames.map(function(u){return a.Sheets[u]}).forEach(function(u){if(u&&u["!rows"]){for(var c=0;c +`),o.push(' +`),o.push(` +`),++l}}}),o.push(` +`),o.push(` +`),o.push(` +`),o.push(` +`),o.push(` +`)};return function(a,s){var l=[at],u=za({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),c=za({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});s.bookType=="fods"?(l.push(" +`),l.push(cw().replace(/office:document-meta/g,"office:meta"))):l.push(" +`),i(l,a),l.push(` +`),l.push(` +`);for(var f=0;f!=a.SheetNames.length;++f)l.push(n(a.Sheets[a.SheetNames[f]],a,f));return l.push(` +`),l.push(` +`),s.bookType=="fods"?l.push(""):l.push(""),l.join("")}}();function qw(e,t){if(t.bookType=="fods")return Yg(e,t);var r=kd(),n="",i=[],o=[];return n="mimetype",De(r,n,"application/vnd.oasis.opendocument.spreadsheet"),n="content.xml",De(r,n,Yg(e,t)),i.push([n,"text/xml"]),o.push([n,"ContentFile"]),n="styles.xml",De(r,n,C6(e,t)),i.push([n,"text/xml"]),o.push([n,"StylesFile"]),n="meta.xml",De(r,n,at+cw()),i.push([n,"text/xml"]),o.push([n,"MetadataFile"]),n="manifest.rdf",De(r,n,M3(o)),i.push([n,"application/rdf+xml"]),n="META-INF/manifest.xml",De(r,n,$3(i)),r}/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */function Xl(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function A6(e){return typeof TextEncoder<"u"?new TextEncoder().encode(e):Er(Xr(e))}function R6(e,t){e:for(var r=0;r<=e.length-t.length;++r){for(var n=0;n>7,e[t+14]|=(n&127)<<1;for(var o=0;i>=1;++o,i/=256)e[t+o]=i&255;e[t+15]|=r>=0?0:128}function Ga(e,t){var r=t?t[0]:0,n=e[r]&127;e:if(e[r++]>=128&&(n|=(e[r]&127)<<7,e[r++]<128||(n|=(e[r]&127)<<14,e[r++]<128)||(n|=(e[r]&127)<<21,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,28),++r,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,35),++r,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,42),++r,e[r++]<128)))break e;return t&&(t[0]=r),n}function Me(e){var t=new Uint8Array(7);t[0]=e&127;var r=1;e:if(e>127){if(t[r-1]|=128,t[r]=e>>7&127,++r,e<=16383||(t[r-1]|=128,t[r]=e>>14&127,++r,e<=2097151)||(t[r-1]|=128,t[r]=e>>21&127,++r,e<=268435455)||(t[r-1]|=128,t[r]=e/256>>>21&127,++r,e<=34359738367)||(t[r-1]|=128,t[r]=e/65536>>>21&127,++r,e<=4398046511103))break e;t[r-1]|=128,t[r]=e/16777216>>>21&127,++r}return t.slice(0,r)}function uo(e){var t=0,r=e[t]&127;e:if(e[t++]>=128){if(r|=(e[t]&127)<<7,e[t++]<128||(r|=(e[t]&127)<<14,e[t++]<128)||(r|=(e[t]&127)<<21,e[t++]<128))break e;r|=(e[t]&127)<<28}return r}function st(e){for(var t=[],r=[0];r[0]=128;);s=e.slice(l,r[0])}break;case 5:a=4,s=e.slice(r[0],r[0]+a),r[0]+=a;break;case 1:a=8,s=e.slice(r[0],r[0]+a),r[0]+=a;break;case 2:a=Ga(e,r),s=e.slice(r[0],r[0]+a),r[0]+=a;break;case 3:case 4:default:throw new Error("PB Type ".concat(o," for Field ").concat(i," at offset ").concat(n))}var u={data:s,type:o};t[i]==null?t[i]=[u]:t[i].push(u)}return t}function mt(e){var t=[];return e.forEach(function(r,n){r.forEach(function(i){i.data&&(t.push(Me(n*8+i.type)),i.type==2&&t.push(Me(i.data.length)),t.push(i.data))})}),Ln(t)}function vr(e){for(var t,r=[],n=[0];n[0]>>0>0),r.push(a)}return r}function $i(e){var t=[];return e.forEach(function(r){var n=[];n[1]=[{data:Me(r.id),type:0}],n[2]=[],r.merge!=null&&(n[3]=[{data:Me(+!!r.merge),type:0}]);var i=[];r.messages.forEach(function(a){i.push(a.data),a.meta[3]=[{type:0,data:Me(a.data.length)}],n[2].push({data:mt(a.meta),type:2})});var o=mt(n);t.push(Me(o.length)),t.push(o),i.forEach(function(a){return t.push(a)})}),Ln(t)}function F6(e,t){if(e!=0)throw new Error("Unexpected Snappy chunk type ".concat(e));for(var r=[0],n=Ga(t,r),i=[];r[0]>2;if(a<60)++a;else{var s=a-59;a=t[r[0]],s>1&&(a|=t[r[0]+1]<<8),s>2&&(a|=t[r[0]+2]<<16),s>3&&(a|=t[r[0]+3]<<24),a>>>=0,a++,r[0]+=s}i.push(t.slice(r[0],r[0]+a)),r[0]+=a;continue}else{var l=0,u=0;if(o==1?(u=(t[r[0]]>>2&7)+4,l=(t[r[0]++]&224)<<3,l|=t[r[0]++]):(u=(t[r[0]++]>>2)+1,o==2?(l=t[r[0]]|t[r[0]+1]<<8,r[0]+=2):(l=(t[r[0]]|t[r[0]+1]<<8|t[r[0]+2]<<16|t[r[0]+3]<<24)>>>0,r[0]+=4)),i=[Ln(i)],l==0)throw new Error("Invalid offset 0");if(l>i[0].length)throw new Error("Invalid offset beyond length");if(u>=l)for(i.push(i[0].slice(-l)),u-=l;u>=i[i.length-1].length;)i.push(i[i.length-1]),u-=i[i.length-1].length;i.push(i[0].slice(-l,-l+u))}}var c=Ln(i);if(c.length!=n)throw new Error("Unexpected length: ".concat(c.length," != ").concat(n));return c}function xr(e){for(var t=[],r=0;r>8&255]))):n<=16777216?(a+=4,t.push(new Uint8Array([248,n-1&255,n-1>>8&255,n-1>>16&255]))):n<=4294967296&&(a+=5,t.push(new Uint8Array([252,n-1&255,n-1>>8&255,n-1>>16&255,n-1>>>24&255]))),t.push(e.slice(r,r+n)),a+=n,i[0]=0,i[1]=a&255,i[2]=a>>8&255,i[3]=a>>16&255,r+=n}return Ln(t)}function Lc(e,t){var r=new Uint8Array(32),n=Xl(r),i=12,o=0;switch(r[0]=5,e.t){case"n":r[1]=2,O6(r,i,e.v),o|=1,i+=16;break;case"b":r[1]=6,n.setFloat64(i,e.v?1:0,!0),o|=2,i+=8;break;case"s":if(t.indexOf(e.v)==-1)throw new Error("Value ".concat(e.v," missing from SST!"));r[1]=3,n.setUint32(i,t.indexOf(e.v),!0),o|=8,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(8,o,!0),r.slice(0,i)}function Bc(e,t){var r=new Uint8Array(32),n=Xl(r),i=12,o=0;switch(r[0]=3,e.t){case"n":r[2]=2,n.setFloat64(i,e.v,!0),o|=32,i+=8;break;case"b":r[2]=6,n.setFloat64(i,e.v?1:0,!0),o|=32,i+=8;break;case"s":if(t.indexOf(e.v)==-1)throw new Error("Value ".concat(e.v," missing from SST!"));r[2]=3,n.setUint32(i,t.indexOf(e.v),!0),o|=16,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(4,o,!0),r.slice(0,i)}function cn(e){var t=st(e);return Ga(t[1][0].data)}function D6(e,t,r){var n,i,o,a;if(!((n=e[6])!=null&&n[0])||!((i=e[7])!=null&&i[0]))throw"Mutation only works on post-BNC storages!";var s=((a=(o=e[8])==null?void 0:o[0])==null?void 0:a.data)&&uo(e[8][0].data)>0||!1;if(s)throw"Math only works with normal offsets";for(var l=0,u=Xl(e[7][0].data),c=0,f=[],d=Xl(e[4][0].data),h=0,m=[],p=0;p1&&console.error("The Numbers writer currently writes only the first table");var n=tr(r["!ref"]);n.s.r=n.s.c=0;var i=!1;n.e.c>9&&(i=!0,n.e.c=9),n.e.r>49&&(i=!0,n.e.r=49),i&&console.error("The Numbers writer is currently limited to ".concat(ot(n)));var o=Kl(r,{range:n,header:1}),a=["~Sh33tJ5~"];o.forEach(function(M){return M.forEach(function(N){typeof N=="string"&&a.push(N)})});var s={},l=[],u=He.read(t.numbers,{type:"base64"});u.FileIndex.map(function(M,N){return[M,u.FullPaths[N]]}).forEach(function(M){var N=M[0],F=M[1];if(N.type==2&&N.name.match(/\.iwa/)){var V=N.content,Y=xr(V),J=vr(Y);J.forEach(function(W){l.push(W.id),s[W.id]={deps:[],location:F,type:uo(W.messages[0].meta[1][0].data)}})}}),l.sort(function(M,N){return M-N});var c=l.filter(function(M){return M>1}).map(function(M){return[M,Me(M)]});u.FileIndex.map(function(M,N){return[M,u.FullPaths[N]]}).forEach(function(M){var N=M[0];if(M[1],!!N.name.match(/\.iwa/)){var F=vr(xr(N.content));F.forEach(function(V){V.messages.forEach(function(Y){c.forEach(function(J){V.messages.some(function(W){return uo(W.meta[1][0].data)!=11006&&R6(W.data,J[1])})&&s[J[0]].deps.push(V.id)})})})}});for(var f=He.find(u,s[1].location),d=vr(xr(f.content)),h,m=0;m-1,i=sw();qd(t=t||{});var o=kd(),a="",s=0;if(t.cellXfs=[],Wn(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),a="docProps/core.xml",De(o,a,fw(e.Props,t)),i.coreprops.push(a),Le(t.rels,2,a,ke.CORE_PROPS),a="docProps/app.xml",!(e.Props&&e.Props.SheetNames))if(!e.Workbook||!e.Workbook.Sheets)e.Props.SheetNames=e.SheetNames;else{for(var l=[],u=0;u0&&(a="docProps/custom.xml",De(o,a,pw(e.Custprops)),i.custprops.push(a),Le(t.rels,4,a,ke.CUST_PROPS)),s=1;s<=e.SheetNames.length;++s){var c={"!id":{}},f=e.Sheets[e.SheetNames[s-1]],d=(f||{})["!type"]||"sheet";switch(d){case"chart":default:a="xl/worksheets/sheet"+s+"."+r,De(o,a,MD(s-1,a,t,e,c)),i.sheets.push(a),Le(t.wbrels,-1,"worksheets/sheet"+s+"."+r,ke.WS[0])}if(f){var h=f["!comments"],m=!1,p="";h&&h.length>0&&(p="xl/comments"+s+"."+r,De(o,p,UD(h,p)),i.comments.push(p),Le(c,-1,"../comments"+s+"."+r,ke.CMNT),m=!0),f["!legacy"]&&m&&De(o,"xl/drawings/vmlDrawing"+s+".vml",Dw(s,f["!comments"])),delete f["!comments"],delete f["!legacy"]}c["!id"].rId1&&De(o,uw(a),so(c))}return t.Strings!=null&&t.Strings.length>0&&(a="xl/sharedStrings."+r,De(o,a,BD(t.Strings,a,t)),i.strs.push(a),Le(t.wbrels,-1,"sharedStrings."+r,ke.SST)),a="xl/workbook."+r,De(o,a,ND(e,a)),i.workbooks.push(a),Le(t.rels,1,a,ke.WB),a="xl/theme/theme1.xml",De(o,a,Ow(e.Themes,t)),i.themes.push(a),Le(t.wbrels,-1,"theme/theme1.xml",ke.THEME),a="xl/styles."+r,De(o,a,LD(e,a,t)),i.styles.push(a),Le(t.wbrels,-1,"styles."+r,ke.STY),e.vbaraw&&n&&(a="xl/vbaProject.bin",De(o,a,e.vbaraw),i.vba.push(a),Le(t.wbrels,-1,"vbaProject.bin",ke.VBA)),a="xl/metadata."+r,De(o,a,HD(a)),i.metadata.push(a),Le(t.wbrels,-1,"metadata."+r,ke.XLMETA),De(o,"[Content_Types].xml",lw(i,t)),De(o,"_rels/.rels",so(t.rels)),De(o,"xl/_rels/workbook."+r+".rels",so(t.wbrels)),delete t.revssf,delete t.ssf,o}function $6(e,t){Xi=1024,e&&!e.SSF&&(e.SSF=Kt(rt)),e&&e.SSF&&(Su(),_u(e.SSF),t.revssf=Tu(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,Ta?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var r="xml",n=Iw.indexOf(t.bookType)>-1,i=sw();qd(t=t||{});var o=kd(),a="",s=0;if(t.cellXfs=[],Wn(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),a="docProps/core.xml",De(o,a,fw(e.Props,t)),i.coreprops.push(a),Le(t.rels,2,a,ke.CORE_PROPS),a="docProps/app.xml",!(e.Props&&e.Props.SheetNames))if(!e.Workbook||!e.Workbook.Sheets)e.Props.SheetNames=e.SheetNames;else{for(var l=[],u=0;u0&&(a="docProps/custom.xml",De(o,a,pw(e.Custprops)),i.custprops.push(a),Le(t.rels,4,a,ke.CUST_PROPS));var c=["SheetJ5"];for(t.tcid=0,s=1;s<=e.SheetNames.length;++s){var f={"!id":{}},d=e.Sheets[e.SheetNames[s-1]],h=(d||{})["!type"]||"sheet";switch(h){case"chart":default:a="xl/worksheets/sheet"+s+"."+r,De(o,a,Hw(s-1,t,e,f)),i.sheets.push(a),Le(t.wbrels,-1,"worksheets/sheet"+s+"."+r,ke.WS[0])}if(d){var m=d["!comments"],p=!1,g="";if(m&&m.length>0){var v=!1;m.forEach(function(w){w[1].forEach(function(y){y.T==!0&&(v=!0)})}),v&&(g="xl/threadedComments/threadedComment"+s+"."+r,De(o,g,dR(m,c,t)),i.threadedcomments.push(g),Le(f,-1,"../threadedComments/threadedComment"+s+"."+r,ke.TCMNT)),g="xl/comments"+s+"."+r,De(o,g,Pw(m)),i.comments.push(g),Le(f,-1,"../comments"+s+"."+r,ke.CMNT),p=!0}d["!legacy"]&&p&&De(o,"xl/drawings/vmlDrawing"+s+".vml",Dw(s,d["!comments"])),delete d["!comments"],delete d["!legacy"]}f["!id"].rId1&&De(o,uw(a),so(f))}return t.Strings!=null&&t.Strings.length>0&&(a="xl/sharedStrings."+r,De(o,a,_w(t.Strings,t)),i.strs.push(a),Le(t.wbrels,-1,"sharedStrings."+r,ke.SST)),a="xl/workbook."+r,De(o,a,zw(e)),i.workbooks.push(a),Le(t.rels,1,a,ke.WB),a="xl/theme/theme1.xml",De(o,a,Ow(e.Themes,t)),i.themes.push(a),Le(t.wbrels,-1,"theme/theme1.xml",ke.THEME),a="xl/styles."+r,De(o,a,Aw(e,t)),i.styles.push(a),Le(t.wbrels,-1,"styles."+r,ke.STY),e.vbaraw&&n&&(a="xl/vbaProject.bin",De(o,a,e.vbaraw),i.vba.push(a),Le(t.wbrels,-1,"vbaProject.bin",ke.VBA)),a="xl/metadata."+r,De(o,a,Fw()),i.metadata.push(a),Le(t.wbrels,-1,"metadata."+r,ke.XLMETA),c.length>1&&(a="xl/persons/person.xml",De(o,a,hR(c)),i.people.push(a),Le(t.wbrels,-1,"persons/person.xml",ke.PEOPLE)),De(o,"[Content_Types].xml",lw(i,t)),De(o,"_rels/.rels",so(t.rels)),De(o,"xl/_rels/workbook."+r+".rels",so(t.wbrels)),delete t.revssf,delete t.ssf,o}function N6(e,t){var r="";switch((t||{}).type||"base64"){case"buffer":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];case"base64":r=nn(e.slice(0,12));break;case"binary":r=e;break;case"array":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3),r.charCodeAt(4),r.charCodeAt(5),r.charCodeAt(6),r.charCodeAt(7)]}function Qw(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return os(t.file,He.write(e,{type:Ne?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return He.write(e,t)}function M6(e,t){var r=Kt(t||{}),n=b6(e,r);return L6(n,r)}function L6(e,t){var r={},n=Ne?"nodebuffer":typeof Uint8Array<"u"?"array":"string";if(t.compression&&(r.compression="DEFLATE"),t.password)r.type=n;else switch(t.type){case"base64":r.type="base64";break;case"binary":r.type="string";break;case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");case"buffer":case"file":r.type=n;break;default:throw new Error("Unrecognized type "+t.type)}var i=e.FullPaths?He.write(e,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[r.type]||r.type,compression:!!t.compression}):e.generate(r);if(typeof Deno<"u"&&typeof i=="string"){if(t.type=="binary"||t.type=="base64")return i;i=new Uint8Array(Eu(i))}return t.password&&typeof encrypt_agile<"u"?Qw(encrypt_agile(i,t.password),t):t.type==="file"?os(t.file,i):t.type=="string"?ya(i):i}function B6(e,t){var r=t||{},n=t6(e,r);return Qw(n,r)}function Or(e,t,r){r||(r="");var n=r+e;switch(t.type){case"base64":return Va(Xr(n));case"binary":return Xr(n);case"string":return e;case"file":return os(t.file,n,"utf8");case"buffer":return Ne?un(n,"utf8"):typeof TextEncoder<"u"?new TextEncoder().encode(n):Or(n,{type:"binary"}).split("").map(function(i){return i.charCodeAt(0)})}throw new Error("Unrecognized type "+t.type)}function U6(e,t){switch(t.type){case"base64":return Va(e);case"binary":return e;case"string":return e;case"file":return os(t.file,e,"binary");case"buffer":return Ne?un(e,"binary"):e.split("").map(function(r){return r.charCodeAt(0)})}throw new Error("Unrecognized type "+t.type)}function Vs(e,t){switch(t.type){case"string":case"base64":case"binary":for(var r="",n=0;n0&&(i=0);var f=_t(l.s.r),d=[],h=[],m=0,p=0,g=Array.isArray(e),v=l.s.r,w=0,y={};g&&!e[v]&&(e[v]=[]);var E=u.skipHidden&&e["!cols"]||[],b=u.skipHidden&&e["!rows"]||[];for(w=l.s.c;w<=l.e.c;++w)if(!(E[w]||{}).hidden)switch(d[w]=Ft(w),r=g?e[v][w]:e[d[w]+f],n){case 1:o[w]=w-l.s.c;break;case 2:o[w]=d[w];break;case 3:o[w]=u.header[w-l.s.c];break;default:if(r==null&&(r={w:"__EMPTY",t:"s"}),s=a=on(r,null,u),p=y[a]||0,!p)y[a]=1;else{do s=a+"_"+p++;while(y[s]);y[a]=p,y[s]=1}o[w]=s}for(v=l.s.r+i;v<=l.e.r;++v)if(!(b[v]||{}).hidden){var k=W6(e,l,v,d,n,o,g,u);(k.isempty===!1||(n===1?u.blankrows!==!1:u.blankrows))&&(h[m++]=k.row)}return h.length=m,h}var qg=/"/g;function z6(e,t,r,n,i,o,a,s){for(var l=!0,u=[],c="",f=_t(r),d=t.s.c;d<=t.e.c;++d)if(n[d]){var h=s.dense?(e[r]||[])[d]:e[n[d]+f];if(h==null)c="";else if(h.v!=null){l=!1,c=""+(s.rawNumbers&&h.t=="n"?h.v:on(h,null,s));for(var m=0,p=0;m!==c.length;++m)if((p=c.charCodeAt(m))===i||p===o||p===34||s.forceQuotes){c='"'+c.replace(qg,'""')+'"';break}c=="ID"&&(c='"ID"')}else h.f!=null&&!h.F?(l=!1,c="="+h.f,c.indexOf(",")>=0&&(c='"'+c.replace(qg,'""')+'"')):c="";u.push(c)}return s.blankrows===!1&&l?null:u.join(a)}function Qd(e,t){var r=[],n=t??{};if(e==null||e["!ref"]==null)return"";var i=Xe(e["!ref"]),o=n.FS!==void 0?n.FS:",",a=o.charCodeAt(0),s=n.RS!==void 0?n.RS:` +`,l=s.charCodeAt(0),u=new RegExp((o=="|"?"\\|":o)+"+$"),c="",f=[];n.dense=Array.isArray(e);for(var d=n.skipHidden&&e["!cols"]||[],h=n.skipHidden&&e["!rows"]||[],m=i.s.c;m<=i.e.c;++m)(d[m]||{}).hidden||(f[m]=Ft(m));for(var p=0,g=i.s.r;g<=i.e.r;++g)(h[g]||{}).hidden||(c=z6(e,i,g,f,a,l,o,n),c!=null&&(n.strip&&(c=c.replace(u,"")),(c||n.blankrows!==!1)&&r.push((p++?s:"")+c)));return delete n.dense,r.join("")}function Jw(e,t){t||(t={}),t.FS=" ",t.RS=` +`;var r=Qd(e,t);return r}function G6(e){var t="",r,n="";if(e==null||e["!ref"]==null)return[];var i=Xe(e["!ref"]),o="",a=[],s,l=[],u=Array.isArray(e);for(s=i.s.c;s<=i.e.c;++s)a[s]=Ft(s);for(var c=i.s.r;c<=i.e.r;++c)for(o=_t(c),s=i.s.c;s<=i.e.c;++s)if(t=a[s]+o,r=u?(e[c]||[])[s]:e[t],n="",r!==void 0){if(r.F!=null){if(t=r.F,!r.f)continue;n=r.f,t.indexOf(":")==-1&&(t=t+":"+t)}if(r.f!=null)n=r.f;else{if(r.t=="z")continue;if(r.t=="n"&&r.v!=null)n=""+r.v;else if(r.t=="b")n=r.v?"TRUE":"FALSE";else if(r.w!==void 0)n="'"+r.w;else{if(r.v===void 0)continue;r.t=="s"?n="'"+r.v:n=""+r.v}}l[l.length]=t+"="+n}return l}function e2(e,t,r){var n=r||{},i=+!n.skipHeader,o=e||{},a=0,s=0;if(o&&n.origin!=null)if(typeof n.origin=="number")a=n.origin;else{var l=typeof n.origin=="string"?dt(n.origin):n.origin;a=l.r,s=l.c}var u,c={s:{c:0,r:0},e:{c:s,r:a+t.length-1+i}};if(o["!ref"]){var f=Xe(o["!ref"]);c.e.c=Math.max(c.e.c,f.e.c),c.e.r=Math.max(c.e.r,f.e.r),a==-1&&(a=f.e.r+1,c.e.r=a+t.length-1+i)}else a==-1&&(a=0,c.e.r=t.length-1+i);var d=n.header||[],h=0;t.forEach(function(p,g){Tt(p).forEach(function(v){(h=d.indexOf(v))==-1&&(d[h=d.length]=v);var w=p[v],y="z",E="",b=Ue({c:s+h,r:a+g+i});u=ja(o,b),w&&typeof w=="object"&&!(w instanceof Date)?o[b]=w:(typeof w=="number"?y="n":typeof w=="boolean"?y="b":typeof w=="string"?y="s":w instanceof Date?(y="d",n.cellDates||(y="n",w=Xt(w)),E=n.dateNF||rt[14]):w===null&&n.nullError&&(y="e",w=0),u?(u.t=y,u.v=w,delete u.w,delete u.R,E&&(u.z=E)):o[b]=u={t:y,v:w},E&&(u.z=E))})}),c.e.c=Math.max(c.e.c,s+d.length-1);var m=_t(a);if(i)for(h=0;h=0&&e.SheetNames.length>t)return t;throw new Error("Cannot find sheet # "+t)}else if(typeof t=="string"){var r=e.SheetNames.indexOf(t);if(r>-1)return r;throw new Error("Cannot find sheet name |"+t+"|")}else throw new Error("Cannot find sheet |"+t+"|")}function K6(){return{SheetNames:[],Sheets:{}}}function Y6(e,t,r,n){var i=1;if(!r)for(;i<=65535&&e.SheetNames.indexOf(r="Sheet"+i)!=-1;++i,r=void 0);if(!r||e.SheetNames.length>=65535)throw new Error("Too many worksheets");if(n&&e.SheetNames.indexOf(r)>=0){var o=r.match(/(^.*?)(\d+)$/);i=o&&+o[2]||0;var a=o&&o[1]||r;for(++i;i<=65535&&e.SheetNames.indexOf(r=a+i)!=-1;++i);}if(Ww(r),e.SheetNames.indexOf(r)>=0)throw new Error("Worksheet with name |"+r+"| already exists!");return e.SheetNames.push(r),e.Sheets[r]=t,r}function q6(e,t,r){e.Workbook||(e.Workbook={}),e.Workbook.Sheets||(e.Workbook.Sheets=[]);var n=X6(e,t);switch(e.Workbook.Sheets[n]||(e.Workbook.Sheets[n]={}),r){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+r)}e.Workbook.Sheets[n].Hidden=r}function Q6(e,t){return e.z=t,e}function t2(e,t,r){return t?(e.l={Target:t},r&&(e.l.Tooltip=r)):delete e.l,e}function Z6(e,t,r){return t2(e,"#"+t,r)}function J6(e,t,r){e.c||(e.c=[]),e.c.push({t,a:r||"SheetJS"})}function eP(e,t,r,n){for(var i=typeof t!="string"?t:Xe(t),o=typeof t=="string"?t:ot(t),a=i.s.r;a<=i.e.r;++a)for(var s=i.s.c;s<=i.e.c;++s){var l=ja(e,a,s);l.t="n",l.F=o,delete l.v,a==i.s.r&&s==i.s.c&&(l.f=r,n&&(l.D=!0))}return e}var Uc={encode_col:Ft,encode_row:_t,encode_cell:Ue,encode_range:ot,decode_col:Ud,decode_row:Bd,split_cell:p3,decode_cell:dt,decode_range:tr,format_cell:on,sheet_add_aoa:tw,sheet_add_json:e2,sheet_add_dom:Kw,aoa_to_sheet:Fo,json_to_sheet:j6,table_to_sheet:Yw,table_to_book:S6,sheet_to_csv:Qd,sheet_to_txt:Jw,sheet_to_json:Kl,sheet_to_html:Xw,sheet_to_formulae:G6,sheet_to_row_object_array:Kl,sheet_get_cell:ja,book_new:K6,book_append_sheet:Y6,book_set_sheet_visibility:q6,cell_set_number_format:Q6,cell_set_hyperlink:t2,cell_set_internal_link:Z6,cell_add_comment:J6,sheet_set_array_formula:eP,consts:{SHEET_VISIBLE:0,SHEET_HIDDEN:1,SHEET_VERY_HIDDEN:2}};function t0(e){if(typeof e=="string"){const t=e.replace(/[^a-zA-Z]/g,"").trim(),r=["","K","M","B","T"].indexOf(t.replace(/\s/g,""));e=Number(e.replace(/[^0-9.]/g,"").trim())*Math.pow(10,r*3)}return e}function tP(e,t){var r;if(typeof e=="string"&&(e=Number(t0(e))),e%1!==0){const n=Math.max(2,((r=e.toString().split(".")[1])==null?void 0:r.length)||0),i=Math.min(4,n);if(e<5)return e.toFixed(i)||0;e=Number(e.toFixed(2))}if((e>1e5||e<-1e5)&&!n2(t||"")){const n=Math.min(4,Math.floor(Math.log10(Math.abs(e))/3)),i=["","K","M","B","T"][n];return`${(e/10**(n*3)).toFixed(3).replace(/\.?0+$/,"")} ${i}`}return e>1e3||e<-1e3?r2(e):e}function r2(e){if(e>1e3||e<-1e3){const t=e.toString().split("."),r=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),n=t[1]?`.${t[1]}`:"";return`${r}${n}`}return e}function Yl(e){return["date","time","timestamp"].some(t=>e==null?void 0:e.toLowerCase().includes(t))}function n2(e){return["price","open","close"].some(t=>e==null?void 0:e.toLowerCase().includes(t))}function Ki(e,t){const r=window.document.getElementById("loading"),n=window.document.getElementById("loading_text");return new Promise(i=>{t?r.classList.remove("show"):(n.innerHTML=e,r.classList.add("show"));const o=setInterval(function(){(t?!r.classList.contains("show"):r.classList.contains("show"))&&(clearInterval(o),i(!0))},.01)})}function rP(e,t){if(e===t)return!0;if(e==null||t==null||(e==null?void 0:e.length)!==(t==null?void 0:t.length))return!1;for(let r=0;r<(e==null?void 0:e.length);++r)if(e[r]!==t[r])return!1;return!0}const nP=(e,t,r,n)=>{const i=n4(e.getValue(t),r);return n(i),i},iP=async({fileHandle:e,blob:t})=>{e&&await oP({fileHandle:e,blob:t})},oP=async({fileHandle:e,blob:t})=>{const r=await e.createWritable();await r.write(t),await r.close()},aP=[{description:"PNG Image",accept:{"image/png":[".png"]}},{description:"JPEG Image",accept:{"image/jpeg":[".jpeg"]}}],i2=({filename:e,is_image:t})=>{try{if("showSaveFilePicker"in window){const r={suggestedName:e,types:t?aP:[{description:"CSV File",accept:{"image/csv":[".csv"]}}],excludeAcceptAllOption:!0};return showSaveFilePicker(r)}}catch(r){console.error(r)}return new Promise(r=>{r(null)})},o2=(e,t,r)=>{try{if(r===null)throw new Error("Cannot access filesystem");iP({fileHandle:r,blob:e})}catch(n){console.error("oops, something went wrong!",n);const i=URL.createObjectURL(e),o=document.createElement("a");o.setAttribute("href",i),o.setAttribute("download",t),o.style.visibility="hidden",document.body.appendChild(o),o.click(),document.body.removeChild(o)}return new Promise(n=>{n(!0)})};async function Qg(e,t,r,n){const i=t,o=r.map(u=>i.map(c=>u[c])),a=[i,...o];if(e==="csv"){const u=a.map(d=>d.join(",")).join(` +`),c=new Blob([u],{type:"text/csv;charset=utf-8;"}),f=`${window.title}.csv`;try{const d=await i2({filename:f});let h="csv";d!==null&&(h=d.name.split(".").pop()),await Ki(`Saving ${h.toUpperCase()}`),r0(async function(){o2(c,f,d).then(async function(){await new Promise(m=>setTimeout(m,1500)),await Ki("",!0),d||n(!0)})},2)()}catch(d){console.error(d)}return}const s=Uc.book_new(),l=Uc.aoa_to_sheet(a);Uc.book_append_sheet(s,l,"Sheet1"),await Ki("Saving XLSX"),r0(async function(){await new Promise(u=>setTimeout(u,1500)),V6(s,`${window.title}.xlsx`),await Ki("",!0),n==null||n(!0)},2)()}async function sP(e,t){const r=document.getElementById(e),n=`${window.title}.png`;try{const i=await i2({filename:n,is_image:!0});let o="png";i!==null&&(o=i.name.split(".").pop()),await Ki(`Saving ${o.toUpperCase()}`),r0(async function(){c4.toBlob(r).then(function(a){o2(a,n,i).then(async function(){await new Promise(s=>setTimeout(s,1500)),await Ki("",!0),i||t(!0)})})},2)()}catch(i){console.error(i)}}const r0=(e,t)=>{let r;return function(){const n=this,i=arguments;clearTimeout(r),r=setTimeout(()=>e.apply(n,i),t)}},ql=({title:e,titleId:t,...r})=>X("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,...r,children:X("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})});function Zg(e,[t,r]){return Math.min(r,Math.max(t,e))}function Fu(e){const t=e+"CollectionProvider",[r,n]=ln(t),[i,o]=r(t,{collectionRef:{current:null},itemMap:new Map}),a=h=>{const{scope:m,children:p}=h,g=or.useRef(null),v=or.useRef(new Map).current;return or.createElement(i,{scope:m,itemMap:v,collectionRef:g},p)},s=e+"CollectionSlot",l=or.forwardRef((h,m)=>{const{scope:p,children:g}=h,v=o(s,p),w=Ve(m,v.collectionRef);return or.createElement(ai,{ref:w},g)}),u=e+"CollectionItemSlot",c="data-radix-collection-item",f=or.forwardRef((h,m)=>{const{scope:p,children:g,...v}=h,w=or.useRef(null),y=Ve(m,w),E=o(u,p);return or.useEffect(()=>(E.itemMap.set(w,{ref:w,...v}),()=>void E.itemMap.delete(w))),or.createElement(ai,{[c]:"",ref:y},g)});function d(h){const m=o(e+"CollectionConsumer",h);return or.useCallback(()=>{const g=m.collectionRef.current;if(!g)return[];const v=Array.from(g.querySelectorAll(`[${c}]`));return Array.from(m.itemMap.values()).sort((E,b)=>v.indexOf(E.ref.current)-v.indexOf(b.ref.current))},[m.collectionRef,m.itemMap])}return[{Provider:a,Slot:l,ItemSlot:f},d,n]}const lP=x.createContext(void 0);function Zd(e){const t=x.useContext(lP);return e||t||"ltr"}function Io(e){return e.split("-")[1]}function Jd(e){return e==="y"?"height":"width"}function Jr(e){return e.split("-")[0]}function Ti(e){return["top","bottom"].includes(Jr(e))?"x":"y"}function Jg(e,t,r){let{reference:n,floating:i}=e;const o=n.x+n.width/2-i.width/2,a=n.y+n.height/2-i.height/2,s=Ti(t),l=Jd(s),u=n[l]/2-i[l]/2,c=s==="x";let f;switch(Jr(t)){case"top":f={x:o,y:n.y-i.height};break;case"bottom":f={x:o,y:n.y+n.height};break;case"right":f={x:n.x+n.width,y:a};break;case"left":f={x:n.x-i.width,y:a};break;default:f={x:n.x,y:n.y}}switch(Io(t)){case"start":f[s]-=u*(r&&c?-1:1);break;case"end":f[s]+=u*(r&&c?-1:1)}return f}const uP=async(e,t,r)=>{const{placement:n="bottom",strategy:i="absolute",middleware:o=[],platform:a}=r,s=o.filter(Boolean),l=await(a.isRTL==null?void 0:a.isRTL(t));let u=await a.getElementRects({reference:e,floating:t,strategy:i}),{x:c,y:f}=Jg(u,n,l),d=n,h={},m=0;for(let p=0;p({name:"arrow",options:e,async fn(t){const{x:r,y:n,placement:i,rects:o,platform:a,elements:s}=t,{element:l,padding:u=0}=an(e,t)||{};if(l==null)return{};const c=a2(u),f={x:r,y:n},d=Ti(i),h=Jd(d),m=await a.getDimensions(l),p=d==="y",g=p?"top":"left",v=p?"bottom":"right",w=p?"clientHeight":"clientWidth",y=o.reference[h]+o.reference[d]-f[d]-o.floating[h],E=f[d]-o.reference[d],b=await(a.getOffsetParent==null?void 0:a.getOffsetParent(l));let k=b?b[w]:0;k&&await(a.isElement==null?void 0:a.isElement(b))||(k=s.floating[w]||o.floating[h]);const S=y/2-E/2,C=k/2-m[h]/2-1,A=Ka(c[g],C),L=Ka(c[v],C),B=A,U=k-m[h]-L,H=k/2-m[h]/2+S,G=n0(B,H,U),ee=Io(i)!=null&&H!=G&&o.reference[h]/2-(He.concat(t,t+"-start",t+"-end"),[]);const cP={left:"right",right:"left",bottom:"top",top:"bottom"};function Zl(e){return e.replace(/left|right|bottom|top/g,t=>cP[t])}function fP(e,t,r){r===void 0&&(r=!1);const n=Io(e),i=Ti(e),o=Jd(i);let a=i==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(a=Zl(a)),{main:a,cross:Zl(a)}}const dP={start:"end",end:"start"};function Hc(e){return e.replace(/start|end/g,t=>dP[t])}const hP=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var r;const{placement:n,middlewareData:i,rects:o,initialPlacement:a,platform:s,elements:l}=t,{mainAxis:u=!0,crossAxis:c=!0,fallbackPlacements:f,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:h="none",flipAlignment:m=!0,...p}=an(e,t),g=Jr(n),v=Jr(a)===a,w=await(s.isRTL==null?void 0:s.isRTL(l.floating)),y=f||(v||!m?[Zl(a)]:function(B){const U=Zl(B);return[Hc(B),U,Hc(U)]}(a));f||h==="none"||y.push(...function(B,U,H,G){const ee=Io(B);let ae=function(he,Te,oe){const ye=["left","right"],te=["right","left"],O=["top","bottom"],M=["bottom","top"];switch(he){case"top":case"bottom":return oe?Te?te:ye:Te?ye:te;case"left":case"right":return Te?O:M;default:return[]}}(Jr(B),H==="start",G);return ee&&(ae=ae.map(he=>he+"-"+ee),U&&(ae=ae.concat(ae.map(Hc)))),ae}(a,m,h,w));const E=[a,...y],b=await Xa(t,p),k=[];let S=((r=i.flip)==null?void 0:r.overflows)||[];if(u&&k.push(b[g]),c){const{main:B,cross:U}=fP(n,o,w);k.push(b[B],b[U])}if(S=[...S,{placement:n,overflows:k}],!k.every(B=>B<=0)){var C,A;const B=(((C=i.flip)==null?void 0:C.index)||0)+1,U=E[B];if(U)return{data:{index:B,overflows:S},reset:{placement:U}};let H=(A=S.filter(G=>G.overflows[0]<=0).sort((G,ee)=>G.overflows[1]-ee.overflows[1])[0])==null?void 0:A.placement;if(!H)switch(d){case"bestFit":{var L;const G=(L=S.map(ee=>[ee.placement,ee.overflows.filter(ae=>ae>0).reduce((ae,he)=>ae+he,0)]).sort((ee,ae)=>ee[1]-ae[1])[0])==null?void 0:L[0];G&&(H=G);break}case"initialPlacement":H=a}if(n!==H)return{reset:{placement:H}}}return{}}}};function t1(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function r1(e){return s2.some(t=>e[t]>=0)}const pP=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:r}=t,{strategy:n="referenceHidden",...i}=an(e,t);switch(n){case"referenceHidden":{const o=t1(await Xa(t,{...i,elementContext:"reference"}),r.reference);return{data:{referenceHiddenOffsets:o,referenceHidden:r1(o)}}}case"escaped":{const o=t1(await Xa(t,{...i,altBoundary:!0}),r.floating);return{data:{escapedOffsets:o,escaped:r1(o)}}}default:return{}}}}},gP=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){const{x:r,y:n}=t,i=await async function(o,a){const{placement:s,platform:l,elements:u}=o,c=await(l.isRTL==null?void 0:l.isRTL(u.floating)),f=Jr(s),d=Io(s),h=Ti(s)==="x",m=["left","top"].includes(f)?-1:1,p=c&&h?-1:1,g=an(a,o);let{mainAxis:v,crossAxis:w,alignmentAxis:y}=typeof g=="number"?{mainAxis:g,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...g};return d&&typeof y=="number"&&(w=d==="end"?-1*y:y),h?{x:w*p,y:v*m}:{x:v*m,y:w*p}}(t,e);return{x:r+i.x,y:n+i.y,data:i}}}};function l2(e){return e==="x"?"y":"x"}const mP=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:r,y:n,placement:i}=t,{mainAxis:o=!0,crossAxis:a=!1,limiter:s={fn:g=>{let{x:v,y:w}=g;return{x:v,y:w}}},...l}=an(e,t),u={x:r,y:n},c=await Xa(t,l),f=Ti(Jr(i)),d=l2(f);let h=u[f],m=u[d];if(o){const g=f==="y"?"bottom":"right";h=n0(h+c[f==="y"?"top":"left"],h,h-c[g])}if(a){const g=d==="y"?"bottom":"right";m=n0(m+c[d==="y"?"top":"left"],m,m-c[g])}const p=s.fn({...t,[f]:h,[d]:m});return{...p,data:{x:p.x-r,y:p.y-n}}}}},vP=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:r,y:n,placement:i,rects:o,middlewareData:a}=t,{offset:s=0,mainAxis:l=!0,crossAxis:u=!0}=an(e,t),c={x:r,y:n},f=Ti(i),d=l2(f);let h=c[f],m=c[d];const p=an(s,t),g=typeof p=="number"?{mainAxis:p,crossAxis:0}:{mainAxis:0,crossAxis:0,...p};if(l){const y=f==="y"?"height":"width",E=o.reference[f]-o.floating[y]+g.mainAxis,b=o.reference[f]+o.reference[y]-g.mainAxis;hb&&(h=b)}if(u){var v,w;const y=f==="y"?"width":"height",E=["top","left"].includes(Jr(i)),b=o.reference[d]-o.floating[y]+(E&&((v=a.offset)==null?void 0:v[d])||0)+(E?0:g.crossAxis),k=o.reference[d]+o.reference[y]+(E?0:((w=a.offset)==null?void 0:w[d])||0)-(E?g.crossAxis:0);mk&&(m=k)}return{[f]:h,[d]:m}}}},xP=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:r,rects:n,platform:i,elements:o}=t,{apply:a=()=>{},...s}=an(e,t),l=await Xa(t,s),u=Jr(r),c=Io(r),f=Ti(r)==="x",{width:d,height:h}=n.floating;let m,p;u==="top"||u==="bottom"?(m=u,p=c===(await(i.isRTL==null?void 0:i.isRTL(o.floating))?"start":"end")?"left":"right"):(p=u,m=c==="end"?"top":"bottom");const g=h-l[m],v=d-l[p],w=!t.middlewareData.shift;let y=g,E=v;if(f){const k=d-l.left-l.right;E=c||w?Ka(v,k):k}else{const k=h-l.top-l.bottom;y=c||w?Ka(g,k):k}if(w&&!c){const k=Xn(l.left,0),S=Xn(l.right,0),C=Xn(l.top,0),A=Xn(l.bottom,0);f?E=d-2*(k!==0||S!==0?k+S:Xn(l.left,l.right)):y=h-2*(C!==0||A!==0?C+A:Xn(l.top,l.bottom))}await a({...t,availableWidth:E,availableHeight:y});const b=await i.getDimensions(o.floating);return d!==b.width||h!==b.height?{reset:{rects:!0}}:{}}}};function Jt(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Nr(e){return Jt(e).getComputedStyle(e)}function u2(e){return e instanceof Jt(e).Node}function Bn(e){return u2(e)?(e.nodeName||"").toLowerCase():"#document"}function Ar(e){return e instanceof HTMLElement||e instanceof Jt(e).HTMLElement}function n1(e){return typeof ShadowRoot<"u"&&(e instanceof Jt(e).ShadowRoot||e instanceof ShadowRoot)}function Ya(e){const{overflow:t,overflowX:r,overflowY:n,display:i}=Nr(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&!["inline","contents"].includes(i)}function wP(e){return["table","td","th"].includes(Bn(e))}function i0(e){const t=eh(),r=Nr(e);return r.transform!=="none"||r.perspective!=="none"||!!r.containerType&&r.containerType!=="normal"||!t&&!!r.backdropFilter&&r.backdropFilter!=="none"||!t&&!!r.filter&&r.filter!=="none"||["transform","perspective","filter"].some(n=>(r.willChange||"").includes(n))||["paint","layout","strict","content"].some(n=>(r.contain||"").includes(n))}function eh(){return!(typeof CSS>"u"||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function Du(e){return["html","body","#document"].includes(Bn(e))}const o0=Math.min,co=Math.max,Jl=Math.round,Ws=Math.floor,Un=e=>({x:e,y:e});function c2(e){const t=Nr(e);let r=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const i=Ar(e),o=i?e.offsetWidth:r,a=i?e.offsetHeight:n,s=Jl(r)!==o||Jl(n)!==a;return s&&(r=o,n=a),{width:r,height:n,$:s}}function en(e){return e instanceof Element||e instanceof Jt(e).Element}function th(e){return en(e)?e:e.contextElement}function fo(e){const t=th(e);if(!Ar(t))return Un(1);const r=t.getBoundingClientRect(),{width:n,height:i,$:o}=c2(t);let a=(o?Jl(r.width):r.width)/n,s=(o?Jl(r.height):r.height)/i;return a&&Number.isFinite(a)||(a=1),s&&Number.isFinite(s)||(s=1),{x:a,y:s}}const yP=Un(0);function f2(e){const t=Jt(e);return eh()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:yP}function ci(e,t,r,n){t===void 0&&(t=!1),r===void 0&&(r=!1);const i=e.getBoundingClientRect(),o=th(e);let a=Un(1);t&&(n?en(n)&&(a=fo(n)):a=fo(e));const s=function(d,h,m){return h===void 0&&(h=!1),!(!m||h&&m!==Jt(d))&&h}(o,r,n)?f2(o):Un(0);let l=(i.left+s.x)/a.x,u=(i.top+s.y)/a.y,c=i.width/a.x,f=i.height/a.y;if(o){const d=Jt(o),h=n&&en(n)?Jt(n):n;let m=d.frameElement;for(;m&&n&&h!==d;){const p=fo(m),g=m.getBoundingClientRect(),v=getComputedStyle(m),w=g.left+(m.clientLeft+parseFloat(v.paddingLeft))*p.x,y=g.top+(m.clientTop+parseFloat(v.paddingTop))*p.y;l*=p.x,u*=p.y,c*=p.x,f*=p.y,l+=w,u+=y,m=Jt(m).frameElement}}return Ql({width:c,height:f,x:l,y:u})}function Pu(e){return en(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function tn(e){var t;return(t=(u2(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function d2(e){return ci(tn(e)).left+Pu(e).scrollLeft}function wo(e){if(Bn(e)==="html")return e;const t=e.assignedSlot||e.parentNode||n1(e)&&e.host||tn(e);return n1(t)?t.host:t}function h2(e){const t=wo(e);return Du(t)?e.ownerDocument?e.ownerDocument.body:e.body:Ar(t)&&Ya(t)?t:h2(t)}function eu(e,t){var r;t===void 0&&(t=[]);const n=h2(e),i=n===((r=e.ownerDocument)==null?void 0:r.body),o=Jt(n);return i?t.concat(o,o.visualViewport||[],Ya(n)?n:[]):t.concat(n,eu(n))}function i1(e,t,r){let n;if(t==="viewport")n=function(i,o){const a=Jt(i),s=tn(i),l=a.visualViewport;let u=s.clientWidth,c=s.clientHeight,f=0,d=0;if(l){u=l.width,c=l.height;const h=eh();(!h||h&&o==="fixed")&&(f=l.offsetLeft,d=l.offsetTop)}return{width:u,height:c,x:f,y:d}}(e,r);else if(t==="document")n=function(i){const o=tn(i),a=Pu(i),s=i.ownerDocument.body,l=co(o.scrollWidth,o.clientWidth,s.scrollWidth,s.clientWidth),u=co(o.scrollHeight,o.clientHeight,s.scrollHeight,s.clientHeight);let c=-a.scrollLeft+d2(i);const f=-a.scrollTop;return Nr(s).direction==="rtl"&&(c+=co(o.clientWidth,s.clientWidth)-l),{width:l,height:u,x:c,y:f}}(tn(e));else if(en(t))n=function(i,o){const a=ci(i,!0,o==="fixed"),s=a.top+i.clientTop,l=a.left+i.clientLeft,u=Ar(i)?fo(i):Un(1);return{width:i.clientWidth*u.x,height:i.clientHeight*u.y,x:l*u.x,y:s*u.y}}(t,r);else{const i=f2(e);n={...t,x:t.x-i.x,y:t.y-i.y}}return Ql(n)}function p2(e,t){const r=wo(e);return!(r===t||!en(r)||Du(r))&&(Nr(r).position==="fixed"||p2(r,t))}function EP(e,t,r){const n=Ar(t),i=tn(t),o=r==="fixed",a=ci(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const l=Un(0);if(n||!n&&!o)if((Bn(t)!=="body"||Ya(i))&&(s=Pu(t)),Ar(t)){const u=ci(t,!0,o,t);l.x=u.x+t.clientLeft,l.y=u.y+t.clientTop}else i&&(l.x=d2(i));return{x:a.left+s.scrollLeft-l.x,y:a.top+s.scrollTop-l.y,width:a.width,height:a.height}}function o1(e,t){return Ar(e)&&Nr(e).position!=="fixed"?t?t(e):e.offsetParent:null}function a1(e,t){const r=Jt(e);if(!Ar(e))return r;let n=o1(e,t);for(;n&&wP(n)&&Nr(n).position==="static";)n=o1(n,t);return n&&(Bn(n)==="html"||Bn(n)==="body"&&Nr(n).position==="static"&&!i0(n))?r:n||function(i){let o=wo(i);for(;Ar(o)&&!Du(o);){if(i0(o))return o;o=wo(o)}return null}(e)||r}const _P={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:t,offsetParent:r,strategy:n}=e;const i=Ar(r),o=tn(r);if(r===o)return t;let a={scrollLeft:0,scrollTop:0},s=Un(1);const l=Un(0);if((i||!i&&n!=="fixed")&&((Bn(r)!=="body"||Ya(o))&&(a=Pu(r)),Ar(r))){const u=ci(r);s=fo(r),l.x=u.x+r.clientLeft,l.y=u.y+r.clientTop}return{width:t.width*s.x,height:t.height*s.y,x:t.x*s.x-a.scrollLeft*s.x+l.x,y:t.y*s.y-a.scrollTop*s.y+l.y}},getDocumentElement:tn,getClippingRect:function(e){let{element:t,boundary:r,rootBoundary:n,strategy:i}=e;const o=[...r==="clippingAncestors"?function(l,u){const c=u.get(l);if(c)return c;let f=eu(l).filter(p=>en(p)&&Bn(p)!=="body"),d=null;const h=Nr(l).position==="fixed";let m=h?wo(l):l;for(;en(m)&&!Du(m);){const p=Nr(m),g=i0(m);g||p.position!=="fixed"||(d=null),(h?!g&&!d:!g&&p.position==="static"&&d&&["absolute","fixed"].includes(d.position)||Ya(m)&&!g&&p2(l,m))?f=f.filter(v=>v!==m):d=p,m=wo(m)}return u.set(l,f),f}(t,this._c):[].concat(r),n],a=o[0],s=o.reduce((l,u)=>{const c=i1(t,u,i);return l.top=co(c.top,l.top),l.right=o0(c.right,l.right),l.bottom=o0(c.bottom,l.bottom),l.left=co(c.left,l.left),l},i1(t,a,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:a1,getElementRects:async function(e){let{reference:t,floating:r,strategy:n}=e;const i=this.getOffsetParent||a1,o=this.getDimensions;return{reference:EP(t,await i(r),n),floating:{x:0,y:0,...await o(r)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){return c2(e)},getScale:fo,isElement:en,isRTL:function(e){return getComputedStyle(e).direction==="rtl"}};function SP(e,t,r,n){n===void 0&&(n={});const{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:l=!1}=n,u=th(e),c=i||o?[...u?eu(u):[],...eu(t)]:[];c.forEach(g=>{i&&g.addEventListener("scroll",r,{passive:!0}),o&&g.addEventListener("resize",r)});const f=u&&s?function(g,v){let w,y=null;const E=tn(g);function b(){clearTimeout(w),y&&y.disconnect(),y=null}return function k(S,C){S===void 0&&(S=!1),C===void 0&&(C=1),b();const{left:A,top:L,width:B,height:U}=g.getBoundingClientRect();if(S||v(),!B||!U)return;const H={rootMargin:-Ws(L)+"px "+-Ws(E.clientWidth-(A+B))+"px "+-Ws(E.clientHeight-(L+U))+"px "+-Ws(A)+"px",threshold:co(0,o0(1,C))||1};let G=!0;function ee(ae){const he=ae[0].intersectionRatio;if(he!==C){if(!G)return k();he?k(!1,he):w=setTimeout(()=>{k(!1,1e-7)},100)}G=!1}try{y=new IntersectionObserver(ee,{...H,root:E.ownerDocument})}catch{y=new IntersectionObserver(ee,H)}y.observe(g)}(!0),b}(u,r):null;let d,h=-1,m=null;a&&(m=new ResizeObserver(g=>{let[v]=g;v&&v.target===u&&m&&(m.unobserve(t),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{m&&m.observe(t)})),r()}),u&&!l&&m.observe(u),m.observe(t));let p=l?ci(e):null;return l&&function g(){const v=ci(e);!p||v.x===p.x&&v.y===p.y&&v.width===p.width&&v.height===p.height||r(),p=v,d=requestAnimationFrame(g)}(),r(),()=>{c.forEach(g=>{i&&g.removeEventListener("scroll",r),o&&g.removeEventListener("resize",r)}),f&&f(),m&&m.disconnect(),m=null,l&&cancelAnimationFrame(d)}}const TP=(e,t,r)=>{const n=new Map,i={platform:_P,...r},o={...i.platform,_c:n};return uP(e,t,{...i,platform:o})},CP=e=>{function t(r){return{}.hasOwnProperty.call(r,"current")}return{name:"arrow",options:e,fn(r){const{element:n,padding:i}=typeof e=="function"?e(r):e;return n&&t(n)?n.current!=null?e1({element:n.current,padding:i}).fn(r):{}:n?e1({element:n,padding:i}).fn(r):{}}}};var ll=typeof document<"u"?x.useLayoutEffect:x.useEffect;function tu(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let r,n,i;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(!tu(e[n],t[n]))return!1;return!0}if(i=Object.keys(e),r=i.length,r!==Object.keys(t).length)return!1;for(n=r;n--!==0;)if(!{}.hasOwnProperty.call(t,i[n]))return!1;for(n=r;n--!==0;){const o=i[n];if(!(o==="_owner"&&e.$$typeof)&&!tu(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function g2(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function s1(e,t){const r=g2(e);return Math.round(t*r)/r}function l1(e){const t=x.useRef(e);return ll(()=>{t.current=e}),t}function AP(e){e===void 0&&(e={});const{placement:t="bottom",strategy:r="absolute",middleware:n=[],platform:i,elements:{reference:o,floating:a}={},transform:s=!0,whileElementsMounted:l,open:u}=e,[c,f]=x.useState({x:0,y:0,strategy:r,placement:t,middlewareData:{},isPositioned:!1}),[d,h]=x.useState(n);tu(d,n)||h(n);const[m,p]=x.useState(null),[g,v]=x.useState(null),w=x.useCallback(ae=>{ae!=k.current&&(k.current=ae,p(ae))},[p]),y=x.useCallback(ae=>{ae!==S.current&&(S.current=ae,v(ae))},[v]),E=o||m,b=a||g,k=x.useRef(null),S=x.useRef(null),C=x.useRef(c),A=l1(l),L=l1(i),B=x.useCallback(()=>{if(!k.current||!S.current)return;const ae={placement:t,strategy:r,middleware:d};L.current&&(ae.platform=L.current),TP(k.current,S.current,ae).then(he=>{const Te={...he,isPositioned:!0};U.current&&!tu(C.current,Te)&&(C.current=Te,mi.flushSync(()=>{f(Te)}))})},[d,t,r,L]);ll(()=>{u===!1&&C.current.isPositioned&&(C.current.isPositioned=!1,f(ae=>({...ae,isPositioned:!1})))},[u]);const U=x.useRef(!1);ll(()=>(U.current=!0,()=>{U.current=!1}),[]),ll(()=>{if(E&&(k.current=E),b&&(S.current=b),E&&b){if(A.current)return A.current(E,b,B);B()}},[E,b,B,A]);const H=x.useMemo(()=>({reference:k,floating:S,setReference:w,setFloating:y}),[w,y]),G=x.useMemo(()=>({reference:E,floating:b}),[E,b]),ee=x.useMemo(()=>{const ae={position:r,left:0,top:0};if(!G.floating)return ae;const he=s1(G.floating,c.x),Te=s1(G.floating,c.y);return s?{...ae,transform:"translate("+he+"px, "+Te+"px)",...g2(G.floating)>=1.5&&{willChange:"transform"}}:{position:r,left:he,top:Te}},[r,s,G.floating,c.x,c.y]);return x.useMemo(()=>({...c,update:B,refs:H,elements:G,floatingStyles:ee}),[c,B,H,G,ee])}function RP(e){const[t,r]=x.useState(void 0);return Bt(()=>{if(e){r({width:e.offsetWidth,height:e.offsetHeight});const n=new ResizeObserver(i=>{if(!Array.isArray(i)||!i.length)return;const o=i[0];let a,s;if("borderBoxSize"in o){const l=o.borderBoxSize,u=Array.isArray(l)?l[0]:l;a=u.inlineSize,s=u.blockSize}else a=e.offsetWidth,s=e.offsetHeight;r({width:a,height:s})});return n.observe(e,{box:"border-box"}),()=>n.unobserve(e)}else r(void 0)},[e]),t}const m2="Popper",[v2,Iu]=ln(m2),[OP,x2]=v2(m2),FP=e=>{const{__scopePopper:t,children:r}=e,[n,i]=x.useState(null);return x.createElement(OP,{scope:t,anchor:n,onAnchorChange:i},r)},DP="PopperAnchor",PP=x.forwardRef((e,t)=>{const{__scopePopper:r,virtualRef:n,...i}=e,o=x2(DP,r),a=x.useRef(null),s=Ve(t,a);return x.useEffect(()=>{o.onAnchorChange((n==null?void 0:n.current)||a.current)}),n?null:x.createElement(Ie.div,ge({},i,{ref:s}))}),w2="PopperContent",[IP,r$]=v2(w2),bP=x.forwardRef((e,t)=>{var r,n,i,o,a,s,l,u;const{__scopePopper:c,side:f="bottom",sideOffset:d=0,align:h="center",alignOffset:m=0,arrowPadding:p=0,collisionBoundary:g=[],collisionPadding:v=0,sticky:w="partial",hideWhenDetached:y=!1,avoidCollisions:E=!0,onPlaced:b,...k}=e,S=x2(w2,c),[C,A]=x.useState(null),L=Ve(t,ne=>A(ne)),[B,U]=x.useState(null),H=RP(B),G=(r=H==null?void 0:H.width)!==null&&r!==void 0?r:0,ee=(n=H==null?void 0:H.height)!==null&&n!==void 0?n:0,ae=f+(h!=="center"?"-"+h:""),he=typeof v=="number"?v:{top:0,right:0,bottom:0,left:0,...v},Te=Array.isArray(g)?g:[g],oe=Te.length>0,ye={padding:he,boundary:Te.filter(kP),altBoundary:oe},{refs:te,floatingStyles:O,placement:M,isPositioned:N,middlewareData:F}=AP({strategy:"fixed",placement:ae,whileElementsMounted:SP,elements:{reference:S.anchor},middleware:[gP({mainAxis:d+ee,alignmentAxis:m}),E&&mP({mainAxis:!0,crossAxis:!1,limiter:w==="partial"?vP():void 0,...ye}),E&&hP({...ye}),xP({...ye,apply:({elements:ne,rects:$e,availableWidth:Pe,availableHeight:ve})=>{const{width:ut,height:gt}=$e.reference,bt=ne.floating.style;bt.setProperty("--radix-popper-available-width",`${Pe}px`),bt.setProperty("--radix-popper-available-height",`${ve}px`),bt.setProperty("--radix-popper-anchor-width",`${ut}px`),bt.setProperty("--radix-popper-anchor-height",`${gt}px`)}}),B&&CP({element:B,padding:p}),$P({arrowWidth:G,arrowHeight:ee}),y&&pP({strategy:"referenceHidden"})]}),[V,Y]=y2(M),J=It(b);Bt(()=>{N&&(J==null||J())},[N,J]);const W=(i=F.arrow)===null||i===void 0?void 0:i.x,Q=(o=F.arrow)===null||o===void 0?void 0:o.y,le=((a=F.arrow)===null||a===void 0?void 0:a.centerOffset)!==0,[me,Se]=x.useState();return Bt(()=>{C&&Se(window.getComputedStyle(C).zIndex)},[C]),x.createElement("div",{ref:te.setFloating,"data-radix-popper-content-wrapper":"",style:{...O,transform:N?O.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:me,"--radix-popper-transform-origin":[(s=F.transformOrigin)===null||s===void 0?void 0:s.x,(l=F.transformOrigin)===null||l===void 0?void 0:l.y].join(" ")},dir:e.dir},x.createElement(IP,{scope:c,placedSide:V,onArrowChange:U,arrowX:W,arrowY:Q,shouldHideArrow:le},x.createElement(Ie.div,ge({"data-side":V,"data-align":Y},k,{ref:L,style:{...k.style,animation:N?void 0:"none",opacity:(u=F.hide)!==null&&u!==void 0&&u.referenceHidden?0:void 0}}))))});function kP(e){return e!==null}const $P=e=>({name:"transformOrigin",options:e,fn(t){var r,n,i,o,a;const{placement:s,rects:l,middlewareData:u}=t,f=((r=u.arrow)===null||r===void 0?void 0:r.centerOffset)!==0,d=f?0:e.arrowWidth,h=f?0:e.arrowHeight,[m,p]=y2(s),g={start:"0%",center:"50%",end:"100%"}[p],v=((n=(i=u.arrow)===null||i===void 0?void 0:i.x)!==null&&n!==void 0?n:0)+d/2,w=((o=(a=u.arrow)===null||a===void 0?void 0:a.y)!==null&&o!==void 0?o:0)+h/2;let y="",E="";return m==="bottom"?(y=f?g:`${v}px`,E=`${-h}px`):m==="top"?(y=f?g:`${v}px`,E=`${l.floating.height+h}px`):m==="right"?(y=`${-h}px`,E=f?g:`${w}px`):m==="left"&&(y=`${l.floating.width+h}px`,E=f?g:`${w}px`),{data:{x:y,y:E}}}});function y2(e){const[t,r="center"]=e.split("-");return[t,r]}const E2=FP,_2=PP,S2=bP;function NP(e){const t=x.useRef({value:e,previous:e});return x.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}const rh=x.forwardRef((e,t)=>x.createElement(Ie.span,ge({},e,{ref:t,style:{position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal",...e.style}}))),MP=[" ","Enter","ArrowUp","ArrowDown"],LP=[" ","Enter"],bu="Select",[ku,$u,BP]=Fu(bu),[bo,n$]=ln(bu,[BP,Iu]),nh=Iu(),[UP,Ci]=bo(bu),[HP,VP]=bo(bu),WP=e=>{const{__scopeSelect:t,children:r,open:n,defaultOpen:i,onOpenChange:o,value:a,defaultValue:s,onValueChange:l,dir:u,name:c,autoComplete:f,disabled:d,required:h}=e,m=nh(t),[p,g]=x.useState(null),[v,w]=x.useState(null),[y,E]=x.useState(!1),b=Zd(u),[k=!1,S]=vo({prop:n,defaultProp:i,onChange:o}),[C,A]=vo({prop:a,defaultProp:s,onChange:l}),L=x.useRef(null),B=p?!!p.closest("form"):!0,[U,H]=x.useState(new Set),G=Array.from(U).map(ee=>ee.props.value).join(";");return x.createElement(E2,m,x.createElement(UP,{required:h,scope:t,trigger:p,onTriggerChange:g,valueNode:v,onValueNodeChange:w,valueNodeHasChildren:y,onValueNodeHasChildrenChange:E,contentId:Yr(),value:C,onValueChange:A,open:k,onOpenChange:S,dir:b,triggerPointerDownPosRef:L,disabled:d},x.createElement(ku.Provider,{scope:t},x.createElement(HP,{scope:e.__scopeSelect,onNativeOptionAdd:x.useCallback(ee=>{H(ae=>new Set(ae).add(ee))},[]),onNativeOptionRemove:x.useCallback(ee=>{H(ae=>{const he=new Set(ae);return he.delete(ee),he})},[])},r)),B?x.createElement(R2,{key:G,"aria-hidden":!0,required:h,tabIndex:-1,name:c,autoComplete:f,value:C,onChange:ee=>A(ee.target.value),disabled:d},C===void 0?x.createElement("option",{value:""}):null,Array.from(U)):null))},zP="SelectTrigger",GP=x.forwardRef((e,t)=>{const{__scopeSelect:r,disabled:n=!1,...i}=e,o=nh(r),a=Ci(zP,r),s=a.disabled||n,l=Ve(t,a.onTriggerChange),u=$u(r),[c,f,d]=O2(m=>{const p=u().filter(w=>!w.disabled),g=p.find(w=>w.value===a.value),v=F2(p,m,g);v!==void 0&&a.onValueChange(v.value)}),h=()=>{s||(a.onOpenChange(!0),d())};return x.createElement(_2,ge({asChild:!0},o),x.createElement(Ie.button,ge({type:"button",role:"combobox","aria-controls":a.contentId,"aria-expanded":a.open,"aria-required":a.required,"aria-autocomplete":"none",dir:a.dir,"data-state":a.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":a.value===void 0?"":void 0},i,{ref:l,onClick:_e(i.onClick,m=>{m.currentTarget.focus()}),onPointerDown:_e(i.onPointerDown,m=>{const p=m.target;p.hasPointerCapture(m.pointerId)&&p.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&(h(),a.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)},m.preventDefault())}),onKeyDown:_e(i.onKeyDown,m=>{const p=c.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&f(m.key),!(p&&m.key===" ")&&MP.includes(m.key)&&(h(),m.preventDefault())})})))}),jP="SelectValue",XP=x.forwardRef((e,t)=>{const{__scopeSelect:r,className:n,style:i,children:o,placeholder:a,...s}=e,l=Ci(jP,r),{onValueNodeHasChildrenChange:u}=l,c=o!==void 0,f=Ve(t,l.onValueNodeChange);return Bt(()=>{u(c)},[u,c]),x.createElement(Ie.span,ge({},s,{ref:f,style:{pointerEvents:"none"}}),l.value===void 0&&a!==void 0?a:o)}),KP=x.forwardRef((e,t)=>{const{__scopeSelect:r,children:n,...i}=e;return x.createElement(Ie.span,ge({"aria-hidden":!0},i,{ref:t}),n||"▼")}),YP=e=>x.createElement(xu,ge({asChild:!0},e)),yo="SelectContent",qP=x.forwardRef((e,t)=>{const r=Ci(yo,e.__scopeSelect),[n,i]=x.useState();if(Bt(()=>{i(new DocumentFragment)},[]),!r.open){const o=n;return o?mi.createPortal(x.createElement(T2,{scope:e.__scopeSelect},x.createElement(ku.Slot,{scope:e.__scopeSelect},x.createElement("div",null,e.children))),o):null}return x.createElement(QP,ge({},e,{ref:t}))}),Vr=10,[T2,Ai]=bo(yo),QP=x.forwardRef((e,t)=>{const{__scopeSelect:r,position:n="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:o,onPointerDownOutside:a,side:s,sideOffset:l,align:u,alignOffset:c,arrowPadding:f,collisionBoundary:d,collisionPadding:h,sticky:m,hideWhenDetached:p,avoidCollisions:g,...v}=e,w=Ci(yo,r),[y,E]=x.useState(null),[b,k]=x.useState(null),S=Ve(t,Y=>E(Y)),[C,A]=x.useState(null),[L,B]=x.useState(null),U=$u(r),[H,G]=x.useState(!1),ee=x.useRef(!1);x.useEffect(()=>{if(y)return Sd(y)},[y]),Ed();const ae=x.useCallback(Y=>{const[J,...W]=U().map(me=>me.ref.current),[Q]=W.slice(-1),le=document.activeElement;for(const me of Y)if(me===le||(me==null||me.scrollIntoView({block:"nearest"}),me===J&&b&&(b.scrollTop=0),me===Q&&b&&(b.scrollTop=b.scrollHeight),me==null||me.focus(),document.activeElement!==le))return},[U,b]),he=x.useCallback(()=>ae([C,y]),[ae,C,y]);x.useEffect(()=>{H&&he()},[H,he]);const{onOpenChange:Te,triggerPointerDownPosRef:oe}=w;x.useEffect(()=>{if(y){let Y={x:0,y:0};const J=Q=>{var le,me,Se,ne;Y={x:Math.abs(Math.round(Q.pageX)-((le=(me=oe.current)===null||me===void 0?void 0:me.x)!==null&&le!==void 0?le:0)),y:Math.abs(Math.round(Q.pageY)-((Se=(ne=oe.current)===null||ne===void 0?void 0:ne.y)!==null&&Se!==void 0?Se:0))}},W=Q=>{Y.x<=10&&Y.y<=10?Q.preventDefault():y.contains(Q.target)||Te(!1),document.removeEventListener("pointermove",J),oe.current=null};return oe.current!==null&&(document.addEventListener("pointermove",J),document.addEventListener("pointerup",W,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",J),document.removeEventListener("pointerup",W,{capture:!0})}}},[y,Te,oe]),x.useEffect(()=>{const Y=()=>Te(!1);return window.addEventListener("blur",Y),window.addEventListener("resize",Y),()=>{window.removeEventListener("blur",Y),window.removeEventListener("resize",Y)}},[Te]);const[ye,te]=O2(Y=>{const J=U().filter(le=>!le.disabled),W=J.find(le=>le.ref.current===document.activeElement),Q=F2(J,Y,W);Q&&setTimeout(()=>Q.ref.current.focus())}),O=x.useCallback((Y,J,W)=>{const Q=!ee.current&&!W;(w.value!==void 0&&w.value===J||Q)&&(A(Y),Q&&(ee.current=!0))},[w.value]),M=x.useCallback(()=>y==null?void 0:y.focus(),[y]),N=x.useCallback((Y,J,W)=>{const Q=!ee.current&&!W;(w.value!==void 0&&w.value===J||Q)&&B(Y)},[w.value]),F=n==="popper"?u1:ZP,V=F===u1?{side:s,sideOffset:l,align:u,alignOffset:c,arrowPadding:f,collisionBoundary:d,collisionPadding:h,sticky:m,hideWhenDetached:p,avoidCollisions:g}:{};return x.createElement(T2,{scope:r,content:y,viewport:b,onViewportChange:k,itemRefCallback:O,selectedItem:C,onItemLeave:M,itemTextRefCallback:N,focusSelectedItem:he,selectedItemText:L,position:n,isPositioned:H,searchRef:ye},x.createElement(_d,{as:ai,allowPinchZoom:!0},x.createElement(yd,{asChild:!0,trapped:w.open,onMountAutoFocus:Y=>{Y.preventDefault()},onUnmountAutoFocus:_e(i,Y=>{var J;(J=w.trigger)===null||J===void 0||J.focus({preventScroll:!0}),Y.preventDefault()})},x.createElement(vu,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:a,onFocusOutside:Y=>Y.preventDefault(),onDismiss:()=>w.onOpenChange(!1)},x.createElement(F,ge({role:"listbox",id:w.contentId,"data-state":w.open?"open":"closed",dir:w.dir,onContextMenu:Y=>Y.preventDefault()},v,V,{onPlaced:()=>G(!0),ref:S,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:_e(v.onKeyDown,Y=>{const J=Y.ctrlKey||Y.altKey||Y.metaKey;if(Y.key==="Tab"&&Y.preventDefault(),!J&&Y.key.length===1&&te(Y.key),["ArrowUp","ArrowDown","Home","End"].includes(Y.key)){let Q=U().filter(le=>!le.disabled).map(le=>le.ref.current);if(["ArrowUp","End"].includes(Y.key)&&(Q=Q.slice().reverse()),["ArrowUp","ArrowDown"].includes(Y.key)){const le=Y.target,me=Q.indexOf(le);Q=Q.slice(me+1)}setTimeout(()=>ae(Q)),Y.preventDefault()}})}))))))}),ZP=x.forwardRef((e,t)=>{const{__scopeSelect:r,onPlaced:n,...i}=e,o=Ci(yo,r),a=Ai(yo,r),[s,l]=x.useState(null),[u,c]=x.useState(null),f=Ve(t,S=>c(S)),d=$u(r),h=x.useRef(!1),m=x.useRef(!0),{viewport:p,selectedItem:g,selectedItemText:v,focusSelectedItem:w}=a,y=x.useCallback(()=>{if(o.trigger&&o.valueNode&&s&&u&&p&&g&&v){const S=o.trigger.getBoundingClientRect(),C=u.getBoundingClientRect(),A=o.valueNode.getBoundingClientRect(),L=v.getBoundingClientRect();if(o.dir!=="rtl"){const le=L.left-C.left,me=A.left-le,Se=S.left-me,ne=S.width+Se,$e=Math.max(ne,C.width),Pe=window.innerWidth-Vr,ve=Zg(me,[Vr,Pe-$e]);s.style.minWidth=ne+"px",s.style.left=ve+"px"}else{const le=C.right-L.right,me=window.innerWidth-A.right-le,Se=window.innerWidth-S.right-me,ne=S.width+Se,$e=Math.max(ne,C.width),Pe=window.innerWidth-Vr,ve=Zg(me,[Vr,Pe-$e]);s.style.minWidth=ne+"px",s.style.right=ve+"px"}const B=d(),U=window.innerHeight-Vr*2,H=p.scrollHeight,G=window.getComputedStyle(u),ee=parseInt(G.borderTopWidth,10),ae=parseInt(G.paddingTop,10),he=parseInt(G.borderBottomWidth,10),Te=parseInt(G.paddingBottom,10),oe=ee+ae+H+Te+he,ye=Math.min(g.offsetHeight*5,oe),te=window.getComputedStyle(p),O=parseInt(te.paddingTop,10),M=parseInt(te.paddingBottom,10),N=S.top+S.height/2-Vr,F=U-N,V=g.offsetHeight/2,Y=g.offsetTop+V,J=ee+ae+Y,W=oe-J;if(J<=N){const le=g===B[B.length-1].ref.current;s.style.bottom="0px";const me=u.clientHeight-p.offsetTop-p.offsetHeight,Se=Math.max(F,V+(le?M:0)+me+he),ne=J+Se;s.style.height=ne+"px"}else{const le=g===B[0].ref.current;s.style.top="0px";const Se=Math.max(N,ee+p.offsetTop+(le?O:0)+V)+W;s.style.height=Se+"px",p.scrollTop=J-N+p.offsetTop}s.style.margin=`${Vr}px 0`,s.style.minHeight=ye+"px",s.style.maxHeight=U+"px",n==null||n(),requestAnimationFrame(()=>h.current=!0)}},[d,o.trigger,o.valueNode,s,u,p,g,v,o.dir,n]);Bt(()=>y(),[y]);const[E,b]=x.useState();Bt(()=>{u&&b(window.getComputedStyle(u).zIndex)},[u]);const k=x.useCallback(S=>{S&&m.current===!0&&(y(),w==null||w(),m.current=!1)},[y,w]);return x.createElement(JP,{scope:r,contentWrapper:s,shouldExpandOnScrollRef:h,onScrollButtonChange:k},x.createElement("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:E}},x.createElement(Ie.div,ge({},i,{ref:f,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}}))))}),u1=x.forwardRef((e,t)=>{const{__scopeSelect:r,align:n="start",collisionPadding:i=Vr,...o}=e,a=nh(r);return x.createElement(S2,ge({},a,o,{ref:t,align:n,collisionPadding:i,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}}))}),[JP,ih]=bo(yo,{}),c1="SelectViewport",eI=x.forwardRef((e,t)=>{const{__scopeSelect:r,...n}=e,i=Ai(c1,r),o=ih(c1,r),a=Ve(t,i.onViewportChange),s=x.useRef(0);return x.createElement(x.Fragment,null,x.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"}}),x.createElement(ku.Slot,{scope:r},x.createElement(Ie.div,ge({"data-radix-select-viewport":"",role:"presentation"},n,{ref:a,style:{position:"relative",flex:1,overflow:"auto",...n.style},onScroll:_e(n.onScroll,l=>{const u=l.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:f}=o;if(f!=null&&f.current&&c){const d=Math.abs(s.current-u.scrollTop);if(d>0){const h=window.innerHeight-Vr*2,m=parseFloat(c.style.minHeight),p=parseFloat(c.style.height),g=Math.max(m,p);if(g0?y:0,c.style.justifyContent="flex-end")}}}s.current=u.scrollTop})}))))}),tI="SelectGroup",[rI,nI]=bo(tI),iI=x.forwardRef((e,t)=>{const{__scopeSelect:r,...n}=e,i=Yr();return x.createElement(rI,{scope:r,id:i},x.createElement(Ie.div,ge({role:"group","aria-labelledby":i},n,{ref:t})))}),oI="SelectLabel",aI=x.forwardRef((e,t)=>{const{__scopeSelect:r,...n}=e,i=nI(oI,r);return x.createElement(Ie.div,ge({id:i.id},n,{ref:t}))}),a0="SelectItem",[sI,C2]=bo(a0),lI=x.forwardRef((e,t)=>{const{__scopeSelect:r,value:n,disabled:i=!1,textValue:o,...a}=e,s=Ci(a0,r),l=Ai(a0,r),u=s.value===n,[c,f]=x.useState(o??""),[d,h]=x.useState(!1),m=Ve(t,v=>{var w;return(w=l.itemRefCallback)===null||w===void 0?void 0:w.call(l,v,n,i)}),p=Yr(),g=()=>{i||(s.onValueChange(n),s.onOpenChange(!1))};return x.createElement(sI,{scope:r,value:n,disabled:i,textId:p,isSelected:u,onItemTextChange:x.useCallback(v=>{f(w=>{var y;return w||((y=v==null?void 0:v.textContent)!==null&&y!==void 0?y:"").trim()})},[])},x.createElement(ku.ItemSlot,{scope:r,value:n,disabled:i,textValue:c},x.createElement(Ie.div,ge({role:"option","aria-labelledby":p,"data-highlighted":d?"":void 0,"aria-selected":u&&d,"data-state":u?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1},a,{ref:m,onFocus:_e(a.onFocus,()=>h(!0)),onBlur:_e(a.onBlur,()=>h(!1)),onPointerUp:_e(a.onPointerUp,g),onPointerMove:_e(a.onPointerMove,v=>{if(i){var w;(w=l.onItemLeave)===null||w===void 0||w.call(l)}else v.currentTarget.focus({preventScroll:!0})}),onPointerLeave:_e(a.onPointerLeave,v=>{if(v.currentTarget===document.activeElement){var w;(w=l.onItemLeave)===null||w===void 0||w.call(l)}}),onKeyDown:_e(a.onKeyDown,v=>{var w;((w=l.searchRef)===null||w===void 0?void 0:w.current)!==""&&v.key===" "||(LP.includes(v.key)&&g(),v.key===" "&&v.preventDefault())})}))))}),zs="SelectItemText",uI=x.forwardRef((e,t)=>{const{__scopeSelect:r,className:n,style:i,...o}=e,a=Ci(zs,r),s=Ai(zs,r),l=C2(zs,r),u=VP(zs,r),[c,f]=x.useState(null),d=Ve(t,v=>f(v),l.onItemTextChange,v=>{var w;return(w=s.itemTextRefCallback)===null||w===void 0?void 0:w.call(s,v,l.value,l.disabled)}),h=c==null?void 0:c.textContent,m=x.useMemo(()=>x.createElement("option",{key:l.value,value:l.value,disabled:l.disabled},h),[l.disabled,l.value,h]),{onNativeOptionAdd:p,onNativeOptionRemove:g}=u;return Bt(()=>(p(m),()=>g(m)),[p,g,m]),x.createElement(x.Fragment,null,x.createElement(Ie.span,ge({id:l.textId},o,{ref:d})),l.isSelected&&a.valueNode&&!a.valueNodeHasChildren?mi.createPortal(o.children,a.valueNode):null)}),cI="SelectItemIndicator",fI=x.forwardRef((e,t)=>{const{__scopeSelect:r,...n}=e;return C2(cI,r).isSelected?x.createElement(Ie.span,ge({"aria-hidden":!0},n,{ref:t})):null}),f1="SelectScrollUpButton",dI=x.forwardRef((e,t)=>{const r=Ai(f1,e.__scopeSelect),n=ih(f1,e.__scopeSelect),[i,o]=x.useState(!1),a=Ve(t,n.onScrollButtonChange);return Bt(()=>{if(r.viewport&&r.isPositioned){let u=function(){const c=l.scrollTop>0;o(c)};var s=u;const l=r.viewport;return u(),l.addEventListener("scroll",u),()=>l.removeEventListener("scroll",u)}},[r.viewport,r.isPositioned]),i?x.createElement(A2,ge({},e,{ref:a,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=r;s&&l&&(s.scrollTop=s.scrollTop-l.offsetHeight)}})):null}),d1="SelectScrollDownButton",hI=x.forwardRef((e,t)=>{const r=Ai(d1,e.__scopeSelect),n=ih(d1,e.__scopeSelect),[i,o]=x.useState(!1),a=Ve(t,n.onScrollButtonChange);return Bt(()=>{if(r.viewport&&r.isPositioned){let u=function(){const c=l.scrollHeight-l.clientHeight,f=Math.ceil(l.scrollTop)l.removeEventListener("scroll",u)}},[r.viewport,r.isPositioned]),i?x.createElement(A2,ge({},e,{ref:a,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=r;s&&l&&(s.scrollTop=s.scrollTop+l.offsetHeight)}})):null}),A2=x.forwardRef((e,t)=>{const{__scopeSelect:r,onAutoScroll:n,...i}=e,o=Ai("SelectScrollButton",r),a=x.useRef(null),s=$u(r),l=x.useCallback(()=>{a.current!==null&&(window.clearInterval(a.current),a.current=null)},[]);return x.useEffect(()=>()=>l(),[l]),Bt(()=>{var u;const c=s().find(f=>f.ref.current===document.activeElement);c==null||(u=c.ref.current)===null||u===void 0||u.scrollIntoView({block:"nearest"})},[s]),x.createElement(Ie.div,ge({"aria-hidden":!0},i,{ref:t,style:{flexShrink:0,...i.style},onPointerDown:_e(i.onPointerDown,()=>{a.current===null&&(a.current=window.setInterval(n,50))}),onPointerMove:_e(i.onPointerMove,()=>{var u;(u=o.onItemLeave)===null||u===void 0||u.call(o),a.current===null&&(a.current=window.setInterval(n,50))}),onPointerLeave:_e(i.onPointerLeave,()=>{l()})}))}),R2=x.forwardRef((e,t)=>{const{value:r,...n}=e,i=x.useRef(null),o=Ve(t,i),a=NP(r);return x.useEffect(()=>{const s=i.current,l=window.HTMLSelectElement.prototype,c=Object.getOwnPropertyDescriptor(l,"value").set;if(a!==r&&c){const f=new Event("change",{bubbles:!0});c.call(s,r),s.dispatchEvent(f)}},[a,r]),x.createElement(rh,{asChild:!0},x.createElement("select",ge({},n,{ref:o,defaultValue:r})))});R2.displayName="BubbleSelect";function O2(e){const t=It(e),r=x.useRef(""),n=x.useRef(0),i=x.useCallback(a=>{const s=r.current+a;t(s),function l(u){r.current=u,window.clearTimeout(n.current),u!==""&&(n.current=window.setTimeout(()=>l(""),1e3))}(s)},[t]),o=x.useCallback(()=>{r.current="",window.clearTimeout(n.current)},[]);return x.useEffect(()=>()=>window.clearTimeout(n.current),[]),[r,i,o]}function F2(e,t,r){const i=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,o=r?e.indexOf(r):-1;let a=pI(e,Math.max(o,0));i.length===1&&(a=a.filter(u=>u!==r));const l=a.find(u=>u.textValue.toLowerCase().startsWith(i.toLowerCase()));return l!==r?l:void 0}function pI(e,t){return e.map((r,n)=>e[(t+n)%e.length])}const gI=WP,mI=GP,vI=XP,xI=KP,wI=YP,yI=qP,EI=eI,Vc=iI,h1=aI,_I=lI,SI=uI,TI=fI,CI=dI,AI=hI;function oh(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,o;for(o=0;o=0)&&(r[i]=e[i]);return r}var RI=["color"],OI=x.forwardRef(function(e,t){var r=e.color,n=r===void 0?"currentColor":r,i=oh(e,RI);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},i,{ref:t}),x.createElement("path",{d:"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z",fill:n,fillRule:"evenodd",clipRule:"evenodd"}))}),FI=["color"],s0=x.forwardRef(function(e,t){var r=e.color,n=r===void 0?"currentColor":r,i=oh(e,FI);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},i,{ref:t}),x.createElement("path",{d:"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z",fill:n,fillRule:"evenodd",clipRule:"evenodd"}))}),DI=["color"],PI=x.forwardRef(function(e,t){var r=e.color,n=r===void 0?"currentColor":r,i=oh(e,DI);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},i,{ref:t}),x.createElement("path",{d:"M3.13523 8.84197C3.3241 9.04343 3.64052 9.05363 3.84197 8.86477L7.5 5.43536L11.158 8.86477C11.3595 9.05363 11.6759 9.04343 11.8648 8.84197C12.0536 8.64051 12.0434 8.32409 11.842 8.13523L7.84197 4.38523C7.64964 4.20492 7.35036 4.20492 7.15803 4.38523L3.15803 8.13523C2.95657 8.32409 2.94637 8.64051 3.13523 8.84197Z",fill:n,fillRule:"evenodd",clipRule:"evenodd"}))});const Yi=({value:e,onChange:t,label:r="Select",placeholder:n="Select a fruit…",groups:i,labelType:o="col"})=>{const a=(i==null?void 0:i.length)===1;return Ce(gI,{value:e,onValueChange:t,children:[Ce(Vc,{className:Nt("flex gap-1",{"flex-row items-center gap-2":o==="row","flex-col":o==="col"}),children:[X(h1,{className:"whitespace-nowrap",children:r}),Ce(mI,{className:"justify-between bg-white text-black dark:text-white dark:bg-grey-900 whitespace-nowrap h-[36px] border-[1.5px] border-grey-700 rounded p-3 inline-flex items-center leading-none gap-[5px] shadow-[0_2px_10px] shadow-black/10 focus:shadow-[0_0_0_2px] focus:shadow-black data-[placeholder]:text-white outline-none","aria-label":r,children:[X(vI,{placeholder:n}),X(xI,{children:X(s0,{})})]})]}),X(wI,{children:Ce(yI,{className:"z-50 bg-white/80 dark:bg-grey-900/80 backdrop-filter backdrop-blur overflow-hidden border-[1.5px] border-grey-700 rounded p-3 shadow-[0px_10px_38px_-10px_rgba(22,_23,_24,_0.35),0px_10px_20px_-15px_rgba(22,_23,_24,_0.2)]",children:[X(CI,{className:"flex items-center justify-center h-[25px] cursor-default dark:text-white text-black",children:X(PI,{})}),X(EI,{className:"p-[5px]",children:a?X(Vc,{children:i[0].items.map(s=>X(p1,{value:s.value,disabled:s.disabled,children:s.label}))}):i.map((s,l)=>Ce(Vc,{children:[X(h1,{className:"text-xs leading-[25px]",children:s.label}),s.items.map(u=>X(p1,{value:u.value,disabled:u.disabled,children:u.label},u.value))]},s.label))}),X(AI,{className:"flex items-center justify-center h-[25px] cursor-default dark:text-white text-black",children:X(s0,{})})]})})]})},p1=x.forwardRef(({children:e,className:t,...r},n)=>Ce(_I,{className:Nt("text-[13px] leading-none rounded-[3px] flex items-center h-[25px] pr-[35px] pl-[25px] relative select-none data-[disabled]:text-grey-400 data-[disabled]:pointer-events-none data-[highlighted]:outline-none data-[highlighted]:bg-grey-600 data-[highlighted]:text-white text-black dark:text-white",t),...r,ref:n,children:[X(SI,{children:e}),X(TI,{className:"absolute left-0 w-[25px] inline-flex items-center justify-center",children:X(OI,{})})]})),D2="ToastProvider",[ah,II,bI]=Fu("Toast"),[P2,i$]=ln("Toast",[bI]),[kI,Nu]=P2(D2),I2=e=>{const{__scopeToast:t,label:r="Notification",duration:n=5e3,swipeDirection:i="right",swipeThreshold:o=50,children:a}=e,[s,l]=x.useState(null),[u,c]=x.useState(0),f=x.useRef(!1),d=x.useRef(!1);return x.createElement(ah.Provider,{scope:t},x.createElement(kI,{scope:t,label:r,duration:n,swipeDirection:i,swipeThreshold:o,toastCount:u,viewport:s,onViewportChange:l,onToastAdd:x.useCallback(()=>c(h=>h+1),[]),onToastRemove:x.useCallback(()=>c(h=>h-1),[]),isFocusedToastEscapeKeyDownRef:f,isClosePausedRef:d},a))};I2.propTypes={label(e){if(e.label&&typeof e.label=="string"&&!e.label.trim()){const t=`Invalid prop \`label\` supplied to \`${D2}\`. Expected non-empty \`string\`.`;return new Error(t)}return null}};const $I="ToastViewport",NI=["F8"],l0="toast.viewportPause",u0="toast.viewportResume",MI=x.forwardRef((e,t)=>{const{__scopeToast:r,hotkey:n=NI,label:i="Notifications ({hotkey})",...o}=e,a=Nu($I,r),s=II(r),l=x.useRef(null),u=x.useRef(null),c=x.useRef(null),f=x.useRef(null),d=Ve(t,f,a.onViewportChange),h=n.join("+").replace(/Key/g,"").replace(/Digit/g,""),m=a.toastCount>0;x.useEffect(()=>{const g=v=>{var w;n.every(E=>v[E]||v.code===E)&&((w=f.current)===null||w===void 0||w.focus())};return document.addEventListener("keydown",g),()=>document.removeEventListener("keydown",g)},[n]),x.useEffect(()=>{const g=l.current,v=f.current;if(m&&g&&v){const w=()=>{if(!a.isClosePausedRef.current){const k=new CustomEvent(l0);v.dispatchEvent(k),a.isClosePausedRef.current=!0}},y=()=>{if(a.isClosePausedRef.current){const k=new CustomEvent(u0);v.dispatchEvent(k),a.isClosePausedRef.current=!1}},E=k=>{!g.contains(k.relatedTarget)&&y()},b=()=>{g.contains(document.activeElement)||y()};return g.addEventListener("focusin",w),g.addEventListener("focusout",E),g.addEventListener("pointermove",w),g.addEventListener("pointerleave",b),window.addEventListener("blur",w),window.addEventListener("focus",y),()=>{g.removeEventListener("focusin",w),g.removeEventListener("focusout",E),g.removeEventListener("pointermove",w),g.removeEventListener("pointerleave",b),window.removeEventListener("blur",w),window.removeEventListener("focus",y)}}},[m,a.isClosePausedRef]);const p=x.useCallback(({tabbingDirection:g})=>{const w=s().map(y=>{const E=y.ref.current,b=[E,...e5(E)];return g==="forwards"?b:b.reverse()});return(g==="forwards"?w.reverse():w).flat()},[s]);return x.useEffect(()=>{const g=f.current;if(g){const v=w=>{const y=w.altKey||w.ctrlKey||w.metaKey;if(w.key==="Tab"&&!y){const C=document.activeElement,A=w.shiftKey;if(w.target===g&&A){var b;(b=u.current)===null||b===void 0||b.focus();return}const U=p({tabbingDirection:A?"backwards":"forwards"}),H=U.findIndex(G=>G===C);if(Wc(U.slice(H+1)))w.preventDefault();else{var k,S;A?(k=u.current)===null||k===void 0||k.focus():(S=c.current)===null||S===void 0||S.focus()}}};return g.addEventListener("keydown",v),()=>g.removeEventListener("keydown",v)}},[s,p]),x.createElement(sS,{ref:l,role:"region","aria-label":i.replace("{hotkey}",h),tabIndex:-1,style:{pointerEvents:m?void 0:"none"}},m&&x.createElement(g1,{ref:u,onFocusFromOutsideViewport:()=>{const g=p({tabbingDirection:"forwards"});Wc(g)}}),x.createElement(ah.Slot,{scope:r},x.createElement(Ie.ol,ge({tabIndex:-1},o,{ref:d}))),m&&x.createElement(g1,{ref:c,onFocusFromOutsideViewport:()=>{const g=p({tabbingDirection:"backwards"});Wc(g)}}))}),LI="ToastFocusProxy",g1=x.forwardRef((e,t)=>{const{__scopeToast:r,onFocusFromOutsideViewport:n,...i}=e,o=Nu(LI,r);return x.createElement(rh,ge({"aria-hidden":!0,tabIndex:0},i,{ref:t,style:{position:"fixed"},onFocus:a=>{var s;const l=a.relatedTarget;!((s=o.viewport)!==null&&s!==void 0&&s.contains(l))&&n()}}))}),Mu="Toast",BI="toast.swipeStart",UI="toast.swipeMove",HI="toast.swipeCancel",VI="toast.swipeEnd",WI=x.forwardRef((e,t)=>{const{forceMount:r,open:n,defaultOpen:i,onOpenChange:o,...a}=e,[s=!0,l]=vo({prop:n,defaultProp:i,onChange:o});return x.createElement(vi,{present:r||s},x.createElement(b2,ge({open:s},a,{ref:t,onClose:()=>l(!1),onPause:It(e.onPause),onResume:It(e.onResume),onSwipeStart:_e(e.onSwipeStart,u=>{u.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:_e(e.onSwipeMove,u=>{const{x:c,y:f}=u.detail.delta;u.currentTarget.setAttribute("data-swipe","move"),u.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${c}px`),u.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${f}px`)}),onSwipeCancel:_e(e.onSwipeCancel,u=>{u.currentTarget.setAttribute("data-swipe","cancel"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),u.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),u.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:_e(e.onSwipeEnd,u=>{const{x:c,y:f}=u.detail.delta;u.currentTarget.setAttribute("data-swipe","end"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),u.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${c}px`),u.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${f}px`),l(!1)})})))}),[zI,GI]=P2(Mu,{onClose(){}}),b2=x.forwardRef((e,t)=>{const{__scopeToast:r,type:n="foreground",duration:i,open:o,onClose:a,onEscapeKeyDown:s,onPause:l,onResume:u,onSwipeStart:c,onSwipeMove:f,onSwipeCancel:d,onSwipeEnd:h,...m}=e,p=Nu(Mu,r),[g,v]=x.useState(null),w=Ve(t,G=>v(G)),y=x.useRef(null),E=x.useRef(null),b=i||p.duration,k=x.useRef(0),S=x.useRef(b),C=x.useRef(0),{onToastAdd:A,onToastRemove:L}=p,B=It(()=>{var G;(g==null?void 0:g.contains(document.activeElement))&&((G=p.viewport)===null||G===void 0||G.focus()),a()}),U=x.useCallback(G=>{!G||G===1/0||(window.clearTimeout(C.current),k.current=new Date().getTime(),C.current=window.setTimeout(B,G))},[B]);x.useEffect(()=>{const G=p.viewport;if(G){const ee=()=>{U(S.current),u==null||u()},ae=()=>{const he=new Date().getTime()-k.current;S.current=S.current-he,window.clearTimeout(C.current),l==null||l()};return G.addEventListener(l0,ae),G.addEventListener(u0,ee),()=>{G.removeEventListener(l0,ae),G.removeEventListener(u0,ee)}}},[p.viewport,b,l,u,U]),x.useEffect(()=>{o&&!p.isClosePausedRef.current&&U(b)},[o,b,p.isClosePausedRef,U]),x.useEffect(()=>(A(),()=>L()),[A,L]);const H=x.useMemo(()=>g?N2(g):null,[g]);return p.viewport?x.createElement(x.Fragment,null,H&&x.createElement(jI,{__scopeToast:r,role:"status","aria-live":n==="foreground"?"assertive":"polite","aria-atomic":!0},H),x.createElement(zI,{scope:r,onClose:B},mi.createPortal(x.createElement(ah.ItemSlot,{scope:r},x.createElement(aS,{asChild:!0,onEscapeKeyDown:_e(s,()=>{p.isFocusedToastEscapeKeyDownRef.current||B(),p.isFocusedToastEscapeKeyDownRef.current=!1})},x.createElement(Ie.li,ge({role:"status","aria-live":"off","aria-atomic":!0,tabIndex:0,"data-state":o?"open":"closed","data-swipe-direction":p.swipeDirection},m,{ref:w,style:{userSelect:"none",touchAction:"none",...e.style},onKeyDown:_e(e.onKeyDown,G=>{G.key==="Escape"&&(s==null||s(G.nativeEvent),G.nativeEvent.defaultPrevented||(p.isFocusedToastEscapeKeyDownRef.current=!0,B()))}),onPointerDown:_e(e.onPointerDown,G=>{G.button===0&&(y.current={x:G.clientX,y:G.clientY})}),onPointerMove:_e(e.onPointerMove,G=>{if(!y.current)return;const ee=G.clientX-y.current.x,ae=G.clientY-y.current.y,he=!!E.current,Te=["left","right"].includes(p.swipeDirection),oe=["left","up"].includes(p.swipeDirection)?Math.min:Math.max,ye=Te?oe(0,ee):0,te=Te?0:oe(0,ae),O=G.pointerType==="touch"?10:2,M={x:ye,y:te},N={originalEvent:G,delta:M};he?(E.current=M,Gs(UI,f,N,{discrete:!1})):m1(M,p.swipeDirection,O)?(E.current=M,Gs(BI,c,N,{discrete:!1}),G.target.setPointerCapture(G.pointerId)):(Math.abs(ee)>O||Math.abs(ae)>O)&&(y.current=null)}),onPointerUp:_e(e.onPointerUp,G=>{const ee=E.current,ae=G.target;if(ae.hasPointerCapture(G.pointerId)&&ae.releasePointerCapture(G.pointerId),E.current=null,y.current=null,ee){const he=G.currentTarget,Te={originalEvent:G,delta:ee};m1(ee,p.swipeDirection,p.swipeThreshold)?Gs(VI,h,Te,{discrete:!0}):Gs(HI,d,Te,{discrete:!0}),he.addEventListener("click",oe=>oe.preventDefault(),{once:!0})}})})))),p.viewport))):null});b2.propTypes={type(e){if(e.type&&!["foreground","background"].includes(e.type)){const t=`Invalid prop \`type\` supplied to \`${Mu}\`. Expected \`foreground | background\`.`;return new Error(t)}return null}};const jI=e=>{const{__scopeToast:t,children:r,...n}=e,i=Nu(Mu,t),[o,a]=x.useState(!1),[s,l]=x.useState(!1);return ZI(()=>a(!0)),x.useEffect(()=>{const u=window.setTimeout(()=>l(!0),1e3);return()=>window.clearTimeout(u)},[]),s?null:x.createElement(xu,{asChild:!0},x.createElement(rh,n,o&&x.createElement(x.Fragment,null,i.label," ",r)))},XI=x.forwardRef((e,t)=>{const{__scopeToast:r,...n}=e;return x.createElement(Ie.div,ge({},n,{ref:t}))}),KI=x.forwardRef((e,t)=>{const{__scopeToast:r,...n}=e;return x.createElement(Ie.div,ge({},n,{ref:t}))}),YI="ToastAction",qI=x.forwardRef((e,t)=>{const{altText:r,...n}=e;return r?x.createElement($2,{altText:r,asChild:!0},x.createElement(k2,ge({},n,{ref:t}))):null});qI.propTypes={altText(e){return e.altText?null:new Error(`Missing prop \`altText\` expected on \`${YI}\``)}};const QI="ToastClose",k2=x.forwardRef((e,t)=>{const{__scopeToast:r,...n}=e,i=GI(QI,r);return x.createElement($2,{asChild:!0},x.createElement(Ie.button,ge({type:"button"},n,{ref:t,onClick:_e(e.onClick,i.onClose)})))}),$2=x.forwardRef((e,t)=>{const{__scopeToast:r,altText:n,...i}=e;return x.createElement(Ie.div,ge({"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":n||void 0},i,{ref:t}))});function N2(e){const t=[];return Array.from(e.childNodes).forEach(n=>{if(n.nodeType===n.TEXT_NODE&&n.textContent&&t.push(n.textContent),JI(n)){const i=n.ariaHidden||n.hidden||n.style.display==="none",o=n.dataset.radixToastAnnounceExclude==="";if(!i)if(o){const a=n.dataset.radixToastAnnounceAlt;a&&t.push(a)}else t.push(...N2(n))}}),t}function Gs(e,t,r,{discrete:n}){const i=r.originalEvent.currentTarget,o=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:r});t&&i.addEventListener(e,t,{once:!0}),n?wd(i,o):i.dispatchEvent(o)}const m1=(e,t,r=0)=>{const n=Math.abs(e.x),i=Math.abs(e.y),o=n>i;return t==="left"||t==="right"?o&&n>r:!o&&i>r};function ZI(e=()=>{}){const t=It(e);Bt(()=>{let r=0,n=0;return r=window.requestAnimationFrame(()=>n=window.requestAnimationFrame(t)),()=>{window.cancelAnimationFrame(r),window.cancelAnimationFrame(n)}},[t])}function JI(e){return e.nodeType===e.ELEMENT_NODE}function e5(e){const t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const i=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||i?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;r.nextNode();)t.push(r.currentNode);return t}function Wc(e){const t=document.activeElement;return e.some(r=>r===t?!0:(r.focus(),document.activeElement!==t))}const t5=I2,r5=MI,n5=WI,i5=XI,o5=KI,a5=k2,s5=({title:e,titleId:t,...r})=>Ce("svg",{viewBox:"0 0 18 18",width:18,height:18,fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":t,...r,children:[e?X("title",{id:t,children:e}):null,X("path",{d:"M9 16.5a7.5 7.5 0 1 0 0-15 7.5 7.5 0 0 0 0 15ZM11.25 6.75l-4.5 4.5M6.75 6.75l4.5 4.5",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"})]}),l5=({title:e,titleId:t,...r})=>Ce("svg",{viewBox:"0 0 24 24",width:24,height:24,fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":t,...r,children:[e?X("title",{id:t,children:e}):null,X("path",{d:"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10ZM12 16v-4M12 8h.01",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"})]}),u5=({title:e,titleId:t,...r})=>Ce("svg",{width:18,height:18,viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":t,...r,children:[e?X("title",{id:t,children:e}):null,X("path",{d:"M16.5 8.31V9a7.5 7.5 0 1 1-4.447-6.855",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}),X("path",{d:"M16.5 3 9 10.508l-2.25-2.25",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"})]}),c5=({title:e,titleId:t,...r})=>Ce("svg",{viewBox:"0 0 18 18",width:18,height:18,fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":t,...r,children:[e?X("title",{id:t,children:e}):null,X("path",{d:"M7.718 2.895 1.366 13.5a1.5 1.5 0 0 0 1.282 2.25h12.705a1.5 1.5 0 0 0 1.283-2.25L10.283 2.895a1.5 1.5 0 0 0-2.565 0v0ZM9 6.75v3M9 12.75h.008",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"})]}),f5=({toast:e,open:t,setOpen:r})=>Ce(t5,{children:[Ce(n5,{open:t,onOpenChange:n=>{e.preventClose||r(n)},className:Nt("z-50 fixed bottom-4 md:left-1/2 md:-translate-x-[50%] inset-x-4 w-auto shadow-lg md:max-w-[658px] duration-300","radix-state-open:animate-fade-in","radix-state-closed:animate-toast-hide","radix-swipe-end:animate-toast-swipe-out","translate-x-radix-toast-swipe-move-x","radix-swipe-cancel:translate-x-0 radix-swipe-cancel:duration-200 radix-swipe-cancel:ease-[ease]","px-[40px] md:px-[58px] py-6 flex flex-col border rounded-[4px]",{"bg-green-100 text-green-600 border-green-600":e.status==="success","bg-red-200 text-red-600 border-red-600":e.status==="error","bg-blue-100 text-blue-700 border-blue-600":e.status==="info","bg-orange-200 text-orange-600 border-orange-600":e.status==="warning"},{"h-[72px]":!e.description}),children:[e.status==="success"?X(u5,{className:"absolute left-[8px] md:left-[25px] top-[25px]"}):e.status==="warning"?X(c5,{className:"absolute left-[8px] md:left-[25px] top-[25px]"}):e.status==="error"?X(s5,{className:"absolute left-[8px] md:left-[25px] top-[25px]"}):X(l5,{className:"absolute left-[8px] md:left-[25px] top-[25px]"}),X(i5,{className:"text-grey-900 font-bold text-sm",children:e.title}),e.description&&X(o5,{className:"mt-2 text-[10px] md:text-xs text-grey-800",children:e.description}),X(a5,{className:"absolute top-7 right-5 md:right-7",children:X(ql,{className:"w-4 h-4 text-grey-900"})})]}),X(r5,{})]}),zc="rovingFocusGroup.onEntryFocus",d5={bubbles:!1,cancelable:!0},sh="RovingFocusGroup",[c0,M2,h5]=Fu(sh),[p5,L2]=ln(sh,[h5]),[g5,m5]=p5(sh),v5=x.forwardRef((e,t)=>x.createElement(c0.Provider,{scope:e.__scopeRovingFocusGroup},x.createElement(c0.Slot,{scope:e.__scopeRovingFocusGroup},x.createElement(x5,ge({},e,{ref:t}))))),x5=x.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:r,orientation:n,loop:i=!1,dir:o,currentTabStopId:a,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:l,onEntryFocus:u,...c}=e,f=x.useRef(null),d=Ve(t,f),h=Zd(o),[m=null,p]=vo({prop:a,defaultProp:s,onChange:l}),[g,v]=x.useState(!1),w=It(u),y=M2(r),E=x.useRef(!1),[b,k]=x.useState(0);return x.useEffect(()=>{const S=f.current;if(S)return S.addEventListener(zc,w),()=>S.removeEventListener(zc,w)},[w]),x.createElement(g5,{scope:r,orientation:n,dir:h,loop:i,currentTabStopId:m,onItemFocus:x.useCallback(S=>p(S),[p]),onItemShiftTab:x.useCallback(()=>v(!0),[]),onFocusableItemAdd:x.useCallback(()=>k(S=>S+1),[]),onFocusableItemRemove:x.useCallback(()=>k(S=>S-1),[])},x.createElement(Ie.div,ge({tabIndex:g||b===0?-1:0,"data-orientation":n},c,{ref:d,style:{outline:"none",...e.style},onMouseDown:_e(e.onMouseDown,()=>{E.current=!0}),onFocus:_e(e.onFocus,S=>{const C=!E.current;if(S.target===S.currentTarget&&C&&!g){const A=new CustomEvent(zc,d5);if(S.currentTarget.dispatchEvent(A),!A.defaultPrevented){const L=y().filter(ee=>ee.focusable),B=L.find(ee=>ee.active),U=L.find(ee=>ee.id===m),G=[B,U,...L].filter(Boolean).map(ee=>ee.ref.current);B2(G)}}E.current=!1}),onBlur:_e(e.onBlur,()=>v(!1))})))}),w5="RovingFocusGroupItem",y5=x.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:r,focusable:n=!0,active:i=!1,tabStopId:o,...a}=e,s=Yr(),l=o||s,u=m5(w5,r),c=u.currentTabStopId===l,f=M2(r),{onFocusableItemAdd:d,onFocusableItemRemove:h}=u;return x.useEffect(()=>{if(n)return d(),()=>h()},[n,d,h]),x.createElement(c0.ItemSlot,{scope:r,id:l,focusable:n,active:i},x.createElement(Ie.span,ge({tabIndex:c?0:-1,"data-orientation":u.orientation},a,{ref:t,onMouseDown:_e(e.onMouseDown,m=>{n?u.onItemFocus(l):m.preventDefault()}),onFocus:_e(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:_e(e.onKeyDown,m=>{if(m.key==="Tab"&&m.shiftKey){u.onItemShiftTab();return}if(m.target!==m.currentTarget)return;const p=S5(m,u.orientation,u.dir);if(p!==void 0){m.preventDefault();let v=f().filter(w=>w.focusable).map(w=>w.ref.current);if(p==="last")v.reverse();else if(p==="prev"||p==="next"){p==="prev"&&v.reverse();const w=v.indexOf(m.currentTarget);v=u.loop?T5(v,w+1):v.slice(w+1)}setTimeout(()=>B2(v))}})})))}),E5={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function _5(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function S5(e,t,r){const n=_5(e.key,r);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(n))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(n)))return E5[n]}function B2(e){const t=document.activeElement;for(const r of e)if(r===t||(r.focus(),document.activeElement!==t))return}function T5(e,t){return e.map((r,n)=>e[(t+n)%e.length])}const C5=v5,A5=y5,R5=["Enter"," "],O5=["ArrowDown","PageUp","Home"],U2=["ArrowUp","PageDown","End"],F5=[...O5,...U2],Lu="Menu",[f0,D5,P5]=Fu(Lu),[Ri,Bu]=ln(Lu,[P5,Iu,L2]),lh=Iu(),H2=L2(),[I5,cs]=Ri(Lu),[b5,uh]=Ri(Lu),k5=e=>{const{__scopeMenu:t,open:r=!1,children:n,dir:i,onOpenChange:o,modal:a=!0}=e,s=lh(t),[l,u]=x.useState(null),c=x.useRef(!1),f=It(o),d=Zd(i);return x.useEffect(()=>{const h=()=>{c.current=!0,document.addEventListener("pointerdown",m,{capture:!0,once:!0}),document.addEventListener("pointermove",m,{capture:!0,once:!0})},m=()=>c.current=!1;return document.addEventListener("keydown",h,{capture:!0}),()=>{document.removeEventListener("keydown",h,{capture:!0}),document.removeEventListener("pointerdown",m,{capture:!0}),document.removeEventListener("pointermove",m,{capture:!0})}},[]),x.createElement(E2,s,x.createElement(I5,{scope:t,open:r,onOpenChange:f,content:l,onContentChange:u},x.createElement(b5,{scope:t,onClose:x.useCallback(()=>f(!1),[f]),isUsingKeyboardRef:c,dir:d,modal:a},n)))},$5=x.forwardRef((e,t)=>{const{__scopeMenu:r,...n}=e,i=lh(r);return x.createElement(_2,ge({},i,n,{ref:t}))}),V2="MenuPortal",[N5,M5]=Ri(V2,{forceMount:void 0}),L5=e=>{const{__scopeMenu:t,forceMount:r,children:n,container:i}=e,o=cs(V2,t);return x.createElement(N5,{scope:t,forceMount:r},x.createElement(vi,{present:r||o.open},x.createElement(xu,{asChild:!0,container:i},n)))},Fn="MenuContent",[B5,W2]=Ri(Fn),U5=x.forwardRef((e,t)=>{const r=M5(Fn,e.__scopeMenu),{forceMount:n=r.forceMount,...i}=e,o=cs(Fn,e.__scopeMenu),a=uh(Fn,e.__scopeMenu);return x.createElement(f0.Provider,{scope:e.__scopeMenu},x.createElement(vi,{present:n||o.open},x.createElement(f0.Slot,{scope:e.__scopeMenu},a.modal?x.createElement(H5,ge({},i,{ref:t})):x.createElement(V5,ge({},i,{ref:t})))))}),H5=x.forwardRef((e,t)=>{const r=cs(Fn,e.__scopeMenu),n=x.useRef(null),i=Ve(t,n);return x.useEffect(()=>{const o=n.current;if(o)return Sd(o)},[]),x.createElement(z2,ge({},e,{ref:i,trapFocus:r.open,disableOutsidePointerEvents:r.open,disableOutsideScroll:!0,onFocusOutside:_e(e.onFocusOutside,o=>o.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>r.onOpenChange(!1)}))}),V5=x.forwardRef((e,t)=>{const r=cs(Fn,e.__scopeMenu);return x.createElement(z2,ge({},e,{ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>r.onOpenChange(!1)}))}),z2=x.forwardRef((e,t)=>{const{__scopeMenu:r,loop:n=!1,trapFocus:i,onOpenAutoFocus:o,onCloseAutoFocus:a,disableOutsidePointerEvents:s,onEntryFocus:l,onEscapeKeyDown:u,onPointerDownOutside:c,onFocusOutside:f,onInteractOutside:d,onDismiss:h,disableOutsideScroll:m,...p}=e,g=cs(Fn,r),v=uh(Fn,r),w=lh(r),y=H2(r),E=D5(r),[b,k]=x.useState(null),S=x.useRef(null),C=Ve(t,S,g.onContentChange),A=x.useRef(0),L=x.useRef(""),B=x.useRef(0),U=x.useRef(null),H=x.useRef("right"),G=x.useRef(0),ee=m?_d:x.Fragment,ae=m?{as:ai,allowPinchZoom:!0}:void 0,he=oe=>{var ye,te;const O=L.current+oe,M=E().filter(W=>!W.disabled),N=document.activeElement,F=(ye=M.find(W=>W.ref.current===N))===null||ye===void 0?void 0:ye.textValue,V=M.map(W=>W.textValue),Y=J5(V,O,F),J=(te=M.find(W=>W.textValue===Y))===null||te===void 0?void 0:te.ref.current;(function W(Q){L.current=Q,window.clearTimeout(A.current),Q!==""&&(A.current=window.setTimeout(()=>W(""),1e3))})(O),J&&setTimeout(()=>J.focus())};x.useEffect(()=>()=>window.clearTimeout(A.current),[]),Ed();const Te=x.useCallback(oe=>{var ye,te;return H.current===((ye=U.current)===null||ye===void 0?void 0:ye.side)&&tb(oe,(te=U.current)===null||te===void 0?void 0:te.area)},[]);return x.createElement(B5,{scope:r,searchRef:L,onItemEnter:x.useCallback(oe=>{Te(oe)&&oe.preventDefault()},[Te]),onItemLeave:x.useCallback(oe=>{var ye;Te(oe)||((ye=S.current)===null||ye===void 0||ye.focus(),k(null))},[Te]),onTriggerLeave:x.useCallback(oe=>{Te(oe)&&oe.preventDefault()},[Te]),pointerGraceTimerRef:B,onPointerGraceIntentChange:x.useCallback(oe=>{U.current=oe},[])},x.createElement(ee,ae,x.createElement(yd,{asChild:!0,trapped:i,onMountAutoFocus:_e(o,oe=>{var ye;oe.preventDefault(),(ye=S.current)===null||ye===void 0||ye.focus()}),onUnmountAutoFocus:a},x.createElement(vu,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:u,onPointerDownOutside:c,onFocusOutside:f,onInteractOutside:d,onDismiss:h},x.createElement(C5,ge({asChild:!0},y,{dir:v.dir,orientation:"vertical",loop:n,currentTabStopId:b,onCurrentTabStopIdChange:k,onEntryFocus:_e(l,oe=>{v.isUsingKeyboardRef.current||oe.preventDefault()})}),x.createElement(S2,ge({role:"menu","aria-orientation":"vertical","data-state":q5(g.open),"data-radix-menu-content":"",dir:v.dir},w,p,{ref:C,style:{outline:"none",...p.style},onKeyDown:_e(p.onKeyDown,oe=>{const te=oe.target.closest("[data-radix-menu-content]")===oe.currentTarget,O=oe.ctrlKey||oe.altKey||oe.metaKey,M=oe.key.length===1;te&&(oe.key==="Tab"&&oe.preventDefault(),!O&&M&&he(oe.key));const N=S.current;if(oe.target!==N||!F5.includes(oe.key))return;oe.preventDefault();const V=E().filter(Y=>!Y.disabled).map(Y=>Y.ref.current);U2.includes(oe.key)&&V.reverse(),Q5(V)}),onBlur:_e(e.onBlur,oe=>{oe.currentTarget.contains(oe.target)||(window.clearTimeout(A.current),L.current="")}),onPointerMove:_e(e.onPointerMove,h0(oe=>{const ye=oe.target,te=G.current!==oe.clientX;if(oe.currentTarget.contains(ye)&&te){const O=oe.clientX>G.current?"right":"left";H.current=O,G.current=oe.clientX}}))})))))))}),W5=x.forwardRef((e,t)=>{const{__scopeMenu:r,...n}=e;return x.createElement(Ie.div,ge({role:"group"},n,{ref:t}))}),z5=x.forwardRef((e,t)=>{const{__scopeMenu:r,...n}=e;return x.createElement(Ie.div,ge({},n,{ref:t}))}),d0="MenuItem",v1="menu.itemSelect",G5=x.forwardRef((e,t)=>{const{disabled:r=!1,onSelect:n,...i}=e,o=x.useRef(null),a=uh(d0,e.__scopeMenu),s=W2(d0,e.__scopeMenu),l=Ve(t,o),u=x.useRef(!1),c=()=>{const f=o.current;if(!r&&f){const d=new CustomEvent(v1,{bubbles:!0,cancelable:!0});f.addEventListener(v1,h=>n==null?void 0:n(h),{once:!0}),wd(f,d),d.defaultPrevented?u.current=!1:a.onClose()}};return x.createElement(j5,ge({},i,{ref:l,disabled:r,onClick:_e(e.onClick,c),onPointerDown:f=>{var d;(d=e.onPointerDown)===null||d===void 0||d.call(e,f),u.current=!0},onPointerUp:_e(e.onPointerUp,f=>{var d;u.current||(d=f.currentTarget)===null||d===void 0||d.click()}),onKeyDown:_e(e.onKeyDown,f=>{const d=s.searchRef.current!=="";r||d&&f.key===" "||R5.includes(f.key)&&(f.currentTarget.click(),f.preventDefault())})}))}),j5=x.forwardRef((e,t)=>{const{__scopeMenu:r,disabled:n=!1,textValue:i,...o}=e,a=W2(d0,r),s=H2(r),l=x.useRef(null),u=Ve(t,l),[c,f]=x.useState(!1),[d,h]=x.useState("");return x.useEffect(()=>{const m=l.current;if(m){var p;h(((p=m.textContent)!==null&&p!==void 0?p:"").trim())}},[o.children]),x.createElement(f0.ItemSlot,{scope:r,disabled:n,textValue:i??d},x.createElement(A5,ge({asChild:!0},s,{focusable:!n}),x.createElement(Ie.div,ge({role:"menuitem","data-highlighted":c?"":void 0,"aria-disabled":n||void 0,"data-disabled":n?"":void 0},o,{ref:u,onPointerMove:_e(e.onPointerMove,h0(m=>{n?a.onItemLeave(m):(a.onItemEnter(m),m.defaultPrevented||m.currentTarget.focus())})),onPointerLeave:_e(e.onPointerLeave,h0(m=>a.onItemLeave(m))),onFocus:_e(e.onFocus,()=>f(!0)),onBlur:_e(e.onBlur,()=>f(!1))}))))}),X5="MenuRadioGroup";Ri(X5,{value:void 0,onValueChange:()=>{}});const K5="MenuItemIndicator";Ri(K5,{checked:!1});const Y5="MenuSub";Ri(Y5);function q5(e){return e?"open":"closed"}function Q5(e){const t=document.activeElement;for(const r of e)if(r===t||(r.focus(),document.activeElement!==t))return}function Z5(e,t){return e.map((r,n)=>e[(t+n)%e.length])}function J5(e,t,r){const i=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,o=r?e.indexOf(r):-1;let a=Z5(e,Math.max(o,0));i.length===1&&(a=a.filter(u=>u!==r));const l=a.find(u=>u.toLowerCase().startsWith(i.toLowerCase()));return l!==r?l:void 0}function eb(e,t){const{x:r,y:n}=e;let i=!1;for(let o=0,a=t.length-1;on!=c>n&&r<(u-s)*(n-l)/(c-l)+s&&(i=!i)}return i}function tb(e,t){if(!t)return!1;const r={x:e.clientX,y:e.clientY};return eb(r,t)}function h0(e){return t=>t.pointerType==="mouse"?e(t):void 0}const G2=k5,j2=$5,X2=L5,K2=U5,rb=W5,nb=z5,ib=G5,Y2="ContextMenu",[ob,o$]=ln(Y2,[Bu]),Uu=Bu(),[ab,q2]=ob(Y2),sb=e=>{const{__scopeContextMenu:t,children:r,onOpenChange:n,dir:i,modal:o=!0}=e,[a,s]=x.useState(!1),l=Uu(t),u=It(n),c=x.useCallback(f=>{s(f),u(f)},[u]);return x.createElement(ab,{scope:t,open:a,onOpenChange:c,modal:o},x.createElement(G2,ge({},l,{dir:i,open:a,onOpenChange:c,modal:o}),r))},lb="ContextMenuTrigger",ub=x.forwardRef((e,t)=>{const{__scopeContextMenu:r,disabled:n=!1,...i}=e,o=q2(lb,r),a=Uu(r),s=x.useRef({x:0,y:0}),l=x.useRef({getBoundingClientRect:()=>DOMRect.fromRect({width:0,height:0,...s.current})}),u=x.useRef(0),c=x.useCallback(()=>window.clearTimeout(u.current),[]),f=d=>{s.current={x:d.clientX,y:d.clientY},o.onOpenChange(!0)};return x.useEffect(()=>c,[c]),x.useEffect(()=>void(n&&c()),[n,c]),x.createElement(x.Fragment,null,x.createElement(j2,ge({},a,{virtualRef:l})),x.createElement(Ie.span,ge({"data-state":o.open?"open":"closed","data-disabled":n?"":void 0},i,{ref:t,style:{WebkitTouchCallout:"none",...e.style},onContextMenu:n?e.onContextMenu:_e(e.onContextMenu,d=>{c(),f(d),d.preventDefault()}),onPointerDown:n?e.onPointerDown:_e(e.onPointerDown,js(d=>{c(),u.current=window.setTimeout(()=>f(d),700)})),onPointerMove:n?e.onPointerMove:_e(e.onPointerMove,js(c)),onPointerCancel:n?e.onPointerCancel:_e(e.onPointerCancel,js(c)),onPointerUp:n?e.onPointerUp:_e(e.onPointerUp,js(c))})))}),cb=e=>{const{__scopeContextMenu:t,...r}=e,n=Uu(t);return x.createElement(X2,ge({},n,r))},fb="ContextMenuContent",db=x.forwardRef((e,t)=>{const{__scopeContextMenu:r,...n}=e,i=q2(fb,r),o=Uu(r),a=x.useRef(!1);return x.createElement(K2,ge({},o,n,{ref:t,side:"right",sideOffset:2,align:"start",onCloseAutoFocus:s=>{var l;(l=e.onCloseAutoFocus)===null||l===void 0||l.call(e,s),!s.defaultPrevented&&a.current&&s.preventDefault(),a.current=!1},onInteractOutside:s=>{var l;(l=e.onInteractOutside)===null||l===void 0||l.call(e,s),!s.defaultPrevented&&!i.modal&&(a.current=!0)},style:{...e.style,"--radix-context-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-context-menu-content-available-width":"var(--radix-popper-available-width)","--radix-context-menu-content-available-height":"var(--radix-popper-available-height)","--radix-context-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-context-menu-trigger-height":"var(--radix-popper-anchor-height)"}}))});function js(e){return t=>t.pointerType!=="mouse"?e(t):void 0}const hb=sb,pb=ub,gb=cb,mb=db,Q2=x.createContext({dragDropManager:void 0});function nr(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}var x1=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),Gc=function(){return Math.random().toString(36).substring(7).split("").join(".")},w1={INIT:"@@redux/INIT"+Gc(),REPLACE:"@@redux/REPLACE"+Gc(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+Gc()}};function vb(e){if(typeof e!="object"||e===null)return!1;for(var t=e;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function Z2(e,t,r){var n;if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(nr(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(nr(1));return r(Z2)(e,t)}if(typeof e!="function")throw new Error(nr(2));var i=e,o=t,a=[],s=a,l=!1;function u(){s===a&&(s=a.slice())}function c(){if(l)throw new Error(nr(3));return o}function f(p){if(typeof p!="function")throw new Error(nr(4));if(l)throw new Error(nr(5));var g=!0;return u(),s.push(p),function(){if(g){if(l)throw new Error(nr(6));g=!1,u();var w=s.indexOf(p);s.splice(w,1),a=null}}}function d(p){if(!vb(p))throw new Error(nr(7));if(typeof p.type>"u")throw new Error(nr(8));if(l)throw new Error(nr(9));try{l=!0,o=i(o,p)}finally{l=!1}for(var g=a=s,v=0;vn&&n[i]?n[i]:r||null,e)}function yb(e,t){return e.filter(r=>r!==t)}function J2(e){return typeof e=="object"}function Eb(e,t){const r=new Map,n=o=>{r.set(o,r.has(o)?r.get(o)+1:1)};e.forEach(n),t.forEach(n);const i=[];return r.forEach((o,a)=>{o===1&&i.push(a)}),i}function _b(e,t){return e.filter(r=>t.indexOf(r)>-1)}const ch="dnd-core/INIT_COORDS",Hu="dnd-core/BEGIN_DRAG",fh="dnd-core/PUBLISH_DRAG_SOURCE",Vu="dnd-core/HOVER",Wu="dnd-core/DROP",zu="dnd-core/END_DRAG";function y1(e,t){return{type:ch,payload:{sourceClientOffset:t||null,clientOffset:e||null}}}const Sb={type:ch,payload:{clientOffset:null,sourceClientOffset:null}};function Tb(e){return function(r=[],n={publishSource:!0}){const{publishSource:i=!0,clientOffset:o,getSourceClientOffset:a}=n,s=e.getMonitor(),l=e.getRegistry();e.dispatch(y1(o)),Cb(r,s,l);const u=Ob(r,s);if(u==null){e.dispatch(Sb);return}let c=null;if(o){if(!a)throw new Error("getSourceClientOffset must be defined");Ab(a),c=a(u)}e.dispatch(y1(o,c));const d=l.getSource(u).beginDrag(s,u);if(d==null)return;Rb(d),l.pinSource(u);const h=l.getSourceType(u);return{type:Hu,payload:{itemType:h,item:d,sourceId:u,clientOffset:o||null,sourceClientOffset:c||null,isSourcePublic:!!i}}}}function Cb(e,t,r){Fe(!t.isDragging(),"Cannot call beginDrag while dragging."),e.forEach(function(n){Fe(r.getSource(n),"Expected sourceIds to be registered.")})}function Ab(e){Fe(typeof e=="function","When clientOffset is provided, getSourceClientOffset must be a function.")}function Rb(e){Fe(J2(e),"Item must be an object.")}function Ob(e,t){let r=null;for(let n=e.length-1;n>=0;n--)if(t.canDragSource(e[n])){r=e[n];break}return r}function Fb(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Db(e){for(var t=1;t{const l=bb(a,s,i,n),u={type:Wu,payload:{dropResult:Db({},r,l)}};e.dispatch(u)})}}function Ib(e){Fe(e.isDragging(),"Cannot call drop while not dragging."),Fe(!e.didDrop(),"Cannot call drop twice during one drag operation.")}function bb(e,t,r,n){const i=r.getTarget(e);let o=i?i.drop(n,e):void 0;return kb(o),typeof o>"u"&&(o=t===0?{}:n.getDropResult()),o}function kb(e){Fe(typeof e>"u"||J2(e),"Drop result must either be an object or undefined.")}function $b(e){const t=e.getTargetIds().filter(e.canDropOnTarget,e);return t.reverse(),t}function Nb(e){return function(){const r=e.getMonitor(),n=e.getRegistry();Mb(r);const i=r.getSourceId();return i!=null&&(n.getSource(i,!0).endDrag(r,i),n.unpinSource()),{type:zu}}}function Mb(e){Fe(e.isDragging(),"Cannot call endDrag while not dragging.")}function p0(e,t){return t===null?e===null:Array.isArray(e)?e.some(r=>r===t):e===t}function Lb(e){return function(r,{clientOffset:n}={}){Bb(r);const i=r.slice(0),o=e.getMonitor(),a=e.getRegistry(),s=o.getItemType();return Hb(i,a,s),Ub(i,o,a),Vb(i,o,a),{type:Vu,payload:{targetIds:i,clientOffset:n||null}}}}function Bb(e){Fe(Array.isArray(e),"Expected targetIds to be an array.")}function Ub(e,t,r){Fe(t.isDragging(),"Cannot call hover while not dragging."),Fe(!t.didDrop(),"Cannot call hover after drop.");for(let n=0;n=0;n--){const i=e[n],o=t.getTargetType(i);p0(o,r)||e.splice(n,1)}}function Vb(e,t,r){e.forEach(function(n){r.getTarget(n).hover(t,n)})}function Wb(e){return function(){if(e.getMonitor().isDragging())return{type:fh}}}function zb(e){return{beginDrag:Tb(e),publishDragSource:Wb(e),hover:Lb(e),drop:Pb(e),endDrag:Nb(e)}}class Gb{receiveBackend(t){this.backend=t}getMonitor(){return this.monitor}getBackend(){return this.backend}getRegistry(){return this.monitor.registry}getActions(){const t=this,{dispatch:r}=this.store;function n(o){return(...a)=>{const s=o.apply(t,a);typeof s<"u"&&r(s)}}const i=zb(this);return Object.keys(i).reduce((o,a)=>{const s=i[a];return o[a]=n(s),o},{})}dispatch(t){this.store.dispatch(t)}constructor(t,r){this.isSetUp=!1,this.handleRefCountChange=()=>{const n=this.store.getState().refCount>0;this.backend&&(n&&!this.isSetUp?(this.backend.setup(),this.isSetUp=!0):!n&&this.isSetUp&&(this.backend.teardown(),this.isSetUp=!1))},this.store=t,this.monitor=r,t.subscribe(this.handleRefCountChange)}}function jb(e,t){return{x:e.x+t.x,y:e.y+t.y}}function ey(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Xb(e){const{clientOffset:t,initialClientOffset:r,initialSourceClientOffset:n}=e;return!t||!r||!n?null:ey(jb(t,n),r)}function Kb(e){const{clientOffset:t,initialClientOffset:r}=e;return!t||!r?null:ey(t,r)}const Ca=[],dh=[];Ca.__IS_NONE__=!0;dh.__IS_ALL__=!0;function Yb(e,t){return e===Ca?!1:e===dh||typeof t>"u"?!0:_b(t,e).length>0}class qb{subscribeToStateChange(t,r={}){const{handlerIds:n}=r;Fe(typeof t=="function","listener must be a function."),Fe(typeof n>"u"||Array.isArray(n),"handlerIds, when specified, must be an array of strings.");let i=this.store.getState().stateId;const o=()=>{const a=this.store.getState(),s=a.stateId;try{s===i||s===i+1&&!Yb(a.dirtyHandlerIds,n)||t()}finally{i=s}};return this.store.subscribe(o)}subscribeToOffsetChange(t){Fe(typeof t=="function","listener must be a function.");let r=this.store.getState().dragOffset;const n=()=>{const i=this.store.getState().dragOffset;i!==r&&(r=i,t())};return this.store.subscribe(n)}canDragSource(t){if(!t)return!1;const r=this.registry.getSource(t);return Fe(r,`Expected to find a valid source. sourceId=${t}`),this.isDragging()?!1:r.canDrag(this,t)}canDropOnTarget(t){if(!t)return!1;const r=this.registry.getTarget(t);if(Fe(r,`Expected to find a valid target. targetId=${t}`),!this.isDragging()||this.didDrop())return!1;const n=this.registry.getTargetType(t),i=this.getItemType();return p0(n,i)&&r.canDrop(this,t)}isDragging(){return!!this.getItemType()}isDraggingSource(t){if(!t)return!1;const r=this.registry.getSource(t,!0);if(Fe(r,`Expected to find a valid source. sourceId=${t}`),!this.isDragging()||!this.isSourcePublic())return!1;const n=this.registry.getSourceType(t),i=this.getItemType();return n!==i?!1:r.isDragging(this,t)}isOverTarget(t,r={shallow:!1}){if(!t)return!1;const{shallow:n}=r;if(!this.isDragging())return!1;const i=this.registry.getTargetType(t),o=this.getItemType();if(o&&!p0(i,o))return!1;const a=this.getTargetIds();if(!a.length)return!1;const s=a.indexOf(t);return n?s===a.length-1:s>-1}getItemType(){return this.store.getState().dragOperation.itemType}getItem(){return this.store.getState().dragOperation.item}getSourceId(){return this.store.getState().dragOperation.sourceId}getTargetIds(){return this.store.getState().dragOperation.targetIds}getDropResult(){return this.store.getState().dragOperation.dropResult}didDrop(){return this.store.getState().dragOperation.didDrop}isSourcePublic(){return!!this.store.getState().dragOperation.isSourcePublic}getInitialClientOffset(){return this.store.getState().dragOffset.initialClientOffset}getInitialSourceClientOffset(){return this.store.getState().dragOffset.initialSourceClientOffset}getClientOffset(){return this.store.getState().dragOffset.clientOffset}getSourceClientOffset(){return Xb(this.store.getState().dragOffset)}getDifferenceFromInitialOffset(){return Kb(this.store.getState().dragOffset)}constructor(t,r){this.store=t,this.registry=r}}const E1=typeof global<"u"?global:self,ty=E1.MutationObserver||E1.WebKitMutationObserver;function ry(e){return function(){const r=setTimeout(i,0),n=setInterval(i,50);function i(){clearTimeout(r),clearInterval(n),e()}}}function Qb(e){let t=1;const r=new ty(e),n=document.createTextNode("");return r.observe(n,{characterData:!0}),function(){t=-t,n.data=t}}const Zb=typeof ty=="function"?Qb:ry;class Jb{enqueueTask(t){const{queue:r,requestFlush:n}=this;r.length||(n(),this.flushing=!0),r[r.length]=t}constructor(){this.queue=[],this.pendingErrors=[],this.flushing=!1,this.index=0,this.capacity=1024,this.flush=()=>{const{queue:t}=this;for(;this.indexthis.capacity){for(let n=0,i=t.length-this.index;n{this.pendingErrors.push(t),this.requestErrorThrow()},this.requestFlush=Zb(this.flush),this.requestErrorThrow=ry(()=>{if(this.pendingErrors.length)throw this.pendingErrors.shift()})}}class e8{call(){try{this.task&&this.task()}catch(t){this.onError(t)}finally{this.task=null,this.release(this)}}constructor(t,r){this.onError=t,this.release=r,this.task=null}}class t8{create(t){const r=this.freeTasks,n=r.length?r.pop():new e8(this.onError,i=>r[r.length]=i);return n.task=t,n}constructor(t){this.onError=t,this.freeTasks=[]}}const ny=new Jb,r8=new t8(ny.registerPendingError);function n8(e){ny.enqueueTask(r8.create(e))}const hh="dnd-core/ADD_SOURCE",ph="dnd-core/ADD_TARGET",gh="dnd-core/REMOVE_SOURCE",Gu="dnd-core/REMOVE_TARGET";function i8(e){return{type:hh,payload:{sourceId:e}}}function o8(e){return{type:ph,payload:{targetId:e}}}function a8(e){return{type:gh,payload:{sourceId:e}}}function s8(e){return{type:Gu,payload:{targetId:e}}}function l8(e){Fe(typeof e.canDrag=="function","Expected canDrag to be a function."),Fe(typeof e.beginDrag=="function","Expected beginDrag to be a function."),Fe(typeof e.endDrag=="function","Expected endDrag to be a function.")}function u8(e){Fe(typeof e.canDrop=="function","Expected canDrop to be a function."),Fe(typeof e.hover=="function","Expected hover to be a function."),Fe(typeof e.drop=="function","Expected beginDrag to be a function.")}function g0(e,t){if(t&&Array.isArray(e)){e.forEach(r=>g0(r,!1));return}Fe(typeof e=="string"||typeof e=="symbol",t?"Type can only be a string, a symbol, or an array of either.":"Type can only be a string or a symbol.")}var sr;(function(e){e.SOURCE="SOURCE",e.TARGET="TARGET"})(sr||(sr={}));let c8=0;function f8(){return c8++}function d8(e){const t=f8().toString();switch(e){case sr.SOURCE:return`S${t}`;case sr.TARGET:return`T${t}`;default:throw new Error(`Unknown Handler Role: ${e}`)}}function _1(e){switch(e[0]){case"S":return sr.SOURCE;case"T":return sr.TARGET;default:throw new Error(`Cannot parse handler ID: ${e}`)}}function S1(e,t){const r=e.entries();let n=!1;do{const{done:i,value:[,o]}=r.next();if(o===t)return!0;n=!!i}while(!n);return!1}class h8{addSource(t,r){g0(t),l8(r);const n=this.addHandler(sr.SOURCE,t,r);return this.store.dispatch(i8(n)),n}addTarget(t,r){g0(t,!0),u8(r);const n=this.addHandler(sr.TARGET,t,r);return this.store.dispatch(o8(n)),n}containsHandler(t){return S1(this.dragSources,t)||S1(this.dropTargets,t)}getSource(t,r=!1){return Fe(this.isSourceId(t),"Expected a valid source ID."),r&&t===this.pinnedSourceId?this.pinnedSource:this.dragSources.get(t)}getTarget(t){return Fe(this.isTargetId(t),"Expected a valid target ID."),this.dropTargets.get(t)}getSourceType(t){return Fe(this.isSourceId(t),"Expected a valid source ID."),this.types.get(t)}getTargetType(t){return Fe(this.isTargetId(t),"Expected a valid target ID."),this.types.get(t)}isSourceId(t){return _1(t)===sr.SOURCE}isTargetId(t){return _1(t)===sr.TARGET}removeSource(t){Fe(this.getSource(t),"Expected an existing source."),this.store.dispatch(a8(t)),n8(()=>{this.dragSources.delete(t),this.types.delete(t)})}removeTarget(t){Fe(this.getTarget(t),"Expected an existing target."),this.store.dispatch(s8(t)),this.dropTargets.delete(t),this.types.delete(t)}pinSource(t){const r=this.getSource(t);Fe(r,"Expected an existing source."),this.pinnedSourceId=t,this.pinnedSource=r}unpinSource(){Fe(this.pinnedSource,"No source is pinned at the time."),this.pinnedSourceId=null,this.pinnedSource=null}addHandler(t,r,n){const i=d8(t);return this.types.set(i,r),t===sr.SOURCE?this.dragSources.set(i,n):t===sr.TARGET&&this.dropTargets.set(i,n),i}constructor(t){this.types=new Map,this.dragSources=new Map,this.dropTargets=new Map,this.pinnedSourceId=null,this.pinnedSource=null,this.store=t}}const p8=(e,t)=>e===t;function g8(e,t){return!e&&!t?!0:!e||!t?!1:e.x===t.x&&e.y===t.y}function m8(e,t,r=p8){if(e.length!==t.length)return!1;for(let n=0;n0||!m8(r,n)))return Ca;const a=n[n.length-1],s=r[r.length-1];return a!==s&&(a&&i.push(a),s&&i.push(s)),i}function x8(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w8(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function I8(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,o;for(o=0;o=0)&&(r[i]=e[i]);return r}let C1=0;const ul=Symbol.for("__REACT_DND_CONTEXT_INSTANCE__");var b8=x.memo(function(t){var{children:r}=t,n=P8(t,["children"]);const[i,o]=k8(n);return x.useEffect(()=>{if(o){const a=iy();return++C1,()=>{--C1===0&&(a[ul]=null)}}},[]),X(Q2.Provider,{value:i,children:r})});function k8(e){if("manager"in e)return[{dragDropManager:e.manager},!1];const t=$8(e.backend,e.context,e.options,e.debugMode),r=!e.context;return[t,r]}function $8(e,t=iy(),r,n){const i=t;return i[ul]||(i[ul]={dragDropManager:F8(e,t,r,n)}),i[ul]}function iy(){return typeof global<"u"?global:window}var N8=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,i,o;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(i=n;i--!==0;)if(!e(t[i],r[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(o=Object.keys(t),n=o.length,n!==Object.keys(r).length)return!1;for(i=n;i--!==0;)if(!Object.prototype.hasOwnProperty.call(r,o[i]))return!1;for(i=n;i--!==0;){var a=o[i];if(!e(t[a],r[a]))return!1}return!0}return t!==t&&r!==r};const M8=qa(N8),fi=typeof window<"u"?x.useLayoutEffect:x.useEffect;function L8(e,t,r){const[n,i]=x.useState(()=>t(e)),o=x.useCallback(()=>{const a=t(e);M8(n,a)||(i(a),r&&r())},[n,e,r]);return fi(o),[n,o]}function B8(e,t,r){const[n,i]=L8(e,t,r);return fi(function(){const a=e.getHandlerId();if(a!=null)return e.subscribeToStateChange(i,{handlerIds:[a]})},[e,i]),n}function oy(e,t,r){return B8(t,e||(()=>({})),()=>r.reconnect())}function ay(e,t){const r=[...t||[]];return t==null&&typeof e!="function"&&r.push(e),x.useMemo(()=>typeof e=="function"?e():e,r)}function U8(e){return x.useMemo(()=>e.hooks.dragSource(),[e])}function H8(e){return x.useMemo(()=>e.hooks.dragPreview(),[e])}let jc=!1,Xc=!1;class V8{receiveHandlerId(t){this.sourceId=t}getHandlerId(){return this.sourceId}canDrag(){Fe(!jc,"You may not call monitor.canDrag() inside your canDrag() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return jc=!0,this.internalMonitor.canDragSource(this.sourceId)}finally{jc=!1}}isDragging(){if(!this.sourceId)return!1;Fe(!Xc,"You may not call monitor.isDragging() inside your isDragging() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor");try{return Xc=!0,this.internalMonitor.isDraggingSource(this.sourceId)}finally{Xc=!1}}subscribeToStateChange(t,r){return this.internalMonitor.subscribeToStateChange(t,r)}isDraggingSource(t){return this.internalMonitor.isDraggingSource(t)}isOverTarget(t,r){return this.internalMonitor.isOverTarget(t,r)}getTargetIds(){return this.internalMonitor.getTargetIds()}isSourcePublic(){return this.internalMonitor.isSourcePublic()}getSourceId(){return this.internalMonitor.getSourceId()}subscribeToOffsetChange(t){return this.internalMonitor.subscribeToOffsetChange(t)}canDragSource(t){return this.internalMonitor.canDragSource(t)}canDropOnTarget(t){return this.internalMonitor.canDropOnTarget(t)}getItemType(){return this.internalMonitor.getItemType()}getItem(){return this.internalMonitor.getItem()}getDropResult(){return this.internalMonitor.getDropResult()}didDrop(){return this.internalMonitor.didDrop()}getInitialClientOffset(){return this.internalMonitor.getInitialClientOffset()}getInitialSourceClientOffset(){return this.internalMonitor.getInitialSourceClientOffset()}getSourceClientOffset(){return this.internalMonitor.getSourceClientOffset()}getClientOffset(){return this.internalMonitor.getClientOffset()}getDifferenceFromInitialOffset(){return this.internalMonitor.getDifferenceFromInitialOffset()}constructor(t){this.sourceId=null,this.internalMonitor=t.getMonitor()}}let Kc=!1;class W8{receiveHandlerId(t){this.targetId=t}getHandlerId(){return this.targetId}subscribeToStateChange(t,r){return this.internalMonitor.subscribeToStateChange(t,r)}canDrop(){if(!this.targetId)return!1;Fe(!Kc,"You may not call monitor.canDrop() inside your canDrop() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor");try{return Kc=!0,this.internalMonitor.canDropOnTarget(this.targetId)}finally{Kc=!1}}isOver(t){return this.targetId?this.internalMonitor.isOverTarget(this.targetId,t):!1}getItemType(){return this.internalMonitor.getItemType()}getItem(){return this.internalMonitor.getItem()}getDropResult(){return this.internalMonitor.getDropResult()}didDrop(){return this.internalMonitor.didDrop()}getInitialClientOffset(){return this.internalMonitor.getInitialClientOffset()}getInitialSourceClientOffset(){return this.internalMonitor.getInitialSourceClientOffset()}getSourceClientOffset(){return this.internalMonitor.getSourceClientOffset()}getClientOffset(){return this.internalMonitor.getClientOffset()}getDifferenceFromInitialOffset(){return this.internalMonitor.getDifferenceFromInitialOffset()}constructor(t){this.targetId=null,this.internalMonitor=t.getMonitor()}}function z8(e,t,r){const n=r.getRegistry(),i=n.addTarget(e,t);return[i,()=>n.removeTarget(i)]}function G8(e,t,r){const n=r.getRegistry(),i=n.addSource(e,t);return[i,()=>n.removeSource(i)]}function m0(e,t,r,n){let i=r?r.call(n,e,t):void 0;if(i!==void 0)return!!i;if(e===t)return!0;if(typeof e!="object"||!e||typeof t!="object"||!t)return!1;const o=Object.keys(e),a=Object.keys(t);if(o.length!==a.length)return!1;const s=Object.prototype.hasOwnProperty.bind(t);for(let l=0;l, or turn it into a drag source or a drop target itself.`)}function X8(e){return(t=null,r=null)=>{if(!x.isValidElement(t)){const o=t;return e(o,r),o}const n=t;return j8(n),K8(n,r?o=>e(o,r):e)}}function sy(e){const t={};return Object.keys(e).forEach(r=>{const n=e[r];if(r.endsWith("Ref"))t[r]=e[r];else{const i=X8(n);t[r]=()=>i}}),t}function A1(e,t){typeof e=="function"?e(t):e.current=t}function K8(e,t){const r=e.ref;return Fe(typeof r!="string","Cannot connect React DnD to an element with an existing string ref. Please convert it to use a callback ref instead, or wrap it into a or
    . Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs"),r?x.cloneElement(e,{ref:n=>{A1(r,n),A1(t,n)}}):x.cloneElement(e,{ref:t})}class Y8{receiveHandlerId(t){this.handlerId!==t&&(this.handlerId=t,this.reconnect())}get connectTarget(){return this.dragSource}get dragSourceOptions(){return this.dragSourceOptionsInternal}set dragSourceOptions(t){this.dragSourceOptionsInternal=t}get dragPreviewOptions(){return this.dragPreviewOptionsInternal}set dragPreviewOptions(t){this.dragPreviewOptionsInternal=t}reconnect(){const t=this.reconnectDragSource();this.reconnectDragPreview(t)}reconnectDragSource(){const t=this.dragSource,r=this.didHandlerIdChange()||this.didConnectedDragSourceChange()||this.didDragSourceOptionsChange();return r&&this.disconnectDragSource(),this.handlerId?t?(r&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragSource=t,this.lastConnectedDragSourceOptions=this.dragSourceOptions,this.dragSourceUnsubscribe=this.backend.connectDragSource(this.handlerId,t,this.dragSourceOptions)),r):(this.lastConnectedDragSource=t,r):r}reconnectDragPreview(t=!1){const r=this.dragPreview,n=t||this.didHandlerIdChange()||this.didConnectedDragPreviewChange()||this.didDragPreviewOptionsChange();if(n&&this.disconnectDragPreview(),!!this.handlerId){if(!r){this.lastConnectedDragPreview=r;return}n&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDragPreview=r,this.lastConnectedDragPreviewOptions=this.dragPreviewOptions,this.dragPreviewUnsubscribe=this.backend.connectDragPreview(this.handlerId,r,this.dragPreviewOptions))}}didHandlerIdChange(){return this.lastConnectedHandlerId!==this.handlerId}didConnectedDragSourceChange(){return this.lastConnectedDragSource!==this.dragSource}didConnectedDragPreviewChange(){return this.lastConnectedDragPreview!==this.dragPreview}didDragSourceOptionsChange(){return!m0(this.lastConnectedDragSourceOptions,this.dragSourceOptions)}didDragPreviewOptionsChange(){return!m0(this.lastConnectedDragPreviewOptions,this.dragPreviewOptions)}disconnectDragSource(){this.dragSourceUnsubscribe&&(this.dragSourceUnsubscribe(),this.dragSourceUnsubscribe=void 0)}disconnectDragPreview(){this.dragPreviewUnsubscribe&&(this.dragPreviewUnsubscribe(),this.dragPreviewUnsubscribe=void 0,this.dragPreviewNode=null,this.dragPreviewRef=null)}get dragSource(){return this.dragSourceNode||this.dragSourceRef&&this.dragSourceRef.current}get dragPreview(){return this.dragPreviewNode||this.dragPreviewRef&&this.dragPreviewRef.current}clearDragSource(){this.dragSourceNode=null,this.dragSourceRef=null}clearDragPreview(){this.dragPreviewNode=null,this.dragPreviewRef=null}constructor(t){this.hooks=sy({dragSource:(r,n)=>{this.clearDragSource(),this.dragSourceOptions=n||null,v0(r)?this.dragSourceRef=r:this.dragSourceNode=r,this.reconnectDragSource()},dragPreview:(r,n)=>{this.clearDragPreview(),this.dragPreviewOptions=n||null,v0(r)?this.dragPreviewRef=r:this.dragPreviewNode=r,this.reconnectDragPreview()}}),this.handlerId=null,this.dragSourceRef=null,this.dragSourceOptionsInternal=null,this.dragPreviewRef=null,this.dragPreviewOptionsInternal=null,this.lastConnectedHandlerId=null,this.lastConnectedDragSource=null,this.lastConnectedDragSourceOptions=null,this.lastConnectedDragPreview=null,this.lastConnectedDragPreviewOptions=null,this.backend=t}}class q8{get connectTarget(){return this.dropTarget}reconnect(){const t=this.didHandlerIdChange()||this.didDropTargetChange()||this.didOptionsChange();t&&this.disconnectDropTarget();const r=this.dropTarget;if(this.handlerId){if(!r){this.lastConnectedDropTarget=r;return}t&&(this.lastConnectedHandlerId=this.handlerId,this.lastConnectedDropTarget=r,this.lastConnectedDropTargetOptions=this.dropTargetOptions,this.unsubscribeDropTarget=this.backend.connectDropTarget(this.handlerId,r,this.dropTargetOptions))}}receiveHandlerId(t){t!==this.handlerId&&(this.handlerId=t,this.reconnect())}get dropTargetOptions(){return this.dropTargetOptionsInternal}set dropTargetOptions(t){this.dropTargetOptionsInternal=t}didHandlerIdChange(){return this.lastConnectedHandlerId!==this.handlerId}didDropTargetChange(){return this.lastConnectedDropTarget!==this.dropTarget}didOptionsChange(){return!m0(this.lastConnectedDropTargetOptions,this.dropTargetOptions)}disconnectDropTarget(){this.unsubscribeDropTarget&&(this.unsubscribeDropTarget(),this.unsubscribeDropTarget=void 0)}get dropTarget(){return this.dropTargetNode||this.dropTargetRef&&this.dropTargetRef.current}clearDropTarget(){this.dropTargetRef=null,this.dropTargetNode=null}constructor(t){this.hooks=sy({dropTarget:(r,n)=>{this.clearDropTarget(),this.dropTargetOptions=n,v0(r)?this.dropTargetRef=r:this.dropTargetNode=r,this.reconnect()}}),this.handlerId=null,this.dropTargetRef=null,this.dropTargetOptionsInternal=null,this.lastConnectedHandlerId=null,this.lastConnectedDropTarget=null,this.lastConnectedDropTargetOptions=null,this.backend=t}}function ko(){const{dragDropManager:e}=x.useContext(Q2);return Fe(e!=null,"Expected drag drop context"),e}function Q8(e,t){const r=ko(),n=x.useMemo(()=>new Y8(r.getBackend()),[r]);return fi(()=>(n.dragSourceOptions=e||null,n.reconnect(),()=>n.disconnectDragSource()),[n,e]),fi(()=>(n.dragPreviewOptions=t||null,n.reconnect(),()=>n.disconnectDragPreview()),[n,t]),n}function Z8(){const e=ko();return x.useMemo(()=>new V8(e),[e])}class J8{beginDrag(){const t=this.spec,r=this.monitor;let n=null;return typeof t.item=="object"?n=t.item:typeof t.item=="function"?n=t.item(r):n={},n??null}canDrag(){const t=this.spec,r=this.monitor;return typeof t.canDrag=="boolean"?t.canDrag:typeof t.canDrag=="function"?t.canDrag(r):!0}isDragging(t,r){const n=this.spec,i=this.monitor,{isDragging:o}=n;return o?o(i):r===t.getSourceId()}endDrag(){const t=this.spec,r=this.monitor,n=this.connector,{end:i}=t;i&&i(r.getItem(),r),n.reconnect()}constructor(t,r,n){this.spec=t,this.monitor=r,this.connector=n}}function ek(e,t,r){const n=x.useMemo(()=>new J8(e,t,r),[t,r]);return x.useEffect(()=>{n.spec=e},[e]),n}function tk(e){return x.useMemo(()=>{const t=e.type;return Fe(t!=null,"spec.type must be defined"),t},[e])}function rk(e,t,r){const n=ko(),i=ek(e,t,r),o=tk(e);fi(function(){if(o!=null){const[s,l]=G8(o,i,n);return t.receiveHandlerId(s),r.receiveHandlerId(s),l}},[n,t,r,i,o])}function nk(e,t){const r=ay(e,t);Fe(!r.begin,"useDrag::spec.begin was deprecated in v14. Replace spec.begin() with spec.item(). (see more here - https://react-dnd.github.io/react-dnd/docs/api/use-drag)");const n=Z8(),i=Q8(r.options,r.previewOptions);return rk(r,n,i),[oy(r.collect,n,i),U8(i),H8(i)]}function ik(e){return x.useMemo(()=>e.hooks.dropTarget(),[e])}function ok(e){const t=ko(),r=x.useMemo(()=>new q8(t.getBackend()),[t]);return fi(()=>(r.dropTargetOptions=e||null,r.reconnect(),()=>r.disconnectDropTarget()),[e]),r}function ak(){const e=ko();return x.useMemo(()=>new W8(e),[e])}function sk(e){const{accept:t}=e;return x.useMemo(()=>(Fe(e.accept!=null,"accept must be defined"),Array.isArray(t)?t:[t]),[t])}class lk{canDrop(){const t=this.spec,r=this.monitor;return t.canDrop?t.canDrop(r.getItem(),r):!0}hover(){const t=this.spec,r=this.monitor;t.hover&&t.hover(r.getItem(),r)}drop(){const t=this.spec,r=this.monitor;if(t.drop)return t.drop(r.getItem(),r)}constructor(t,r){this.spec=t,this.monitor=r}}function uk(e,t){const r=x.useMemo(()=>new lk(e,t),[t]);return x.useEffect(()=>{r.spec=e},[e]),r}function ck(e,t,r){const n=ko(),i=uk(e,t),o=sk(e);fi(function(){const[s,l]=z8(o,i,n);return t.receiveHandlerId(s),r.receiveHandlerId(s),l},[n,t,i,r,o.map(a=>a.toString()).join("|")])}function fk(e,t){const r=ay(e,t),n=ak(),i=ok(r.options);return ck(r,n,i),[oy(r.collect,n,i),ik(i)]}const ly=new RegExp("^([0-9]+)(\\s)([kKmMbBtT])$"),ru=new RegExp("^\\d{4}$"),dk=new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}|\\d{4}-\\d{2}-\\d{2}$");function hk({column:e,table:t,numberOfColumns:r}){function n(f){if(!f)return null;const d=new Date(f),h=d.toISOString().split("T")[0],m=d.toTimeString().split(" ")[0];return`${h} ${m}`}const i=t.getPreFilteredRowModel().flatRows.map(f=>f.original[e.id]),o=i.every(f=>typeof f=="string"||f===null),a=i.every(f=>typeof f=="number"||ly.test(f)||f===null||f===""),s=i.some(f=>typeof f=="string"&&f.includes(" ")),l=e.getFilterValue();let u="date";const c=i.every(f=>{const d=f==null?void 0:f.toString().replace(/[^0-9]/g,"").trim();return dk.test(f==null?void 0:f.toString())&&(u="datetime-local"),ru.test(f==null?void 0:f.toString())&&(u="number"),(d==null?void 0:d.length)>=4&&(Yl(e.id)||e.id.toLowerCase()==="index"&&!s)});return c&&u==="number"?Ce("div",{className:"flex gap-2 h-6",children:[X("input",{type:u,value:(l==null?void 0:l[0])??"",onChange:f=>{e.setFilterValue(d=>[`${f.target.value}`,`${d==null?void 0:d[1]}`])},min:i.reduce((f,d)=>Math.min(f,parseInt(d,10)),1/0),max:i.reduce((f,d)=>Math.max(f,parseInt(d,10)),-1/0),placeholder:"Start year",className:"_input",title:"Start year"}),X("input",{type:u,value:(l==null?void 0:l[1])??"",onChange:f=>{e.setFilterValue(d=>[`${d==null?void 0:d[0]}`,`${f.target.value}`])},min:i.reduce((f,d)=>Math.min(f,parseInt(d,10)),1/0),max:i.reduce((f,d)=>Math.max(f,parseInt(d,10)),-1/0),placeholder:"End year",className:"_input",title:"End year"})]}):c&&u!=="number"?Ce("div",{className:"flex gap-2 h-6",children:[X("input",{type:u,value:n(l==null?void 0:l[0])??"",onChange:f=>{const d=new Date(f.target.value).getTime();e.setFilterValue(h=>[d,h==null?void 0:h[1]])},placeholder:"Start date",className:"_input",title:"Start date"}),X("input",{type:u,value:n(l==null?void 0:l[1])??"",onChange:f=>{const d=new Date(f.target.value).getTime();e.setFilterValue(h=>[h==null?void 0:h[0],d])},placeholder:"End date",className:"_input",title:"End date"})]}):a?Ce("div",{className:"flex gap-0.5 h-6",children:[X("input",{type:"number",value:(l==null?void 0:l[0])??"",onChange:f=>e.setFilterValue(d=>[f.target.value,d==null?void 0:d[1]]),placeholder:"Min",className:"_input p-0.5",title:"Min"}),X("input",{type:"number",value:(l==null?void 0:l[1])??"",onChange:f=>e.setFilterValue(d=>[d==null?void 0:d[0],f.target.value]),placeholder:"Max",className:"_input p-0.5",title:"Max"})]}):o?X("div",{className:"h-6",children:X("input",{type:"text",value:l??"",onChange:f=>e.setFilterValue(f.target.value),placeholder:"Search...",className:"_input",title:"Search"})}):X("div",{className:"h-6"})}const pk=(e,t,r)=>(r.splice(r.indexOf(t),0,r.splice(r.indexOf(e),1)[0]),[...r]),gk=({header:e,table:t,advanced:r,idx:n,lockFirstColumn:i,setLockFirstColumn:o})=>{const{getState:a,setColumnOrder:s}=t,{columnOrder:l}=a(),{column:u}=e,[,c]=fk({accept:"column",drop:p=>{const g=pk(p.id,u.id,l);s(g)}}),[{isDragging:f},d,h]=nk({collect:p=>({isDragging:p.isDragging()}),item:()=>u,type:"column"}),m=()=>X("div",{ref:h,className:"flex gap-1 flex-col",children:e.isPlaceholder?null:Ce(q1,{children:[Ce("div",{className:"font-bold uppercase text-grey-700 dark:text-white tracking-widest flex gap-2 whitespace-nowrap justify-between",children:[Ce("div",{onClick:u.getToggleSortingHandler(),className:Nt("flex gap-1",{"cursor-pointer select-none":u.getCanSort()}),children:[Kf(u.columnDef.header,e.getContext()),u.getCanSort()&&Ce("div",{className:"flex flex-col gap-0.5 items-center justify-center",children:[X("button",{className:Nt({"text-[#669DCB]":u.getIsSorted()==="asc","text-grey-600":u.getIsSorted()!=="asc"}),children:X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"6",height:"4",fill:"none",viewBox:"0 0 11 5",children:X("path",{fill:"currentColor",d:"M10.333 5l-5-5-5 5"})})}),X("button",{className:Nt({"text-[#669DCB]":e.column.getIsSorted()==="desc","text-grey-600":e.column.getIsSorted()!=="desc"}),children:X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"6",height:"4",fill:"none",viewBox:"0 0 11 5",children:X("path",{fill:"currentColor",d:"M.333 0l5 5 5-5"})})})]})]}),r&&u.id!=="select"&&X("button",{ref:d,className:"text-grey-600 hover:text-grey-800 dark:hover:text-white",children:X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"11",fill:"none",viewBox:"0 0 17 16",children:X("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",d:"M3.667 6l-2 2 2 2M6.333 3.333l2-2 2 2M10.333 12.667l-2 2-2-2M13 6l2 2-2 2M1.667 8H15M8.333 1.333v13.334"})})})]}),r&&u.getCanFilter()?X("div",{children:X(hk,{column:u,table:t,numberOfColumns:(l==null?void 0:l.length)??0})}):null]})});return Ce("th",{className:Nt("h-[70px] p-4 sticky",{"left-0 z-50 bg-white dark:bg-grey-900":n===0&&i}),colSpan:e.colSpan,style:{width:e.getSize()+10,opacity:f?.5:1},ref:c,children:[n===0?Ce(hb,{children:[X(pb,{asChild:!0,children:m()}),X(gb,{children:X(mb,{className:"bg-white text-black dark:text-white dark:bg-grey-900 border border-grey-200 dark:border-grey-800 rounded-md shadow-lg p-2 z-50 text-xs",children:X("div",{className:"flex flex-col gap-2",children:Ce("button",{onClick:()=>{o(!i)},className:"hover:bg-grey-300 dark:hover:bg-grey-800 rounded-md p-2",children:[i?"Unlock":"Lock"," first column"]})})})})]}):m(),X("button",{className:"resizer bg-grey-300/20 dark:hover:bg-white absolute top-0 right-0 w-0.5 h-full",onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler()})]})};function mk({open:e,close:t}){const r=window.download_path||"~/OpenBBUserData/exports";return Ce(jv,{open:e,onOpenChange:t,children:[Ce("div",{id:"loading",className:"saving",children:[X("div",{id:"loading_text",className:"loading_text"}),X("div",{id:"loader",className:"loader"})]}),X(Xv,{onClick:t,className:"_modal-overlay"}),Ce(Kv,{className:"_modal",children:[X(Wf,{children:X(ql,{})}),X(Wf,{className:"_modal-close",onClick:t,style:{float:"right",marginTop:20},children:X(ql,{className:"w-6 h-6"})}),X(Yv,{className:"_modal-title",children:"Success"}),Ce("div",{id:"popup_title",className:"popup_content",style:{padding:"0px 2px 2px 5px",marginTop:5},children:[X("div",{style:{display:"flex",flexDirection:"column",gap:0,fontSize:14},children:X("div",{children:Ce("label",{htmlFor:"title_text",children:[X("b",{children:window.title})," has been downloaded to",X("br",{}),X("br",{}),X("a",{style:{color:"#FFDD00",marginTop:15},href:`${r}`,onClick:n=>{n.preventDefault(),window.pywry.open_file(r)},children:r})]})})}),X("div",{style:{float:"right",marginTop:20},children:X("button",{className:"_btn",style:{padding:"8px 16px",width:"100%"},onClick:t,children:"Close"})})]})]})]})}function vk({columns:e,data:t,type:r,setType:n,downloadFinished:i}){const o=()=>{switch(r){case"csv":Qg("csv",e,t,i);break;case"xlsx":Qg("xlsx",e,t,i);break;case"png":sP("table",i);break}};return Ce("div",{className:"flex gap-2 items-center",children:[X(Yi,{labelType:"row",value:r,onChange:a=>{n(a)},label:"Type",placeholder:"Select type",groups:[{label:"Type",items:w0.map(a=>({label:a,value:a}))}]}),X("button",{onClick:o,className:"_btn",children:"Export"})]})}const uy="DropdownMenu",[xk,a$]=ln(uy,[Bu]),Oi=Bu(),[wk,cy]=xk(uy),yk=e=>{const{__scopeDropdownMenu:t,children:r,dir:n,open:i,defaultOpen:o,onOpenChange:a,modal:s=!0}=e,l=Oi(t),u=x.useRef(null),[c=!1,f]=vo({prop:i,defaultProp:o,onChange:a});return x.createElement(wk,{scope:t,triggerId:Yr(),triggerRef:u,contentId:Yr(),open:c,onOpenChange:f,onOpenToggle:x.useCallback(()=>f(d=>!d),[f]),modal:s},x.createElement(G2,ge({},l,{open:c,onOpenChange:f,dir:n,modal:s}),r))},Ek="DropdownMenuTrigger",_k=x.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,disabled:n=!1,...i}=e,o=cy(Ek,r),a=Oi(r);return x.createElement(j2,ge({asChild:!0},a),x.createElement(Ie.button,ge({type:"button",id:o.triggerId,"aria-haspopup":"menu","aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?"open":"closed","data-disabled":n?"":void 0,disabled:n},i,{ref:xd(t,o.triggerRef),onPointerDown:_e(e.onPointerDown,s=>{!n&&s.button===0&&s.ctrlKey===!1&&(o.onOpenToggle(),o.open||s.preventDefault())}),onKeyDown:_e(e.onKeyDown,s=>{n||(["Enter"," "].includes(s.key)&&o.onOpenToggle(),s.key==="ArrowDown"&&o.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(s.key)&&s.preventDefault())})})))}),Sk=e=>{const{__scopeDropdownMenu:t,...r}=e,n=Oi(t);return x.createElement(X2,ge({},n,r))},Tk="DropdownMenuContent",Ck=x.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...n}=e,i=cy(Tk,r),o=Oi(r),a=x.useRef(!1);return x.createElement(K2,ge({id:i.contentId,"aria-labelledby":i.triggerId},o,n,{ref:t,onCloseAutoFocus:_e(e.onCloseAutoFocus,s=>{var l;a.current||(l=i.triggerRef.current)===null||l===void 0||l.focus(),a.current=!1,s.preventDefault()}),onInteractOutside:_e(e.onInteractOutside,s=>{const l=s.detail.originalEvent,u=l.button===0&&l.ctrlKey===!0,c=l.button===2||u;(!i.modal||c)&&(a.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}}))}),Ak=x.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...n}=e,i=Oi(r);return x.createElement(rb,ge({},i,n,{ref:t}))}),Rk=x.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...n}=e,i=Oi(r);return x.createElement(nb,ge({},i,n,{ref:t}))}),Ok=x.forwardRef((e,t)=>{const{__scopeDropdownMenu:r,...n}=e,i=Oi(r);return x.createElement(ib,ge({},i,n,{ref:t}))}),Fk=yk,R1=_k,Dk=Sk,Pk=Ck,Ik=Ak,bk=Rk,Yc=Ok;function kk(e,t){x.useEffect(()=>{const r=n=>{!e.current||e.current.contains(n.target)||t(n)};return document.addEventListener("mousedown",r),document.addEventListener("touchstart",r),()=>{document.removeEventListener("mousedown",r),document.removeEventListener("touchstart",r)}},[e,t])}function O1({label:e,table:t,onlyIconTrigger:r=!1}){const[n,i]=x.useState(!1),o=x.useRef(null);kk(o,()=>i(!1)),x.useEffect(()=>{const s=l=>{l.key==="Escape"&&i(!1)};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[]);function a(){t.resetColumnFilters(),i(!1)}return Ce(Fk,{open:n,children:[r?X(R1,{title:"Filter columns",onClick:()=>i(!n),children:X("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"w-7 h-7",children:X("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 01-.659 1.591l-5.432 5.432a2.25 2.25 0 00-.659 1.591v2.927a2.25 2.25 0 01-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 00-.659-1.591L3.659 7.409A2.25 2.25 0 013 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0112 3z"})})}):Ce(Ik,{className:"flex flex-row items-center gap-2",children:[X(bk,{className:"whitespace-nowrap",children:e}),Ce(R1,{onClick:()=>i(!n),className:"bg-white text-black dark:bg-grey-900 dark:text-white whitespace-nowrap h-[36px] border-[1.5px] border-grey-700 rounded p-3 inline-flex items-center justify-center leading-none gap-[5px] shadow-[0_2px_10px] shadow-black/10 focus:shadow-[0_0_0_2px] focus:shadow-black data-[placeholder]:text-white outline-none","aria-label":e,children:[X("span",{children:"Filter columns"}),X(s0,{className:Nt({"transform rotate-180 duration-200 transition":n})})]})]}),X(Dk,{children:Ce(Pk,{sideOffset:10,ref:o,className:"z-50 bg-white/80 dark:bg-grey-900/80 backdrop-filter backdrop-blur flex flex-col gap-4 overflow-auto border-[1.5px] border-grey-700 rounded p-3 max-h-[500px] text-black dark:text-white",children:[X(Yc,{children:X("button",{className:"_btn w-full",onClick:a,children:"Clear Filters"})}),X(Yc,{children:Ce("label",{className:"flex items-center gap-2",children:[X("input",{type:"checkbox",checked:t.getIsAllColumnsVisible(),onChange:t.getToggleAllColumnsVisibilityHandler()}),"Toggle All"]})}),t.getAllLeafColumns().filter(s=>s.id!=="select").map(s=>X(Yc,{children:Ce("label",{className:"flex items-center gap-2",children:[X("input",{type:"checkbox",checked:s.getIsVisible(),onChange:s.getToggleVisibilityHandler()}),s.id]})},s.id))]})})]})}function fy(e){return typeof e!="number"?typeof e=="string"&&e.includes("All")?e:x0:e<1?x0:e}function $k({table:e,currentPage:t,setCurrentPage:r}){const n=e.getFilteredRowModel().rows.length||0;return Ce("div",{className:"hidden md:flex items-center gap-3",children:[X(Yi,{value:t,onChange:i=>{const o=fy(i);r(o),o.toString().includes("All")?e.setPageSize(n):e.setPageSize(o)},labelType:"row",label:"Rows per page",placeholder:"Select rows per page",groups:[{label:"Rows per page",items:[10,20,30,40,50,`All (${n})`].map(i=>({label:`${i}`,value:i}))}]}),Ce("span",{className:"flex items-center gap-1",children:[X("strong",{children:e.getState().pagination.pageIndex+1}),"of",X("strong",{children:e.getPageCount()})]}),Ce("div",{className:"hidden mdl:block",children:[X("button",{className:Nt("px-2",{"text-grey-400 dark:text-grey-700":!e.getCanPreviousPage(),"dark:text-white":e.getCanPreviousPage()}),onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:"<<"}),X("button",{className:Nt("px-2",{"text-grey-400 dark:text-grey-700":!e.getCanPreviousPage(),"dark:text-white":e.getCanPreviousPage()}),onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:"<"}),X("button",{className:Nt("px-2",{"text-grey-400 dark:text-grey-700":!e.getCanNextPage(),"dark:text-white":e.getCanNextPage()}),onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:">"}),X("button",{className:Nt("px-2",{"text-grey-400 dark:text-grey-700":!e.getCanNextPage(),"dark:text-white":e.getCanNextPage()}),onClick:()=>e.setPageIndex(e.getPageCount()-1),disabled:!e.getCanNextPage(),children:">>"})]})]})}const Nk=new Date,Mk=50,x0=30;function Lk(e,t){try{const r=e.hasOwnProperty("index")?"index":e.hasOwnProperty("Index")?"Index":null,n=r?e[r]:null,i=e[t],o=typeof i,a=i==null?void 0:i.toString().replace(/[^0-9]/g,""),s=(a==null?void 0:a.length)>=4&&(Yl(t)||t.toLowerCase()==="index"||n&&typeof n=="string"&&(n.toLowerCase().includes("date")||n.toLowerCase().includes("day")||n.toLowerCase().includes("time")||n.toLowerCase().includes("timestamp")||n.toLowerCase().includes("month")||n.toLowerCase().includes("week")||n.toLowerCase().includes("hour")||n.toLowerCase().includes("minute")));if(o==="string"&&i.startsWith("http")||!s)return(i==null?void 0:i.toString().length)??0;if(s&&!isNaN(new Date(i).getTime())&&!ru.test(i==null?void 0:i.toString())){if(typeof i=="string")return(i==null?void 0:i.toString().length)??0;try{const u=new Date(i);let c="";return u.getUTCHours()===0&&u.getUTCMinutes()===0&&u.getUTCSeconds()===0&&u.getMilliseconds()===0?c=u.toISOString().split("T")[0]:(c=u.toISOString(),c=`${c.split("T")[0]} ${c.split("T")[1].split(".")[0]}`),(c==null?void 0:c.toString().length)??0}catch{return(i==null?void 0:i.toString().length)??0}}return(i==null?void 0:i.toString().length)??0}catch{return 0}}const w0=["csv","xlsx","png"];function Bk({data:e,columns:t,title:r,initialTheme:n,cmd:i=""}){const[o,a]=Jo("exportType",w0[0]),[s,l]=x.useState(!1),[u,c]=JC(n),[f,d]=x.useState(u==="dark"),h=W=>{c(u),d(W)},[m,p]=Jo("rowsPerPage",x0,fy),[g,v]=Jo("advanced",!1),[w,y]=Jo("colors",!1),[E,b]=x.useState([]),[k,S]=x.useState(""),[C,A]=Jo("fontSize","1"),[L,B]=x.useState(!1),U=t.reduce((W,Q,le)=>(W[Q]=le{const ne=Math.max(...W.map($e=>Lk($e,Q)),le!=null&&le.length?(le==null?void 0:le.length)+8:0);return Math.min(200,ne*12)},ae=x.useMemo(()=>[...t.map((W,Q)=>({accessorKey:W,accessorFn:le=>{var ve,ut,gt;const me=le.hasOwnProperty("index")?"index":le.hasOwnProperty("Index")?"Index":t[0],Se=me?le[me]:null,ne=le[W],$e=((gt=(ut=(ve=ne==null?void 0:ne.toString())==null?void 0:ve.split("."))==null?void 0:ut[0])==null?void 0:gt.replace(/[^0-9]/g,""))??"",Pe=($e==null?void 0:$e.length)>=4&&(Yl(W)||W.toLowerCase()==="index"||Se&&typeof Se=="string"&&(Se.toLowerCase().includes("date")||Se.toLowerCase().includes("time")||Se.toLowerCase().includes("timestamp")||Se.toLowerCase().includes("month")||Se.toLowerCase().includes("week")||Se.toLowerCase().includes("hour")||Se.toLowerCase().includes("minute")));return Pe&&(ne==null?void 0:ne.length)===4&&ru.test(ne==null?void 0:ne.toString())?ne:Pe?typeof ne=="number"?ne:new Date(ne).getTime():ne},id:W,header:W,size:ee(e,W,W),footer:W,cell:({row:le})=>{var gt,bt,Br,$o;const me=le.original.hasOwnProperty("index")?"index":le.original.hasOwnProperty("Index")?"Index":t[0],Se=me?le.original[me]:null,ne=le.original[W],$e=typeof ne,Pe=((Br=(bt=(gt=ne==null?void 0:ne.toString())==null?void 0:gt.split("."))==null?void 0:bt[0])==null?void 0:Br.replace(/[^0-9]/g,""))??"",ve=(Pe==null?void 0:Pe.length)>=4&&(Yl(W)||W.toLowerCase()==="index"||Se&&typeof Se=="string"&&(Se.toLowerCase().includes("date")||Se.toLowerCase().includes("time")||Se.toLowerCase().includes("timestamp")));if($e==="string"&&ne.startsWith("http"))return X("a",{className:"_hyper-link",href:ne,target:"_blank",rel:"noreferrer",children:(ne==null?void 0:ne.length)>25?`${ne.substring(0,25)}...`:ne});if(ve&&(ne==null?void 0:ne.length)===4&&ru.test(ne==null?void 0:ne.toString()))return X("p",{children:ne});if(ve&&!isNaN(new Date(ne).getTime())){if(typeof ne=="string"){const Ze=ne.split("T")[0],We=($o=ne.split("T")[1])==null?void 0:$o.split(".")[0];return We==="00:00:00"?X("p",{children:Ze}):Ce("p",{children:[Ze," ",We]})}try{const Ze=new Date(ne);let We="";return Ze.getUTCHours()===0&&Ze.getUTCMinutes()===0&&Ze.getUTCSeconds()===0&&Ze.getMilliseconds()===0?We=Ze.toISOString().split("T")[0]:(We=Ze.toISOString(),We=`${We.split("T")[0]} ${We.split("T")[1].split(".")[0]}`),X("p",{children:We})}catch{return X("p",{children:ne})}}if($e==="number"||ly.test(ne==null?void 0:ne.toString())){let Ze=tP(ne,W);const We=Number(t0(ne));if(typeof Se=="string"&&n2(Se)){Ze=Number(t0(ne));const Fi=Ze<2?4:2;Ze=Ze.toLocaleString("en-US",{maximumFractionDigits:Fi,minimumFractionDigits:2})}return X("p",{className:Nt("whitespace-nowrap",{"text-black dark:text-white":!w,"text-[#16A34A]":We>0&&w,"text-[#F87171]":We<0&&w,"text-[#404040]":We===0&&w}),title:r2(ne).toString()??"",children:We!==0?We>0?`${Ze}`:`${Ze}`:Ze})}else if($e==="string")return X("div",{dangerouslySetInnerHTML:{__html:ZC(ne)}});return X("p",{children:ne})}}))],[g,w]),[he,Te]=x.useState(!1),[oe,ye]=x.useState(ae.map(W=>W.id)),te=()=>ye(t.map(W=>W.id)),O=x.useMemo(()=>{const W=oe.map(le=>le),Q=ae.map(le=>le.id);return!rP(W,Q)},[oe,ae]),M=aC({data:e,columns:ae,getCoreRowModel:YT(),getSortedRowModel:eC(),getFilteredRowModel:JT(),getPaginationRowModel:rC(),columnResizeMode:"onChange",onColumnVisibilityChange:G,onColumnOrderChange:ye,onSortingChange:b,onGlobalFilterChange:S,globalFilterFn:nP,state:{sorting:E,globalFilter:k,columnOrder:oe,columnVisibility:H},initialState:{pagination:{pageIndex:0,pageSize:typeof m=="string"?m.includes("All")?e==null?void 0:e.length:parseInt(m):m}}}),N=x.useRef(null),{rows:F}=M.getRowModel(),V=M.getVisibleFlatColumns(),[Y,J]=x.useState(!1);return x.useEffect(()=>{s&&(l(!1),J(!0))},[s]),Ce(q1,{children:[X(f5,{toast:{id:"max-columns",title:"Max 12 columns are visible by default",description:"You can change this by clicking on advanced and then top right 'Filter' button",status:"info"},open:L,setOpen:B}),X(mk,{open:Y,close:()=>J(!1)}),Ce("div",{ref:N,className:Nt("overflow-x-hidden h-screen"),children:[Ce("div",{className:"relative p-4",id:"table",children:[X("div",{className:"absolute -inset-0.5 bg-gradient-to-r rounded-md blur-md from-[#072e49]/30 via-[#0d345f]/30 to-[#0d3362]/30"}),Ce("div",{className:"border border-grey-500/60 dark:border-grey-200/60 bg-white dark:bg-grey-900 rounded overflow-hidden relative z-20",children:[Ce("div",{className:"_header relative gap-4 py-2 text-center text-xs flex items-center justify-between px-4 text-white",style:{fontSize:`${Number(C)*90}%`},children:[X("div",{className:"w-1/3",children:X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"64",height:"40",fill:"none",viewBox:"0 0 64 40",children:X("path",{fill:"#fff",d:"M61.283 3.965H33.608v27.757h25.699V19.826H37.561v-3.965H63.26V3.965h-1.977zM39.538 23.792h15.815v3.965H37.561v-3.965h1.977zM59.306 9.913v1.983H37.561V7.931h21.745v1.982zM33.606 0h-3.954v3.965H33.606V0zM25.7 3.966H0V15.86h25.7v3.965H3.953v11.896h25.7V3.966h-3.955zm0 21.808v1.983H7.907v-3.965h17.791v1.982zm0-15.86v1.982H3.953V7.931h21.745v1.982zM37.039 35.693v2.952l-.246-.246-.245-.245-.245-.247-.245-.246-.246-.246-.245-.245-.245-.247-.247-.246-.245-.246-.245-.246-.245-.246-.246-.246h-.49v3.936h.49v-3.198l.246.246.245.246.245.246.245.246.246.246.246.246.245.247.246.245.245.246.245.247.245.246.246.245.245.246h.245v-3.936h-.49zM44.938 37.17h-.491v-1.477h-2.944v3.937h3.93v-2.46h-.495zm-2.944-.246v-.739h1.962v.984h-1.962v-.245zm2.944.984v1.23h-2.944V37.66h2.944v.247zM52.835 37.17h-.49v-1.477h-2.946v3.937h3.925v-2.46h-.489zm-2.944-.246v-.739h1.963v.984h-1.965l.002-.245zm2.944.984v1.23H49.89V37.66h2.946v.247zM29.174 35.693H25.739v3.936H29.663v-.491H26.229v-.984h2.943v-.493H26.229v-1.476h3.434v-.492h-.489zM13.37 35.693H9.934v3.937h3.925v-3.937h-.49zm0 .738v2.709h-2.945v-2.955h2.943l.001.246zM21.276 35.693h-3.435v3.937h.491v-1.476h3.434v-2.461h-.49zm0 .738v1.23h-2.944v-1.476h2.944v.246z"})})}),X("p",{className:"font-bold w-1/3 flex flex-col gap-0.5 items-center",children:r}),Ce("p",{className:"w-1/3 text-right text-xs",children:[new Intl.DateTimeFormat("en-GB",{dateStyle:"full",timeStyle:"long"}).format(Nk).replace(/:\d\d /," "),X("br",{}),X("span",{className:"text-grey-400",children:i})]})]}),X("div",{className:"overflow-auto max-h-[calc(100vh-170px)] smh:max-h-[calc(100vh-95px)]",children:Ce("table",{className:"text-sm relative",children:[X("thead",{className:"sticky top-0 bg-white dark:bg-grey-900",style:{fontSize:`${Number(C)*100}%`},children:M.getHeaderGroups().map((W,Q)=>X("tr",{children:W.headers.map((le,me)=>X(gk,{setLockFirstColumn:Te,lockFirstColumn:he,idx:me,advanced:g,header:le,table:M},le.id))},W.id))}),X("tbody",{children:M.getRowModel().rows.map((W,Q)=>X("tr",{className:"!h-[64px] border-b border-grey-400",style:{fontSize:`${Number(C)*100}%`},children:W.getVisibleCells().map((le,me)=>X("td",{className:Nt("whitespace-normal p-4 text-black dark:text-white",{"bg-white dark:bg-grey-850":Q%2===0,"bg-grey-100 dark:bg-[#202020]":Q%2===1,"sticky left-0 z-10":me===0&&he}),style:{width:le.column.getSize()},children:Kf(le.column.columnDef.cell,le.getContext())},le.id))},W.id))}),(F==null?void 0:F.length)>30&&(V==null?void 0:V.length)>4&&X("tfoot",{children:M.getFooterGroups().map(W=>X("tr",{children:W.headers.map(Q=>X("th",{colSpan:Q.colSpan,className:"text-grey-500 bg-grey-100 dark:bg-grey-850 font-normal text-left text-sm h-10 p-4",style:{width:Q.getSize(),fontSize:`${Number(C)*100}%`},children:Q.isPlaceholder?null:Kf(Q.column.columnDef.footer,Q.getContext())},Q.id))},W.id))})]})})]})]}),Ce("div",{className:"smh:hidden flex max-h-[68px] overflow-x-auto bg-white/70 dark:bg-grey-900/70 backdrop-filter backdrop-blur z-20 bottom-0 left-0 w-full gap-10 justify-between py-4 px-4 text-sm",children:[Ce("div",{className:"flex items-center gap-10",children:[Ce(jv,{children:[X(pT,{className:"_btn",children:"Settings"}),Ce(gT,{children:[X(Xv,{className:"_modal-overlay"}),Ce(Kv,{className:"_modal",children:[X(Wf,{className:"absolute top-[40px] right-[46px] text-grey-200 hover:text-white rounded-[4px] focus:outline focus:outline-2 focus:outline-grey-500",children:X(ql,{className:"w-6 h-6"})}),X(Yv,{className:"uppercase font-bold tracking-widest",children:"Settings"}),Ce("div",{className:"grid grid-cols-2 gap-2 mt-10 text-sm",children:[O&&X("button",{onClick:()=>te(),className:"_btn h-9",children:"Reset Order"}),X(Yi,{labelType:"row",value:f?"light":"dark",onChange:W=>{h(W!=="dark")},label:"Theme",placeholder:"Select theme",groups:[{label:"Theme",items:[{label:"Dark",value:"dark"},{label:"Light",value:"light"}]}]}),X(Yi,{labelType:"row",value:o,onChange:W=>{a(W)},label:"Export type",placeholder:"Select export type",groups:[{label:"Export type",items:w0.map(W=>({label:W,value:W}))}]}),X(Yi,{labelType:"row",value:C,onChange:A,label:"Font size",placeholder:"Select font size",groups:[{label:"Font size",items:[{label:"50%",value:"0.5"},{label:"75%",value:"0.75"},{label:"100%",value:"1"},{label:"125%",value:"1.25"},{label:"150%",value:"1.5"},{label:"175%",value:"1.75"},{label:"200%",value:"2"}]}]}),X(O1,{table:M,label:"Filter"}),X("div",{className:"flex gap-2 items-center",children:X(Yi,{labelType:"row",value:g?"advanced":"simple",onChange:W=>{v(W==="advanced")},label:"Type",placeholder:"Select type",groups:[{label:"Type",items:[{label:"Simple",value:"simple"},{label:"Advanced",value:"advanced"}]}]})}),Ce("div",{className:"flex gap-2 items-center",children:[X("label",{htmlFor:"colors",children:"Colors"}),X("input",{id:"colors",type:"checkbox",checked:w,onChange:()=>y(!w)})]})]})]})]})]}),X(O1,{onlyIconTrigger:!0,table:M,label:""})]}),X($k,{currentPage:m,setCurrentPage:p,table:M}),X(vk,{setType:a,type:o,columns:t,data:e,downloadFinished:l})]})]})]})}function dy(e){let t=null;return()=>(t==null&&(t=e()),t)}function Uk(e,t){return e.filter(r=>r!==t)}function Hk(e,t){const r=new Set,n=o=>r.add(o);e.forEach(n),t.forEach(n);const i=[];return r.forEach(o=>i.push(o)),i}class Vk{enter(t){const r=this.entered.length,n=i=>this.isNodeInDocument(i)&&(!i.contains||i.contains(t));return this.entered=Hk(this.entered.filter(n),[t]),r===0&&this.entered.length>0}leave(t){const r=this.entered.length;return this.entered=Uk(this.entered.filter(this.isNodeInDocument),t),r>0&&this.entered.length===0}reset(){this.entered=[]}constructor(t){this.entered=[],this.isNodeInDocument=t}}class Wk{initializeExposedProperties(){Object.keys(this.config.exposeProperties).forEach(t=>{Object.defineProperty(this.item,t,{configurable:!0,enumerable:!0,get(){return console.warn(`Browser doesn't allow reading "${t}" until the drop event.`),null}})})}loadDataTransfer(t){if(t){const r={};Object.keys(this.config.exposeProperties).forEach(n=>{const i=this.config.exposeProperties[n];i!=null&&(r[n]={value:i(t,this.config.matchesTypes),configurable:!0,enumerable:!0})}),Object.defineProperties(this.item,r)}}canDrag(){return!0}beginDrag(){return this.item}isDragging(t,r){return r===t.getSourceId()}endDrag(){}constructor(t){this.config=t,this.item={},this.initializeExposedProperties()}}const hy="__NATIVE_FILE__",py="__NATIVE_URL__",gy="__NATIVE_TEXT__",my="__NATIVE_HTML__",F1=Object.freeze(Object.defineProperty({__proto__:null,FILE:hy,HTML:my,TEXT:gy,URL:py},Symbol.toStringTag,{value:"Module"}));function qc(e,t,r){const n=t.reduce((i,o)=>i||e.getData(o),"");return n??r}const y0={[hy]:{exposeProperties:{files:e=>Array.prototype.slice.call(e.files),items:e=>e.items,dataTransfer:e=>e},matchesTypes:["Files"]},[my]:{exposeProperties:{html:(e,t)=>qc(e,t,""),dataTransfer:e=>e},matchesTypes:["Html","text/html"]},[py]:{exposeProperties:{urls:(e,t)=>qc(e,t,"").split(` +`),dataTransfer:e=>e},matchesTypes:["Url","text/uri-list"]},[gy]:{exposeProperties:{text:(e,t)=>qc(e,t,""),dataTransfer:e=>e},matchesTypes:["Text","text/plain"]}};function zk(e,t){const r=y0[e];if(!r)throw new Error(`native type ${e} has no configuration`);const n=new Wk(r);return n.loadDataTransfer(t),n}function Qc(e){if(!e)return null;const t=Array.prototype.slice.call(e.types||[]);return Object.keys(y0).filter(r=>{const n=y0[r];return n!=null&&n.matchesTypes?n.matchesTypes.some(i=>t.indexOf(i)>-1):!1})[0]||null}const Gk=dy(()=>/firefox/i.test(navigator.userAgent)),vy=dy(()=>!!window.safari);class D1{interpolate(t){const{xs:r,ys:n,c1s:i,c2s:o,c3s:a}=this;let s=r.length-1;if(t===r[s])return n[s];let l=0,u=a.length-1,c;for(;l<=u;){c=Math.floor(.5*(l+u));const h=r[c];if(ht)u=c-1;else return n[c]}s=Math.max(0,u);const f=t-r[s],d=f*f;return n[s]+i[s]*f+o[s]*d+a[s]*f*d}constructor(t,r){const{length:n}=t,i=[];for(let h=0;ht[h]{let k=new D1([0,.5,1],[l.y,l.y/c*m,l.y+m-c]).interpolate(d);return vy()&&o&&(k+=(window.devicePixelRatio-1)*m),k},g=()=>new D1([0,.5,1],[l.x,l.x/u*h,l.x+h-u]).interpolate(f),{offsetX:v,offsetY:w}=i,y=v===0||v,E=w===0||w;return{x:y?v:g(),y:E?w:p()}}class qk{get window(){if(this.globalContext)return this.globalContext;if(typeof window<"u")return window}get document(){var t;return!((t=this.globalContext)===null||t===void 0)&&t.document?this.globalContext.document:this.window?this.window.document:void 0}get rootElement(){var t;return((t=this.optionsArgs)===null||t===void 0?void 0:t.rootElement)||this.window}constructor(t,r){this.ownerDocument=null,this.globalContext=t,this.optionsArgs=r}}function Qk(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function P1(e){for(var t=1;t{this.sourcePreviewNodes.delete(t),this.sourcePreviewNodeOptions.delete(t)}}connectDragSource(t,r,n){this.sourceNodes.set(t,r),this.sourceNodeOptions.set(t,n);const i=a=>this.handleDragStart(a,t),o=a=>this.handleSelectStart(a);return r.setAttribute("draggable","true"),r.addEventListener("dragstart",i),r.addEventListener("selectstart",o),()=>{this.sourceNodes.delete(t),this.sourceNodeOptions.delete(t),r.removeEventListener("dragstart",i),r.removeEventListener("selectstart",o),r.setAttribute("draggable","false")}}connectDropTarget(t,r){const n=a=>this.handleDragEnter(a,t),i=a=>this.handleDragOver(a,t),o=a=>this.handleDrop(a,t);return r.addEventListener("dragenter",n),r.addEventListener("dragover",i),r.addEventListener("drop",o),()=>{r.removeEventListener("dragenter",n),r.removeEventListener("dragover",i),r.removeEventListener("drop",o)}}addEventListeners(t){t.addEventListener&&(t.addEventListener("dragstart",this.handleTopDragStart),t.addEventListener("dragstart",this.handleTopDragStartCapture,!0),t.addEventListener("dragend",this.handleTopDragEndCapture,!0),t.addEventListener("dragenter",this.handleTopDragEnter),t.addEventListener("dragenter",this.handleTopDragEnterCapture,!0),t.addEventListener("dragleave",this.handleTopDragLeaveCapture,!0),t.addEventListener("dragover",this.handleTopDragOver),t.addEventListener("dragover",this.handleTopDragOverCapture,!0),t.addEventListener("drop",this.handleTopDrop),t.addEventListener("drop",this.handleTopDropCapture,!0))}removeEventListeners(t){t.removeEventListener&&(t.removeEventListener("dragstart",this.handleTopDragStart),t.removeEventListener("dragstart",this.handleTopDragStartCapture,!0),t.removeEventListener("dragend",this.handleTopDragEndCapture,!0),t.removeEventListener("dragenter",this.handleTopDragEnter),t.removeEventListener("dragenter",this.handleTopDragEnterCapture,!0),t.removeEventListener("dragleave",this.handleTopDragLeaveCapture,!0),t.removeEventListener("dragover",this.handleTopDragOver),t.removeEventListener("dragover",this.handleTopDragOverCapture,!0),t.removeEventListener("drop",this.handleTopDrop),t.removeEventListener("drop",this.handleTopDropCapture,!0))}getCurrentSourceNodeOptions(){const t=this.monitor.getSourceId(),r=this.sourceNodeOptions.get(t);return P1({dropEffect:this.altKeyPressed?"copy":"move"},r||{})}getCurrentDropEffect(){return this.isDraggingNativeItem()?"copy":this.getCurrentSourceNodeOptions().dropEffect}getCurrentSourcePreviewNodeOptions(){const t=this.monitor.getSourceId(),r=this.sourcePreviewNodeOptions.get(t);return P1({anchorX:.5,anchorY:.5,captureDraggingState:!1},r||{})}isDraggingNativeItem(){const t=this.monitor.getItemType();return Object.keys(F1).some(r=>F1[r]===t)}beginDragNativeItem(t,r){this.clearCurrentDragSourceNode(),this.currentNativeSource=zk(t,r),this.currentNativeHandle=this.registry.addSource(t,this.currentNativeSource),this.actions.beginDrag([this.currentNativeHandle])}setCurrentDragSourceNode(t){this.clearCurrentDragSourceNode(),this.currentDragSourceNode=t;const r=1e3;this.mouseMoveTimeoutTimer=setTimeout(()=>{var n;return(n=this.rootElement)===null||n===void 0?void 0:n.addEventListener("mousemove",this.endDragIfSourceWasRemovedFromDOM,!0)},r)}clearCurrentDragSourceNode(){if(this.currentDragSourceNode){if(this.currentDragSourceNode=null,this.rootElement){var t;(t=this.window)===null||t===void 0||t.clearTimeout(this.mouseMoveTimeoutTimer||void 0),this.rootElement.removeEventListener("mousemove",this.endDragIfSourceWasRemovedFromDOM,!0)}return this.mouseMoveTimeoutTimer=null,!0}return!1}handleDragStart(t,r){t.defaultPrevented||(this.dragStartSourceIds||(this.dragStartSourceIds=[]),this.dragStartSourceIds.unshift(r))}handleDragEnter(t,r){this.dragEnterTargetIds.unshift(r)}handleDragOver(t,r){this.dragOverTargetIds===null&&(this.dragOverTargetIds=[]),this.dragOverTargetIds.unshift(r)}handleDrop(t,r){this.dropTargetIds.unshift(r)}constructor(t,r,n){this.sourcePreviewNodes=new Map,this.sourcePreviewNodeOptions=new Map,this.sourceNodes=new Map,this.sourceNodeOptions=new Map,this.dragStartSourceIds=null,this.dropTargetIds=[],this.dragEnterTargetIds=[],this.currentNativeSource=null,this.currentNativeHandle=null,this.currentDragSourceNode=null,this.altKeyPressed=!1,this.mouseMoveTimeoutTimer=null,this.asyncEndDragFrameId=null,this.dragOverTargetIds=null,this.lastClientOffset=null,this.hoverRafId=null,this.getSourceClientOffset=i=>{const o=this.sourceNodes.get(i);return o&&xy(o)||null},this.endDragNativeItem=()=>{this.isDraggingNativeItem()&&(this.actions.endDrag(),this.currentNativeHandle&&this.registry.removeSource(this.currentNativeHandle),this.currentNativeHandle=null,this.currentNativeSource=null)},this.isNodeInDocument=i=>!!(i&&this.document&&this.document.body&&this.document.body.contains(i)),this.endDragIfSourceWasRemovedFromDOM=()=>{const i=this.currentDragSourceNode;i==null||this.isNodeInDocument(i)||(this.clearCurrentDragSourceNode()&&this.monitor.isDragging()&&this.actions.endDrag(),this.cancelHover())},this.scheduleHover=i=>{this.hoverRafId===null&&typeof requestAnimationFrame<"u"&&(this.hoverRafId=requestAnimationFrame(()=>{this.monitor.isDragging()&&this.actions.hover(i||[],{clientOffset:this.lastClientOffset}),this.hoverRafId=null}))},this.cancelHover=()=>{this.hoverRafId!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(this.hoverRafId),this.hoverRafId=null)},this.handleTopDragStartCapture=()=>{this.clearCurrentDragSourceNode(),this.dragStartSourceIds=[]},this.handleTopDragStart=i=>{if(i.defaultPrevented)return;const{dragStartSourceIds:o}=this;this.dragStartSourceIds=null;const a=Xs(i);this.monitor.isDragging()&&(this.actions.endDrag(),this.cancelHover()),this.actions.beginDrag(o||[],{publishSource:!1,getSourceClientOffset:this.getSourceClientOffset,clientOffset:a});const{dataTransfer:s}=i,l=Qc(s);if(this.monitor.isDragging()){if(s&&typeof s.setDragImage=="function"){const c=this.monitor.getSourceId(),f=this.sourceNodes.get(c),d=this.sourcePreviewNodes.get(c)||f;if(d){const{anchorX:h,anchorY:m,offsetX:p,offsetY:g}=this.getCurrentSourcePreviewNodeOptions(),y=Yk(f,d,a,{anchorX:h,anchorY:m},{offsetX:p,offsetY:g});s.setDragImage(d,y.x,y.y)}}try{s==null||s.setData("application/json",{})}catch{}this.setCurrentDragSourceNode(i.target);const{captureDraggingState:u}=this.getCurrentSourcePreviewNodeOptions();u?this.actions.publishDragSource():setTimeout(()=>this.actions.publishDragSource(),0)}else if(l)this.beginDragNativeItem(l);else{if(s&&!s.types&&(i.target&&!i.target.hasAttribute||!i.target.hasAttribute("draggable")))return;i.preventDefault()}},this.handleTopDragEndCapture=()=>{this.clearCurrentDragSourceNode()&&this.monitor.isDragging()&&this.actions.endDrag(),this.cancelHover()},this.handleTopDragEnterCapture=i=>{if(this.dragEnterTargetIds=[],this.isDraggingNativeItem()){var o;(o=this.currentNativeSource)===null||o===void 0||o.loadDataTransfer(i.dataTransfer)}if(!this.enterLeaveCounter.enter(i.target)||this.monitor.isDragging())return;const{dataTransfer:s}=i,l=Qc(s);l&&this.beginDragNativeItem(l,s)},this.handleTopDragEnter=i=>{const{dragEnterTargetIds:o}=this;if(this.dragEnterTargetIds=[],!this.monitor.isDragging())return;this.altKeyPressed=i.altKey,o.length>0&&this.actions.hover(o,{clientOffset:Xs(i)}),o.some(s=>this.monitor.canDropOnTarget(s))&&(i.preventDefault(),i.dataTransfer&&(i.dataTransfer.dropEffect=this.getCurrentDropEffect()))},this.handleTopDragOverCapture=i=>{if(this.dragOverTargetIds=[],this.isDraggingNativeItem()){var o;(o=this.currentNativeSource)===null||o===void 0||o.loadDataTransfer(i.dataTransfer)}},this.handleTopDragOver=i=>{const{dragOverTargetIds:o}=this;if(this.dragOverTargetIds=[],!this.monitor.isDragging()){i.preventDefault(),i.dataTransfer&&(i.dataTransfer.dropEffect="none");return}this.altKeyPressed=i.altKey,this.lastClientOffset=Xs(i),this.scheduleHover(o),(o||[]).some(s=>this.monitor.canDropOnTarget(s))?(i.preventDefault(),i.dataTransfer&&(i.dataTransfer.dropEffect=this.getCurrentDropEffect())):this.isDraggingNativeItem()?i.preventDefault():(i.preventDefault(),i.dataTransfer&&(i.dataTransfer.dropEffect="none"))},this.handleTopDragLeaveCapture=i=>{this.isDraggingNativeItem()&&i.preventDefault(),this.enterLeaveCounter.leave(i.target)&&(this.isDraggingNativeItem()&&setTimeout(()=>this.endDragNativeItem(),0),this.cancelHover())},this.handleTopDropCapture=i=>{if(this.dropTargetIds=[],this.isDraggingNativeItem()){var o;i.preventDefault(),(o=this.currentNativeSource)===null||o===void 0||o.loadDataTransfer(i.dataTransfer)}else Qc(i.dataTransfer)&&i.preventDefault();this.enterLeaveCounter.reset()},this.handleTopDrop=i=>{const{dropTargetIds:o}=this;this.dropTargetIds=[],this.actions.hover(o,{clientOffset:Xs(i)}),this.actions.drop({dropEffect:this.getCurrentDropEffect()}),this.isDraggingNativeItem()?this.endDragNativeItem():this.monitor.isDragging()&&this.actions.endDrag(),this.cancelHover()},this.handleSelectStart=i=>{const o=i.target;typeof o.dragDrop=="function"&&(o.tagName==="INPUT"||o.tagName==="SELECT"||o.tagName==="TEXTAREA"||o.isContentEditable||(i.preventDefault(),o.dragDrop()))},this.options=new qk(r,n),this.actions=t.getActions(),this.monitor=t.getMonitor(),this.registry=t.getRegistry(),this.enterLeaveCounter=new Vk(this.isNodeInDocument)}}const Jk=function(t,r,n){return new Zk(t,r,n)};function e$(){const[e,t]=x.useState(null),[r,n]=x.useState("Interactive Table");x.useEffect(()=>{const a=setInterval(()=>{if(window.json_data){const s=JSON.parse(window.json_data);console.log(s),t(s),s.title&&typeof s.title=="string"&&n(s.title),clearInterval(a)}},100);return()=>clearInterval(a)},[]);const o=(a=>{var h;if(!a)return null;const s=(h=a.title)==null?void 0:h.replace(/|<\/b>/g,"").replace(/ /g,"_"),l=new Date().toISOString().slice(0,10).replace(/-/g,""),u=new Date().toISOString().slice(11,19).replace(/:/g,"");window.title=`openbb_${s}_${l}_${u}`;const c=a.columns;a.index;const d=a.data.map((m,p)=>{const g={};return m.forEach((v,w)=>{g[c[w]]=v||(v===0?0:"")}),g});return{columns:c,data:d}})(e);return X("div",{className:"relative h-full bg-white dark:bg-black text-black dark:text-white",children:X(b8,{backend:Jk,children:o&&X(Bk,{title:r,data:o.data,columns:o.columns,initialTheme:e.theme&&typeof e.theme=="string"&&e.theme==="dark"?"dark":"light",cmd:(e==null?void 0:e.command_location)??""})})})}Ov.render(X(or.StrictMode,{children:X(e$,{})}),document.getElementById("root")); + + + + + +
    + + + diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/core/to_chart.py b/openbb_platform/obbject_extensions/charting/openbb_charting/core/to_chart.py index 3c84018c3e4..affcde5929b 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/core/to_chart.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/core/to_chart.py @@ -18,8 +18,7 @@ def to_chart( prepost: bool = False, volume_ticks_x: int = 7, ) -> Tuple[OpenBBFigure, Dict[str, Any]]: - """ - Returns the plotly json representation of the chart. + """Return the plotly json representation of the chart. This function is used so it can be called at the module level and used out of the box, which allows some more flexibility, ease of use and doesn't require the user to know diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/query_params.py b/openbb_platform/obbject_extensions/charting/openbb_charting/query_params.py index 0ae69972dc3..db8274042c0 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/query_params.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/query_params.py @@ -1,47 +1,178 @@ """Charting Extension Query Params.""" -from typing import List, Optional, Union +# pylint: disable=unused-variable,unused-argument + +from typing import Any, Dict, List, Literal, Optional, Union from openbb_core.provider.abstract.data import Data from openbb_core.provider.abstract.query_params import QueryParams -from pydantic import Field +from pydantic import Field, model_validator + +from openbb_charting.core.to_chart import ChartIndicators + +MAMODES = Literal["ema", "sma", "wma", "hna", "zlma", "rma"] -class FredSeriesChartQueryParams(QueryParams): - """ - FRED Series Chart Query Params. +def _get_type_name(t): + """Get the type name of a type hint.""" + if hasattr(t, "__origin__"): + if hasattr(t.__origin__, "__name__"): + return f"{t.__origin__.__name__}[{', '.join([_get_type_name(arg) for arg in t.__args__])}]" + if hasattr(t.__origin__, "_name"): + return f"{t.__origin__._name}[{', '.join([_get_type_name(arg) for arg in t.__args__])}]" # pylint: disable=W0212 + if isinstance(t, str): + return t + if hasattr(t, "__name__"): + return t.__name__ + if hasattr(t, "_name"): + return t._name # pylint: disable=W0212 + return str(t) - kwargs - ------ - data : List[Data], optional - Filtered versions of the data contained in the original results. - Example use is to reduce the number of columns or the length of data to plot. - To supply additional columns, set `allow_unsafe = True`. - title : str, optional - Title of the chart. - y1title : str, optional - Right Y-axis title. - y2title : str, optional - Left Y-axis title. - xtitle : str, optional - X-axis title. - dropnan: bool, optional (default: True) - If True, rows containing NaN will be dropped. - normalize: bool, optional (default: False) - If True, the data will be normalized and placed on the same axis. - allow_unsafe: bool, optional (default: False) - If True, the method will attempt to pass all supplied data to the chart constructor. - This can result in unexpected behavior. - """ +class BaseQueryParams(QueryParams): + """Base Query Parmams Base Model.""" + + def __init__(self, **data): + """Initialize the BaseQueryParams.""" + super().__init__(**data) + self.__doc__ = self.__repr__() + + def __repr__(self): + """Return the string representation of the model.""" + fields = self.__class__.model_fields + repr_str = ( + "\n" + + self.__class__.__name__ + + "\n\n" + + " Parameters\n" + + " ----------\n" + + "\n".join( + [ + f"\n {k} : {_get_type_name(v.annotation)}\n {v.description}".replace( + ". ", ".\n " + ) + for k, v in fields.items() + ] + ) + ) + return repr_str + + +class ChartQueryParams(BaseQueryParams): + """ChartParams.""" data: Optional[Union[Data, List[Data]]] = Field( default=None, description="Filtered versions of the data contained in the original `self.results`." + " Columns should be the same as the original data." - + " Example use is to reduce the number of columns or the length of data to plot." - + " To supply additional columns, set `allow_unsafe = True`.", + + " Example use is to reduce the number of columns, or the length of data, to plot.", ) + + +class EquityPricePerformanceChartQueryParams(ChartQueryParams): + """Equity Price Performance Chart Query Params.""" + + title: Optional[str] = Field( + default=None, + description="Title of the chart.", + ) + orientation: Literal["v", "h"] = Field( + default="v", + description="Orientation of the bars.", + ) + limit: Optional[int] = Field( + default=None, + description="Limit the number of bars to plot, from the most recent." + + " If None, the periods from one-day to five-years will be plotted, if available.", + ) + layout_kwargs: Optional[Dict[str, Any]] = Field( + default=None, + description="Additional keyword arguments to pass to the Plotly `update_layout` method.", + ) + + +class EtfPricePerformanceChartQueryParams(EquityPricePerformanceChartQueryParams): + """ETF Price Performance Chart Query Params.""" + + +class EtfHoldingsChartQueryParams(ChartQueryParams): + """ "ETF Holdings Chart Query Params.""" + + title: Optional[str] = Field( + default=None, + description="Title of the chart.", + ) + orientation: Literal["v", "h"] = Field( + default="v", + description="Orientation of the bars.", + ) + limit: Optional[int] = Field( + default=20, + description="Limit the number of bars to plot, ranked by top weighting.", + ) + layout_kwargs: Optional[Dict[str, Any]] = Field( + default=None, + description="Additional keyword arguments to pass to the Plotly `update_layout` method.", + ) + + +class EquityPriceHistoricalChartQueryParams(ChartQueryParams): + """Equity Historical Price Chart Query Params.""" + + title: Optional[str] = Field( + default=None, + description="Title of the chart.", + ) + target: Optional[str] = Field( + default=None, + description="The specific column to target. If supplied, this will override the candles and volume parameters.", + ) + multi_symbol: bool = Field( + default=False, + description="Flag to indicate whether the data contains multiple symbols." + + " This is mostly handled automatically, but if the chart fails to generate try setting this to True.", + ) + same_axis: bool = Field( + default=False, + description="If True, forces all data to be plotted on the same axis.", + ) + normalize: bool = Field( + default=False, + description="If True, the data will be normalized and placed on the same axis.", + ) + returns: bool = Field( + default=False, + description="If True, the cumulative returns for the length of the time series will be calculated and plotted.", + ) + candles: bool = Field( + default=True, + description="If True, and OHLC exists, and there is only one symbol in the data, candles will be plotted.", + ) + heikin_ashi: bool = Field( + default=False, + description="If True, and `candles=True`, Heikin Ashi candles will be plotted.", + ) + volume: bool = Field( + default=True, + description="If True, and volume exists, and `candles=True`, volume will be plotted.", + ) + indicators: Optional[Union[ChartIndicators, Dict[str, Dict[str, Any]]]] = Field( + default=None, + description="Indicators to be plotted, formatted as a dictionary." + + " Data containing multiple symbols will ignore indicators." + + """ + Example: + indicators = dict( + sma=dict(length=[20,30,50]), + adx=dict(length=14), + rsi=dict(length=14), + )""", + ) + + +class EconomyFredSeriesChartQueryParams(ChartQueryParams): + """FRED Series Chart Query Params.""" + title: Optional[str] = Field( default=None, description="Title of the chart.", @@ -71,30 +202,25 @@ class FredSeriesChartQueryParams(QueryParams): description="If True, the method will attempt to pass all supplied data to the chart constructor." + " This can result in unexpected behavior.", ) - - -class TechnicalConesChartQueryParams(QueryParams): - """ - Technical Cones Chart Query Params. - - kwargs - ------ - - data : List[Data], optional - Filtered versions of the data contained in the original results. - Example use is to reduce the number of windows to plot. - title : str, optional - Title of the chart. - symbol: str, optional - Symbol represented by the data. Used to label the chart. - """ - - data: Optional[Union[Data, List[Data]]] = Field( - default=None, - description="Filtered versions of the data contained in the original results." - + " Columns should be the same as the original data." - + " Example use is to reduce the number of columns or the length of data to plot.", + plot_bar: bool = Field( + default=False, + description="If True, a bar chart will be plotted instead of a line." + + " If multiple units of measure are present, they will be normalized and plotted on the same axis.", ) + barmode: Literal["stack", "group", "relative"] = Field( + default="group", + description="The mode to use for the bar chart, by default is 'group'." + + " Has no effect if `bar=False`.", + ) + layout_kwargs: Optional[Dict[str, Any]] = Field( + default=None, + description="Additional keyword arguments to pass to the Plotly `update_layout` method.", + ) + + +class TechnicalConesChartQueryParams(ChartQueryParams): + """Technical Cones Chart Query Params.""" + title: Optional[str] = Field( default=None, description="Title of the chart.", @@ -103,3 +229,606 @@ class TechnicalConesChartQueryParams(QueryParams): default=None, description="Symbol represented by the data. Used to label the chart.", ) + + +class MAQueryParams(ChartQueryParams): + """Moving Average Query Params.""" + + target: str = Field( + default="close", + description="The column to calculate the moving average on.", + ) + index: str = Field( + default="date", + description="The index column.", + ) + length: Optional[Union[int, List[int]]] = Field( + default=50, + description="Window length for the moving average." + "+ The number is relative to the interval of the time series data.", + ) + offset: Optional[int] = Field( + default=0, + description="Number of periods to offset for the moving average.", + ) + dropnan: bool = Field( + default=False, + description="If True, rows containing NaN will be dropped." + + " This will reduce the length of the charted data by the longest window.", + ) + symbol: Optional[str] = Field( + default=None, + description="Symbol represented by the data. Used to label the chart.", + ) + + +class TechnicalSMAChartQueryParams(MAQueryParams): + """Technical SMA Chart Query Params.""" + + +class TechnicalEMAChartQueryParams(MAQueryParams): + """Technical EMA Chart Query Params.""" + + +class TechnicalHMAChartQueryParams(MAQueryParams): + """Technical HMA Chart Query Params.""" + + +class TechnicalWMAChartQueryParams(MAQueryParams): + """Technical WMA Chart Query Params.""" + + +class TechnicalZLMAChartQueryParams(MAQueryParams): + """Technical ZLMA Chart Query Params.""" + + +class TechnicalADXChartQueryParams(ChartQueryParams): + """Technical ADX Chart Query Params.""" + + length: Optional[int] = Field( + default=50, + description="Window length for the ADX, by default is 50.", + ) + scalar: Optional[float] = Field( + default=100, + description="Scalar to multiply the ADX by, default is 100.", + ) + drift: Optional[int] = Field( + default=1, + description="Drift value for the ADX, by default is 1.", + ) + + +class TechnicalArooonChartQueryParams(ChartQueryParams): + """Technical Aroon Chart Query Params.""" + + length: Optional[int] = Field( + default=25, + description="Window length for the Aroon, by default is 50.", + ) + scalar: Optional[float] = Field( + default=100, + description="Scalar to multiply the Aroon by, default is 100.", + ) + + +class TechnicalMACDChartQueryParams(ChartQueryParams): + """Technical MACD Chart Query Params.""" + + fast: Optional[int] = Field( + default=12, + description="Window length for the fast EMA, by default is 12.", + ) + slow: Optional[int] = Field( + default=26, + description="Window length for the slow EMA, by default is 26.", + ) + signal: Optional[int] = Field( + default=9, + description="Window length for the signal line, by default is 9.", + ) + scalar: Optional[float] = Field( + default=100, + description="Scalar to multiply the MACD by, default is 100.", + ) + + +class TechnicalRSIChartQueryParams(ChartQueryParams): + """Technical RSI Chart Query Params.""" + + length: Optional[int] = Field( + default=14, + description="Window length for the RSI, by default is 14.", + ) + scalar: Optional[float] = Field( + default=100, + description="Scalar to multiply the RSI by, default is 100.", + ) + drift: Optional[int] = Field( + default=1, + description="Drift value for the RSI, by default is 1.", + ) + + +class TechnicalRelativeRotationChartQueryParams(ChartQueryParams): + """Technical Relative Rotation Chart Query Params.""" + + date: Optional[str] = Field( + default=None, + description="A target end date within the data to use for the chart, by default is the last date in the data.", + ) + show_tails: bool = Field( + default=True, + description="Show the tails on the chart, by default True.", + ) + tail_periods: Optional[int] = Field( + default=16, + description="Number of periods to show in the tails, by default 16.", + ) + tail_interval: Literal["day", "week", "month"] = Field( + default="week", + description="The interval to show the tails, by default 'week'.", + ) + title: Optional[str] = Field( + default=None, + description="Title of the chart.", + ) + + +class ChartParams: + """Chart Query Params.""" + + crypto_price_historical = EquityPriceHistoricalChartQueryParams + equity_price_historical = EquityPriceHistoricalChartQueryParams + economy_fred_series = EconomyFredSeriesChartQueryParams + equity_price_historical = EquityPriceHistoricalChartQueryParams + equity_price_performance = EquityPricePerformanceChartQueryParams + etf_historical = EtfPricePerformanceChartQueryParams + etf_holdings = EtfHoldingsChartQueryParams + etf_price_performance = EquityPricePerformanceChartQueryParams + index_price_historical = EquityPriceHistoricalChartQueryParams + technical_adx = TechnicalADXChartQueryParams + technical_aroon = TechnicalArooonChartQueryParams + technical_cones = TechnicalConesChartQueryParams + technical_ema = TechnicalEMAChartQueryParams + technical_hma = TechnicalHMAChartQueryParams + technical_macd = TechnicalMACDChartQueryParams + technical_relative_rotation = TechnicalRelativeRotationChartQueryParams + technical_rsi = TechnicalRSIChartQueryParams + technical_sma = TechnicalSMAChartQueryParams + technical_wma = TechnicalWMAChartQueryParams + technical_zlma = TechnicalZLMAChartQueryParams + + +class IndicatorsQueryParams(BaseQueryParams): + """Indicators Query Params.""" + + +class MAIndicatorsQueryParams(IndicatorsQueryParams): + """Moving Average Indicators Query Params.""" + + length: Union[int, List[int]] = Field( + default=50, + description="Window length for the moving average, by default is 50." + + " The number is relative to the interval of the time series data.", + ) + offset: int = Field( + default=0, + description="Number of periods to offset for the moving average, by default is 0.", + ) + + +class SMAIndicatorsQueryParams(MAIndicatorsQueryParams): + """Simple Moving Average Indicators Query Params.""" + + +class EMAIndicatorsQueryParams(MAIndicatorsQueryParams): + """Exponential Moving Average Indicators Query Params.""" + + +class HMAIndicatorsQueryParams(MAIndicatorsQueryParams): + """Hull Moving Average Indicators Query Params.""" + + +class WMAIndicatorsQueryParams(MAIndicatorsQueryParams): + """Weighted Moving Average Indicators Query Params.""" + + +class ZLMAIndicatorsQueryParams(MAIndicatorsQueryParams): + """Zero-Lag Moving Average Indicators Query Params.""" + + +class ADIndicatorsQueryParams(IndicatorsQueryParams): + """Accumulation/Distribution Indicators Query Params.""" + + offset: int = Field( + default=0, + description="Offset value for the AD, by default is 0.", + ) + + +class ADOscillatorIndicatorsQueryParams(IndicatorsQueryParams): + """Accumulation/Distribution Oscillator Indicators Query Params.""" + + fast: int = Field( + default=3, + description="Number of periods to use for the fast calculation, by default 3.", + ) + slow: int = Field( + default=10, + description="Number of periods to use for the slow calculation, by default 10.", + ) + offset: int = Field( + default=0, + description="Offset to be used for the calculation, by default is 0.", + ) + + +class ADXIndicatorsQueryParams(IndicatorsQueryParams): + """Average Directional Index Indicators Query Params.""" + + length: int = Field( + default=50, + description="Window length for the ADX, by default is 50.", + ) + scalar: float = Field( + default=100, + description="Scalar to multiply the ADX by, default is 100.", + ) + drift: int = Field( + default=1, + description="Drift value for the ADX, by default is 1.", + ) + + +class AroonIndicatorsQueryParams(IndicatorsQueryParams): + """Aroon Indicators Query Params.""" + + length: int = Field( + default=25, + description="Window length for the Aroon, by default is 50.", + ) + scalar: float = Field( + default=100, + description="Scalar to multiply the Aroon by, default is 100.", + ) + + +class ATRIndicatorsQueryParams(IndicatorsQueryParams): + """Average True Range Indicators Query Params.""" + + length: int = Field( + default=14, + description="Window length for the ATR, by default is 14.", + ) + mamode: Literal["rma", "ema", "sma", "wma"] = Field( + default="rma", + description="The mode to use for the moving average calculation.", + ) + drift: int = Field( + default=1, + description="The difference period.", + ) + offset: int = Field( + default=0, + description="Number of periods to offset the result, by default is 0.", + ) + + +class CCIIndicatorsQueryParams(IndicatorsQueryParams): + """Commodity Channel Index Indicators Query Params.""" + + length: int = Field( + default=14, + description="Window length for the CCI, by default is 14.", + ) + scalar: float = Field( + default=0.015, + description="Scalar to multiply the CCI by, default is 0.015.", + ) + + +class DonchianIndicatorsQueryParams(IndicatorsQueryParams): + """Donchian Channel Indicators Query Params.""" + + lower: Optional[int] = Field( + default=20, + description="Window length for the lower band, by default is 20.", + ) + upper: Optional[int] = Field( + default=20, + description="Window length for the upper band, by default is 20.", + ) + offset: Optional[int] = Field( + default=0, + description="Number of periods to offset the result, by default is 0.", + ) + + +class FisherIndicatorsQueryParams(IndicatorsQueryParams): + """Fisher Transform Indicators Query Params.""" + + length: int = Field( + default=14, + description="Window length for the Fisher Transform, by default is 14.", + ) + signal: int = Field( + default=1, + description="Fisher Signal Period", + ) + + +class KCIndicatorsQueryParams(IndicatorsQueryParams): + """Keltner Channel Indicators Query Params.""" + + length: int = Field( + default=20, + description="Window length for the Keltner Channel, by default is 20.", + ) + scalar: float = Field( + default=2, + description="Scalar to multiply the ATR, by default is 2.", + ) + mamode: MAMODES = Field( + default="rma", + description="The mode to use for the moving average calculation, by default is ema.", + ) + offset: int = Field( + default=0, + description="Number of periods to offset the result, by default is 0.", + ) + + +class MACDIndicatorsQueryParams(IndicatorsQueryParams): + """MACD Indicators Query Params.""" + + fast: Optional[int] = Field( + default=12, + description="Window length for the fast EMA, by default is 12.", + ) + slow: Optional[int] = Field( + default=26, + description="Window length for the slow EMA, by default is 26.", + ) + signal: Optional[int] = Field( + default=9, + description="Window length for the signal line, by default is 9.", + ) + scalar: Optional[float] = Field( + default=100, + description="Scalar to multiply the MACD by, default is 100.", + ) + + +class OBVIndicatorsQueryParams(IndicatorsQueryParams): + """On Balance Volume Indicators Query Params.""" + + offset: int = Field( + default=0, + description="Number of periods to offset the result, by default is 0.", + ) + + +class RSIIndicatorsQueryParams(IndicatorsQueryParams): + """RSI Indicators Query Params.""" + + length: int = Field( + default=14, + description="Window length for the RSI, by default is 14.", + ) + scalar: float = Field( + default=100, + description="Scalar to multiply the RSI by, default is 100.", + ) + drift: int = Field( + default=1, + description="Drift value for the RSI, by default is 1.", + ) + + +class StochIndicatorsQueryParams(IndicatorsQueryParams): + """Stochastic Oscillator Indicators Query Params.""" + + fast_k: int = Field( + default=14, + description="The fast K period, by default 14.", + ) + slow_d: int = Field( + default=3, + description="The slow D period, by default 3.", + ) + slow_k: int = Field( + default=3, + description="The slow K period, by default 3.", + ) + + +class FibIndicatorsQueryParams(IndicatorsQueryParams): + """Fibonacci Retracement Indicators Query Params.""" + + period: int = Field( + default=120, + description="The period to calculate the Fibonacci Retracement, by default 120.", + ) + start_date: Optional[str] = Field( + default=None, + description="The start date for the Fibonacci Retracement.", + ) + end_date: Optional[str] = Field( + default=None, + description="The end date for the Fibonacci Retracement.", + ) + + +class ClenowIndicatorsQueryParams(IndicatorsQueryParams): + """Clenow Volatility Adjusted Momentum Indicators Query Params.""" + + period: int = Field( + default=90, + description="The number of periods for the momentum, by default 90.", + ) + + +class DemarkIndicatorsQueryParams(IndicatorsQueryParams): + """Demark Indicators Query Params.""" + + show_all: bool = Field( + default=False, + description="Show 1 - 13. If set to False, show 6 - 9.", + ) + offset: int = Field( + default=0, + description="Number of periods to offset the result, by default is 0.", + ) + + +class IchimokuIndicatorsQueryParams(IndicatorsQueryParams): + """Ichimoku Cloud Indicators Query Params.""" + + conversion: int = Field( + default=9, + description="The conversion line period, by default 9.", + ) + base: int = Field( + default=26, + description="The base line period, by default 26.", + ) + lagging: int = Field( + default=52, + description="The lagging line period, by default 52.", + ) + offset: int = Field( + default=26, + description="The offset period, by default 26.", + ) + lookahead: bool = Field( + default=False, + description="Drops the Chikou Span Column to prevent potential data leak", + ) + + +class SRLinesIndicatorsQueryParams(IndicatorsQueryParams): + """Support and Resistance Lines Indicators Query Params.""" + + show: bool = Field( + default=True, + description="Show the support and resistance lines.", + ) + + +class IndicatorsParams(QueryParams): + """Indicators Query Params.""" + + sma: SMAIndicatorsQueryParams = Field( + default=SMAIndicatorsQueryParams(), + description=repr(SMAIndicatorsQueryParams()), + ) + ema: EMAIndicatorsQueryParams = Field( + default=EMAIndicatorsQueryParams(), + description=repr(EMAIndicatorsQueryParams()), + ) + hma: HMAIndicatorsQueryParams = Field( + default=HMAIndicatorsQueryParams(), + description=repr(HMAIndicatorsQueryParams()), + ) + wma: WMAIndicatorsQueryParams = Field( + default=WMAIndicatorsQueryParams(), + description=repr(WMAIndicatorsQueryParams()), + ) + zlma: ZLMAIndicatorsQueryParams = Field( + default=ZLMAIndicatorsQueryParams(), + description=repr(ZLMAIndicatorsQueryParams()), + ) + ad: ADIndicatorsQueryParams = Field( + default=ADIndicatorsQueryParams(), + description=repr(ADIndicatorsQueryParams()), + ) + adoscillator: ADOscillatorIndicatorsQueryParams = Field( + default=ADOscillatorIndicatorsQueryParams(), + description=repr(ADOscillatorIndicatorsQueryParams()), + ) + adx: ADXIndicatorsQueryParams = Field( + default=ADXIndicatorsQueryParams(), + description=repr(ADXIndicatorsQueryParams()), + ) + aroon: AroonIndicatorsQueryParams = Field( + default=AroonIndicatorsQueryParams(), + description=repr(AroonIndicatorsQueryParams()), + ) + atr: ATRIndicatorsQueryParams = Field( + default=ATRIndicatorsQueryParams(), + description=repr(ATRIndicatorsQueryParams()), + ) + cci: CCIIndicatorsQueryParams = Field( + default=CCIIndicatorsQueryParams(), + description=repr(CCIIndicatorsQueryParams()), + ) + clenow: ClenowIndicatorsQueryParams = Field( + default=ClenowIndicatorsQueryParams(), + description=repr(ClenowIndicatorsQueryParams()), + ) + demark: DemarkIndicatorsQueryParams = Field( + default=DemarkIndicatorsQueryParams(), + description=repr(DemarkIndicatorsQueryParams()), + ) + donchian: DonchianIndicatorsQueryParams = Field( + default=DonchianIndicatorsQueryParams(), + description=repr(DonchianIndicatorsQueryParams()), + ) + fib: FibIndicatorsQueryParams = Field( + default=FibIndicatorsQueryParams(), + description=repr(FibIndicatorsQueryParams()), + ) + fisher: FisherIndicatorsQueryParams = Field( + default=FisherIndicatorsQueryParams(), + description=repr(FisherIndicatorsQueryParams()), + ) + ichimoku: IchimokuIndicatorsQueryParams = Field( + default=IchimokuIndicatorsQueryParams(), + description=repr(IchimokuIndicatorsQueryParams()), + ) + kc: KCIndicatorsQueryParams = Field( + default=KCIndicatorsQueryParams(), + description=repr(KCIndicatorsQueryParams()), + ) + macd: MACDIndicatorsQueryParams = Field( + default=MACDIndicatorsQueryParams(), + description=repr(MACDIndicatorsQueryParams()), + ) + obv: OBVIndicatorsQueryParams = Field( + default=OBVIndicatorsQueryParams(), + description=repr(OBVIndicatorsQueryParams()), + ) + rsi: RSIIndicatorsQueryParams = Field( + default=RSIIndicatorsQueryParams(), + description=repr(RSIIndicatorsQueryParams()), + ) + srlines: SRLinesIndicatorsQueryParams = Field( + default=SRLinesIndicatorsQueryParams(), + description=repr(SRLinesIndicatorsQueryParams()), + ) + stoch: StochIndicatorsQueryParams = Field( + default=StochIndicatorsQueryParams(), + description=repr(StochIndicatorsQueryParams()), + ) + + def __repr__(self): + """Return the string representation of the model.""" + fields = self.__class__.model_fields + repr_str = "\n" + "\n".join( + [ + f"{str(v.description).replace('IndicatorsQueryParams', ':').replace('ADOs', 'AD Os')}" + for k, v in fields.items() + ] + ) + return repr_str + + @model_validator(mode="before") + @classmethod + def validate_model(cls, values): + """Validate the model.""" + indicators = list(ChartIndicators.get_available_indicators()) + for k, v in values.items(): + if k not in indicators: + raise ValueError(f"{k} is not a valid indicator.") + return values diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/styles/__init__.py b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/__init__.py new file mode 100644 index 00000000000..05f805d0904 --- /dev/null +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/__init__.py @@ -0,0 +1 @@ +"""Charting Extension Styles""" diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/styles/colors.py b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/colors.py new file mode 100644 index 00000000000..d904c0e7be0 --- /dev/null +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/colors.py @@ -0,0 +1,39 @@ +"""Color Palettes and Sequences for OpenBB Charting""" + +LARGE_CYCLER = [ + "#1f77b4", + "#7f7f7f", + "#ff7f0e", + "#2ca02c", + "#d62728", + "#9467bd", + "#8c564b", + "#e377c2", + "#bcbd22", + "#17becf", + "burlywood", + "magenta", + "cyan", + "yellowgreen", + "#aec7e8", + "#ffbb78", + "#ff9896", + "#c5b0d5", + "#c49c94", + "#f7b6d2", + "#c7c7c7", + "#dbdb8d", + "#9edae5", + "#7e7e7e", + "#1b9e77", + "#d95f02", + "#7570b3", + "#e7298a", + "#66a61e", + "#e6ab02", + "#a6761d", + "#666666", + "#f0027f", + "#bf5b17", + "#d9f202", +] diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/dark.pltstyle.json b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/dark.pltstyle.json index f1f75a99fa2..d5d75ac6826 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/dark.pltstyle.json +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/dark.pltstyle.json @@ -30,22 +30,26 @@ }, "autotypenumbers": "strict", "colorway": [ - "#ffed00", - "#ef7d00", - "#e4003a", - "#c13246", - "#822661", - "#48277c", - "#005ca9", - "#00aaff", - "#9b30d9", - "#af005f", - "#5f00af", - "#af87ff" + "#1f77b4", + "#ff7f0e", + "#2ca02c", + "#d62728", + "#9467bd", + "#8c564b", + "#e377c2", + "#bcbd22", + "#17becf", + "#aec7e8", + "#ffbb78", + "#ff9896", + "#c5b0d5", + "#f7b6d2", + "#dbdb8d", + "#9edae5" ], "dragmode": "pan", "font": { - "family": "Fira Code", + "family": "Arial", "size": 18 }, "hoverlabel": { @@ -56,13 +60,13 @@ }, "hovermode": "x", "legend": { - "bgcolor": "rgba(0, 0, 0, 0.5)", - "x": 0.01, - "xanchor": "left", - "y": 0.99, - "yanchor": "top", + "bgcolor": "rgba(0, 0, 0, 0)", + "x": 1, + "xanchor": "right", + "y": 1.02, + "yanchor": "bottom", "font": { - "size": 15 + "size": 12 } }, "legend2": { @@ -105,7 +109,10 @@ "zeroline": false, "tick0": 1, "title": { - "standoff": 20 + "standoff": 20, + "font": { + "size": 16 + } }, "linecolor": "#F5EFF3", "mirror": true, @@ -121,9 +128,13 @@ "side": "right", "tick0": 0.5, "title": { - "standoff": 20 + "standoff": 20, + "font": { + "size": 16 + } }, - "gridcolor": "#283442", + + "gridcolor": "rgba(128, 128, 128, 0.33)", "linecolor": "#F5EFF3", "mirror": true, "ticks": "outside" diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/light.pltstyle.json b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/light.pltstyle.json index 6572f11da1a..4f3198c4989 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/light.pltstyle.json +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/styles/default/light.pltstyle.json @@ -1,569 +1,23 @@ { "line": { - "up_color": "#009600", - "down_color": "#c80000", - "color": "#0d0887", - "width": 1.5, - "down_color_transparent": "rgba(200, 0, 0, 0.4)", - "up_color_transparent": "rgba(0, 150, 0, 0.4)" + "up_color": "#0074D9", + "down_color": "#FF4136", + "color": "#111111", + "width": 1.5 }, "data": { - "barpolar": [ - { - "marker": { - "line": { - "color": "white", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "white", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatter": [ - { - "fillpattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - }, - "type": "scatter" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ], "candlestick": [ { "decreasing": { - "fillcolor": "#c80000", + "fillcolor": "#e4003a", "line": { - "color": "#990000" + "color": "#e4003a" } }, "increasing": { - "fillcolor": "#009600", + "fillcolor": "#00ACFF", "line": { - "color": "#007500" + "color": "#00ACFF" } }, "type": "candlestick" @@ -572,300 +26,117 @@ }, "layout": { "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1, "showarrow": false }, "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - }, "colorway": [ - "#254495", - "#c13246", - "#48277c", - "#e4003a", - "#ef7d00", - "#822661", - "#ffed00", - "#00aaff", - "#9b30d9", - "#af005f", - "#5f00af", - "#af87ff" + "#1f77b4", + "#ff7f0e", + "#2ca02c", + "#d62728", + "#9467bd", + "#8c564b", + "#e377c2", + "#bcbd22", + "#17becf", + "#aec7e8", + "#ffbb78", + "#ff9896", + "#c5b0d5", + "#f7b6d2", + "#dbdb8d", + "#9edae5" ], + "dragmode": "pan", "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "white", - "showlakes": true, - "showland": true, - "subunitcolor": "#C8D4E3" + "family": "Arial", + "size": 18 }, "hoverlabel": { "align": "left" }, - "hovermode": "x", "mapbox": { "style": "light" }, - "paper_bgcolor": "white", - "plot_bgcolor": "white", - "polar": { - "angularaxis": { - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "ticks": "" - }, - "bgcolor": "white", - "radialaxis": { - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "ticks": "" + "hovermode": "x", + "legend": { + "bgcolor": "rgba(255, 255, 255, 0)", + "x": 1, + "xanchor": "right", + "y": 1.02, + "yanchor": "bottom", + "font": { + "size": 12 } }, - "scene": { - "xaxis": { - "backgroundcolor": "white", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#EBF0F8" - }, - "yaxis": { - "backgroundcolor": "white", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#EBF0F8" - }, - "zaxis": { - "backgroundcolor": "white", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#EBF0F8" + "legend2": { + "bgcolor": "rgba(255, 255, 255, 0.5)", + "font": { + "size": 15 } }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" + "legend3": { + "bgcolor": "rgba(255, 255, 255, 0.5)", + "font": { + "size": 15 } }, - "ternary": { - "aaxis": { - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6", - "ticks": "" - }, - "baxis": { - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6", - "ticks": "" - }, - "bgcolor": "white", - "caxis": { - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6", - "ticks": "" + "legend4": { + "bgcolor": "rgba(255, 255, 255, 0.5)", + "font": { + "size": 15 } }, - "title": { - "x": 0.05 + "legend5": { + "bgcolor": "rgba(255, 255, 255, 0.5)", + "font": { + "size": 15 + } }, + "paper_bgcolor": "#FFFFFF", + "plot_bgcolor": "#FFFFFF", "xaxis": { "automargin": true, - "ticks": "", - "zerolinewidth": 2, + "autorange": true, "rangeslider": { "visible": false }, "showgrid": true, "showline": true, "tickfont": { - "size": 15 + "size": 14 }, + "zeroline": false, + "tick0": 1, + "title": { + "standoff": 20, + "font": { + "size": 16 + } + }, + "linecolor": "#A9A9A9", "mirror": true, - "zeroline": false + "ticks": "outside" }, "yaxis": { + "anchor": "x", "automargin": true, - "ticks": "", - "tickfont": { - "size": 15 - }, - "zerolinewidth": 2, "fixedrange": false, + "zeroline": false, "showgrid": true, "showline": true, "side": "right", + "tick0": 0.5, + "title": { + "standoff": 20, + "font": { + "size": 16 + } + }, + "gridcolor": "rgba(128, 128, 128, 0.33)", + "linecolor": "#A9A9A9", "mirror": true, - "zeroline": false - }, - "dragmode": "pan", - "legend": { - "bgcolor": "rgba(0, 0, 0, 0)", - "x": 1.1, - "xanchor": "left", - "y": 0.99, - "yanchor": "top" - }, - "legend2": { - "bgcolor": "rgba(0, 0, 0, 0)" - }, - "legend3": { - "bgcolor": "rgba(0, 0, 0, 0)" - }, - "legend4": { - "bgcolor": "rgba(0, 0, 0, 0)" - }, - "legend5": { - "bgcolor": "rgba(0, 0, 0, 0)" + "ticks": "outside" } } -} +} \ No newline at end of file diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/utils/generic_charts.py b/openbb_platform/obbject_extensions/charting/openbb_charting/utils/generic_charts.py new file mode 100644 index 00000000000..9254408b4c8 --- /dev/null +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/utils/generic_charts.py @@ -0,0 +1,606 @@ +"""Generic Charts Module.""" + +# pylint: disable=too-many-arguments,unused-argument,too-many-locals, too-many-branches, too-many-lines, too-many-statements, use-dict-literal, broad-exception-caught, too-many-nested-blocks + +from typing import Any, Dict, List, Literal, Optional, Union + +import numpy as np +import pandas as pd +from openbb_core.app.utils import basemodel_to_df, convert_to_basemodel +from openbb_core.provider.abstract.data import Data +from plotly.graph_objs import Figure + +from openbb_charting.core.chart_style import ChartStyle +from openbb_charting.core.openbb_figure import OpenBBFigure +from openbb_charting.styles.colors import LARGE_CYCLER +from openbb_charting.utils.helpers import ( + calculate_returns, + should_share_axis, + z_score_standardization, +) + + +def line_chart( # noqa: PLR0912 + data: Union[ + list, + dict, + pd.DataFrame, + List[pd.DataFrame], + pd.Series, + List[pd.Series], + np.ndarray, + Data, + ], + index: Optional[str] = None, + target: Optional[str] = None, + title: Optional[str] = None, + x: Optional[str] = None, + xtitle: Optional[str] = None, + y: Optional[Union[str, List[str]]] = None, + ytitle: Optional[str] = None, + y2: Optional[Union[str, List[str]]] = None, + y2title: Optional[str] = None, + layout_kwargs: Optional[dict] = None, + scatter_kwargs: Optional[dict] = None, + normalize: bool = False, + returns: bool = False, + same_axis: bool = False, + **kwargs, +) -> Union[OpenBBFigure, Figure]: + """Create a line chart.""" + + if data is None: + raise ValueError("Error: Data is a required field.") + + auto_layout = False + index = ( + data.index.name + if isinstance(data, (pd.DataFrame, pd.Series)) + else index if index is not None else x if x is not None else "date" + ) + df: pd.DataFrame = ( + basemodel_to_df(convert_to_basemodel(data), index=index) + ).dropna(how="all", axis=1) + + if df.index.name is None: + if "date" in df.columns: + df.date = df.date.apply(pd.to_datetime) + df.set_index("date", inplace=True) + else: + found_index = False + for col in df.columns: + if df[col].dtype == "object": + try: + df[col] = df[col].apply(pd.to_datetime) + index = df[col].name # type: ignore + df.set_index(col, inplace=True) + df.index.name = "date" + found_index = True + except Exception as _: # noqa: S112 + continue + if found_index is True: + break + if found_index is False: + df.set_index(df.iloc[:, 0], inplace=True) + + if "symbol" in df.columns and len(df.symbol.unique()) > 1: + df = df.pivot(columns="symbol", values=target if target else "close") + + if "symbol" not in df.columns and target in df.columns: + df = df[[target]] + + y = y.split(",") if isinstance(y, str) else y + + if y is None or same_axis is True: + y = df.columns.to_list() + auto_layout = True + + if same_axis is True: + auto_layout = False + + if returns is True: + df = df.apply(calculate_returns) + auto_layout = False + + if normalize is True: + df = df.apply(z_score_standardization) + auto_layout = False + + if layout_kwargs is None: + layout_kwargs = {} + + if scatter_kwargs is None: + scatter_kwargs = {} + + try: + fig = OpenBBFigure() + except Exception as _: + fig = OpenBBFigure(create_backend=True) + + title = f"{title}" if title else "" + xtitle = xtitle if xtitle else "" + y1title = ytitle if ytitle else "" + y2title = y2title if y2title else "" + y2 = y2 if y2 else [] + yaxis_num = 1 + yaxis = f"y{yaxis_num}" + first_y = y[0] # type: ignore[index] + second_y = None + third_y = None + add_scatter = False + + # Attempt to layout the chart automatically with multiple y-axis. + mode = scatter_kwargs.pop("mode", "lines") + hovertemplate = scatter_kwargs.pop("hovertemplate", None) + + if auto_layout is True: + # Sort columns by the difference between the max and min values. + # This is to help determine which columns should share the same y-axis. + diff = df.max(numeric_only=True) - df.min(numeric_only=True) + sorted_columns = diff.sort_values(ascending=False).index + if sorted_columns is None or len(sorted_columns) == 0: + raise ValueError("Error: expected data with numeric values.") + df = df[sorted_columns] + + for i, col in enumerate(df.columns): + + if col in y: # type: ignore[operator] + hovertemplate = ( + hovertemplate + if hovertemplate + else f"{df[col].name}: %{{y}}" + ) + share_yaxis = should_share_axis(df, first_y, col, threshold=2.5) + if share_yaxis is True: + add_scatter = True + if share_yaxis is False: + yaxis_num = 2 + yaxis = f"y{yaxis_num}" + if second_y is None: + second_y = col + add_scatter = True + if second_y is not None: + add_scatter = False + share_yaxis = should_share_axis(df, col, second_y, threshold=3) + if share_yaxis is True: + add_scatter = True + if share_yaxis is False: + yaxis_num = 3 + yaxis = f"y{yaxis_num}" + third_y = col + add_scatter = True + + if add_scatter is True: + fig = fig.add_scatter( + x=df.index, + y=df[col], + name=col, + mode=mode, + line=dict(width=1, color=LARGE_CYCLER[i % len(LARGE_CYCLER)]), + hovertemplate=hovertemplate, + hoverlabel=dict(font_size=10), + yaxis=yaxis, + **scatter_kwargs, + ) + + if auto_layout is False: + color = 0 + for i, col in enumerate(y): # type: ignore[arg-type] + hovertemplate = ( + hovertemplate + if hovertemplate + else f"{df[col].name}: %{{y}}" + ) + fig = fig.add_scatter( + x=df.index, + y=df[col], + name=col, + mode=mode, + line=dict(width=1, color=LARGE_CYCLER[color]), + hovertemplate=hovertemplate, + hoverlabel=dict(font_size=10), + yaxis="y1", + **scatter_kwargs, + ) + color += 1 + if y2: + second_y = y2[0] + for i, col in enumerate(y2): + hovertemplate = ( + hovertemplate + if hovertemplate + else f"{df[col].name}: %{{y}}" + ) + fig = fig.add_scatter( + x=df.index, + y=df[col], + name=col, + mode=mode, + line=dict(width=1, color=LARGE_CYCLER[color]), + hovertemplate=hovertemplate, + hoverlabel=dict(font_size=10), + yaxis="y2", + **scatter_kwargs, + ) + color += 1 + + if returns is True: + y1title = "Percent" + title = f"{title} - Cumulative Returns" if title else "Cumulative Returns" + + if normalize is True: + y1title = "Z-Score" + title = f"{title} - Z-Score" if title else "Z-Score" + + if not title and target is not None: + title = f"{target.replace('_', ' ').title()}" + + fig.update_layout( + title=dict(text=title if title else None, x=0.5, font=dict(size=16)), + paper_bgcolor="rgba(0,0,0,0)", + plot_bgcolor="rgba(0,0,0,0)", + legend=dict( + orientation="h", + yanchor="bottom", + xanchor="right", + y=1.02, + x=0.95, + bgcolor="rgba(0,0,0,0)", + ), + yaxis=( + dict( + ticklen=0, + side="right", + title=dict( + text=y1title if ytitle else None, standoff=30, font=dict(size=16) + ), + tickfont=dict(size=14), + anchor="x", + showgrid=True, + mirror=True, + showline=True, + zeroline=False, + gridcolor="rgba(128,128,128,0.25)", + ) + ), + yaxis2=( + dict( + overlaying="y", + side="left", + ticklen=0, + showgrid=False, + showline=True, + zeroline=False, + mirror=True, + title=dict( + text=y2title if y2title else None, standoff=10, font=dict(size=16) + ), + tickfont=dict(size=14), + anchor="x", + ) + ), + yaxis3=( + dict( + overlaying="y", + side="left", + ticklen=0, + position=0, + showgrid=False, + showline=False, + zeroline=False, + showticklabels=True, + mirror=False, + tickfont=dict(size=12, color="rgba(128,128,128,0.75)"), + anchor="free", + ) + ), + xaxis=dict( + ticklen=0, + showgrid=True, + title=( + dict(text=xtitle, standoff=30, font=dict(size=16)) if xtitle else None + ), + zeroline=False, + showline=True, + mirror=True, + gridcolor="rgba(128,128,128,0.25)", + domain=[0.095, 0.95] if third_y else None, + ), + margin=dict(r=25, l=25) if normalize is False else None, + autosize=True, + dragmode="pan", + hovermode="x", + ) + + if df.index.name not in ("date", "timestamp"): + fig.update_xaxes(type="category") + + if layout_kwargs: + fig.update_layout( + **layout_kwargs, + ) + + return fig + + +def bar_chart( # noqa: PLR0912 + data: Union[ + list, + dict, + pd.DataFrame, + List[pd.DataFrame], + pd.Series, + List[pd.Series], + np.ndarray, + Data, + ], + x: str, + y: Union[str, List[str]], + barmode: Literal["group", "stack", "relative", "overlay"] = "group", + xtype: Literal["category", "multicategory", "date", "log", "linear"] = "category", + title: Optional[str] = None, + xtitle: Optional[str] = None, + ytitle: Optional[str] = None, + orientation: Literal["h", "v"] = "v", + colors: Optional[List[str]] = None, + bar_kwargs: Optional[Dict[str, Any]] = None, + layout_kwargs: Optional[Dict[str, Any]] = None, + **kwargs, +) -> Union[OpenBBFigure, Figure]: + """Create a vertical bar chart on a single x-axis with one or more values for the y-axis. + + Parameters + ---------- + data : Union[ + list, dict, pd.DataFrame, List[pd.DataFrame], pd.Series, List[pd.Series], np.ndarray, Data + ] + Data to plot. + x : str + The x-axis column name. + y : Union[str, List[str]] + The y-axis column name(s). + barmode : Literal["group", "stack", "relative", "overlay"], optional + The bar mode, by default "group". + xtype : Literal["category", "multicategory", "date", "log", "linear"], optional + The x-axis type, by default "category". + title : str, optional + The title of the chart, by default None. + xtitle : str, optional + The x-axis title, by default None. + ytitle : str, optional + The y-axis title, by default None. + colors: List[str], optional + Manually set the colors to cycle through for each column in 'y', by default None. + bar_kwargs : Dict[str, Any], optional + Additional keyword arguments to apply with figure.add_bar(), by default None. + layout_kwargs : Dict[str, Any], optional + Additional keyword arguments to apply with figure.update_layout(), by default None. + + Returns + ------- + OpenBBFigure + The OpenBBFigure object. + """ + + try: + figure = OpenBBFigure() + except Exception as _: + figure = OpenBBFigure(create_backend=True) + + figure = figure.create_subplots( + 1, + 1, + shared_xaxes=True, + vertical_spacing=0.06, + horizontal_spacing=0.01, + row_width=[1], + specs=[[{"secondary_y": True}]], + ) + + figure.update_layout(ChartStyle().plotly_template.get("layout", {})) + if colors is not None: + figure.update_layout(colorway=colors) + if bar_kwargs is None: + bar_kwargs = {} + if isinstance(data, (Data, list, dict)): + data = basemodel_to_df(convert_to_basemodel(data), index=None) + + bar_df = data.copy().set_index(x) # type: ignore + y = y.split(",") if isinstance(y, str) else y + + for item in y: + figure.add_bar( + x=bar_df.index if orientation == "v" else bar_df[item], + y=bar_df[item] if orientation == "v" else bar_df.index, + name=bar_df[item].name, + showlegend=len(y) > 1, + legendgroup=bar_df[item].name, + orientation=orientation, + hovertemplate=( + "%{fullData.name}:%{y}" + if orientation == "v" + else "%{fullData.name}:%{x}" + ), + width=0.95 / len(y) * 0.75 if barmode == "group" and len(y) > 1 else 0.95, + **bar_kwargs, + ) + + figure.update_layout( + title=dict(text=title if title else None, x=0.5, font=dict(size=16)), + paper_bgcolor="rgba(0,0,0,0)", + plot_bgcolor="rgba(0,0,0,0)", + legend=dict( + orientation="h", + yanchor="bottom", + xanchor="right", + y=1.02, + x=0.98, + bgcolor="rgba(0,0,0,0)", + ), + xaxis=dict( + type=xtype, + title=dict( + text=xtitle if xtitle else None, standoff=30, font=dict(size=16) + ), + ticklen=0, + showgrid=orientation == "h", + tickformat="%{x}", + tickfont=dict(size=12), + categoryorder="array" if orientation == "v" else None, + categoryarray=bar_df.index if orientation == "v" else None, + ), + yaxis=dict( + title=dict( + text=ytitle if ytitle else None, standoff=30, font=dict(size=16) + ), + ticklen=0, + showgrid=orientation == "v", + tickfont=dict(size=12), + side="left" if orientation == "h" else "right", + categoryorder="array" if orientation == "h" else None, + categoryarray=bar_df.index if orientation == "h" else None, + ), + margin=dict(pad=5), + barmode=barmode, + ) + if orientation == "h": + figure.update_layout( + xaxis=dict( + type="linear", + showspikes=False, + ), + yaxis=dict( + type="category", + showspikes=False, + ), + hoverlabel=dict( + font=dict(size=12), + ), + ) + if layout_kwargs: + figure.update_layout( + **layout_kwargs, + ) + return figure + + +def bar_increasing_decreasing( # pylint: disable=W0102 + keys: List[str], + values: List[Union[int, float]], + title: Optional[str] = None, + xtitle: Optional[str] = None, + ytitle: Optional[str] = None, + colors: List[str] = ["blue", "red"], + orientation: Literal["h", "v"] = "h", + barmode: Literal["group", "stack", "relative", "overlay"] = "relative", + layout_kwargs: Optional[Dict[str, Any]] = None, +) -> Union[OpenBBFigure, Figure]: + """Create a bar chart with increasing and decreasing values represented by two colors. + + Parameters + ---------- + keys : List[str] + The x-axis keys. + values : List[Any] + The y-axis values. + title : Optional[str], optional + The title of the chart, by default None. + xtitle : Optional[str], optional + The x-axis title, by default None. + ytitle : Optional[str], optional + The y-axis title, by default None. + colors : List[str], optional + The colors to use for increasing and decreasing values, by default ["blue", "red"]. + orientation : Literal["h", "v"], optional + The orientation of the bars, by default "h". + barmode : Literal["group", "stack", "relative", "overlay"], optional + The bar mode, by default "relative". + layout_kwargs : Optional[Dict[str, Any]], optional + Additional keyword arguments to apply with figure.update_layout(), by default None. + + Returns + ------- + OpenBBFigure + The OpenBBFigure object. + """ + + try: + figure = OpenBBFigure() + except Exception as _: + figure = OpenBBFigure(create_backend=True) + + figure = figure.create_subplots( + 1, + 1, + shared_xaxes=False, + vertical_spacing=0.06, + horizontal_spacing=0.01, + row_width=[1], + specs=[[{"secondary_y": True}]], + ) + # figure.update_layout(ChartStyle().plotly_template.get("layout", {})) + + try: + data = pd.Series(data=values, index=keys) + increasing_data = data[data > 0] # type: ignore + decreasing_data = data[data < 0] # type: ignore + except Exception as e: + raise ValueError(f"Error: {e}") from e + + if not increasing_data.empty: + figure.add_bar( + x=increasing_data.index if orientation == "v" else increasing_data, + y=increasing_data if orientation == "v" else increasing_data.index, + marker=dict(color=colors[0]), + orientation=orientation, + showlegend=False, + width=0.95 / len(keys) * 0.75 if barmode == "group" else 0.95, + hoverinfo="y" if orientation == "v" else "x", + ) + if not decreasing_data.empty: + figure.add_bar( + x=decreasing_data.index if orientation == "v" else decreasing_data, + y=decreasing_data if orientation == "v" else decreasing_data.index, + marker=dict(color=colors[1]), + orientation=orientation, + showlegend=False, + width=0.95 / len(keys) * 0.75 if barmode == "group" else 0.95, + hoverinfo="y" if orientation == "v" else "x", + ) + + figure.update_layout( + title=dict(text=title if title else None, x=0.5, font=dict(size=20)), + hovermode="x" if orientation == "v" else "y", + hoverlabel=dict(align="left" if orientation == "h" else "auto"), + yaxis=dict( + title=dict( + text=ytitle if ytitle else None, standoff=30, font=dict(size=16) + ), + side="left" if orientation == "h" else "right", + showgrid=orientation == "v", + gridcolor="rgba(128,128,128,0.25)", + tickfont=dict(size=12), + ticklen=0, + categoryorder="array" if orientation == "h" else None, + categoryarray=keys if orientation == "h" else None, + ), + xaxis=dict( + title=dict( + text=xtitle if xtitle else None, standoff=30, font=dict(size=16) + ), + showgrid=orientation == "h", + gridcolor="rgba(128,128,128,0.25)", + tickfont=dict(size=12), + ticklen=0, + categoryorder="array" if orientation == "v" else None, + categoryarray=keys if orientation == "v" else None, + ), + margin=dict(pad=5), + ) + + if layout_kwargs: + figure.update_layout( + **layout_kwargs, + ) + + return figure diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/utils/helpers.py b/openbb_platform/obbject_extensions/charting/openbb_charting/utils/helpers.py index da765a42bb6..53d26c40e47 100644 --- a/openbb_platform/obbject_extensions/charting/openbb_charting/utils/helpers.py +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/utils/helpers.py @@ -1,13 +1,18 @@ """Helper functions for charting.""" +import importlib from inspect import getmembers, getsource, isfunction from typing import List -from openbb_charting import charting_router +import pandas as pd +from pandas_ta import candles def get_charting_functions() -> List[str]: """Discover charting functions.""" + + charting_router = importlib.import_module("openbb_charting.charting_router") + implemented_functions = [] for name, obj in getmembers(charting_router, isfunction): @@ -19,3 +24,71 @@ def get_charting_functions() -> List[str]: implemented_functions.append(name) return implemented_functions + + +def z_score_standardization(data: pd.Series) -> pd.Series: + """Z-Score Standardization Method.""" + return (data - data.mean()) / data.std() + + +def calculate_returns(data: pd.Series) -> pd.Series: + """Calculate the returns of a column.""" + return ((1 + data.pct_change().dropna()).cumprod() - 1) * 100 + + +def should_share_axis( + df: pd.DataFrame, col1: str, col2: str, threshold: float = 0.15 +) -> bool: + """Determine whether two columns should share an axis.""" + try: + if isinstance(df, pd.Series): + df = df.to_frame() + range1 = df[col1].max() - df[col1].min() + range2 = df[col2].max() - df[col2].min() + # Calculate the ratio of the two ranges + ratio = max(range1, range2) / min(range1, range2) + # If the ratio is less than the threshold, the two columns can share an axis + if ratio == 1: + return True + return ratio < threshold + except Exception: + return False + + +def heikin_ashi(data: pd.DataFrame) -> pd.DataFrame: + """Return OHLC data as Heikin Ashi Candles. + + Parameters + ---------- + data: pd.DataFrame + DataFrame containing OHLC data. + + Returns + ------- + pd.DataFrame + DataFrame copy with Heikin Ashi candle calculations. + """ + + df = data.copy() + + check_columns = ["open", "high", "low", "close"] + + for item in check_columns: + if item not in df.columns: + raise ValueError( + "The expected column labels, " + f"{check_columns}" + ", were not found in DataFrame." + ) + + ha = candles.ha( + df["open"], + df["high"], + df["low"], + df["close"], + ) + + for item in check_columns: + df[item] = ha[f"HA_{item}"] + + return df diff --git a/openbb_platform/obbject_extensions/charting/openbb_charting/utils/relative_rotation.py b/openbb_platform/obbject_extensions/charting/openbb_charting/utils/relative_rotation.py new file mode 100644 index 00000000000..b543d5d2633 --- /dev/null +++ b/openbb_platform/obbject_extensions/charting/openbb_charting/utils/relative_rotation.py @@ -0,0 +1,582 @@ +"""Relative Rotation Chart Helpers.""" + +from datetime import date as dateType +from typing import Literal, Optional +from warnings import warn + +from pandas import DataFrame, to_datetime +from plotly import graph_objects as go +from plotly.graph_objects import Figure + +color_sequence = [ + "burlywood", + "orange", + "grey", + "magenta", + "cyan", + "yellowgreen", + "#1f77b4", + "#aec7e8", + "#ff7f0e", + "#ffbb78", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5", + "#8c564b", + "#c49c94", + "#e377c2", + "#f7b6d2", + "#7f7f7f", + "#c7c7c7", + "#bcbd22", + "#dbdb8d", + "#17becf", + "#9edae5", + "#7e7e7e", + "#1b9e77", + "#d95f02", + "#7570b3", + "#e7298a", + "#66a61e", + "#e6ab02", + "#a6761d", + "#666666", + "#f0027f", + "#bf5b17", + "#d9f202", + "#8dd3c7", + "#ffffb3", + "#bebada", + "#fb8072", + "#80b1d3", + "#fdb462", + "#b3de69", + "#fccde5", + "#d9d9d9", + "#bc80bd", + "#ccebc5", + "#ffed6f", + "#6a3d9a", + "#b15928", + "#b2df8a", + "#33a02c", + "#fb9a99", + "#e31a1c", + "#fdbf6f", + "#ff7f00", + "#cab2d6", + "#6a3d9a", + "#ffff99", + "#b15928", +] + + +def create_rrg_with_tails( + ratios_data: DataFrame, + momentum_data: DataFrame, + study: str, + benchmark_symbol: str, + tail_periods: int, + tail_interval: Literal["day", "week", "month"], +) -> Figure: + """Create The Relative Rotation Graph With Tails. + + Parameters + ---------- + ratios_data : DataFrame + The DataFrame containing the RS-Ratio values. + momentum_data : DataFrame + The DataFrame containing the RS-Momentum values. + study : str + The study that was selected when loading the raw data. + If custom data is supplied, this will override the study for the chart titles. + benchmark_symbol : str + The symbol of the benchmark. + tail_periods : int + The number of periods to display in the tails. + tail_interval : Literal["day", "week", "month"] + + Returns + ------- + Figure + Plotly GraphObjects Figure. + """ + color = 0 + symbols = ratios_data.columns.to_list() + + tail_dict = {"week": "W", "month": "M"} + + ratios_data.index = to_datetime(ratios_data.index) + momentum_data.index = to_datetime(momentum_data.index) + if tail_interval != "day": + ratios_data = ratios_data.resample(tail_dict[tail_interval]).last() + momentum_data = momentum_data.resample(tail_dict[tail_interval]).last() + ratios_data = ratios_data.iloc[-tail_periods:] + momentum_data = momentum_data.iloc[-tail_periods:] + _tail_periods = len(ratios_data) + tail_title = ( + f"The Previous {_tail_periods} {tail_interval.capitalize()}s " + f"Ending {ratios_data.index[-1].strftime('%Y-%m-%d')}" + ) + x_min = ratios_data.min().min() + x_max = ratios_data.max().max() + y_min = momentum_data.min().min() + y_max = momentum_data.max().max() + # Create an empty list to store the scatter traces + traces = [] + + for symbol in symbols: + # Select a single row from each dataframe + x_data = ratios_data[symbol] + y_data = momentum_data[symbol] + name = symbol.upper().replace("^", "").replace(":US", "") + # Create a trace for the line + line_trace = go.Scattergl( + x=x_data[:-1], # All but the last data point + y=y_data[:-1], # All but the last data point + mode="lines+markers", + line=dict( + color=color_sequence[color % len(color_sequence)], width=2, dash="dash" + ), + marker=dict(size=6, color=color_sequence[color % len(color_sequence)]), + opacity=0.3, + showlegend=False, + name=name, + text=name, + hovertemplate="%{fullData.name}" + + "
    RS-Ratio: %{x:.4f}
    " + + "RS-Momentum: %{y:.4f}" + + "", + hoverlabel=dict(font_size=10), + ) + special_name = "-" in name or len(name) > 5 + marker_size = 38 if special_name else 30 + # Create a trace for the last data point + marker_trace = go.Scatter( + x=[x_data.iloc[-1]], # Only the last data point + y=[y_data.iloc[-1]], # Only the last data point + mode="markers+text", + name=name, + text=[name], + textposition="middle center", + textfont=( + dict(size=10, color="black") + if len(name) < 4 + else dict(size=8, color="black") + ), + marker=dict( + size=marker_size, + color=color_sequence[color % len(color_sequence)], + line=dict(color="black", width=1), + ), + showlegend=False, + hovertemplate="%{fullData.name}" + + "
    RS-Ratio: %{x:.4f}
    " + + "RS-Momentum: %{y:.4f}" + + "", + hoverlabel=dict(font_size=10), + ) + traces.extend([line_trace, marker_trace]) + color += 1 + padding = 0.1 + y_range = [y_min - padding * abs(y_min) - 0.3, y_max + padding * abs(y_max) + 0.3] + x_range = [x_min - padding * abs(x_min) - 0.3, x_max + padding * abs(x_max) + 0.3] + + layout = go.Layout( + title={ + "text": ( + f"Relative Rotation Against {benchmark_symbol.replace('^', '')} {study.capitalize()} For {tail_title}" + ), + "x": 0.5, + "xanchor": "center", + "font": dict(color="white", size=18), + }, + xaxis=dict( + title="RS-Ratio", + zerolinecolor="black", + range=x_range, + showspikes=False, + ), + yaxis=dict( + title="
    RS-Momentum", + zerolinecolor="black", + range=y_range, + showspikes=False, + side="left", + title_standoff=5, + ), + shapes=[ + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=0, + y0=0, + x1=x_range[1], + y1=y_range[1], + fillcolor="lightgreen", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=x_range[0], + y0=0, + x1=0, + y1=y_range[1], + fillcolor="lightblue", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=x_range[0], + y0=y_range[0], + x1=0, + y1=0, + fillcolor="lightpink", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=0, + y0=y_range[0], + x1=x_range[1], + y1=0, + fillcolor="lightyellow", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=x_range[0], + y0=y_range[0], + x1=x_range[1], + y1=y_range[1], + line=dict( + color="Black", + width=1, + ), + fillcolor="rgba(0,0,0,0)", + layer="above", + ), + ], + annotations=[ + go.layout.Annotation( + x=1, + xref="paper", + y=1, + yref="paper", + text="Leading", + showarrow=False, + font=dict( + size=18, + color="darkgreen", + ), + ), + go.layout.Annotation( + x=1, + xref="paper", + y=0, + yref="paper", + text="Weakening", + showarrow=False, + font=dict( + size=18, + color="goldenrod", + ), + ), + go.layout.Annotation( + x=0, + xref="paper", + y=0, + yref="paper", + text="Lagging", + showarrow=False, + font=dict( + size=18, + color="red", + ), + ), + go.layout.Annotation( + x=0, + xref="paper", + yref="paper", + y=1, + text="Improving", + showarrow=False, + font=dict( + size=18, + color="blue", + ), + ), + ], + autosize=True, + margin=dict( + l=30, + r=50, + b=50, + t=50, + pad=0, + ), + dragmode="pan", + hovermode="closest", + ) + + fig = go.Figure(data=traces, layout=layout) + + return fig + + +def create_rrg_without_tails( + ratios_data: DataFrame, + momentum_data: DataFrame, + benchmark_symbol: str, + study: str, + date: Optional[dateType] = None, +) -> Figure: + """Create the Plotly Figure Object without Tails. + + Parameters + ---------- + ratios_data : DataFrame + The DataFrame containing the RS-Ratio values. + momentum_data : DataFrame + The DataFrame containing the RS-Momentum values. + benchmark_symbol : str + The symbol of the benchmark. + study: str + The study that was selected when loading the raw data. + If custom data is supplied, this will override the study for the chart titles. + date : Optional[dateType], optional + A specific date within the data to target for display, by default None. + + Returns + ------- + Figure + Plotly GraphObjects Figure. + """ + + if date is not None and date not in ratios_data.index.astype(str): + warn(f"Date {str(date)} not found in data, using the last available date.") + date = ratios_data.index[-1] + if date is None: + date = ratios_data.index[-1] + + # Select a single row from each dataframe + row_x = ratios_data.loc[to_datetime(date).date()] # type: ignore + row_y = momentum_data.loc[to_datetime(date).date()] # type: ignore + + x_max = row_x.max() + 0.5 + x_min = row_x.min() - 0.5 + y_max = row_y.max() + 0.5 + y_min = row_y.min() - 0.5 + + # Create an empty list to store the scatter traces + traces = [] + + # Loop through each column in the row_x dataframe + for i, (column_name, value_x) in enumerate(row_x.items()): + # Retrieve the corresponding value from the row_y dataframe + value_y = row_y[column_name] # type: ignore + marker_name = column_name.upper().replace("^", "").replace(":US", "") # type: ignore + special_name = "-" in marker_name or len(marker_name) > 5 + marker_size = 38 if special_name else 30 + # Create a scatter trace for each column + trace = go.Scatter( + x=[value_x], + y=[value_y], + mode="markers+text", + text=[marker_name], + textposition="middle center", + textfont=dict(size=10 if len(marker_name) < 4 else 8, color="black"), + marker=dict( + size=marker_size, + color=color_sequence[i % len(color_sequence)], + line=dict(color="black", width=1), + ), + name=column_name, + showlegend=False, + hovertemplate="%{fullData.name}" + + "
    RS-Ratio: %{x:.4f}
    " + + "RS-Momentum: %{y:.4f}" + + "", + ) + # Add the trace to the list + traces.append(trace) + + padding = 0.1 + y_range = [y_min - padding * abs(y_min) - 0.3, y_max + padding * abs(y_max)] + x_range = [x_min - padding * abs(x_min), x_max + padding * abs(x_max)] + + layout = go.Layout( + title={ + "text": ( + f"RS-Ratio vs RS-Momentum of {study.capitalize()} " + f"Against {benchmark_symbol.replace('^', '')} - {to_datetime(row_x.name).strftime('%Y-%m-%d')}" # type: ignore + ), + "x": 0.5, + "xanchor": "center", + "font": dict(size=20), + }, + xaxis=dict( + title="RS-Ratio", + zerolinecolor="black", + range=x_range, + showspikes=False, + ), + yaxis=dict( + title="
    RS-Momentum", + zerolinecolor="black", + range=y_range, + side="left", + title_standoff=5, + showspikes=False, + ), + shapes=[ + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=0, + y0=0, + x1=x_range[1], + y1=y_range[1], + fillcolor="lightgreen", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=x_range[0], + y0=0, + x1=0, + y1=y_range[1], + fillcolor="lightblue", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=x_range[0], + y0=y_range[0], + x1=0, + y1=0, + fillcolor="lightpink", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=0, + y0=y_range[0], + x1=x_range[1], + y1=0, + fillcolor="lightyellow", + opacity=0.3, + layer="below", + line_width=0, + ), + go.layout.Shape( + type="rect", + xref="x", + yref="y", + x0=x_range[0], + y0=y_range[0], + x1=x_range[1], + y1=y_range[1], + line=dict( + color="Black", + width=1, + ), + fillcolor="rgba(0,0,0,0)", + layer="above", + ), + ], + annotations=[ + go.layout.Annotation( + x=1, + xref="paper", + y=1, + yref="paper", + text="Leading", + showarrow=False, + font=dict( + size=18, + color="darkgreen", + ), + ), + go.layout.Annotation( + x=1, + xref="paper", + y=0, + yref="paper", + text="Weakening", + showarrow=False, + font=dict( + size=18, + color="goldenrod", + ), + ), + go.layout.Annotation( + x=0, + xref="paper", + y=0, + yref="paper", + text="Lagging", + showarrow=False, + font=dict( + size=18, + color="red", + ), + ), + go.layout.Annotation( + x=0, + xref="paper", + yref="paper", + y=1, + text="Improving", + showarrow=False, + font=dict( + size=18, + color="blue", + ), + ), + ], + autosize=True, + margin=dict( + l=30, + r=50, + b=50, + t=50, + pad=0, + ), + dragmode="pan", + ) + + fig = go.Figure(data=traces, layout=layout) + + return fig diff --git a/openbb_platform/obbject_extensions/charting/poetry.lock b/openbb_platform/obbject_extensions/charting/poetry.lock index 75146b5425e..54f0410fa3e 100644 --- a/openbb_platform/obbject_extensions/charting/poetry.lock +++ b/openbb_platform/obbject_extensions/charting/poetry.lock @@ -933,13 +933,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -2263,4 +2263,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "8e596e7ed1b446a8b76dd6b76c083527f659282813bdb844926830254ace9de4" +content-hash = "bb29ff5b59d695fe948af761716ca0f021b9733ed9061c7aa041077b74823d0b" diff --git a/openbb_platform/obbject_extensions/charting/pyproject.toml b/openbb_platform/obbject_extensions/charting/pyproject.toml index ee19e1e7c90..d95d9b43ab9 100644 --- a/openbb_platform/obbject_extensions/charting/pyproject.toml +++ b/openbb_platform/obbject_extensions/charting/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-charting" -version = "2.0.2" +version = "2.0.3" description = "Charting extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -16,7 +16,7 @@ pywry = "^0.6.1" svglib = "^1.5.1" nbformat = "^5.9.2" pandas-ta = "^0.3.14b" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/obbject_extensions/charting/tests/__init__.py b/openbb_platform/obbject_extensions/charting/tests/__init__.py index e69de29bb2d..6108752fdf4 100644 --- a/openbb_platform/obbject_extensions/charting/tests/__init__.py +++ b/openbb_platform/obbject_extensions/charting/tests/__init__.py @@ -0,0 +1 @@ +"""OBBject Extensions Charting Tests Module.""" diff --git a/openbb_platform/obbject_extensions/charting/tests/test_charting.py b/openbb_platform/obbject_extensions/charting/tests/test_charting.py index 4e29544dd87..3f270c53a25 100644 --- a/openbb_platform/obbject_extensions/charting/tests/test_charting.py +++ b/openbb_platform/obbject_extensions/charting/tests/test_charting.py @@ -1,3 +1,5 @@ +"""Test Charting class.""" + from unittest.mock import MagicMock, patch import pytest @@ -6,9 +8,14 @@ from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings from pydantic import BaseModel +# pylint: disable=redefined-outer-name, protected-access + class MockDataframe: + """Mock Dataframe.""" + def __init__(self): + """Mock Dataframe.""" self.columns = ["column1", "column2"] @@ -17,12 +24,19 @@ mock_dataframe = MockDataframe() @pytest.fixture() def obbject(): + """Mock OOBject.""" + class MockStdParams(BaseModel): + """Mock Standard Parameters.""" + param1: str param2: str class MockOOBject: + """Mock OOBject.""" + def __init__(self): + """Mock OOBject.""" self._user_settings = UserSettings() self._system_settings = SystemSettings() self._route = "mock/route" @@ -36,36 +50,53 @@ def obbject(): self.warnings = "mock_warnings" def to_dataframe(self): + """Mock to_dataframe.""" return mock_dataframe return MockOOBject() def test_charting_settings(obbject): + """Test charting_settings.""" cm = Charting(obbject) assert isinstance(cm, Charting) -@patch("openbb_charting.ChartIndicators.get_available_indicators") -def test_indicators(mock_get_available_indicators, obbject): - # Arrange - mock_get_available_indicators.return_value = [ - "indicator1", - "indicator2", - "indicator3", - ] +def test_indicators(obbject): + """Test indicators method.""" obj = Charting(obbject) + indicators = list(obj.indicators().model_dump().keys()) - # Act - result = obj.indicators() - - # Assert - assert result == ["indicator1", "indicator2", "indicator3"] - mock_get_available_indicators.assert_called_once() + assert indicators == [ + "sma", + "ema", + "hma", + "wma", + "zlma", + "ad", + "adoscillator", + "adx", + "aroon", + "atr", + "cci", + "clenow", + "demark", + "donchian", + "fib", + "fisher", + "ichimoku", + "kc", + "macd", + "obv", + "rsi", + "srlines", + "stoch", + ] @patch("openbb_charting.get_charting_functions") def test_functions(mock_get_charting_functions): + """Test functions method.""" # Arrange mock_get_charting_functions.return_value = ["function1", "function2", "function3"] @@ -80,6 +111,7 @@ def test_functions(mock_get_charting_functions): @patch("openbb_charting.core.backend.get_backend") @patch("openbb_charting.core.backend.create_backend") def test_handle_backend(mock_create_backend, mock_get_backend, obbject): + """Test _handle_backend method.""" # Act -> _handle backend is called in the constructor obj = Charting(obbject) @@ -90,6 +122,7 @@ def test_handle_backend(mock_create_backend, mock_get_backend, obbject): @patch("openbb_charting.charting_router") def test_get_chart_function(mock_charting_router): + """Test _get_chart_function method.""" # Arrange mock_function = MagicMock() mock_charting_router.some_function = mock_function @@ -104,6 +137,7 @@ def test_get_chart_function(mock_charting_router): @patch("openbb_charting.Charting._get_chart_function") def test_show(mock_get_chart_function, obbject): + """Test show method.""" # Arrange mock_function = MagicMock() mock_get_chart_function.return_value = mock_function @@ -122,6 +156,7 @@ def test_show(mock_get_chart_function, obbject): @patch("openbb_charting.to_chart") def test_to_chart(mock_to_chart, obbject): + """Test to_chart method.""" # Arrange mock_fig = MagicMock() mock_to_chart.return_value = (mock_fig, {"content": "mock_content"}) diff --git a/openbb_platform/openbb/assets/extension_map.json b/openbb_platform/openbb/assets/extension_map.json deleted file mode 100644 index a364041c217..00000000000 --- a/openbb_platform/openbb/assets/extension_map.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "openbb_core_extension": [ - "commodity@1.0.2", - "crypto@1.1.4", - "currency@1.1.4", - "derivatives@1.1.4", - "economy@1.1.4", - "equity@1.1.4", - "etf@1.1.4", - "fixedincome@1.1.4", - "index@1.1.4", - "news@1.1.4", - "regulators@1.1.4" - ], - "openbb_obbject_extension": [], - "openbb_provider_extension": [ - "benzinga@1.1.4", - "federal_reserve@1.1.4", - "fmp@1.1.4", - "fred@1.1.4", - "intrinio@1.1.4", - "oecd@1.1.4", - "polygon@1.1.4", - "sec@1.1.4", - "tiingo@1.1.4", - "tradingeconomics@1.1.4", - "yfinance@1.1.4" - ] -} \ No newline at end of file diff --git a/openbb_platform/openbb/assets/reference.json b/openbb_platform/openbb/assets/reference.json index 7b753ba76ee..76e676be348 100644 --- a/openbb_platform/openbb/assets/reference.json +++ b/openbb_platform/openbb/assets/reference.json @@ -1,26584 +1,27293 @@ { - "/crypto/price/historical": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical price data for cryptocurrency pair(s) within a provider.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.crypto.price.historical(symbol='BTCUSD', provider='fmp')\nobb.crypto.price.historical(symbol='BTCUSD', start_date='2024-01-01', end_date='2024-01-31', provider='fmp')\nobb.crypto.price.historical(symbol='BTCUSD,ETHUSD', start_date='2024-01-01', end_date='2024-01-31', provider='polygon')\n# Get monthly historical prices from Yahoo Finance for Ethereum.\nobb.crypto.price.historical(symbol='ETH-USD', interval=1m, start_date='2024-01-01', end_date='2024-12-31', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'polygon', 'tiingo', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "interval", - "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - } - ], - "polygon": [ - { - "name": "interval", - "type": "str", - "description": "Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y", - "default": "1d", - "optional": true - }, - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", - "default": "asc", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 49999, - "optional": true - } - ], - "tiingo": [ - { - "name": "interval", - "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - }, - { - "name": "exchanges", - "type": "List[str]", - "description": "To limit the query to a subset of exchanges e.g. ['POLONIEX', 'GDAX']", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "interval", - "type": "Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1W', '1M', '1Q']", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CryptoHistorical]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'polygon', 'tiingo', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "Union[date, datetime]", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": "", - "optional": false - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": "", - "optional": false - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": "", - "optional": false - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - }, - { - "name": "vwap", - "type": "Annotated[float, Gt(gt=0)]", - "description": "Volume Weighted Average Price over the period.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change in the price from the previous close, as a normalized percent.", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "transactions", - "type": "Annotated[int, Gt(gt=0)]", - "description": "Number of transactions for the symbol in the time period.", - "default": null, - "optional": true - } - ], - "tiingo": [ - { - "name": "transactions", - "type": "int", - "description": "Number of transactions for the symbol in the time period.", - "default": null, - "optional": true - }, - { - "name": "volume_notional", - "type": "float", - "description": "The last size done for the asset on the specific date in the quote currency. The volume of the asset on the specific date in the quote currency.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "CryptoHistorical" - }, - "/crypto/search": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Search available cryptocurrency pairs within a provider.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.crypto.search(provider='fmp')\nobb.crypto.search(query='BTCUSD', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Search query.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CryptoSearch]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data. (Crypto)", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the crypto.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "currency", - "type": "str", - "description": "The currency the crypto trades for.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The exchange code the crypto trades on.", - "default": null, - "optional": true - }, - { - "name": "exchange_name", - "type": "str", - "description": "The short name of the exchange the crypto trades on.", - "default": null, - "optional": true - } - ] - }, - "model": "CryptoSearch" - }, - "/currency/price/historical": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Currency Historical Price. Currency historical data.\n\nCurrency historical prices refer to the past exchange rates of one currency against\nanother over a specific period.\nThis data provides insight into the fluctuations and trends in the foreign exchange market,\nhelping analysts, traders, and economists understand currency performance,\nevaluate economic health, and make predictions about future movements.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.price.historical(symbol='EURUSD', provider='fmp')\n# Filter historical data with specific start and end date.\nobb.currency.price.historical(symbol='EURUSD', start_date='2023-01-01', end_date='2023-12-31', provider='fmp')\n# Get data with different granularity.\nobb.currency.price.historical(symbol='EURUSD', provider='polygon', interval=15m)\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'polygon', 'tiingo', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "interval", - "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - } - ], - "polygon": [ - { - "name": "interval", - "type": "str", - "description": "Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y", - "default": "1d", - "optional": true - }, - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", - "default": "asc", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 49999, - "optional": true - } - ], - "tiingo": [ - { - "name": "interval", - "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - } - ], - "yfinance": [ - { - "name": "interval", - "type": "Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1W', '1M', '1Q']", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CurrencyHistorical]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'polygon', 'tiingo', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "Union[date, datetime]", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": "", - "optional": false - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": "", - "optional": false - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": "", - "optional": false - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "vwap", - "type": "Annotated[float, Gt(gt=0)]", - "description": "Volume Weighted Average Price over the period.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change in the price from the previous close, as a normalized percent.", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "transactions", - "type": "Annotated[int, Gt(gt=0)]", - "description": "Number of transactions for the symbol in the time period.", - "default": null, - "optional": true - } - ], - "tiingo": [], - "yfinance": [] - }, - "model": "CurrencyHistorical" - }, - "/currency/search": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Currency Search.\n\nSearch available currency pairs.\nCurrency pairs are the national currencies from two countries coupled for trading on\nthe foreign exchange (FX) marketplace.\nBoth currencies will have exchange rates on which the trade will have its position basis.\nAll trading within the forex market, whether selling, buying, or trading, will take place through currency pairs.\n(ref: Investopedia)\nMajor currency pairs include pairs such as EUR/USD, USD/JPY, GBP/USD, etc.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.search(provider='intrinio')\n# Search for 'EURUSD' currency pair using 'intrinio' as provider.\nobb.currency.search(provider='intrinio', symbol=EURUSD)\n# Search for actively traded currency pairs on the queried date using 'polygon' as provider.\nobb.currency.search(provider='polygon', date=2024-01-02, active=True)\n# Search for terms using 'polygon' as provider.\nobb.currency.search(provider='polygon', search=Euro zone)\n```\n\n", - "parameters": { - "standard": [ - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [], - "polygon": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol of the pair to search.", - "default": null, - "optional": true - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - }, - { - "name": "search", - "type": "str", - "description": "Search for terms within the ticker and/or company name.", - "default": "", - "optional": true - }, - { - "name": "active", - "type": "bool", - "description": "Specify if the tickers returned should be actively traded on the queried date.", - "default": true, - "optional": true - }, - { - "name": "order", - "type": "Literal['asc', 'desc']", - "description": "Order data by ascending or descending.", - "default": "asc", - "optional": true - }, - { - "name": "sort", - "type": "Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']", - "description": "Sort field used for ordering.", - "default": "", - "optional": true - }, - { - "name": "limit", - "type": "Annotated[int, Gt(gt=0)]", - "description": "The number of data entries to return.", - "default": 1000, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CurrencyPairs]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "name", - "type": "str", - "description": "Name of the currency pair.", - "default": "", - "optional": false - } - ], - "fmp": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol of the currency pair.", - "default": "", - "optional": false - }, - { - "name": "currency", - "type": "str", - "description": "Base currency of the currency pair.", - "default": "", - "optional": false - }, - { - "name": "stock_exchange", - "type": "str", - "description": "Stock exchange of the currency pair.", - "default": null, - "optional": true - }, - { - "name": "exchange_short_name", - "type": "str", - "description": "Short name of the stock exchange of the currency pair.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "code", - "type": "str", - "description": "Code of the currency pair.", - "default": "", - "optional": false - }, - { - "name": "base_currency", - "type": "str", - "description": "ISO 4217 currency code of the base currency.", - "default": "", - "optional": false - }, - { - "name": "quote_currency", - "type": "str", - "description": "ISO 4217 currency code of the quote currency.", - "default": "", - "optional": false - } - ], - "polygon": [ - { - "name": "market", - "type": "str", - "description": "Name of the trading market. Always 'fx'.", - "default": "", - "optional": false - }, - { - "name": "locale", - "type": "str", - "description": "Locale of the currency pair.", - "default": "", - "optional": false - }, - { - "name": "currency_symbol", - "type": "str", - "description": "The symbol of the quote currency.", - "default": null, - "optional": true - }, - { - "name": "currency_name", - "type": "str", - "description": "Name of the quote currency.", - "default": null, - "optional": true - }, - { - "name": "base_currency_symbol", - "type": "str", - "description": "The symbol of the base currency.", - "default": null, - "optional": true - }, - { - "name": "base_currency_name", - "type": "str", - "description": "Name of the base currency.", - "default": null, - "optional": true - }, - { - "name": "last_updated_utc", - "type": "datetime", - "description": "The last updated timestamp in UTC.", - "default": "", - "optional": false - }, - { - "name": "delisted_utc", - "type": "datetime", - "description": "The delisted timestamp in UTC.", - "default": null, - "optional": true - } - ] - }, - "model": "CurrencyPairs" - }, - "/currency/snapshots": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Snapshots of currency exchange rates from an indirect or direct perspective of a base currency.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.snapshots(provider='fmp')\n# Get exchange rates from USD and XAU to EUR, JPY, and GBP using 'fmp' as provider.\nobb.currency.snapshots(provider='fmp', base='USD,XAU', counter_currencies='EUR,JPY,GBP', quote_type='indirect')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "base", - "type": "Union[str, List[str]]", - "description": "The base currency symbol. Multiple items allowed for provider(s): fmp.", - "default": "usd", - "optional": true - }, - { - "name": "quote_type", - "type": "Literal['direct', 'indirect']", - "description": "Whether the quote is direct or indirect. Selecting 'direct' will return the exchange rate as the amount of domestic currency required to buy one unit of the foreign currency. Selecting 'indirect' (default) will return the exchange rate as the amount of foreign currency required to buy one unit of the domestic currency.", - "default": "indirect", - "optional": true - }, - { - "name": "counter_currencies", - "type": "Union[List[str], str]", - "description": "An optional list of counter currency symbols to filter for. None returns all.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CurrencySnapshots]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "base_currency", - "type": "str", - "description": "The base, or domestic, currency.", - "default": "", - "optional": false - }, - { - "name": "counter_currency", - "type": "str", - "description": "The counter, or foreign, currency.", - "default": "", - "optional": false - }, - { - "name": "last_rate", - "type": "float", - "description": "The exchange rate, relative to the base currency. Rates are expressed as the amount of foreign currency received from selling one unit of the base currency, or the quantity of foreign currency required to purchase one unit of the domestic currency. To inverse the perspective, set the 'quote_type' parameter as 'direct'.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": null, - "optional": true - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": null, - "optional": true - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": null, - "optional": true - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "prev_close", - "type": "float", - "description": "The previous close price.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "change", - "type": "float", - "description": "The change in the price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "The change in the price from the previous close, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "ma50", - "type": "float", - "description": "The 50-day moving average.", - "default": null, - "optional": true - }, - { - "name": "ma200", - "type": "float", - "description": "The 200-day moving average.", - "default": null, - "optional": true - }, - { - "name": "year_high", - "type": "float", - "description": "The 52-week high.", - "default": null, - "optional": true - }, - { - "name": "year_low", - "type": "float", - "description": "The 52-week low.", - "default": null, - "optional": true - }, - { - "name": "last_rate_timestamp", - "type": "datetime", - "description": "The timestamp of the last rate.", - "default": null, - "optional": true - } - ] - }, - "model": "CurrencySnapshots" - }, - "/derivatives/options/chains": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the complete options chain for a ticker.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.derivatives.options.chains(symbol='AAPL', provider='intrinio')\n# Use the \"date\" parameter to get the end-of-day-data for a specific date, where supported.\nobb.derivatives.options.chains(symbol='AAPL', date=2023-01-25, provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [ - { - "name": "date", - "type": "Union[date, str]", - "description": "The end-of-day date for options chains data.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[OptionsChains]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data. Here, it is the underlying symbol for the option.", - "default": null, - "optional": true - }, - { - "name": "contract_symbol", - "type": "str", - "description": "Contract symbol for the option.", - "default": "", - "optional": false - }, - { - "name": "eod_date", - "type": "date", - "description": "Date for which the options chains are returned.", - "default": null, - "optional": true - }, - { - "name": "expiration", - "type": "date", - "description": "Expiration date of the contract.", - "default": "", - "optional": false - }, - { - "name": "strike", - "type": "float", - "description": "Strike price of the contract.", - "default": "", - "optional": false - }, - { - "name": "option_type", - "type": "str", - "description": "Call or Put.", - "default": "", - "optional": false - }, - { - "name": "open_interest", - "type": "int", - "description": "Open interest on the contract.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "theoretical_price", - "type": "float", - "description": "Theoretical value of the option.", - "default": null, - "optional": true - }, - { - "name": "last_trade_price", - "type": "float", - "description": "Last trade price of the option.", - "default": null, - "optional": true - }, - { - "name": "tick", - "type": "str", - "description": "Whether the last tick was up or down in price.", - "default": null, - "optional": true - }, - { - "name": "bid", - "type": "float", - "description": "Current bid price for the option.", - "default": null, - "optional": true - }, - { - "name": "bid_size", - "type": "int", - "description": "Bid size for the option.", - "default": null, - "optional": true - }, - { - "name": "ask", - "type": "float", - "description": "Current ask price for the option.", - "default": null, - "optional": true - }, - { - "name": "ask_size", - "type": "int", - "description": "Ask size for the option.", - "default": null, - "optional": true - }, - { - "name": "mark", - "type": "float", - "description": "The mid-price between the latest bid and ask.", - "default": null, - "optional": true - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": null, - "optional": true - }, - { - "name": "open_bid", - "type": "float", - "description": "The opening bid price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "open_ask", - "type": "float", - "description": "The opening ask price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": null, - "optional": true - }, - { - "name": "bid_high", - "type": "float", - "description": "The highest bid price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "ask_high", - "type": "float", - "description": "The highest ask price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": null, - "optional": true - }, - { - "name": "bid_low", - "type": "float", - "description": "The lowest bid price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "ask_low", - "type": "float", - "description": "The lowest ask price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": null, - "optional": true - }, - { - "name": "close_size", - "type": "int", - "description": "The closing trade size for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close_time", - "type": "datetime", - "description": "The time of the closing price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close_bid", - "type": "float", - "description": "The closing bid price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close_bid_size", - "type": "int", - "description": "The closing bid size for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close_bid_time", - "type": "datetime", - "description": "The time of the bid closing price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close_ask", - "type": "float", - "description": "The closing ask price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close_ask_size", - "type": "int", - "description": "The closing ask size for the option that day.", - "default": null, - "optional": true - }, - { - "name": "close_ask_time", - "type": "datetime", - "description": "The time of the ask closing price for the option that day.", - "default": null, - "optional": true - }, - { - "name": "prev_close", - "type": "float", - "description": "The previous close price.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "The change in the price of the option.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change, in normalizezd percentage points, of the option.", - "default": null, - "optional": true - }, - { - "name": "implied_volatility", - "type": "float", - "description": "Implied volatility of the option.", - "default": null, - "optional": true - }, - { - "name": "delta", - "type": "float", - "description": "Delta of the option.", - "default": null, - "optional": true - }, - { - "name": "gamma", - "type": "float", - "description": "Gamma of the option.", - "default": null, - "optional": true - }, - { - "name": "theta", - "type": "float", - "description": "Theta of the option.", - "default": null, - "optional": true - }, - { - "name": "vega", - "type": "float", - "description": "Vega of the option.", - "default": null, - "optional": true - }, - { - "name": "rho", - "type": "float", - "description": "Rho of the option.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "exercise_style", - "type": "str", - "description": "The exercise style of the option, American or European.", - "default": null, - "optional": true - } - ] - }, - "model": "OptionsChains" - }, - "/derivatives/options/unusual": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the complete options chain for a ticker.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.derivatives.options.unusual(provider='intrinio')\n# Use the 'symbol' parameter to get the most recent activity for a specific symbol.\nobb.derivatives.options.unusual(symbol='TSLA', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for. (the underlying symbol)", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format. If no symbol is supplied, requests are only allowed for a single date. Use the start_date for the target date. Intrinio appears to have data beginning Feb/2022, but is unclear when it actually began.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format. If a symbol is not supplied, do not include an end date.", - "default": null, - "optional": true - }, - { - "name": "trade_type", - "type": "Literal['block', 'sweep', 'large']", - "description": "The type of unusual activity to query for.", - "default": null, - "optional": true - }, - { - "name": "sentiment", - "type": "Literal['bullish', 'bearish', 'neutral']", - "description": "The sentiment type to query for.", - "default": null, - "optional": true - }, - { - "name": "min_value", - "type": "Union[float, int]", - "description": "The inclusive minimum total value for the unusual activity.", - "default": null, - "optional": true - }, - { - "name": "max_value", - "type": "Union[float, int]", - "description": "The inclusive maximum total value for the unusual activity.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return. A typical day for all symbols will yield 50-80K records. The API will paginate at 1000 records. The high default limit (100K) is to be able to reliably capture the most days. The high absolute limit (1.25M) is to allow for outlier days. Queries at the absolute limit will take a long time, and might be unreliable. Apply filters to improve performance.", - "default": 100000, - "optional": true - }, - { - "name": "source", - "type": "Literal['delayed', 'realtime']", - "description": "The source of the data. Either realtime or delayed.", - "default": "delayed", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[OptionsUnusual]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "underlying_symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data. (the underlying symbol)", - "default": null, - "optional": true - }, - { - "name": "contract_symbol", - "type": "str", - "description": "Contract symbol for the option.", - "default": "", - "optional": false - } - ], - "intrinio": [ - { - "name": "trade_timestamp", - "type": "datetime", - "description": "The datetime of order placement.", - "default": "", - "optional": false - }, - { - "name": "trade_type", - "type": "Literal['block', 'sweep', 'large']", - "description": "The type of unusual trade.", - "default": "", - "optional": false - }, - { - "name": "sentiment", - "type": "Literal['bullish', 'bearish', 'neutral']", - "description": "Bullish, Bearish, or Neutral Sentiment is estimated based on whether the trade was executed at the bid, ask, or mark price.", - "default": "", - "optional": false - }, - { - "name": "bid_at_execution", - "type": "float", - "description": "Bid price at execution.", - "default": "", - "optional": false - }, - { - "name": "ask_at_execution", - "type": "float", - "description": "Ask price at execution.", - "default": "", - "optional": false - }, - { - "name": "average_price", - "type": "float", - "description": "The average premium paid per option contract.", - "default": "", - "optional": false - }, - { - "name": "underlying_price_at_execution", - "type": "float", - "description": "Price of the underlying security at execution of trade.", - "default": null, - "optional": true - }, - { - "name": "total_size", - "type": "int", - "description": "The total number of contracts involved in a single transaction.", - "default": "", - "optional": false - }, - { - "name": "total_value", - "type": "Union[int, float]", - "description": "The aggregated value of all option contract premiums included in the trade.", - "default": "", - "optional": false - } - ] - }, - "model": "OptionsUnusual" - }, - "/derivatives/futures/historical": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Historical futures prices.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.derivatives.futures.historical(symbol='ES', provider='yfinance')\n# Enter multiple symbols.\nobb.derivatives.futures.historical(symbol='ES,NQ', provider='yfinance')\n# Enter expiration dates as \"YYYY-MM\".\nobb.derivatives.futures.historical(symbol='ES', provider='yfinance', expiration='2025-12')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "expiration", - "type": "str", - "description": "Future expiry date with format YYYY-MM", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [ - { - "name": "interval", - "type": "Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1W', '1M', '1Q']", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[FuturesHistorical]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "datetime", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": "", - "optional": false - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": "", - "optional": false - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": "", - "optional": false - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [] - }, - "model": "FuturesHistorical" - }, - "/derivatives/futures/curve": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Futures Term Structure, current or historical.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\n# Enter a date to get the term structure from a historical date.\nobb.derivatives.futures.curve(symbol='NG', provider='yfinance', date='2023-01-01')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[FuturesCurve]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "expiration", - "type": "str", - "description": "Futures expiration month.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "The close price.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "FuturesCurve" - }, - "/economy/gdp/forecast": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Forecasted GDP Data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.forecast(provider='oecd')\nobb.economy.gdp.forecast(period='annual', type='real', provider='oecd')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "period", - "type": "Literal['quarter', 'annual']", - "description": "Time period of the data to return. Units for nominal GDP period. Either quarter or annual.", - "default": "annual", - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "type", - "type": "Literal['nominal', 'real']", - "description": "Type of GDP to get forecast of. Either nominal or real.", - "default": "real", - "optional": true - }, - { - "name": "provider", - "type": "Literal['oecd']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", - "default": "oecd", - "optional": true - } - ], - "oecd": [ - { - "name": "country", - "type": "Literal['argentina', 'asia', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_17', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'non-oecd', 'norway', 'oecd_total', 'peru', 'poland', 'portugal', 'romania', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'world']", - "description": "Country to get GDP for.", - "default": "united_states", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[GdpForecast]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['oecd']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "Nominal GDP value on the date.", - "default": null, - "optional": true - } - ], - "oecd": [] - }, - "model": "GdpForecast" - }, - "/economy/gdp/nominal": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Nominal GDP Data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.nominal(provider='oecd')\nobb.economy.gdp.nominal(units='usd', provider='oecd')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "units", - "type": "Literal['usd', 'usd_cap']", - "description": "The unit of measurement for the data. Units to get nominal GDP in. Either usd or usd_cap indicating per capita.", - "default": "usd", - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['oecd']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", - "default": "oecd", - "optional": true - } - ], - "oecd": [ - { - "name": "country", - "type": "Literal['australia', 'austria', 'belgium', 'brazil', 'canada', 'chile', 'colombia', 'costa_rica', 'czech_republic', 'denmark', 'estonia', 'euro_area', 'european_union', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'poland', 'portugal', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'all']", - "description": "Country to get GDP for.", - "default": "united_states", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[GdpNominal]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['oecd']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "Nominal GDP value on the date.", - "default": null, - "optional": true - } - ], - "oecd": [] - }, - "model": "GdpNominal" - }, - "/economy/gdp/real": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Real GDP Data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.real(provider='oecd')\nobb.economy.gdp.real(units='yoy', provider='oecd')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "units", - "type": "Literal['idx', 'qoq', 'yoy']", - "description": "The unit of measurement for the data. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)", - "default": "yoy", - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['oecd']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", - "default": "oecd", - "optional": true - } - ], - "oecd": [ - { - "name": "country", - "type": "Literal['G20', 'G7', 'argentina', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_19', 'europe', 'european_union_27', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'oecd_total', 'poland', 'portugal', 'romania', 'russia', 'saudi_arabia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'all']", - "description": "Country to get GDP for.", - "default": "united_states", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[GdpReal]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['oecd']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "Nominal GDP value on the date.", - "default": null, - "optional": true - } - ], - "oecd": [] - }, - "model": "GdpReal" - }, - "/economy/calendar": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the upcoming, or historical, economic calendar of global events.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\n# By default, the calendar will be forward-looking.\nobb.economy.calendar(provider='fmp')\nobb.economy.calendar(provider='fmp', start_date='2020-03-01', end_date='2020-03-31')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'tradingeconomics']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "tradingeconomics": [ - { - "name": "country", - "type": "Union[str, List[str]]", - "description": "Country of the event. Multiple items allowed for provider(s): tradingeconomics.", - "default": null, - "optional": true - }, - { - "name": "importance", - "type": "Literal['Low', 'Medium', 'High']", - "description": "Importance of the event.", - "default": null, - "optional": true - }, - { - "name": "group", - "type": "Literal['interest rate', 'inflation', 'bonds', 'consumer', 'gdp', 'government', 'housing', 'labour', 'markets', 'money', 'prices', 'trade', 'business']", - "description": "Grouping of events", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EconomicCalendar]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'tradingeconomics']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "datetime", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "Country of event.", - "default": null, - "optional": true - }, - { - "name": "event", - "type": "str", - "description": "Event name.", - "default": null, - "optional": true - }, - { - "name": "reference", - "type": "str", - "description": "Abbreviated period for which released data refers to.", - "default": null, - "optional": true - }, - { - "name": "source", - "type": "str", - "description": "Source of the data.", - "default": null, - "optional": true - }, - { - "name": "sourceurl", - "type": "str", - "description": "Source URL.", - "default": null, - "optional": true - }, - { - "name": "actual", - "type": "Union[str, float]", - "description": "Latest released value.", - "default": null, - "optional": true - }, - { - "name": "previous", - "type": "Union[str, float]", - "description": "Value for the previous period after the revision (if revision is applicable).", - "default": null, - "optional": true - }, - { - "name": "consensus", - "type": "Union[str, float]", - "description": "Average forecast among a representative group of economists.", - "default": null, - "optional": true - }, - { - "name": "forecast", - "type": "Union[str, float]", - "description": "Trading Economics projections", - "default": null, - "optional": true - }, - { - "name": "url", - "type": "str", - "description": "Trading Economics URL", - "default": null, - "optional": true - }, - { - "name": "importance", - "type": "Union[Literal[0, 1, 2, 3], str]", - "description": "Importance of the event. 1-Low, 2-Medium, 3-High", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency of the data.", - "default": null, - "optional": true - }, - { - "name": "unit", - "type": "str", - "description": "Unit of the data.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "change", - "type": "float", - "description": "Value change since previous.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Percentage change since previous.", - "default": null, - "optional": true - }, - { - "name": "updated_at", - "type": "datetime", - "description": "Last updated timestamp.", - "default": null, - "optional": true - }, - { - "name": "created_at", - "type": "datetime", - "description": "Created at timestamp.", - "default": null, - "optional": true - } - ], - "tradingeconomics": [] - }, - "model": "EconomicCalendar" - }, - "/economy/cpi": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Consumer Price Index (CPI). Returns either the rescaled index value, or a rate of change (inflation).", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.cpi(country='japan,china,turkey', provider='fred')\n# Use the `units` parameter to define the reference period for the change in values.\nobb.economy.cpi(country='united_states,united_kingdom', units='growth_previous', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "country", - "type": "Union[str, List[str]]", - "description": "The country to get data. Multiple items allowed for provider(s): fred.", - "default": "", - "optional": false - }, - { - "name": "units", - "type": "Literal['growth_previous', 'growth_same', 'index_2015']", - "description": "The unit of measurement for the data. Options: - `growth_previous`: Percent growth from the previous period. If monthly data, this is month-over-month, etc - `growth_same`: Percent growth from the same period in the previous year. If looking at monthly data, this would be year-over-year, etc. - `index_2015`: Rescaled index value, such that the value in 2015 is 100.", - "default": "growth_same", - "optional": true - }, - { - "name": "frequency", - "type": "Literal['monthly', 'quarter', 'annual']", - "description": "The frequency of the data. Options: `monthly`, `quarter`, and `annual`.", - "default": "monthly", - "optional": true - }, - { - "name": "harmonized", - "type": "bool", - "description": "Whether you wish to obtain harmonized data.", - "default": false, - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[ConsumerPriceIndex]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "ConsumerPriceIndex" - }, - "/economy/risk_premium": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Market Risk Premium by country.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.risk_premium(provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[RiskPremium]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "country", - "type": "str", - "description": "Market country.", - "default": "", - "optional": false - }, - { - "name": "continent", - "type": "str", - "description": "Continent of the country.", - "default": null, - "optional": true - }, - { - "name": "total_equity_risk_premium", - "type": "Annotated[float, Gt(gt=0)]", - "description": "Total equity risk premium for the country.", - "default": null, - "optional": true - }, - { - "name": "country_risk_premium", - "type": "Annotated[float, Ge(ge=0)]", - "description": "Country-specific risk premium.", - "default": null, - "optional": true - } - ], - "fmp": [] - }, - "model": "RiskPremium" - }, - "/economy/fred_search": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Search for FRED series or economic releases by ID or string.\nThis does not return the observation values, only the metadata.\nUse this function to find series IDs for `fred_series()`.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.fred_search(provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "The search word(s).", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "is_release", - "type": "bool", - "description": "Is release? If True, other search filter variables are ignored. If no query text or release_id is supplied, this defaults to True.", - "default": false, - "optional": true - }, - { - "name": "release_id", - "type": "Union[int, str]", - "description": "A specific release ID to target.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return. (1-1000)", - "default": null, - "optional": true - }, - { - "name": "offset", - "type": "Annotated[int, Ge(ge=0)]", - "description": "Offset the results in conjunction with limit.", - "default": 0, - "optional": true - }, - { - "name": "filter_variable", - "type": "Literal[None, 'frequency', 'units', 'seasonal_adjustment']", - "description": "Filter by an attribute.", - "default": null, - "optional": true - }, - { - "name": "filter_value", - "type": "str", - "description": "String value to filter the variable by. Used in conjunction with filter_variable.", - "default": null, - "optional": true - }, - { - "name": "tag_names", - "type": "str", - "description": "A semicolon delimited list of tag names that series match all of. Example: 'japan;imports'", - "default": null, - "optional": true - }, - { - "name": "exclude_tag_names", - "type": "str", - "description": "A semicolon delimited list of tag names that series match none of. Example: 'imports;services'. Requires that variable tag_names also be set to limit the number of matching series.", - "default": null, - "optional": true - }, - { - "name": "series_id", - "type": "str", - "description": "A FRED Series ID to return series group information for. This returns the required information to query for regional data. Not all series that are in FRED have geographical data. Entering a value for series_id will override all other parameters. Multiple series_ids can be separated by commas.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[FredSearch]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "release_id", - "type": "Union[int, str]", - "description": "The release ID for queries.", - "default": null, - "optional": true - }, - { - "name": "series_id", - "type": "str", - "description": "The series ID for the item in the release.", - "default": null, - "optional": true - }, - { - "name": "name", - "type": "str", - "description": "The name of the release.", - "default": null, - "optional": true - }, - { - "name": "title", - "type": "str", - "description": "The title of the series.", - "default": null, - "optional": true - }, - { - "name": "observation_start", - "type": "date", - "description": "The date of the first observation in the series.", - "default": null, - "optional": true - }, - { - "name": "observation_end", - "type": "date", - "description": "The date of the last observation in the series.", - "default": null, - "optional": true - }, - { - "name": "frequency", - "type": "str", - "description": "The frequency of the data.", - "default": null, - "optional": true - }, - { - "name": "frequency_short", - "type": "str", - "description": "Short form of the data frequency.", - "default": null, - "optional": true - }, - { - "name": "units", - "type": "str", - "description": "The units of the data.", - "default": null, - "optional": true - }, - { - "name": "units_short", - "type": "str", - "description": "Short form of the data units.", - "default": null, - "optional": true - }, - { - "name": "seasonal_adjustment", - "type": "str", - "description": "The seasonal adjustment of the data.", - "default": null, - "optional": true - }, - { - "name": "seasonal_adjustment_short", - "type": "str", - "description": "Short form of the data seasonal adjustment.", - "default": null, - "optional": true - }, - { - "name": "last_updated", - "type": "datetime", - "description": "The datetime of the last update to the data.", - "default": null, - "optional": true - }, - { - "name": "notes", - "type": "str", - "description": "Description of the release.", - "default": null, - "optional": true - }, - { - "name": "press_release", - "type": "bool", - "description": "If the release is a press release.", - "default": null, - "optional": true - }, - { - "name": "url", - "type": "str", - "description": "URL to the release.", - "default": null, - "optional": true - } - ], - "fred": [ - { - "name": "popularity", - "type": "int", - "description": "Popularity of the series", - "default": null, - "optional": true - }, - { - "name": "group_popularity", - "type": "int", - "description": "Group popularity of the release", - "default": null, - "optional": true - }, - { - "name": "region_type", - "type": "str", - "description": "The region type of the series.", - "default": null, - "optional": true - }, - { - "name": "series_group", - "type": "Union[int, str]", - "description": "The series group ID of the series. This value is used to query for regional data.", - "default": null, - "optional": true - } - ] - }, - "model": "FredSearch" - }, - "/economy/fred_series": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get data by series ID from FRED.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.fred_series(symbol='NFCI', provider='fred')\n# Multiple series can be passed in as a list.\nobb.economy.fred_series(symbol='NFCI,STLFSI4', provider='fred')\n# Use the `transform` parameter to transform the data as change, log, or percent change.\nobb.economy.fred_series(symbol='CBBTCUSD', transform=pc1, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fred.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 100000, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred', 'intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "frequency", - "type": "Literal[None, 'a', 'q', 'm', 'w', 'd', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']", - "description": "Frequency aggregation to convert high frequency data to lower frequency. None = No change a = Annual q = Quarterly m = Monthly w = Weekly d = Daily wef = Weekly, Ending Friday weth = Weekly, Ending Thursday wew = Weekly, Ending Wednesday wetu = Weekly, Ending Tuesday wem = Weekly, Ending Monday wesu = Weekly, Ending Sunday wesa = Weekly, Ending Saturday bwew = Biweekly, Ending Wednesday bwem = Biweekly, Ending Monday", - "default": null, - "optional": true - }, - { - "name": "aggregation_method", - "type": "Literal[None, 'avg', 'sum', 'eop']", - "description": "A key that indicates the aggregation method used for frequency aggregation. This parameter has no affect if the frequency parameter is not set. avg = Average sum = Sum eop = End of Period", - "default": "eop", - "optional": true - }, - { - "name": "transform", - "type": "Literal[None, 'chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']", - "description": "Transformation type None = No transformation chg = Change ch1 = Change from Year Ago pch = Percent Change pc1 = Percent Change from Year Ago pca = Compounded Annual Rate of Change cch = Continuously Compounded Rate of Change cca = Continuously Compounded Annual Rate of Change log = Natural Log", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "all_pages", - "type": "bool", - "description": "Returns all pages of data from the API call at once.", - "default": false, - "optional": true - }, - { - "name": "sleep", - "type": "float", - "description": "Time to sleep between requests to avoid rate limiting.", - "default": 1.0, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[FredSeries]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred', 'intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - } - ], - "fred": [], - "intrinio": [ - { - "name": "value", - "type": "float", - "description": "Value of the index.", - "default": null, - "optional": true - } - ] - }, - "model": "FredSeries" - }, - "/economy/money_measures": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Money Measures (M1/M2 and components). The Federal Reserve publishes as part of the H.6 Release.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.money_measures(provider='federal_reserve')\nobb.economy.money_measures(adjusted=False, provider='federal_reserve')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "adjusted", - "type": "bool", - "description": "Whether to return seasonally adjusted data.", - "default": true, - "optional": true - }, - { - "name": "provider", - "type": "Literal['federal_reserve']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'federal_reserve' if there is no default.", - "default": "federal_reserve", - "optional": true - } - ], - "federal_reserve": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[MoneyMeasures]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['federal_reserve']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "month", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "M1", - "type": "float", - "description": "Value of the M1 money supply in billions.", - "default": "", - "optional": false - }, - { - "name": "M2", - "type": "float", - "description": "Value of the M2 money supply in billions.", - "default": "", - "optional": false - }, - { - "name": "currency", - "type": "float", - "description": "Value of currency in circulation in billions.", - "default": null, - "optional": true - }, - { - "name": "demand_deposits", - "type": "float", - "description": "Value of demand deposits in billions.", - "default": null, - "optional": true - }, - { - "name": "retail_money_market_funds", - "type": "float", - "description": "Value of retail money market funds in billions.", - "default": null, - "optional": true - }, - { - "name": "other_liquid_deposits", - "type": "float", - "description": "Value of other liquid deposits in billions.", - "default": null, - "optional": true - }, - { - "name": "small_denomination_time_deposits", - "type": "float", - "description": "Value of small denomination time deposits in billions.", - "default": null, - "optional": true - } - ], - "federal_reserve": [] - }, - "model": "MoneyMeasures" - }, - "/economy/unemployment": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Global unemployment data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.unemployment(provider='oecd')\nobb.economy.unemployment(country=all, frequency=quarterly, provider='oecd')\n# Demographics for the statistics are selected with the `age` parameter.\nobb.economy.unemployment(country=all, frequency=quarterly, age=25-54, provider='oecd')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['oecd']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", - "default": "oecd", - "optional": true - } - ], - "oecd": [ - { - "name": "country", - "type": "Literal['colombia', 'new_zealand', 'united_kingdom', 'italy', 'luxembourg', 'euro_area19', 'sweden', 'oecd', 'south_africa', 'denmark', 'canada', 'switzerland', 'slovakia', 'hungary', 'portugal', 'spain', 'france', 'czech_republic', 'costa_rica', 'japan', 'slovenia', 'russia', 'austria', 'latvia', 'netherlands', 'israel', 'iceland', 'united_states', 'ireland', 'mexico', 'germany', 'greece', 'turkey', 'australia', 'poland', 'south_korea', 'chile', 'finland', 'european_union27_2020', 'norway', 'lithuania', 'euro_area20', 'estonia', 'belgium', 'brazil', 'indonesia', 'all']", - "description": "Country to get GDP for.", - "default": "united_states", - "optional": true - }, - { - "name": "sex", - "type": "Literal['total', 'male', 'female']", - "description": "Sex to get unemployment for.", - "default": "total", - "optional": true - }, - { - "name": "frequency", - "type": "Literal['monthly', 'quarterly', 'annual']", - "description": "Frequency to get unemployment for.", - "default": "monthly", - "optional": true - }, - { - "name": "age", - "type": "Literal['total', '15-24', '15-64', '25-54', '55-64']", - "description": "Age group to get unemployment for. Total indicates 15 years or over", - "default": "total", - "optional": true - }, - { - "name": "seasonal_adjustment", - "type": "bool", - "description": "Whether to get seasonally adjusted unemployment. Defaults to False.", - "default": false, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[Unemployment]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['oecd']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "Unemployment rate (given as a whole number, i.e 10=10%)", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "Country for which unemployment rate is given", - "default": null, - "optional": true - } - ], - "oecd": [] - }, - "model": "Unemployment" - }, - "/economy/composite_leading_indicator": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "The composite leading indicator (CLI) is designed to provide early signals of turning points\nin business cycles showing fluctuation of the economic activity around its long term potential level.\nCLIs show short-term economic movements in qualitative rather than quantitative terms.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.composite_leading_indicator(provider='oecd')\nobb.economy.composite_leading_indicator(country=all, provider='oecd')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['oecd']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", - "default": "oecd", - "optional": true - } - ], - "oecd": [ - { - "name": "country", - "type": "Literal['united_states', 'united_kingdom', 'japan', 'mexico', 'indonesia', 'australia', 'brazil', 'canada', 'italy', 'germany', 'turkey', 'france', 'south_africa', 'south_korea', 'spain', 'india', 'china', 'g7', 'g20', 'all']", - "description": "Country to get GDP for.", - "default": "united_states", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CLI]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['oecd']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "CLI value", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "Country for which CLI is given", - "default": null, - "optional": true - } - ], - "oecd": [] - }, - "model": "CLI" - }, - "/economy/short_term_interest_rate": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Short-term interest rates are the rates at which short-term borrowings are effected between\nfinancial institutions or the rate at which short-term government paper is issued or traded in the market.\nShort-term interest rates are generally averages of daily rates, measured as a percentage.\nShort-term interest rates are based on three-month money market rates where available.\nTypical standardised names are \"money market rate\" and \"treasury bill rate\".", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.short_term_interest_rate(provider='oecd')\nobb.economy.short_term_interest_rate(country=all, frequency=quarterly, provider='oecd')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['oecd']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", - "default": "oecd", - "optional": true - } - ], - "oecd": [ - { - "name": "country", - "type": "Literal['belgium', 'ireland', 'mexico', 'indonesia', 'new_zealand', 'japan', 'united_kingdom', 'france', 'chile', 'canada', 'netherlands', 'united_states', 'south_korea', 'norway', 'austria', 'south_africa', 'denmark', 'switzerland', 'hungary', 'luxembourg', 'australia', 'germany', 'sweden', 'iceland', 'turkey', 'greece', 'israel', 'czech_republic', 'latvia', 'slovenia', 'poland', 'estonia', 'lithuania', 'portugal', 'costa_rica', 'slovakia', 'finland', 'spain', 'russia', 'euro_area19', 'colombia', 'italy', 'india', 'china', 'croatia', 'all']", - "description": "Country to get GDP for.", - "default": "united_states", - "optional": true - }, - { - "name": "frequency", - "type": "Literal['monthly', 'quarterly', 'annual']", - "description": "Frequency to get interest rate for for.", - "default": "monthly", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[STIR]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['oecd']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "Interest rate (given as a whole number, i.e 10=10%)", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "Country for which interest rate is given", - "default": null, - "optional": true - } - ], - "oecd": [] - }, - "model": "STIR" - }, - "/economy/long_term_interest_rate": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Long-term interest rates refer to government bonds maturing in ten years.\nRates are mainly determined by the price charged by the lender, the risk from the borrower and the\nfall in the capital value. Long-term interest rates are generally averages of daily rates,\nmeasured as a percentage. These interest rates are implied by the prices at which the government bonds are\ntraded on financial markets, not the interest rates at which the loans were issued.\nIn all cases, they refer to bonds whose capital repayment is guaranteed by governments.\nLong-term interest rates are one of the determinants of business investment.\nLow long-term interest rates encourage investment in new equipment and high interest rates discourage it.\nInvestment is, in turn, a major source of economic growth.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.long_term_interest_rate(provider='oecd')\nobb.economy.long_term_interest_rate(country=all, frequency=quarterly, provider='oecd')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['oecd']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", - "default": "oecd", - "optional": true - } - ], - "oecd": [ - { - "name": "country", - "type": "Literal['belgium', 'ireland', 'mexico', 'indonesia', 'new_zealand', 'japan', 'united_kingdom', 'france', 'chile', 'canada', 'netherlands', 'united_states', 'south_korea', 'norway', 'austria', 'south_africa', 'denmark', 'switzerland', 'hungary', 'luxembourg', 'australia', 'germany', 'sweden', 'iceland', 'turkey', 'greece', 'israel', 'czech_republic', 'latvia', 'slovenia', 'poland', 'estonia', 'lithuania', 'portugal', 'costa_rica', 'slovakia', 'finland', 'spain', 'russia', 'euro_area19', 'colombia', 'italy', 'india', 'china', 'croatia', 'all']", - "description": "Country to get GDP for.", - "default": "united_states", - "optional": true - }, - { - "name": "frequency", - "type": "Literal['monthly', 'quarterly', 'annual']", - "description": "Frequency to get interest rate for for.", - "default": "monthly", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[LTIR]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['oecd']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "Interest rate (given as a whole number, i.e 10=10%)", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "Country for which interest rate is given", - "default": null, - "optional": true - } - ], - "oecd": [] - }, - "model": "LTIR" - }, - "/economy/fred_regional": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Query the Geo Fred API for regional economic data by series group.\nThe series group ID is found by using `fred_search` and the `series_id` parameter.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.fred_regional(symbol='NYICLAIMS', provider='fred')\n# With a date, time series data is returned.\nobb.economy.fred_regional(symbol='NYICLAIMS', start_date='2021-01-01', end_date='2021-12-31', limit=10, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 100000, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "is_series_group", - "type": "bool", - "description": "When True, the symbol provided is for a series_group, else it is for a series ID.", - "default": false, - "optional": true - }, - { - "name": "region_type", - "type": "Literal['bea', 'msa', 'frb', 'necta', 'state', 'country', 'county', 'censusregion']", - "description": "The type of regional data. Parameter is only valid when `is_series_group` is True.", - "default": null, - "optional": true - }, - { - "name": "season", - "type": "Literal['SA', 'NSA', 'SSA']", - "description": "The seasonal adjustments to the data. Parameter is only valid when `is_series_group` is True.", - "default": "NSA", - "optional": true - }, - { - "name": "units", - "type": "str", - "description": "The units of the data. This should match the units returned from searching by series ID. An incorrect field will not necessarily return an error. Parameter is only valid when `is_series_group` is True.", - "default": null, - "optional": true - }, - { - "name": "frequency", - "type": "Literal['d', 'w', 'bw', 'm', 'q', 'sa', 'a', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']", - "description": "Frequency aggregation to convert high frequency data to lower frequency. Parameter is only valid when `is_series_group` is True. a = Annual sa= Semiannual q = Quarterly m = Monthly w = Weekly d = Daily wef = Weekly, Ending Friday weth = Weekly, Ending Thursday wew = Weekly, Ending Wednesday wetu = Weekly, Ending Tuesday wem = Weekly, Ending Monday wesu = Weekly, Ending Sunday wesa = Weekly, Ending Saturday bwew = Biweekly, Ending Wednesday bwem = Biweekly, Ending Monday", - "default": null, - "optional": true - }, - { - "name": "aggregation_method", - "type": "Literal['avg', 'sum', 'eop']", - "description": "A key that indicates the aggregation method used for frequency aggregation. This parameter has no affect if the frequency parameter is not set. Only valid when `is_series_group` is True. avg = Average sum = Sum eop = End of Period", - "default": "avg", - "optional": true - }, - { - "name": "transform", - "type": "Literal['lin', 'chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']", - "description": "Transformation type. Only valid when `is_series_group` is True. lin = Levels (No transformation) chg = Change ch1 = Change from Year Ago pch = Percent Change pc1 = Percent Change from Year Ago pca = Compounded Annual Rate of Change cch = Continuously Compounded Rate of Change cca = Continuously Compounded Annual Rate of Change log = Natural Log", - "default": "lin", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[FredRegional]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - } - ], - "fred": [ - { - "name": "region", - "type": "str", - "description": "The name of the region.", - "default": "", - "optional": false - }, - { - "name": "code", - "type": "Union[str, int]", - "description": "The code of the region.", - "default": "", - "optional": false - }, - { - "name": "value", - "type": "Union[float, int]", - "description": "The obersvation value. The units are defined in the search results by series ID.", - "default": null, - "optional": true - }, - { - "name": "series_id", - "type": "str", - "description": "The individual series ID for the region.", - "default": "", - "optional": false - } - ] - }, - "model": "FredRegional" - }, - "/equity/calendar/ipo": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical and upcoming initial public offerings (IPOs).", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.ipo(provider='intrinio')\n# Get all IPOs available.\nobb.equity.calendar.ipo(provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": null, - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 100, - "optional": true - }, - { - "name": "provider", - "type": "Literal['intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [ - { - "name": "status", - "type": "Literal['upcoming', 'priced', 'withdrawn']", - "description": "Status of the IPO. [upcoming, priced, or withdrawn]", - "default": null, - "optional": true - }, - { - "name": "min_value", - "type": "int", - "description": "Return IPOs with an offer dollar amount greater than the given amount.", - "default": null, - "optional": true - }, - { - "name": "max_value", - "type": "int", - "description": "Return IPOs with an offer dollar amount less than the given amount.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CalendarIpo]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "ipo_date", - "type": "date", - "description": "The date of the IPO, when the stock first trades on a major exchange.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "status", - "type": "Literal['upcoming', 'priced', 'withdrawn']", - "description": "The status of the IPO. Upcoming IPOs have not taken place yet but are expected to. Priced IPOs have taken place. Withdrawn IPOs were expected to take place, but were subsequently withdrawn.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The acronym of the stock exchange that the company is going to trade publicly on. Typically NYSE or NASDAQ.", - "default": null, - "optional": true - }, - { - "name": "offer_amount", - "type": "float", - "description": "The total dollar amount of shares offered in the IPO. Typically this is share price * share count", - "default": null, - "optional": true - }, - { - "name": "share_price", - "type": "float", - "description": "The price per share at which the IPO was offered.", - "default": null, - "optional": true - }, - { - "name": "share_price_lowest", - "type": "float", - "description": "The expected lowest price per share at which the IPO will be offered. Before an IPO is priced, companies typically provide a range of prices per share at which they expect to offer the IPO (typically available for upcoming IPOs).", - "default": null, - "optional": true - }, - { - "name": "share_price_highest", - "type": "float", - "description": "The expected highest price per share at which the IPO will be offered. Before an IPO is priced, companies typically provide a range of prices per share at which they expect to offer the IPO (typically available for upcoming IPOs).", - "default": null, - "optional": true - }, - { - "name": "share_count", - "type": "int", - "description": "The number of shares offered in the IPO.", - "default": null, - "optional": true - }, - { - "name": "share_count_lowest", - "type": "int", - "description": "The expected lowest number of shares that will be offered in the IPO. Before an IPO is priced, companies typically provide a range of shares that they expect to offer in the IPO (typically available for upcoming IPOs).", - "default": null, - "optional": true - }, - { - "name": "share_count_highest", - "type": "int", - "description": "The expected highest number of shares that will be offered in the IPO. Before an IPO is priced, companies typically provide a range of shares that they expect to offer in the IPO (typically available for upcoming IPOs).", - "default": null, - "optional": true - }, - { - "name": "announcement_url", - "type": "str", - "description": "The URL to the company's announcement of the IPO", - "default": null, - "optional": true - }, - { - "name": "sec_report_url", - "type": "str", - "description": "The URL to the company's S-1, S-1/A, F-1, or F-1/A SEC filing, which is required to be filed before an IPO takes place.", - "default": null, - "optional": true - }, - { - "name": "open_price", - "type": "float", - "description": "The opening price at the beginning of the first trading day (only available for priced IPOs).", - "default": null, - "optional": true - }, - { - "name": "close_price", - "type": "float", - "description": "The closing price at the end of the first trading day (only available for priced IPOs).", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The volume at the end of the first trading day (only available for priced IPOs).", - "default": null, - "optional": true - }, - { - "name": "day_change", - "type": "float", - "description": "The percentage change between the open price and the close price on the first trading day (only available for priced IPOs).", - "default": null, - "optional": true - }, - { - "name": "week_change", - "type": "float", - "description": "The percentage change between the open price on the first trading day and the close price approximately a week after the first trading day (only available for priced IPOs).", - "default": null, - "optional": true - }, - { - "name": "month_change", - "type": "float", - "description": "The percentage change between the open price on the first trading day and the close price approximately a month after the first trading day (only available for priced IPOs).", - "default": null, - "optional": true - }, - { - "name": "id", - "type": "str", - "description": "The Intrinio ID of the IPO.", - "default": null, - "optional": true - }, - { - "name": "company", - "type": "IntrinioCompany", - "description": "The company that is going public via the IPO.", - "default": null, - "optional": true - }, - { - "name": "security", - "type": "IntrinioSecurity", - "description": "The primary Security for the Company that is going public via the IPO", - "default": null, - "optional": true - } - ] - }, - "model": "CalendarIpo" - }, - "/equity/calendar/dividend": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical and upcoming dividend payments. Includes dividend amount, ex-dividend and payment dates.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.dividend(provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CalendarDividend]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "ex_dividend_date", - "type": "date", - "description": "The ex-dividend date - the date on which the stock begins trading without rights to the dividend.", - "default": "", - "optional": false - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "amount", - "type": "float", - "description": "The dividend amount per share.", - "default": null, - "optional": true - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": null, - "optional": true - }, - { - "name": "record_date", - "type": "date", - "description": "The record date of ownership for eligibility.", - "default": null, - "optional": true - }, - { - "name": "payment_date", - "type": "date", - "description": "The payment date of the dividend.", - "default": null, - "optional": true - }, - { - "name": "declaration_date", - "type": "date", - "description": "Declaration date of the dividend.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "adjusted_amount", - "type": "float", - "description": "The adjusted-dividend amount.", - "default": null, - "optional": true - }, - { - "name": "label", - "type": "str", - "description": "Ex-dividend date formatted for display.", - "default": null, - "optional": true - } - ] - }, - "model": "CalendarDividend" - }, - "/equity/calendar/splits": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical and upcoming stock split operations.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.splits(provider='fmp')\n# Get stock splits calendar for specific dates.\nobb.equity.calendar.splits(start_date='2024-02-01', end_date='2024-02-07', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CalendarSplits]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "label", - "type": "str", - "description": "Label of the stock splits.", - "default": "", - "optional": false - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "numerator", - "type": "float", - "description": "Numerator of the stock splits.", - "default": "", - "optional": false - }, - { - "name": "denominator", - "type": "float", - "description": "Denominator of the stock splits.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "CalendarSplits" - }, - "/equity/calendar/earnings": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical and upcoming company earnings releases. Includes earnings per share (EPS) and revenue data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.earnings(provider='fmp')\n# Get earnings calendar for specific dates.\nobb.equity.calendar.earnings(start_date='2024-02-01', end_date='2024-02-07', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CalendarEarnings]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "report_date", - "type": "date", - "description": "The date of the earnings report.", - "default": "", - "optional": false - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": null, - "optional": true - }, - { - "name": "eps_previous", - "type": "float", - "description": "The earnings-per-share from the same previously reported period.", - "default": null, - "optional": true - }, - { - "name": "eps_consensus", - "type": "float", - "description": "The analyst conesus earnings-per-share estimate.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "eps_actual", - "type": "float", - "description": "The actual earnings per share announced.", - "default": null, - "optional": true - }, - { - "name": "revenue_actual", - "type": "float", - "description": "The actual reported revenue.", - "default": null, - "optional": true - }, - { - "name": "revenue_consensus", - "type": "float", - "description": "The revenue forecast consensus.", - "default": null, - "optional": true - }, - { - "name": "period_ending", - "type": "date", - "description": "The fiscal period end date.", - "default": null, - "optional": true - }, - { - "name": "reporting_time", - "type": "str", - "description": "The reporting time - e.g. after market close.", - "default": null, - "optional": true - }, - { - "name": "updated_date", - "type": "date", - "description": "The date the data was updated last.", - "default": null, - "optional": true - } - ] - }, - "model": "CalendarEarnings" - }, - "/equity/compare/peers": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the closest peers for a given company.\n\nPeers consist of companies trading on the same exchange, operating within the same sector\nand with comparable market capitalizations.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.compare.peers(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityPeers]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "peers_list", - "type": "List[str]", - "description": "A list of equity peers based on sector, exchange and market cap.", - "default": "", - "optional": true - } - ], - "fmp": [] - }, - "model": "EquityPeers" - }, - "/equity/estimates/price_target": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get analyst price targets by company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.price_target(provider='benzinga')\n# Get price targets for Microsoft using 'benzinga' as provider.\nobb.equity.estimates.price_target(start_date=2020-01-01, end_date=2024-02-16, limit=10, symbol='msft', provider='benzinga', action=downgrades)\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): benzinga, fmp.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 200, - "optional": true - }, - { - "name": "provider", - "type": "Literal['benzinga', 'fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", - "default": "benzinga", - "optional": true - } - ], - "benzinga": [ - { - "name": "page", - "type": "int", - "description": "Page offset. For optimization, performance and technical reasons, page offsets are limited from 0 - 100000. Limit the query results by other parameters such as date. Used in conjunction with the limit and date parameters.", - "default": 0, - "optional": true - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "Date for calendar data, shorthand for date_from and date_to.", - "default": null, - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "updated", - "type": "Union[date, int]", - "description": "Records last Updated Unix timestamp (UTC). This will force the sort order to be Greater Than or Equal to the timestamp indicated. The date can be a date string or a Unix timestamp. The date string must be in the format of YYYY-MM-DD.", - "default": null, - "optional": true - }, - { - "name": "importance", - "type": "int", - "description": "Importance level to filter by. Uses Greater Than or Equal To the importance indicated", - "default": null, - "optional": true - }, - { - "name": "action", - "type": "Literal['downgrades', 'maintains', 'reinstates', 'reiterates', 'upgrades', 'assumes', 'initiates', 'terminates', 'removes', 'suspends', 'firm_dissolved']", - "description": "Filter by a specific action_company.", - "default": null, - "optional": true - }, - { - "name": "analyst_ids", - "type": "Union[List[str], str]", - "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts.", - "default": null, - "optional": true - }, - { - "name": "firm_ids", - "type": "Union[List[str], str]", - "description": "Comma-separated list of firm IDs.", - "default": null, - "optional": true - }, - { - "name": "fields", - "type": "Union[List[str], str]", - "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "with_grade", - "type": "bool", - "description": "Include upgrades and downgrades in the response.", - "default": false, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[PriceTarget]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['benzinga', 'fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "published_date", - "type": "Union[date, datetime]", - "description": "Published date of the price target.", - "default": "", - "optional": false - }, - { - "name": "published_time", - "type": "datetime.time", - "description": "Time of the original rating, UTC.", - "default": null, - "optional": true - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "exchange", - "type": "str", - "description": "Exchange where the company is traded.", - "default": null, - "optional": true - }, - { - "name": "company_name", - "type": "str", - "description": "Name of company that is the subject of rating.", - "default": null, - "optional": true - }, - { - "name": "analyst_name", - "type": "str", - "description": "Analyst name.", - "default": null, - "optional": true - }, - { - "name": "analyst_firm", - "type": "str", - "description": "Name of the analyst firm that published the price target.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency the data is denominated in.", - "default": null, - "optional": true - }, - { - "name": "price_target", - "type": "float", - "description": "The current price target.", - "default": null, - "optional": true - }, - { - "name": "adj_price_target", - "type": "float", - "description": "Adjusted price target for splits and stock dividends.", - "default": null, - "optional": true - }, - { - "name": "price_target_previous", - "type": "float", - "description": "Previous price target.", - "default": null, - "optional": true - }, - { - "name": "previous_adj_price_target", - "type": "float", - "description": "Previous adjusted price target.", - "default": null, - "optional": true - }, - { - "name": "price_when_posted", - "type": "float", - "description": "Price when posted.", - "default": null, - "optional": true - }, - { - "name": "rating_current", - "type": "str", - "description": "The analyst's rating for the company.", - "default": null, - "optional": true - }, - { - "name": "rating_previous", - "type": "str", - "description": "Previous analyst rating for the company.", - "default": null, - "optional": true - }, - { - "name": "action", - "type": "str", - "description": "Description of the change in rating from firm's last rating.", - "default": null, - "optional": true - } - ], - "benzinga": [ - { - "name": "action_change", - "type": "Literal['Announces', 'Maintains', 'Lowers', 'Raises', 'Removes', 'Adjusts']", - "description": "Description of the change in price target from firm's last price target.", - "default": null, - "optional": true - }, - { - "name": "importance", - "type": "Literal[0, 1, 2, 3, 4, 5]", - "description": "Subjective Basis of How Important Event is to Market. 5 = High", - "default": null, - "optional": true - }, - { - "name": "notes", - "type": "str", - "description": "Notes of the price target.", - "default": null, - "optional": true - }, - { - "name": "analyst_id", - "type": "str", - "description": "Id of the analyst.", - "default": null, - "optional": true - }, - { - "name": "url_news", - "type": "str", - "description": "URL for analyst ratings news articles for this ticker on Benzinga.com.", - "default": null, - "optional": true - }, - { - "name": "url_analyst", - "type": "str", - "description": "URL for analyst ratings page for this ticker on Benzinga.com.", - "default": null, - "optional": true - }, - { - "name": "id", - "type": "str", - "description": "Unique ID of this entry.", - "default": null, - "optional": true - }, - { - "name": "last_updated", - "type": "datetime", - "description": "Last updated timestamp, UTC.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "news_url", - "type": "str", - "description": "News URL of the price target.", - "default": null, - "optional": true - }, - { - "name": "news_title", - "type": "str", - "description": "News title of the price target.", - "default": null, - "optional": true - }, - { - "name": "news_publisher", - "type": "str", - "description": "News publisher of the price target.", - "default": null, - "optional": true - }, - { - "name": "news_base_url", - "type": "str", - "description": "News base URL of the price target.", - "default": null, - "optional": true - } - ] - }, - "model": "PriceTarget" - }, - "/equity/estimates/historical": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical analyst estimates for earnings and revenue.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.historical(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "period", - "type": "Literal['quarter', 'annual']", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[AnalystEstimates]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "estimated_revenue_low", - "type": "int", - "description": "Estimated revenue low.", - "default": null, - "optional": true - }, - { - "name": "estimated_revenue_high", - "type": "int", - "description": "Estimated revenue high.", - "default": null, - "optional": true - }, - { - "name": "estimated_revenue_avg", - "type": "int", - "description": "Estimated revenue average.", - "default": null, - "optional": true - }, - { - "name": "estimated_sga_expense_low", - "type": "int", - "description": "Estimated SGA expense low.", - "default": null, - "optional": true - }, - { - "name": "estimated_sga_expense_high", - "type": "int", - "description": "Estimated SGA expense high.", - "default": null, - "optional": true - }, - { - "name": "estimated_sga_expense_avg", - "type": "int", - "description": "Estimated SGA expense average.", - "default": null, - "optional": true - }, - { - "name": "estimated_ebitda_low", - "type": "int", - "description": "Estimated EBITDA low.", - "default": null, - "optional": true - }, - { - "name": "estimated_ebitda_high", - "type": "int", - "description": "Estimated EBITDA high.", - "default": null, - "optional": true - }, - { - "name": "estimated_ebitda_avg", - "type": "int", - "description": "Estimated EBITDA average.", - "default": null, - "optional": true - }, - { - "name": "estimated_ebit_low", - "type": "int", - "description": "Estimated EBIT low.", - "default": null, - "optional": true - }, - { - "name": "estimated_ebit_high", - "type": "int", - "description": "Estimated EBIT high.", - "default": null, - "optional": true - }, - { - "name": "estimated_ebit_avg", - "type": "int", - "description": "Estimated EBIT average.", - "default": null, - "optional": true - }, - { - "name": "estimated_net_income_low", - "type": "int", - "description": "Estimated net income low.", - "default": null, - "optional": true - }, - { - "name": "estimated_net_income_high", - "type": "int", - "description": "Estimated net income high.", - "default": null, - "optional": true - }, - { - "name": "estimated_net_income_avg", - "type": "int", - "description": "Estimated net income average.", - "default": null, - "optional": true - }, - { - "name": "estimated_eps_avg", - "type": "float", - "description": "Estimated EPS average.", - "default": null, - "optional": true - }, - { - "name": "estimated_eps_high", - "type": "float", - "description": "Estimated EPS high.", - "default": null, - "optional": true - }, - { - "name": "estimated_eps_low", - "type": "float", - "description": "Estimated EPS low.", - "default": null, - "optional": true - }, - { - "name": "number_analyst_estimated_revenue", - "type": "int", - "description": "Number of analysts who estimated revenue.", - "default": null, - "optional": true - }, - { - "name": "number_analysts_estimated_eps", - "type": "int", - "description": "Number of analysts who estimated EPS.", - "default": null, - "optional": true - } - ], - "fmp": [] - }, - "model": "AnalystEstimates" - }, - "/equity/estimates/consensus": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get consensus price target and recommendation.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.consensus(symbol='AAPL', provider='fmp')\nobb.equity.estimates.consensus(symbol='AAPL,MSFT', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, yfinance.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[PriceTargetConsensus]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "target_high", - "type": "float", - "description": "High target of the price target consensus.", - "default": null, - "optional": true - }, - { - "name": "target_low", - "type": "float", - "description": "Low target of the price target consensus.", - "default": null, - "optional": true - }, - { - "name": "target_consensus", - "type": "float", - "description": "Consensus target of the price target consensus.", - "default": null, - "optional": true - }, - { - "name": "target_median", - "type": "float", - "description": "Median target of the price target consensus.", - "default": null, - "optional": true - } - ], - "fmp": [], - "yfinance": [ - { - "name": "recommendation", - "type": "str", - "description": "Recommendation - buy, sell, etc.", - "default": null, - "optional": true - }, - { - "name": "recommendation_mean", - "type": "float", - "description": "Mean recommendation score where 1 is strong buy and 5 is strong sell.", - "default": null, - "optional": true - }, - { - "name": "number_of_analysts", - "type": "int", - "description": "Number of analysts providing opinions.", - "default": null, - "optional": true - }, - { - "name": "current_price", - "type": "float", - "description": "Current price of the stock.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency the stock is priced in.", - "default": null, - "optional": true - } - ] - }, - "model": "PriceTargetConsensus" - }, - "/equity/estimates/analyst_search": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Search for specific analysts and get their forecast track record.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.analyst_search(provider='benzinga')\nobb.equity.estimates.analyst_search(firm_name='Wedbush', provider='benzinga')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "analyst_name", - "type": "Union[str, List[str]]", - "description": "Analyst names to return. Omitting will return all available analysts. Multiple items allowed for provider(s): benzinga.", - "default": null, - "optional": true - }, - { - "name": "firm_name", - "type": "Union[str, List[str]]", - "description": "Firm names to return. Omitting will return all available firms. Multiple items allowed for provider(s): benzinga.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['benzinga']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", - "default": "benzinga", - "optional": true - } - ], - "benzinga": [ - { - "name": "analyst_ids", - "type": "Union[str, List[str]]", - "description": "List of analyst IDs to return. Multiple items allowed for provider(s): benzinga.", - "default": null, - "optional": true - }, - { - "name": "firm_ids", - "type": "Union[str, List[str]]", - "description": "Firm IDs to return. Multiple items allowed for provider(s): benzinga.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "Number of results returned. Limit 1000.", - "default": 100, - "optional": true - }, - { - "name": "page", - "type": "int", - "description": "Page offset. For optimization, performance and technical reasons, page offsets are limited from 0 - 100000. Limit the query results by other parameters such as date.", - "default": 0, - "optional": true - }, - { - "name": "fields", - "type": "Union[str, List[str]]", - "description": "Fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple items allowed for provider(s): benzinga.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[AnalystSearch]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['benzinga']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "last_updated", - "type": "datetime", - "description": "Date of the last update.", - "default": null, - "optional": true - }, - { - "name": "firm_name", - "type": "str", - "description": "Firm name of the analyst.", - "default": null, - "optional": true - }, - { - "name": "name_first", - "type": "str", - "description": "Analyst first name.", - "default": null, - "optional": true - }, - { - "name": "name_last", - "type": "str", - "description": "Analyst last name.", - "default": null, - "optional": true - }, - { - "name": "name_full", - "type": "str", - "description": "Analyst full name.", - "default": "", - "optional": false - } - ], - "benzinga": [ - { - "name": "analyst_id", - "type": "str", - "description": "ID of the analyst.", - "default": null, - "optional": true - }, - { - "name": "firm_id", - "type": "str", - "description": "ID of the analyst firm.", - "default": null, - "optional": true - }, - { - "name": "smart_score", - "type": "float", - "description": "A weighted average of the total_ratings_percentile, overall_avg_return_percentile, and overall_success_rate", - "default": null, - "optional": true - }, - { - "name": "overall_success_rate", - "type": "float", - "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain overall.", - "default": null, - "optional": true - }, - { - "name": "overall_avg_return_percentile", - "type": "float", - "description": "The percentile (normalized) of this analyst's overall average return per rating in comparison to other analysts' overall average returns per rating.", - "default": null, - "optional": true - }, - { - "name": "total_ratings_percentile", - "type": "float", - "description": "The percentile (normalized) of this analyst's total number of ratings in comparison to the total number of ratings published by all other analysts", - "default": null, - "optional": true - }, - { - "name": "total_ratings", - "type": "int", - "description": "Number of recommendations made by this analyst.", - "default": null, - "optional": true - }, - { - "name": "overall_gain_count", - "type": "int", - "description": "The number of ratings that have gained value since the date of recommendation", - "default": null, - "optional": true - }, - { - "name": "overall_loss_count", - "type": "int", - "description": "The number of ratings that have lost value since the date of recommendation", - "default": null, - "optional": true - }, - { - "name": "overall_average_return", - "type": "float", - "description": "The average percent (normalized) price difference per rating since the date of recommendation", - "default": null, - "optional": true - }, - { - "name": "overall_std_dev", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings since the date of recommendation", - "default": null, - "optional": true - }, - { - "name": "gain_count_1m", - "type": "int", - "description": "The number of ratings that have gained value over the last month", - "default": null, - "optional": true - }, - { - "name": "loss_count_1m", - "type": "int", - "description": "The number of ratings that have lost value over the last month", - "default": null, - "optional": true - }, - { - "name": "average_return_1m", - "type": "float", - "description": "The average percent (normalized) price difference per rating over the last month", - "default": null, - "optional": true - }, - { - "name": "std_dev_1m", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last month", - "default": null, - "optional": true - }, - { - "name": "gain_count_3m", - "type": "int", - "description": "The number of ratings that have gained value over the last 3 months", - "default": null, - "optional": true - }, - { - "name": "loss_count_3m", - "type": "int", - "description": "The number of ratings that have lost value over the last 3 months", - "default": null, - "optional": true - }, - { - "name": "average_return_3m", - "type": "float", - "description": "The average percent (normalized) price difference per rating over the last 3 months", - "default": null, - "optional": true - }, - { - "name": "std_dev_3m", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 months", - "default": null, - "optional": true - }, - { - "name": "gain_count_6m", - "type": "int", - "description": "The number of ratings that have gained value over the last 6 months", - "default": null, - "optional": true - }, - { - "name": "loss_count_6m", - "type": "int", - "description": "The number of ratings that have lost value over the last 6 months", - "default": null, - "optional": true - }, - { - "name": "average_return_6m", - "type": "float", - "description": "The average percent (normalized) price difference per rating over the last 6 months", - "default": null, - "optional": true - }, - { - "name": "std_dev_6m", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 6 months", - "default": null, - "optional": true - }, - { - "name": "gain_count_9m", - "type": "int", - "description": "The number of ratings that have gained value over the last 9 months", - "default": null, - "optional": true - }, - { - "name": "loss_count_9m", - "type": "int", - "description": "The number of ratings that have lost value over the last 9 months", - "default": null, - "optional": true - }, - { - "name": "average_return_9m", - "type": "float", - "description": "The average percent (normalized) price difference per rating over the last 9 months", - "default": null, - "optional": true - }, - { - "name": "std_dev_9m", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 9 months", - "default": null, - "optional": true - }, - { - "name": "gain_count_1y", - "type": "int", - "description": "The number of ratings that have gained value over the last 1 year", - "default": null, - "optional": true - }, - { - "name": "loss_count_1y", - "type": "int", - "description": "The number of ratings that have lost value over the last 1 year", - "default": null, - "optional": true - }, - { - "name": "average_return_1y", - "type": "float", - "description": "The average percent (normalized) price difference per rating over the last 1 year", - "default": null, - "optional": true - }, - { - "name": "std_dev_1y", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 1 year", - "default": null, - "optional": true - }, - { - "name": "gain_count_2y", - "type": "int", - "description": "The number of ratings that have gained value over the last 2 years", - "default": null, - "optional": true - }, - { - "name": "loss_count_2y", - "type": "int", - "description": "The number of ratings that have lost value over the last 2 years", - "default": null, - "optional": true - }, - { - "name": "average_return_2y", - "type": "float", - "description": "The average percent (normalized) price difference per rating over the last 2 years", - "default": null, - "optional": true - }, - { - "name": "std_dev_2y", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 2 years", - "default": null, - "optional": true - }, - { - "name": "gain_count_3y", - "type": "int", - "description": "The number of ratings that have gained value over the last 3 years", - "default": null, - "optional": true - }, - { - "name": "loss_count_3y", - "type": "int", - "description": "The number of ratings that have lost value over the last 3 years", - "default": null, - "optional": true - }, - { - "name": "average_return_3y", - "type": "float", - "description": "The average percent (normalized) price difference per rating over the last 3 years", - "default": null, - "optional": true - }, - { - "name": "std_dev_3y", - "type": "float", - "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 years", - "default": null, - "optional": true - } - ] - }, - "model": "AnalystSearch" - }, - "/equity/discovery/gainers": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the top price gainers in the stock market.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.gainers(provider='yfinance')\nobb.equity.discovery.gainers(sort='desc', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityGainers]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Last price.", - "default": "", - "optional": false - }, - { - "name": "change", - "type": "float", - "description": "Change in price value.", - "default": "", - "optional": false - }, - { - "name": "percent_change", - "type": "float", - "description": "Percent change.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "market_cap", - "type": "float", - "description": "Market Cap.", - "default": "", - "optional": false - }, - { - "name": "avg_volume_3_months", - "type": "float", - "description": "Average volume over the last 3 months in millions.", - "default": "", - "optional": false - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "PE Ratio (TTM).", - "default": null, - "optional": true - } - ] - }, - "model": "EquityGainers" - }, - "/equity/discovery/losers": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the top price losers in the stock market.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.losers(provider='yfinance')\nobb.equity.discovery.losers(sort='desc', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityLosers]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Last price.", - "default": "", - "optional": false - }, - { - "name": "change", - "type": "float", - "description": "Change in price value.", - "default": "", - "optional": false - }, - { - "name": "percent_change", - "type": "float", - "description": "Percent change.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "market_cap", - "type": "float", - "description": "Market Cap.", - "default": "", - "optional": false - }, - { - "name": "avg_volume_3_months", - "type": "float", - "description": "Average volume over the last 3 months in millions.", - "default": "", - "optional": false - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "PE Ratio (TTM).", - "default": null, - "optional": true - } - ] - }, - "model": "EquityLosers" - }, - "/equity/discovery/active": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the most actively traded stocks based on volume.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.active(provider='yfinance')\nobb.equity.discovery.active(sort='desc', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityActive]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Last price.", - "default": "", - "optional": false - }, - { - "name": "change", - "type": "float", - "description": "Change in price value.", - "default": "", - "optional": false - }, - { - "name": "percent_change", - "type": "float", - "description": "Percent change.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "market_cap", - "type": "float", - "description": "Market Cap displayed in billions.", - "default": "", - "optional": false - }, - { - "name": "avg_volume_3_months", - "type": "float", - "description": "Average volume over the last 3 months in millions.", - "default": "", - "optional": false - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "PE Ratio (TTM).", - "default": null, - "optional": true - } - ] - }, - "model": "EquityActive" - }, - "/equity/discovery/undervalued_large_caps": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get potentially undervalued large cap stocks.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.undervalued_large_caps(provider='yfinance')\nobb.equity.discovery.undervalued_large_caps(sort='desc', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityUndervaluedLargeCaps]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Last price.", - "default": "", - "optional": false - }, - { - "name": "change", - "type": "float", - "description": "Change in price value.", - "default": "", - "optional": false - }, - { - "name": "percent_change", - "type": "float", - "description": "Percent change.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "market_cap", - "type": "float", - "description": "Market Cap.", - "default": null, - "optional": true - }, - { - "name": "avg_volume_3_months", - "type": "float", - "description": "Average volume over the last 3 months in millions.", - "default": null, - "optional": true - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "PE Ratio (TTM).", - "default": null, - "optional": true - } - ] - }, - "model": "EquityUndervaluedLargeCaps" - }, - "/equity/discovery/undervalued_growth": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get potentially undervalued growth stocks.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.undervalued_growth(provider='yfinance')\nobb.equity.discovery.undervalued_growth(sort='desc', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityUndervaluedGrowth]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Last price.", - "default": "", - "optional": false - }, - { - "name": "change", - "type": "float", - "description": "Change in price value.", - "default": "", - "optional": false - }, - { - "name": "percent_change", - "type": "float", - "description": "Percent change.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "market_cap", - "type": "float", - "description": "Market Cap.", - "default": null, - "optional": true - }, - { - "name": "avg_volume_3_months", - "type": "float", - "description": "Average volume over the last 3 months in millions.", - "default": null, - "optional": true - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "PE Ratio (TTM).", - "default": null, - "optional": true - } - ] - }, - "model": "EquityUndervaluedGrowth" - }, - "/equity/discovery/aggressive_small_caps": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get top small cap stocks based on earnings growth.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.aggressive_small_caps(provider='yfinance')\nobb.equity.discovery.aggressive_small_caps(sort='desc', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityAggressiveSmallCaps]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Last price.", - "default": "", - "optional": false - }, - { - "name": "change", - "type": "float", - "description": "Change in price value.", - "default": "", - "optional": false - }, - { - "name": "percent_change", - "type": "float", - "description": "Percent change.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "market_cap", - "type": "float", - "description": "Market Cap.", - "default": null, - "optional": true - }, - { - "name": "avg_volume_3_months", - "type": "float", - "description": "Average volume over the last 3 months in millions.", - "default": null, - "optional": true - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "PE Ratio (TTM).", - "default": null, - "optional": true - } - ] - }, - "model": "EquityAggressiveSmallCaps" - }, - "/equity/discovery/growth_tech": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get top tech stocks based on revenue and earnings growth.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.growth_tech(provider='yfinance')\nobb.equity.discovery.growth_tech(sort='desc', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", - "default": "yfinance", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[GrowthTechEquities]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the entity.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Last price.", - "default": "", - "optional": false - }, - { - "name": "change", - "type": "float", - "description": "Change in price value.", - "default": "", - "optional": false - }, - { - "name": "percent_change", - "type": "float", - "description": "Percent change.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "float", - "description": "The trading volume.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "market_cap", - "type": "float", - "description": "Market Cap.", - "default": null, - "optional": true - }, - { - "name": "avg_volume_3_months", - "type": "float", - "description": "Average volume over the last 3 months in millions.", - "default": null, - "optional": true - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "PE Ratio (TTM).", - "default": null, - "optional": true - } - ] - }, - "model": "GrowthTechEquities" - }, - "/equity/discovery/filings": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more. SEC\nfilings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114,\nForeign Investment Disclosures and others. The annual 10-K report is required to be\nfiled annually and includes the company's financial statements, management discussion and analysis,\nand audited financial statements.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.filings(provider='fmp')\n# Get filings for the year 2023, limited to 100 results\nobb.equity.discovery.filings(start_date='2023-01-01', end_date='2023-12-31', limit=100, provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "form_type", - "type": "str", - "description": "Filter by form type. Visit https://www.sec.gov/forms for a list of supported form types.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 100, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "is_done", - "type": "bool", - "description": "Flag for whether or not the filing is done.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[DiscoveryFilings]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "cik", - "type": "str", - "description": "Central Index Key (CIK) for the requested entity.", - "default": "", - "optional": false - }, - { - "name": "title", - "type": "str", - "description": "Title of the filing.", - "default": "", - "optional": false - }, - { - "name": "date", - "type": "datetime", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "form_type", - "type": "str", - "description": "The form type of the filing", - "default": "", - "optional": false - }, - { - "name": "link", - "type": "str", - "description": "URL to the filing page on the SEC site.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "DiscoveryFilings" - }, - "/equity/fundamental/multiples": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get equity valuation multiples for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.multiples(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityValuationMultiples]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "revenue_per_share_ttm", - "type": "float", - "description": "Revenue per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "net_income_per_share_ttm", - "type": "float", - "description": "Net income per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "operating_cash_flow_per_share_ttm", - "type": "float", - "description": "Operating cash flow per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_per_share_ttm", - "type": "float", - "description": "Free cash flow per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "cash_per_share_ttm", - "type": "float", - "description": "Cash per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "book_value_per_share_ttm", - "type": "float", - "description": "Book value per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "tangible_book_value_per_share_ttm", - "type": "float", - "description": "Tangible book value per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "shareholders_equity_per_share_ttm", - "type": "float", - "description": "Shareholders equity per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "interest_debt_per_share_ttm", - "type": "float", - "description": "Interest debt per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "market_cap_ttm", - "type": "float", - "description": "Market capitalization calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "enterprise_value_ttm", - "type": "float", - "description": "Enterprise value calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "pe_ratio_ttm", - "type": "float", - "description": "Price-to-earnings ratio (P/E ratio) calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "price_to_sales_ratio_ttm", - "type": "float", - "description": "Price-to-sales ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "pocf_ratio_ttm", - "type": "float", - "description": "Price-to-operating cash flow ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "pfcf_ratio_ttm", - "type": "float", - "description": "Price-to-free cash flow ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "pb_ratio_ttm", - "type": "float", - "description": "Price-to-book ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "ptb_ratio_ttm", - "type": "float", - "description": "Price-to-tangible book ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "ev_to_sales_ttm", - "type": "float", - "description": "Enterprise value-to-sales ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "enterprise_value_over_ebitda_ttm", - "type": "float", - "description": "Enterprise value-to-EBITDA ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "ev_to_operating_cash_flow_ttm", - "type": "float", - "description": "Enterprise value-to-operating cash flow ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "ev_to_free_cash_flow_ttm", - "type": "float", - "description": "Enterprise value-to-free cash flow ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "earnings_yield_ttm", - "type": "float", - "description": "Earnings yield calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_yield_ttm", - "type": "float", - "description": "Free cash flow yield calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "debt_to_equity_ttm", - "type": "float", - "description": "Debt-to-equity ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "debt_to_assets_ttm", - "type": "float", - "description": "Debt-to-assets ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "net_debt_to_ebitda_ttm", - "type": "float", - "description": "Net debt-to-EBITDA ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "current_ratio_ttm", - "type": "float", - "description": "Current ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "interest_coverage_ttm", - "type": "float", - "description": "Interest coverage calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "income_quality_ttm", - "type": "float", - "description": "Income quality calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield_ttm", - "type": "float", - "description": "Dividend yield calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield_percentage_ttm", - "type": "float", - "description": "Dividend yield percentage calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "dividend_to_market_cap_ttm", - "type": "float", - "description": "Dividend to market capitalization ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "dividend_per_share_ttm", - "type": "float", - "description": "Dividend per share calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "payout_ratio_ttm", - "type": "float", - "description": "Payout ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "sales_general_and_administrative_to_revenue_ttm", - "type": "float", - "description": "Sales general and administrative expenses-to-revenue ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "research_and_development_to_revenue_ttm", - "type": "float", - "description": "Research and development expenses-to-revenue ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "intangibles_to_total_assets_ttm", - "type": "float", - "description": "Intangibles-to-total assets ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "capex_to_operating_cash_flow_ttm", - "type": "float", - "description": "Capital expenditures-to-operating cash flow ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "capex_to_revenue_ttm", - "type": "float", - "description": "Capital expenditures-to-revenue ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "capex_to_depreciation_ttm", - "type": "float", - "description": "Capital expenditures-to-depreciation ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "stock_based_compensation_to_revenue_ttm", - "type": "float", - "description": "Stock-based compensation-to-revenue ratio calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "graham_number_ttm", - "type": "float", - "description": "Graham number calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "roic_ttm", - "type": "float", - "description": "Return on invested capital calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "return_on_tangible_assets_ttm", - "type": "float", - "description": "Return on tangible assets calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "graham_net_net_ttm", - "type": "float", - "description": "Graham net-net working capital calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "working_capital_ttm", - "type": "float", - "description": "Working capital calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "tangible_asset_value_ttm", - "type": "float", - "description": "Tangible asset value calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "net_current_asset_value_ttm", - "type": "float", - "description": "Net current asset value calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "invested_capital_ttm", - "type": "float", - "description": "Invested capital calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "average_receivables_ttm", - "type": "float", - "description": "Average receivables calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "average_payables_ttm", - "type": "float", - "description": "Average payables calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "average_inventory_ttm", - "type": "float", - "description": "Average inventory calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "days_sales_outstanding_ttm", - "type": "float", - "description": "Days sales outstanding calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "days_payables_outstanding_ttm", - "type": "float", - "description": "Days payables outstanding calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "days_of_inventory_on_hand_ttm", - "type": "float", - "description": "Days of inventory on hand calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "receivables_turnover_ttm", - "type": "float", - "description": "Receivables turnover calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "payables_turnover_ttm", - "type": "float", - "description": "Payables turnover calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "inventory_turnover_ttm", - "type": "float", - "description": "Inventory turnover calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "roe_ttm", - "type": "float", - "description": "Return on equity calculated as trailing twelve months.", - "default": null, - "optional": true - }, - { - "name": "capex_per_share_ttm", - "type": "float", - "description": "Capital expenditures per share calculated as trailing twelve months.", - "default": null, - "optional": true - } - ], - "fmp": [] - }, - "model": "EquityValuationMultiples" - }, - "/equity/fundamental/balance": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the balance sheet for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.balance(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.balance(symbol='AAPL', period='annual', limit=5, provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "limit", - "type": "Annotated[int, Ge(ge=0)]", - "description": "The number of data entries to return.", - "default": 5, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "fiscal_year", - "type": "int", - "description": "The specific fiscal year. Reports do not go beyond 2008.", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "filing_date", - "type": "date", - "description": "Filing date of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "filing_date_lt", - "type": "date", - "description": "Filing date less than the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_lte", - "type": "date", - "description": "Filing date less than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_gt", - "type": "date", - "description": "Filing date greater than the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_gte", - "type": "date", - "description": "Filing date greater than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date", - "type": "date", - "description": "Period of report date of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_lt", - "type": "date", - "description": "Period of report date less than the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_lte", - "type": "date", - "description": "Period of report date less than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_gt", - "type": "date", - "description": "Period of report date greater than the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_gte", - "type": "date", - "description": "Period of report date greater than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "include_sources", - "type": "bool", - "description": "Whether to include the sources of the financial statement.", - "default": true, - "optional": true - }, - { - "name": "order", - "type": "Literal['asc', 'desc']", - "description": "Order of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "sort", - "type": "Literal['filing_date', 'period_of_report_date']", - "description": "Sort of the financial statement.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[BalanceSheet]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "date", - "description": "The end date of the reporting period.", - "default": "", - "optional": false - }, - { - "name": "fiscal_period", - "type": "str", - "description": "The fiscal period of the report.", - "default": null, - "optional": true - }, - { - "name": "fiscal_year", - "type": "int", - "description": "The fiscal year of the fiscal period.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "filing_date", - "type": "date", - "description": "The date when the filing was made.", - "default": null, - "optional": true - }, - { - "name": "accepted_date", - "type": "datetime", - "description": "The date and time when the filing was accepted.", - "default": null, - "optional": true - }, - { - "name": "reported_currency", - "type": "str", - "description": "The currency in which the balance sheet was reported.", - "default": null, - "optional": true - }, - { - "name": "cash_and_cash_equivalents", - "type": "float", - "description": "Cash and cash equivalents.", - "default": null, - "optional": true - }, - { - "name": "short_term_investments", - "type": "float", - "description": "Short term investments.", - "default": null, - "optional": true - }, - { - "name": "cash_and_short_term_investments", - "type": "float", - "description": "Cash and short term investments.", - "default": null, - "optional": true - }, - { - "name": "net_receivables", - "type": "float", - "description": "Net receivables.", - "default": null, - "optional": true - }, - { - "name": "inventory", - "type": "float", - "description": "Inventory.", - "default": null, - "optional": true - }, - { - "name": "other_current_assets", - "type": "float", - "description": "Other current assets.", - "default": null, - "optional": true - }, - { - "name": "total_current_assets", - "type": "float", - "description": "Total current assets.", - "default": null, - "optional": true - }, - { - "name": "plant_property_equipment_net", - "type": "float", - "description": "Plant property equipment net.", - "default": null, - "optional": true - }, - { - "name": "goodwill", - "type": "float", - "description": "Goodwill.", - "default": null, - "optional": true - }, - { - "name": "intangible_assets", - "type": "float", - "description": "Intangible assets.", - "default": null, - "optional": true - }, - { - "name": "goodwill_and_intangible_assets", - "type": "float", - "description": "Goodwill and intangible assets.", - "default": null, - "optional": true - }, - { - "name": "long_term_investments", - "type": "float", - "description": "Long term investments.", - "default": null, - "optional": true - }, - { - "name": "tax_assets", - "type": "float", - "description": "Tax assets.", - "default": null, - "optional": true - }, - { - "name": "other_non_current_assets", - "type": "float", - "description": "Other non current assets.", - "default": null, - "optional": true - }, - { - "name": "non_current_assets", - "type": "float", - "description": "Total non current assets.", - "default": null, - "optional": true - }, - { - "name": "other_assets", - "type": "float", - "description": "Other assets.", - "default": null, - "optional": true - }, - { - "name": "total_assets", - "type": "float", - "description": "Total assets.", - "default": null, - "optional": true - }, - { - "name": "accounts_payable", - "type": "float", - "description": "Accounts payable.", - "default": null, - "optional": true - }, - { - "name": "short_term_debt", - "type": "float", - "description": "Short term debt.", - "default": null, - "optional": true - }, - { - "name": "tax_payables", - "type": "float", - "description": "Tax payables.", - "default": null, - "optional": true - }, - { - "name": "current_deferred_revenue", - "type": "float", - "description": "Current deferred revenue.", - "default": null, - "optional": true - }, - { - "name": "other_current_liabilities", - "type": "float", - "description": "Other current liabilities.", - "default": null, - "optional": true - }, - { - "name": "total_current_liabilities", - "type": "float", - "description": "Total current liabilities.", - "default": null, - "optional": true - }, - { - "name": "long_term_debt", - "type": "float", - "description": "Long term debt.", - "default": null, - "optional": true - }, - { - "name": "deferred_revenue_non_current", - "type": "float", - "description": "Non current deferred revenue.", - "default": null, - "optional": true - }, - { - "name": "deferred_tax_liabilities_non_current", - "type": "float", - "description": "Deferred tax liabilities non current.", - "default": null, - "optional": true - }, - { - "name": "other_non_current_liabilities", - "type": "float", - "description": "Other non current liabilities.", - "default": null, - "optional": true - }, - { - "name": "total_non_current_liabilities", - "type": "float", - "description": "Total non current liabilities.", - "default": null, - "optional": true - }, - { - "name": "other_liabilities", - "type": "float", - "description": "Other liabilities.", - "default": null, - "optional": true - }, - { - "name": "capital_lease_obligations", - "type": "float", - "description": "Capital lease obligations.", - "default": null, - "optional": true - }, - { - "name": "total_liabilities", - "type": "float", - "description": "Total liabilities.", - "default": null, - "optional": true - }, - { - "name": "preferred_stock", - "type": "float", - "description": "Preferred stock.", - "default": null, - "optional": true - }, - { - "name": "common_stock", - "type": "float", - "description": "Common stock.", - "default": null, - "optional": true - }, - { - "name": "retained_earnings", - "type": "float", - "description": "Retained earnings.", - "default": null, - "optional": true - }, - { - "name": "accumulated_other_comprehensive_income", - "type": "float", - "description": "Accumulated other comprehensive income (loss).", - "default": null, - "optional": true - }, - { - "name": "other_shareholders_equity", - "type": "float", - "description": "Other shareholders equity.", - "default": null, - "optional": true - }, - { - "name": "other_total_shareholders_equity", - "type": "float", - "description": "Other total shareholders equity.", - "default": null, - "optional": true - }, - { - "name": "total_common_equity", - "type": "float", - "description": "Total common equity.", - "default": null, - "optional": true - }, - { - "name": "total_equity_non_controlling_interests", - "type": "float", - "description": "Total equity non controlling interests.", - "default": null, - "optional": true - }, - { - "name": "total_liabilities_and_shareholders_equity", - "type": "float", - "description": "Total liabilities and shareholders equity.", - "default": null, - "optional": true - }, - { - "name": "minority_interest", - "type": "float", - "description": "Minority interest.", - "default": null, - "optional": true - }, - { - "name": "total_liabilities_and_total_equity", - "type": "float", - "description": "Total liabilities and total equity.", - "default": null, - "optional": true - }, - { - "name": "total_investments", - "type": "float", - "description": "Total investments.", - "default": null, - "optional": true - }, - { - "name": "total_debt", - "type": "float", - "description": "Total debt.", - "default": null, - "optional": true - }, - { - "name": "net_debt", - "type": "float", - "description": "Net debt.", - "default": null, - "optional": true - }, - { - "name": "link", - "type": "str", - "description": "Link to the filing.", - "default": null, - "optional": true - }, - { - "name": "final_link", - "type": "str", - "description": "Link to the filing document.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "reported_currency", - "type": "str", - "description": "The currency in which the balance sheet is reported.", - "default": null, - "optional": true - }, - { - "name": "cash_and_cash_equivalents", - "type": "float", - "description": "Cash and cash equivalents.", - "default": null, - "optional": true - }, - { - "name": "cash_and_due_from_banks", - "type": "float", - "description": "Cash and due from banks.", - "default": null, - "optional": true - }, - { - "name": "restricted_cash", - "type": "float", - "description": "Restricted cash.", - "default": null, - "optional": true - }, - { - "name": "short_term_investments", - "type": "float", - "description": "Short term investments.", - "default": null, - "optional": true - }, - { - "name": "federal_funds_sold", - "type": "float", - "description": "Federal funds sold.", - "default": null, - "optional": true - }, - { - "name": "accounts_receivable", - "type": "float", - "description": "Accounts receivable.", - "default": null, - "optional": true - }, - { - "name": "note_and_lease_receivable", - "type": "float", - "description": "Note and lease receivable. (Vendor non-trade receivables)", - "default": null, - "optional": true - }, - { - "name": "inventories", - "type": "float", - "description": "Net Inventories.", - "default": null, - "optional": true - }, - { - "name": "customer_and_other_receivables", - "type": "float", - "description": "Customer and other receivables.", - "default": null, - "optional": true - }, - { - "name": "interest_bearing_deposits_at_other_banks", - "type": "float", - "description": "Interest bearing deposits at other banks.", - "default": null, - "optional": true - }, - { - "name": "time_deposits_placed_and_other_short_term_investments", - "type": "float", - "description": "Time deposits placed and other short term investments.", - "default": null, - "optional": true - }, - { - "name": "trading_account_securities", - "type": "float", - "description": "Trading account securities.", - "default": null, - "optional": true - }, - { - "name": "loans_and_leases", - "type": "float", - "description": "Loans and leases.", - "default": null, - "optional": true - }, - { - "name": "allowance_for_loan_and_lease_losses", - "type": "float", - "description": "Allowance for loan and lease losses.", - "default": null, - "optional": true - }, - { - "name": "current_deferred_refundable_income_taxes", - "type": "float", - "description": "Current deferred refundable income taxes.", - "default": null, - "optional": true - }, - { - "name": "other_current_assets", - "type": "float", - "description": "Other current assets.", - "default": null, - "optional": true - }, - { - "name": "loans_and_leases_net_of_allowance", - "type": "float", - "description": "Loans and leases net of allowance.", - "default": null, - "optional": true - }, - { - "name": "accrued_investment_income", - "type": "float", - "description": "Accrued investment income.", - "default": null, - "optional": true - }, - { - "name": "other_current_non_operating_assets", - "type": "float", - "description": "Other current non-operating assets.", - "default": null, - "optional": true - }, - { - "name": "loans_held_for_sale", - "type": "float", - "description": "Loans held for sale.", - "default": null, - "optional": true - }, - { - "name": "prepaid_expenses", - "type": "float", - "description": "Prepaid expenses.", - "default": null, - "optional": true - }, - { - "name": "total_current_assets", - "type": "float", - "description": "Total current assets.", - "default": null, - "optional": true - }, - { - "name": "plant_property_equipment_gross", - "type": "float", - "description": "Plant property equipment gross.", - "default": null, - "optional": true - }, - { - "name": "accumulated_depreciation", - "type": "float", - "description": "Accumulated depreciation.", - "default": null, - "optional": true - }, - { - "name": "premises_and_equipment_net", - "type": "float", - "description": "Net premises and equipment.", - "default": null, - "optional": true - }, - { - "name": "plant_property_equipment_net", - "type": "float", - "description": "Net plant property equipment.", - "default": null, - "optional": true - }, - { - "name": "long_term_investments", - "type": "float", - "description": "Long term investments.", - "default": null, - "optional": true - }, - { - "name": "mortgage_servicing_rights", - "type": "float", - "description": "Mortgage servicing rights.", - "default": null, - "optional": true - }, - { - "name": "unearned_premiums_asset", - "type": "float", - "description": "Unearned premiums asset.", - "default": null, - "optional": true - }, - { - "name": "non_current_note_lease_receivables", - "type": "float", - "description": "Non-current note lease receivables.", - "default": null, - "optional": true - }, - { - "name": "deferred_acquisition_cost", - "type": "float", - "description": "Deferred acquisition cost.", - "default": null, - "optional": true - }, - { - "name": "goodwill", - "type": "float", - "description": "Goodwill.", - "default": null, - "optional": true - }, - { - "name": "separate_account_business_assets", - "type": "float", - "description": "Separate account business assets.", - "default": null, - "optional": true - }, - { - "name": "non_current_deferred_refundable_income_taxes", - "type": "float", - "description": "Noncurrent deferred refundable income taxes.", - "default": null, - "optional": true - }, - { - "name": "intangible_assets", - "type": "float", - "description": "Intangible assets.", - "default": null, - "optional": true - }, - { - "name": "employee_benefit_assets", - "type": "float", - "description": "Employee benefit assets.", - "default": null, - "optional": true - }, - { - "name": "other_assets", - "type": "float", - "description": "Other assets.", - "default": null, - "optional": true - }, - { - "name": "other_non_current_operating_assets", - "type": "float", - "description": "Other noncurrent operating assets.", - "default": null, - "optional": true - }, - { - "name": "other_non_current_non_operating_assets", - "type": "float", - "description": "Other noncurrent non-operating assets.", - "default": null, - "optional": true - }, - { - "name": "interest_bearing_deposits", - "type": "float", - "description": "Interest bearing deposits.", - "default": null, - "optional": true - }, - { - "name": "total_non_current_assets", - "type": "float", - "description": "Total noncurrent assets.", - "default": null, - "optional": true - }, - { - "name": "total_assets", - "type": "float", - "description": "Total assets.", - "default": null, - "optional": true - }, - { - "name": "non_interest_bearing_deposits", - "type": "float", - "description": "Non interest bearing deposits.", - "default": null, - "optional": true - }, - { - "name": "federal_funds_purchased_and_securities_sold", - "type": "float", - "description": "Federal funds purchased and securities sold.", - "default": null, - "optional": true - }, - { - "name": "bankers_acceptance_outstanding", - "type": "float", - "description": "Bankers acceptance outstanding.", - "default": null, - "optional": true - }, - { - "name": "short_term_debt", - "type": "float", - "description": "Short term debt.", - "default": null, - "optional": true - }, - { - "name": "accounts_payable", - "type": "float", - "description": "Accounts payable.", - "default": null, - "optional": true - }, - { - "name": "current_deferred_revenue", - "type": "float", - "description": "Current deferred revenue.", - "default": null, - "optional": true - }, - { - "name": "current_deferred_payable_income_tax_liabilities", - "type": "float", - "description": "Current deferred payable income tax liabilities.", - "default": null, - "optional": true - }, - { - "name": "accrued_interest_payable", - "type": "float", - "description": "Accrued interest payable.", - "default": null, - "optional": true - }, - { - "name": "accrued_expenses", - "type": "float", - "description": "Accrued expenses.", - "default": null, - "optional": true - }, - { - "name": "other_short_term_payables", - "type": "float", - "description": "Other short term payables.", - "default": null, - "optional": true - }, - { - "name": "customer_deposits", - "type": "float", - "description": "Customer deposits.", - "default": null, - "optional": true - }, - { - "name": "dividends_payable", - "type": "float", - "description": "Dividends payable.", - "default": null, - "optional": true - }, - { - "name": "claims_and_claim_expense", - "type": "float", - "description": "Claims and claim expense.", - "default": null, - "optional": true - }, - { - "name": "future_policy_benefits", - "type": "float", - "description": "Future policy benefits.", - "default": null, - "optional": true - }, - { - "name": "current_employee_benefit_liabilities", - "type": "float", - "description": "Current employee benefit liabilities.", - "default": null, - "optional": true - }, - { - "name": "unearned_premiums_liability", - "type": "float", - "description": "Unearned premiums liability.", - "default": null, - "optional": true - }, - { - "name": "other_taxes_payable", - "type": "float", - "description": "Other taxes payable.", - "default": null, - "optional": true - }, - { - "name": "policy_holder_funds", - "type": "float", - "description": "Policy holder funds.", - "default": null, - "optional": true - }, - { - "name": "other_current_liabilities", - "type": "float", - "description": "Other current liabilities.", - "default": null, - "optional": true - }, - { - "name": "other_current_non_operating_liabilities", - "type": "float", - "description": "Other current non-operating liabilities.", - "default": null, - "optional": true - }, - { - "name": "separate_account_business_liabilities", - "type": "float", - "description": "Separate account business liabilities.", - "default": null, - "optional": true - }, - { - "name": "total_current_liabilities", - "type": "float", - "description": "Total current liabilities.", - "default": null, - "optional": true - }, - { - "name": "long_term_debt", - "type": "float", - "description": "Long term debt.", - "default": null, - "optional": true - }, - { - "name": "other_long_term_liabilities", - "type": "float", - "description": "Other long term liabilities.", - "default": null, - "optional": true - }, - { - "name": "non_current_deferred_revenue", - "type": "float", - "description": "Non-current deferred revenue.", - "default": null, - "optional": true - }, - { - "name": "non_current_deferred_payable_income_tax_liabilities", - "type": "float", - "description": "Non-current deferred payable income tax liabilities.", - "default": null, - "optional": true - }, - { - "name": "non_current_employee_benefit_liabilities", - "type": "float", - "description": "Non-current employee benefit liabilities.", - "default": null, - "optional": true - }, - { - "name": "other_non_current_operating_liabilities", - "type": "float", - "description": "Other non-current operating liabilities.", - "default": null, - "optional": true - }, - { - "name": "other_non_current_non_operating_liabilities", - "type": "float", - "description": "Other non-current, non-operating liabilities.", - "default": null, - "optional": true - }, - { - "name": "total_non_current_liabilities", - "type": "float", - "description": "Total non-current liabilities.", - "default": null, - "optional": true - }, - { - "name": "capital_lease_obligations", - "type": "float", - "description": "Capital lease obligations.", - "default": null, - "optional": true - }, - { - "name": "asset_retirement_reserve_litigation_obligation", - "type": "float", - "description": "Asset retirement reserve litigation obligation.", - "default": null, - "optional": true - }, - { - "name": "total_liabilities", - "type": "float", - "description": "Total liabilities.", - "default": null, - "optional": true - }, - { - "name": "commitments_contingencies", - "type": "float", - "description": "Commitments contingencies.", - "default": null, - "optional": true - }, - { - "name": "redeemable_non_controlling_interest", - "type": "float", - "description": "Redeemable non-controlling interest.", - "default": null, - "optional": true - }, - { - "name": "preferred_stock", - "type": "float", - "description": "Preferred stock.", - "default": null, - "optional": true - }, - { - "name": "common_stock", - "type": "float", - "description": "Common stock.", - "default": null, - "optional": true - }, - { - "name": "retained_earnings", - "type": "float", - "description": "Retained earnings.", - "default": null, - "optional": true - }, - { - "name": "treasury_stock", - "type": "float", - "description": "Treasury stock.", - "default": null, - "optional": true - }, - { - "name": "accumulated_other_comprehensive_income", - "type": "float", - "description": "Accumulated other comprehensive income.", - "default": null, - "optional": true - }, - { - "name": "participating_policy_holder_equity", - "type": "float", - "description": "Participating policy holder equity.", - "default": null, - "optional": true - }, - { - "name": "other_equity_adjustments", - "type": "float", - "description": "Other equity adjustments.", - "default": null, - "optional": true - }, - { - "name": "total_common_equity", - "type": "float", - "description": "Total common equity.", - "default": null, - "optional": true - }, - { - "name": "total_preferred_common_equity", - "type": "float", - "description": "Total preferred common equity.", - "default": null, - "optional": true - }, - { - "name": "non_controlling_interest", - "type": "float", - "description": "Non-controlling interest.", - "default": null, - "optional": true - }, - { - "name": "total_equity_non_controlling_interests", - "type": "float", - "description": "Total equity non-controlling interests.", - "default": null, - "optional": true - }, - { - "name": "total_liabilities_shareholders_equity", - "type": "float", - "description": "Total liabilities and shareholders equity.", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "accounts_receivable", - "type": "int", - "description": "Accounts receivable", - "default": null, - "optional": true - }, - { - "name": "marketable_securities", - "type": "int", - "description": "Marketable securities", - "default": null, - "optional": true - }, - { - "name": "prepaid_expenses", - "type": "int", - "description": "Prepaid expenses", - "default": null, - "optional": true - }, - { - "name": "other_current_assets", - "type": "int", - "description": "Other current assets", - "default": null, - "optional": true - }, - { - "name": "total_current_assets", - "type": "int", - "description": "Total current assets", - "default": null, - "optional": true - }, - { - "name": "property_plant_equipment_net", - "type": "int", - "description": "Property plant and equipment net", - "default": null, - "optional": true - }, - { - "name": "inventory", - "type": "int", - "description": "Inventory", - "default": null, - "optional": true - }, - { - "name": "other_non_current_assets", - "type": "int", - "description": "Other non-current assets", - "default": null, - "optional": true - }, - { - "name": "total_non_current_assets", - "type": "int", - "description": "Total non-current assets", - "default": null, - "optional": true - }, - { - "name": "intangible_assets", - "type": "int", - "description": "Intangible assets", - "default": null, - "optional": true - }, - { - "name": "total_assets", - "type": "int", - "description": "Total assets", - "default": null, - "optional": true - }, - { - "name": "accounts_payable", - "type": "int", - "description": "Accounts payable", - "default": null, - "optional": true - }, - { - "name": "employee_wages", - "type": "int", - "description": "Employee wages", - "default": null, - "optional": true - }, - { - "name": "other_current_liabilities", - "type": "int", - "description": "Other current liabilities", - "default": null, - "optional": true - }, - { - "name": "total_current_liabilities", - "type": "int", - "description": "Total current liabilities", - "default": null, - "optional": true - }, - { - "name": "other_non_current_liabilities", - "type": "int", - "description": "Other non-current liabilities", - "default": null, - "optional": true - }, - { - "name": "total_non_current_liabilities", - "type": "int", - "description": "Total non-current liabilities", - "default": null, - "optional": true - }, - { - "name": "long_term_debt", - "type": "int", - "description": "Long term debt", - "default": null, - "optional": true - }, - { - "name": "total_liabilities", - "type": "int", - "description": "Total liabilities", - "default": null, - "optional": true - }, - { - "name": "minority_interest", - "type": "int", - "description": "Minority interest", - "default": null, - "optional": true - }, - { - "name": "temporary_equity_attributable_to_parent", - "type": "int", - "description": "Temporary equity attributable to parent", - "default": null, - "optional": true - }, - { - "name": "equity_attributable_to_parent", - "type": "int", - "description": "Equity attributable to parent", - "default": null, - "optional": true - }, - { - "name": "temporary_equity", - "type": "int", - "description": "Temporary equity", - "default": null, - "optional": true - }, - { - "name": "preferred_stock", - "type": "int", - "description": "Preferred stock", - "default": null, - "optional": true - }, - { - "name": "redeemable_non_controlling_interest", - "type": "int", - "description": "Redeemable non-controlling interest", - "default": null, - "optional": true - }, - { - "name": "redeemable_non_controlling_interest_other", - "type": "int", - "description": "Redeemable non-controlling interest other", - "default": null, - "optional": true - }, - { - "name": "total_stock_holders_equity", - "type": "int", - "description": "Total stock holders equity", - "default": null, - "optional": true - }, - { - "name": "total_liabilities_and_stock_holders_equity", - "type": "int", - "description": "Total liabilities and stockholders equity", - "default": null, - "optional": true - }, - { - "name": "total_equity", - "type": "int", - "description": "Total equity", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "BalanceSheet" - }, - "/equity/fundamental/balance_growth": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the growth of a company's balance sheet items over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.balance_growth(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.balance_growth(symbol='AAPL', limit=10, provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 10, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[BalanceSheetGrowth]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Reporting period.", - "default": "", - "optional": false - }, - { - "name": "growth_cash_and_cash_equivalents", - "type": "float", - "description": "Growth rate of cash and cash equivalents.", - "default": "", - "optional": false - }, - { - "name": "growth_short_term_investments", - "type": "float", - "description": "Growth rate of short-term investments.", - "default": "", - "optional": false - }, - { - "name": "growth_cash_and_short_term_investments", - "type": "float", - "description": "Growth rate of cash and short-term investments.", - "default": "", - "optional": false - }, - { - "name": "growth_net_receivables", - "type": "float", - "description": "Growth rate of net receivables.", - "default": "", - "optional": false - }, - { - "name": "growth_inventory", - "type": "float", - "description": "Growth rate of inventory.", - "default": "", - "optional": false - }, - { - "name": "growth_other_current_assets", - "type": "float", - "description": "Growth rate of other current assets.", - "default": "", - "optional": false - }, - { - "name": "growth_total_current_assets", - "type": "float", - "description": "Growth rate of total current assets.", - "default": "", - "optional": false - }, - { - "name": "growth_property_plant_equipment_net", - "type": "float", - "description": "Growth rate of net property, plant, and equipment.", - "default": "", - "optional": false - }, - { - "name": "growth_goodwill", - "type": "float", - "description": "Growth rate of goodwill.", - "default": "", - "optional": false - }, - { - "name": "growth_intangible_assets", - "type": "float", - "description": "Growth rate of intangible assets.", - "default": "", - "optional": false - }, - { - "name": "growth_goodwill_and_intangible_assets", - "type": "float", - "description": "Growth rate of goodwill and intangible assets.", - "default": "", - "optional": false - }, - { - "name": "growth_long_term_investments", - "type": "float", - "description": "Growth rate of long-term investments.", - "default": "", - "optional": false - }, - { - "name": "growth_tax_assets", - "type": "float", - "description": "Growth rate of tax assets.", - "default": "", - "optional": false - }, - { - "name": "growth_other_non_current_assets", - "type": "float", - "description": "Growth rate of other non-current assets.", - "default": "", - "optional": false - }, - { - "name": "growth_total_non_current_assets", - "type": "float", - "description": "Growth rate of total non-current assets.", - "default": "", - "optional": false - }, - { - "name": "growth_other_assets", - "type": "float", - "description": "Growth rate of other assets.", - "default": "", - "optional": false - }, - { - "name": "growth_total_assets", - "type": "float", - "description": "Growth rate of total assets.", - "default": "", - "optional": false - }, - { - "name": "growth_account_payables", - "type": "float", - "description": "Growth rate of accounts payable.", - "default": "", - "optional": false - }, - { - "name": "growth_short_term_debt", - "type": "float", - "description": "Growth rate of short-term debt.", - "default": "", - "optional": false - }, - { - "name": "growth_tax_payables", - "type": "float", - "description": "Growth rate of tax payables.", - "default": "", - "optional": false - }, - { - "name": "growth_deferred_revenue", - "type": "float", - "description": "Growth rate of deferred revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_other_current_liabilities", - "type": "float", - "description": "Growth rate of other current liabilities.", - "default": "", - "optional": false - }, - { - "name": "growth_total_current_liabilities", - "type": "float", - "description": "Growth rate of total current liabilities.", - "default": "", - "optional": false - }, - { - "name": "growth_long_term_debt", - "type": "float", - "description": "Growth rate of long-term debt.", - "default": "", - "optional": false - }, - { - "name": "growth_deferred_revenue_non_current", - "type": "float", - "description": "Growth rate of non-current deferred revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_deferrred_tax_liabilities_non_current", - "type": "float", - "description": "Growth rate of non-current deferred tax liabilities.", - "default": "", - "optional": false - }, - { - "name": "growth_other_non_current_liabilities", - "type": "float", - "description": "Growth rate of other non-current liabilities.", - "default": "", - "optional": false - }, - { - "name": "growth_total_non_current_liabilities", - "type": "float", - "description": "Growth rate of total non-current liabilities.", - "default": "", - "optional": false - }, - { - "name": "growth_other_liabilities", - "type": "float", - "description": "Growth rate of other liabilities.", - "default": "", - "optional": false - }, - { - "name": "growth_total_liabilities", - "type": "float", - "description": "Growth rate of total liabilities.", - "default": "", - "optional": false - }, - { - "name": "growth_common_stock", - "type": "float", - "description": "Growth rate of common stock.", - "default": "", - "optional": false - }, - { - "name": "growth_retained_earnings", - "type": "float", - "description": "Growth rate of retained earnings.", - "default": "", - "optional": false - }, - { - "name": "growth_accumulated_other_comprehensive_income_loss", - "type": "float", - "description": "Growth rate of accumulated other comprehensive income/loss.", - "default": "", - "optional": false - }, - { - "name": "growth_othertotal_stockholders_equity", - "type": "float", - "description": "Growth rate of other total stockholders' equity.", - "default": "", - "optional": false - }, - { - "name": "growth_total_stockholders_equity", - "type": "float", - "description": "Growth rate of total stockholders' equity.", - "default": "", - "optional": false - }, - { - "name": "growth_total_liabilities_and_stockholders_equity", - "type": "float", - "description": "Growth rate of total liabilities and stockholders' equity.", - "default": "", - "optional": false - }, - { - "name": "growth_total_investments", - "type": "float", - "description": "Growth rate of total investments.", - "default": "", - "optional": false - }, - { - "name": "growth_total_debt", - "type": "float", - "description": "Growth rate of total debt.", - "default": "", - "optional": false - }, - { - "name": "growth_net_debt", - "type": "float", - "description": "Growth rate of net debt.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "BalanceSheetGrowth" - }, - "/equity/fundamental/cash": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the cash flow statement for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.cash(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.cash(symbol='AAPL', period='annual', limit=5, provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "limit", - "type": "Annotated[int, Ge(ge=0)]", - "description": "The number of data entries to return.", - "default": 5, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "fiscal_year", - "type": "int", - "description": "The specific fiscal year. Reports do not go beyond 2008.", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "filing_date", - "type": "date", - "description": "Filing date of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "filing_date_lt", - "type": "date", - "description": "Filing date less than the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_lte", - "type": "date", - "description": "Filing date less than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_gt", - "type": "date", - "description": "Filing date greater than the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_gte", - "type": "date", - "description": "Filing date greater than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date", - "type": "date", - "description": "Period of report date of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_lt", - "type": "date", - "description": "Period of report date less than the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_lte", - "type": "date", - "description": "Period of report date less than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_gt", - "type": "date", - "description": "Period of report date greater than the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_gte", - "type": "date", - "description": "Period of report date greater than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "include_sources", - "type": "bool", - "description": "Whether to include the sources of the financial statement.", - "default": false, - "optional": true - }, - { - "name": "order", - "type": "Literal[None, 'asc', 'desc']", - "description": "Order of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "sort", - "type": "Literal[None, 'filing_date', 'period_of_report_date']", - "description": "Sort of the financial statement.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CashFlowStatement]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "date", - "description": "The end date of the reporting period.", - "default": "", - "optional": false - }, - { - "name": "fiscal_period", - "type": "str", - "description": "The fiscal period of the report.", - "default": null, - "optional": true - }, - { - "name": "fiscal_year", - "type": "int", - "description": "The fiscal year of the fiscal period.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "filing_date", - "type": "date", - "description": "The date of the filing.", - "default": null, - "optional": true - }, - { - "name": "accepted_date", - "type": "datetime", - "description": "The date the filing was accepted.", - "default": null, - "optional": true - }, - { - "name": "reported_currency", - "type": "str", - "description": "The currency in which the cash flow statement was reported.", - "default": null, - "optional": true - }, - { - "name": "net_income", - "type": "float", - "description": "Net income.", - "default": null, - "optional": true - }, - { - "name": "depreciation_and_amortization", - "type": "float", - "description": "Depreciation and amortization.", - "default": null, - "optional": true - }, - { - "name": "deferred_income_tax", - "type": "float", - "description": "Deferred income tax.", - "default": null, - "optional": true - }, - { - "name": "stock_based_compensation", - "type": "float", - "description": "Stock-based compensation.", - "default": null, - "optional": true - }, - { - "name": "change_in_working_capital", - "type": "float", - "description": "Change in working capital.", - "default": null, - "optional": true - }, - { - "name": "change_in_account_receivables", - "type": "float", - "description": "Change in account receivables.", - "default": null, - "optional": true - }, - { - "name": "change_in_inventory", - "type": "float", - "description": "Change in inventory.", - "default": null, - "optional": true - }, - { - "name": "change_in_account_payable", - "type": "float", - "description": "Change in account payable.", - "default": null, - "optional": true - }, - { - "name": "change_in_other_working_capital", - "type": "float", - "description": "Change in other working capital.", - "default": null, - "optional": true - }, - { - "name": "change_in_other_non_cash_items", - "type": "float", - "description": "Change in other non-cash items.", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_operating_activities", - "type": "float", - "description": "Net cash from operating activities.", - "default": null, - "optional": true - }, - { - "name": "purchase_of_property_plant_and_equipment", - "type": "float", - "description": "Purchase of property, plant and equipment.", - "default": null, - "optional": true - }, - { - "name": "acquisitions", - "type": "float", - "description": "Acquisitions.", - "default": null, - "optional": true - }, - { - "name": "purchase_of_investment_securities", - "type": "float", - "description": "Purchase of investment securities.", - "default": null, - "optional": true - }, - { - "name": "sale_and_maturity_of_investments", - "type": "float", - "description": "Sale and maturity of investments.", - "default": null, - "optional": true - }, - { - "name": "other_investing_activities", - "type": "float", - "description": "Other investing activities.", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_investing_activities", - "type": "float", - "description": "Net cash from investing activities.", - "default": null, - "optional": true - }, - { - "name": "repayment_of_debt", - "type": "float", - "description": "Repayment of debt.", - "default": null, - "optional": true - }, - { - "name": "issuance_of_common_equity", - "type": "float", - "description": "Issuance of common equity.", - "default": null, - "optional": true - }, - { - "name": "repurchase_of_common_equity", - "type": "float", - "description": "Repurchase of common equity.", - "default": null, - "optional": true - }, - { - "name": "payment_of_dividends", - "type": "float", - "description": "Payment of dividends.", - "default": null, - "optional": true - }, - { - "name": "other_financing_activities", - "type": "float", - "description": "Other financing activities.", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_financing_activities", - "type": "float", - "description": "Net cash from financing activities.", - "default": null, - "optional": true - }, - { - "name": "effect_of_exchange_rate_changes_on_cash", - "type": "float", - "description": "Effect of exchange rate changes on cash.", - "default": null, - "optional": true - }, - { - "name": "net_change_in_cash_and_equivalents", - "type": "float", - "description": "Net change in cash and equivalents.", - "default": null, - "optional": true - }, - { - "name": "cash_at_beginning_of_period", - "type": "float", - "description": "Cash at beginning of period.", - "default": null, - "optional": true - }, - { - "name": "cash_at_end_of_period", - "type": "float", - "description": "Cash at end of period.", - "default": null, - "optional": true - }, - { - "name": "operating_cash_flow", - "type": "float", - "description": "Operating cash flow.", - "default": null, - "optional": true - }, - { - "name": "capital_expenditure", - "type": "float", - "description": "Capital expenditure.", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow", - "type": "float", - "description": "None", - "default": null, - "optional": true - }, - { - "name": "link", - "type": "str", - "description": "Link to the filing.", - "default": null, - "optional": true - }, - { - "name": "final_link", - "type": "str", - "description": "Link to the filing document.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "reported_currency", - "type": "str", - "description": "The currency in which the balance sheet is reported.", - "default": null, - "optional": true - }, - { - "name": "net_income_continuing_operations", - "type": "float", - "description": "Net Income (Continuing Operations)", - "default": null, - "optional": true - }, - { - "name": "net_income_discontinued_operations", - "type": "float", - "description": "Net Income (Discontinued Operations)", - "default": null, - "optional": true - }, - { - "name": "net_income", - "type": "float", - "description": "Consolidated Net Income.", - "default": null, - "optional": true - }, - { - "name": "provision_for_loan_losses", - "type": "float", - "description": "Provision for Loan Losses", - "default": null, - "optional": true - }, - { - "name": "provision_for_credit_losses", - "type": "float", - "description": "Provision for credit losses", - "default": null, - "optional": true - }, - { - "name": "depreciation_expense", - "type": "float", - "description": "Depreciation Expense.", - "default": null, - "optional": true - }, - { - "name": "amortization_expense", - "type": "float", - "description": "Amortization Expense.", - "default": null, - "optional": true - }, - { - "name": "share_based_compensation", - "type": "float", - "description": "Share-based compensation.", - "default": null, - "optional": true - }, - { - "name": "non_cash_adjustments_to_reconcile_net_income", - "type": "float", - "description": "Non-Cash Adjustments to Reconcile Net Income.", - "default": null, - "optional": true - }, - { - "name": "changes_in_operating_assets_and_liabilities", - "type": "float", - "description": "Changes in Operating Assets and Liabilities (Net)", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_continuing_operating_activities", - "type": "float", - "description": "Net Cash from Continuing Operating Activities", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_discontinued_operating_activities", - "type": "float", - "description": "Net Cash from Discontinued Operating Activities", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_operating_activities", - "type": "float", - "description": "Net Cash from Operating Activities", - "default": null, - "optional": true - }, - { - "name": "divestitures", - "type": "float", - "description": "Divestitures", - "default": null, - "optional": true - }, - { - "name": "sale_of_property_plant_and_equipment", - "type": "float", - "description": "Sale of Property, Plant, and Equipment", - "default": null, - "optional": true - }, - { - "name": "acquisitions", - "type": "float", - "description": "Acquisitions", - "default": null, - "optional": true - }, - { - "name": "purchase_of_investments", - "type": "float", - "description": "Purchase of Investments", - "default": null, - "optional": true - }, - { - "name": "purchase_of_investment_securities", - "type": "float", - "description": "Purchase of Investment Securities", - "default": null, - "optional": true - }, - { - "name": "sale_and_maturity_of_investments", - "type": "float", - "description": "Sale and Maturity of Investments", - "default": null, - "optional": true - }, - { - "name": "loans_held_for_sale", - "type": "float", - "description": "Loans Held for Sale (Net)", - "default": null, - "optional": true - }, - { - "name": "purchase_of_property_plant_and_equipment", - "type": "float", - "description": "Purchase of Property, Plant, and Equipment", - "default": null, - "optional": true - }, - { - "name": "other_investing_activities", - "type": "float", - "description": "Other Investing Activities (Net)", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_continuing_investing_activities", - "type": "float", - "description": "Net Cash from Continuing Investing Activities", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_discontinued_investing_activities", - "type": "float", - "description": "Net Cash from Discontinued Investing Activities", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_investing_activities", - "type": "float", - "description": "Net Cash from Investing Activities", - "default": null, - "optional": true - }, - { - "name": "payment_of_dividends", - "type": "float", - "description": "Payment of Dividends", - "default": null, - "optional": true - }, - { - "name": "repurchase_of_common_equity", - "type": "float", - "description": "Repurchase of Common Equity", - "default": null, - "optional": true - }, - { - "name": "repurchase_of_preferred_equity", - "type": "float", - "description": "Repurchase of Preferred Equity", - "default": null, - "optional": true - }, - { - "name": "issuance_of_common_equity", - "type": "float", - "description": "Issuance of Common Equity", - "default": null, - "optional": true - }, - { - "name": "issuance_of_preferred_equity", - "type": "float", - "description": "Issuance of Preferred Equity", - "default": null, - "optional": true - }, - { - "name": "issuance_of_debt", - "type": "float", - "description": "Issuance of Debt", - "default": null, - "optional": true - }, - { - "name": "repayment_of_debt", - "type": "float", - "description": "Repayment of Debt", - "default": null, - "optional": true - }, - { - "name": "other_financing_activities", - "type": "float", - "description": "Other Financing Activities (Net)", - "default": null, - "optional": true - }, - { - "name": "cash_interest_received", - "type": "float", - "description": "Cash Interest Received", - "default": null, - "optional": true - }, - { - "name": "net_change_in_deposits", - "type": "float", - "description": "Net Change in Deposits", - "default": null, - "optional": true - }, - { - "name": "net_increase_in_fed_funds_sold", - "type": "float", - "description": "Net Increase in Fed Funds Sold", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_continuing_financing_activities", - "type": "float", - "description": "Net Cash from Continuing Financing Activities", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_discontinued_financing_activities", - "type": "float", - "description": "Net Cash from Discontinued Financing Activities", - "default": null, - "optional": true - }, - { - "name": "net_cash_from_financing_activities", - "type": "float", - "description": "Net Cash from Financing Activities", - "default": null, - "optional": true - }, - { - "name": "effect_of_exchange_rate_changes", - "type": "float", - "description": "Effect of Exchange Rate Changes", - "default": null, - "optional": true - }, - { - "name": "other_net_changes_in_cash", - "type": "float", - "description": "Other Net Changes in Cash", - "default": null, - "optional": true - }, - { - "name": "net_change_in_cash_and_equivalents", - "type": "float", - "description": "Net Change in Cash and Equivalents", - "default": null, - "optional": true - }, - { - "name": "cash_income_taxes_paid", - "type": "float", - "description": "Cash Income Taxes Paid", - "default": null, - "optional": true - }, - { - "name": "cash_interest_paid", - "type": "float", - "description": "Cash Interest Paid", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "net_cash_flow_from_operating_activities_continuing", - "type": "int", - "description": "Net cash flow from operating activities continuing.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_operating_activities_discontinued", - "type": "int", - "description": "Net cash flow from operating activities discontinued.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_operating_activities", - "type": "int", - "description": "Net cash flow from operating activities.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_investing_activities_continuing", - "type": "int", - "description": "Net cash flow from investing activities continuing.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_investing_activities_discontinued", - "type": "int", - "description": "Net cash flow from investing activities discontinued.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_investing_activities", - "type": "int", - "description": "Net cash flow from investing activities.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_financing_activities_continuing", - "type": "int", - "description": "Net cash flow from financing activities continuing.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_financing_activities_discontinued", - "type": "int", - "description": "Net cash flow from financing activities discontinued.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_from_financing_activities", - "type": "int", - "description": "Net cash flow from financing activities.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_continuing", - "type": "int", - "description": "Net cash flow continuing.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow_discontinued", - "type": "int", - "description": "Net cash flow discontinued.", - "default": null, - "optional": true - }, - { - "name": "exchange_gains_losses", - "type": "int", - "description": "Exchange gains losses.", - "default": null, - "optional": true - }, - { - "name": "net_cash_flow", - "type": "int", - "description": "Net cash flow.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "CashFlowStatement" - }, - "/equity/fundamental/reported_financials": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get financial statements as reported by the company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.reported_financials(symbol='AAPL', provider='intrinio')\n# Get AAPL balance sheet with a limit of 10 items.\nobb.equity.fundamental.reported_financials(symbol='AAPL', period='annual', statement_type='balance', limit=10, provider='intrinio')\n# Get reported income statement\nobb.equity.fundamental.reported_financials(symbol='AAPL', statement_type='income', provider='intrinio')\n# Get reported cash flow statement\nobb.equity.fundamental.reported_financials(symbol='AAPL', statement_type='cash', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "statement_type", - "type": "str", - "description": "The type of financial statement - i.e, balance, income, cash.", - "default": "balance", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return. Although the response object contains multiple results, because of the variance in the fields, year-to-year and quarter-to-quarter, it is recommended to view results in small chunks.", - "default": 100, - "optional": true - }, - { - "name": "provider", - "type": "Literal['intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [ - { - "name": "fiscal_year", - "type": "int", - "description": "The specific fiscal year. Reports do not go beyond 2008.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[ReportedFinancials]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "date", - "description": "The ending date of the reporting period.", - "default": "", - "optional": false - }, - { - "name": "fiscal_period", - "type": "str", - "description": "The fiscal period of the report (e.g. FY, Q1, etc.).", - "default": "", - "optional": false - }, - { - "name": "fiscal_year", - "type": "int", - "description": "The fiscal year of the fiscal period.", - "default": null, - "optional": true - } - ], - "intrinio": [] - }, - "model": "ReportedFinancials" - }, - "/equity/fundamental/cash_growth": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the growth of a company's cash flow statement items over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.cash_growth(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.cash_growth(symbol='AAPL', limit=10, provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 10, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CashFlowStatementGrowth]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Period the statement is returned for.", - "default": "", - "optional": false - }, - { - "name": "growth_net_income", - "type": "float", - "description": "Growth rate of net income.", - "default": "", - "optional": false - }, - { - "name": "growth_depreciation_and_amortization", - "type": "float", - "description": "Growth rate of depreciation and amortization.", - "default": "", - "optional": false - }, - { - "name": "growth_deferred_income_tax", - "type": "float", - "description": "Growth rate of deferred income tax.", - "default": "", - "optional": false - }, - { - "name": "growth_stock_based_compensation", - "type": "float", - "description": "Growth rate of stock-based compensation.", - "default": "", - "optional": false - }, - { - "name": "growth_change_in_working_capital", - "type": "float", - "description": "Growth rate of change in working capital.", - "default": "", - "optional": false - }, - { - "name": "growth_accounts_receivables", - "type": "float", - "description": "Growth rate of accounts receivables.", - "default": "", - "optional": false - }, - { - "name": "growth_inventory", - "type": "float", - "description": "Growth rate of inventory.", - "default": "", - "optional": false - }, - { - "name": "growth_accounts_payables", - "type": "float", - "description": "Growth rate of accounts payables.", - "default": "", - "optional": false - }, - { - "name": "growth_other_working_capital", - "type": "float", - "description": "Growth rate of other working capital.", - "default": "", - "optional": false - }, - { - "name": "growth_other_non_cash_items", - "type": "float", - "description": "Growth rate of other non-cash items.", - "default": "", - "optional": false - }, - { - "name": "growth_net_cash_provided_by_operating_activities", - "type": "float", - "description": "Growth rate of net cash provided by operating activities.", - "default": "", - "optional": false - }, - { - "name": "growth_investments_in_property_plant_and_equipment", - "type": "float", - "description": "Growth rate of investments in property, plant, and equipment.", - "default": "", - "optional": false - }, - { - "name": "growth_acquisitions_net", - "type": "float", - "description": "Growth rate of net acquisitions.", - "default": "", - "optional": false - }, - { - "name": "growth_purchases_of_investments", - "type": "float", - "description": "Growth rate of purchases of investments.", - "default": "", - "optional": false - }, - { - "name": "growth_sales_maturities_of_investments", - "type": "float", - "description": "Growth rate of sales maturities of investments.", - "default": "", - "optional": false - }, - { - "name": "growth_other_investing_activities", - "type": "float", - "description": "Growth rate of other investing activities.", - "default": "", - "optional": false - }, - { - "name": "growth_net_cash_used_for_investing_activities", - "type": "float", - "description": "Growth rate of net cash used for investing activities.", - "default": "", - "optional": false - }, - { - "name": "growth_debt_repayment", - "type": "float", - "description": "Growth rate of debt repayment.", - "default": "", - "optional": false - }, - { - "name": "growth_common_stock_issued", - "type": "float", - "description": "Growth rate of common stock issued.", - "default": "", - "optional": false - }, - { - "name": "growth_common_stock_repurchased", - "type": "float", - "description": "Growth rate of common stock repurchased.", - "default": "", - "optional": false - }, - { - "name": "growth_dividends_paid", - "type": "float", - "description": "Growth rate of dividends paid.", - "default": "", - "optional": false - }, - { - "name": "growth_other_financing_activities", - "type": "float", - "description": "Growth rate of other financing activities.", - "default": "", - "optional": false - }, - { - "name": "growth_net_cash_used_provided_by_financing_activities", - "type": "float", - "description": "Growth rate of net cash used/provided by financing activities.", - "default": "", - "optional": false - }, - { - "name": "growth_effect_of_forex_changes_on_cash", - "type": "float", - "description": "Growth rate of the effect of foreign exchange changes on cash.", - "default": "", - "optional": false - }, - { - "name": "growth_net_change_in_cash", - "type": "float", - "description": "Growth rate of net change in cash.", - "default": "", - "optional": false - }, - { - "name": "growth_cash_at_end_of_period", - "type": "float", - "description": "Growth rate of cash at the end of the period.", - "default": "", - "optional": false - }, - { - "name": "growth_cash_at_beginning_of_period", - "type": "float", - "description": "Growth rate of cash at the beginning of the period.", - "default": "", - "optional": false - }, - { - "name": "growth_operating_cash_flow", - "type": "float", - "description": "Growth rate of operating cash flow.", - "default": "", - "optional": false - }, - { - "name": "growth_capital_expenditure", - "type": "float", - "description": "Growth rate of capital expenditure.", - "default": "", - "optional": false - }, - { - "name": "growth_free_cash_flow", - "type": "float", - "description": "Growth rate of free cash flow.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "CashFlowStatementGrowth" - }, - "/equity/fundamental/dividends": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical dividend data for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.dividends(symbol='AAPL', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 100, - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[HistoricalDividends]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "ex_dividend_date", - "type": "date", - "description": "The ex-dividend date - the date on which the stock begins trading without rights to the dividend.", - "default": "", - "optional": false - }, - { - "name": "amount", - "type": "float", - "description": "The dividend amount per share.", - "default": "", - "optional": false - } - ], - "fmp": [ - { - "name": "label", - "type": "str", - "description": "Label of the historical dividends.", - "default": "", - "optional": false - }, - { - "name": "adj_dividend", - "type": "float", - "description": "Adjusted dividend of the historical dividends.", - "default": "", - "optional": false - }, - { - "name": "record_date", - "type": "date", - "description": "Record date of the historical dividends.", - "default": null, - "optional": true - }, - { - "name": "payment_date", - "type": "date", - "description": "Payment date of the historical dividends.", - "default": null, - "optional": true - }, - { - "name": "declaration_date", - "type": "date", - "description": "Declaration date of the historical dividends.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "factor", - "type": "float", - "description": "factor by which to multiply stock prices before this date, in order to calculate historically-adjusted stock prices.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "The currency in which the dividend is paid.", - "default": null, - "optional": true - }, - { - "name": "split_ratio", - "type": "float", - "description": "The ratio of the stock split, if a stock split occurred.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "HistoricalDividends" - }, - "/equity/fundamental/historical_eps": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical earnings per share data for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.historical_eps(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[HistoricalEps]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "announce_time", - "type": "str", - "description": "Timing of the earnings announcement.", - "default": null, - "optional": true - }, - { - "name": "eps_actual", - "type": "float", - "description": "Actual EPS from the earnings date.", - "default": null, - "optional": true - }, - { - "name": "eps_estimated", - "type": "float", - "description": "Estimated EPS for the earnings date.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "revenue_estimated", - "type": "float", - "description": "Estimated consensus revenue for the reporting period.", - "default": null, - "optional": true - }, - { - "name": "revenue_actual", - "type": "float", - "description": "The actual reported revenue.", - "default": null, - "optional": true - }, - { - "name": "reporting_time", - "type": "str", - "description": "The reporting time - e.g. after market close.", - "default": null, - "optional": true - }, - { - "name": "updated_at", - "type": "date", - "description": "The date when the data was last updated.", - "default": null, - "optional": true - }, - { - "name": "period_ending", - "type": "date", - "description": "The fiscal period end date.", - "default": null, - "optional": true - } - ] - }, - "model": "HistoricalEps" - }, - "/equity/fundamental/employee_count": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical employee count data for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.employee_count(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[HistoricalEmployees]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "cik", - "type": "int", - "description": "Central Index Key (CIK) for the requested entity.", - "default": "", - "optional": false - }, - { - "name": "acceptance_time", - "type": "datetime", - "description": "Time of acceptance of the company employee.", - "default": "", - "optional": false - }, - { - "name": "period_of_report", - "type": "date", - "description": "Date of reporting of the company employee.", - "default": "", - "optional": false - }, - { - "name": "company_name", - "type": "str", - "description": "Registered name of the company to retrieve the historical employees of.", - "default": "", - "optional": false - }, - { - "name": "form_type", - "type": "str", - "description": "Form type of the company employee.", - "default": "", - "optional": false - }, - { - "name": "filing_date", - "type": "date", - "description": "Filing date of the company employee", - "default": "", - "optional": false - }, - { - "name": "employee_count", - "type": "int", - "description": "Count of employees of the company.", - "default": "", - "optional": false - }, - { - "name": "source", - "type": "str", - "description": "Source URL which retrieves this data for the company.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "HistoricalEmployees" - }, - "/equity/fundamental/search_attributes": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Search Intrinio data tags to search in latest or historical attributes.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.search_attributes(query='ebitda', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Query to search for.", - "default": "", - "optional": false - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 1000, - "optional": true - }, - { - "name": "provider", - "type": "Literal['intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SearchAttributes]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "id", - "type": "str", - "description": "ID of the financial attribute.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the financial attribute.", - "default": "", - "optional": false - }, - { - "name": "tag", - "type": "str", - "description": "Tag of the financial attribute.", - "default": "", - "optional": false - }, - { - "name": "statement_code", - "type": "str", - "description": "Code of the financial statement.", - "default": "", - "optional": false - }, - { - "name": "statement_type", - "type": "str", - "description": "Type of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "parent_name", - "type": "str", - "description": "Parent's name of the financial attribute.", - "default": null, - "optional": true - }, - { - "name": "sequence", - "type": "int", - "description": "Sequence of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "factor", - "type": "str", - "description": "Unit of the financial attribute.", - "default": null, - "optional": true - }, - { - "name": "transaction", - "type": "str", - "description": "Transaction type (credit/debit) of the financial attribute.", - "default": null, - "optional": true - }, - { - "name": "type", - "type": "str", - "description": "Type of the financial attribute.", - "default": null, - "optional": true - }, - { - "name": "unit", - "type": "str", - "description": "Unit of the financial attribute.", - "default": null, - "optional": true - } - ], - "intrinio": [] - }, - "model": "SearchAttributes" - }, - "/equity/fundamental/latest_attributes": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the latest value of a data tag from Intrinio.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.latest_attributes(symbol='AAPL', tag='ceo', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", - "default": "", - "optional": false - }, - { - "name": "tag", - "type": "Union[str, List[str]]", - "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[LatestAttributes]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "tag", - "type": "str", - "description": "Tag name for the fetched data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "Union[str, float]", - "description": "The value of the data.", - "default": null, - "optional": true - } - ], - "intrinio": [] - }, - "model": "LatestAttributes" - }, - "/equity/fundamental/historical_attributes": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the historical values of a data tag from Intrinio.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.historical_attributes(symbol='AAPL', tag='ebitda', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", - "default": "", - "optional": false - }, - { - "name": "tag", - "type": "Union[str, List[str]]", - "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "frequency", - "type": "Literal['daily', 'weekly', 'monthly', 'quarterly', 'yearly']", - "description": "The frequency of the data.", - "default": "yearly", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 1000, - "optional": true - }, - { - "name": "tag_type", - "type": "str", - "description": "Filter by type, when applicable.", - "default": null, - "optional": true - }, - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order.", - "default": "desc", - "optional": true - }, - { - "name": "provider", - "type": "Literal['intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[HistoricalAttributes]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "tag", - "type": "str", - "description": "Tag name for the fetched data.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "The value of the data.", - "default": null, - "optional": true - } - ], - "intrinio": [] - }, - "model": "HistoricalAttributes" - }, - "/equity/fundamental/income": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the income statement for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.income(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.income(symbol='AAPL', period='annual', limit=5, provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "limit", - "type": "Annotated[int, Ge(ge=0)]", - "description": "The number of data entries to return.", - "default": 5, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "fiscal_year", - "type": "int", - "description": "The specific fiscal year. Reports do not go beyond 2008.", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "filing_date", - "type": "date", - "description": "Filing date of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "filing_date_lt", - "type": "date", - "description": "Filing date less than the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_lte", - "type": "date", - "description": "Filing date less than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_gt", - "type": "date", - "description": "Filing date greater than the given date.", - "default": null, - "optional": true - }, - { - "name": "filing_date_gte", - "type": "date", - "description": "Filing date greater than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date", - "type": "date", - "description": "Period of report date of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_lt", - "type": "date", - "description": "Period of report date less than the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_lte", - "type": "date", - "description": "Period of report date less than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_gt", - "type": "date", - "description": "Period of report date greater than the given date.", - "default": null, - "optional": true - }, - { - "name": "period_of_report_date_gte", - "type": "date", - "description": "Period of report date greater than or equal to the given date.", - "default": null, - "optional": true - }, - { - "name": "include_sources", - "type": "bool", - "description": "Whether to include the sources of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "order", - "type": "Literal['asc', 'desc']", - "description": "Order of the financial statement.", - "default": null, - "optional": true - }, - { - "name": "sort", - "type": "Literal['filing_date', 'period_of_report_date']", - "description": "Sort of the financial statement.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[IncomeStatement]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "date", - "description": "The end date of the reporting period.", - "default": "", - "optional": false - }, - { - "name": "fiscal_period", - "type": "str", - "description": "The fiscal period of the report.", - "default": null, - "optional": true - }, - { - "name": "fiscal_year", - "type": "int", - "description": "The fiscal year of the fiscal period.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "filing_date", - "type": "date", - "description": "The date when the filing was made.", - "default": null, - "optional": true - }, - { - "name": "accepted_date", - "type": "datetime", - "description": "The date and time when the filing was accepted.", - "default": null, - "optional": true - }, - { - "name": "reported_currency", - "type": "str", - "description": "The currency in which the balance sheet was reported.", - "default": null, - "optional": true - }, - { - "name": "revenue", - "type": "float", - "description": "Total revenue.", - "default": null, - "optional": true - }, - { - "name": "cost_of_revenue", - "type": "float", - "description": "Cost of revenue.", - "default": null, - "optional": true - }, - { - "name": "gross_profit", - "type": "float", - "description": "Gross profit.", - "default": null, - "optional": true - }, - { - "name": "gross_profit_margin", - "type": "float", - "description": "Gross profit margin.", - "default": null, - "optional": true - }, - { - "name": "general_and_admin_expense", - "type": "float", - "description": "General and administrative expenses.", - "default": null, - "optional": true - }, - { - "name": "research_and_development_expense", - "type": "float", - "description": "Research and development expenses.", - "default": null, - "optional": true - }, - { - "name": "selling_and_marketing_expense", - "type": "float", - "description": "Selling and marketing expenses.", - "default": null, - "optional": true - }, - { - "name": "selling_general_and_admin_expense", - "type": "float", - "description": "Selling, general and administrative expenses.", - "default": null, - "optional": true - }, - { - "name": "other_expenses", - "type": "float", - "description": "Other expenses.", - "default": null, - "optional": true - }, - { - "name": "total_operating_expenses", - "type": "float", - "description": "Total operating expenses.", - "default": null, - "optional": true - }, - { - "name": "cost_and_expenses", - "type": "float", - "description": "Cost and expenses.", - "default": null, - "optional": true - }, - { - "name": "interest_income", - "type": "float", - "description": "Interest income.", - "default": null, - "optional": true - }, - { - "name": "total_interest_expense", - "type": "float", - "description": "Total interest expenses.", - "default": null, - "optional": true - }, - { - "name": "depreciation_and_amortization", - "type": "float", - "description": "Depreciation and amortization.", - "default": null, - "optional": true - }, - { - "name": "ebitda", - "type": "float", - "description": "EBITDA.", - "default": null, - "optional": true - }, - { - "name": "ebitda_margin", - "type": "float", - "description": "EBITDA margin.", - "default": null, - "optional": true - }, - { - "name": "total_operating_income", - "type": "float", - "description": "Total operating income.", - "default": null, - "optional": true - }, - { - "name": "operating_income_margin", - "type": "float", - "description": "Operating income margin.", - "default": null, - "optional": true - }, - { - "name": "total_other_income_expenses", - "type": "float", - "description": "Total other income and expenses.", - "default": null, - "optional": true - }, - { - "name": "total_pre_tax_income", - "type": "float", - "description": "Total pre-tax income.", - "default": null, - "optional": true - }, - { - "name": "pre_tax_income_margin", - "type": "float", - "description": "Pre-tax income margin.", - "default": null, - "optional": true - }, - { - "name": "income_tax_expense", - "type": "float", - "description": "Income tax expense.", - "default": null, - "optional": true - }, - { - "name": "consolidated_net_income", - "type": "float", - "description": "Consolidated net income.", - "default": null, - "optional": true - }, - { - "name": "net_income_margin", - "type": "float", - "description": "Net income margin.", - "default": null, - "optional": true - }, - { - "name": "basic_earnings_per_share", - "type": "float", - "description": "Basic earnings per share.", - "default": null, - "optional": true - }, - { - "name": "diluted_earnings_per_share", - "type": "float", - "description": "Diluted earnings per share.", - "default": null, - "optional": true - }, - { - "name": "weighted_average_basic_shares_outstanding", - "type": "float", - "description": "Weighted average basic shares outstanding.", - "default": null, - "optional": true - }, - { - "name": "weighted_average_diluted_shares_outstanding", - "type": "float", - "description": "Weighted average diluted shares outstanding.", - "default": null, - "optional": true - }, - { - "name": "link", - "type": "str", - "description": "Link to the filing.", - "default": null, - "optional": true - }, - { - "name": "final_link", - "type": "str", - "description": "Link to the filing document.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "reported_currency", - "type": "str", - "description": "The currency in which the balance sheet is reported.", - "default": null, - "optional": true - }, - { - "name": "revenue", - "type": "float", - "description": "Total revenue", - "default": null, - "optional": true - }, - { - "name": "operating_revenue", - "type": "float", - "description": "Total operating revenue", - "default": null, - "optional": true - }, - { - "name": "cost_of_revenue", - "type": "float", - "description": "Total cost of revenue", - "default": null, - "optional": true - }, - { - "name": "operating_cost_of_revenue", - "type": "float", - "description": "Total operating cost of revenue", - "default": null, - "optional": true - }, - { - "name": "gross_profit", - "type": "float", - "description": "Total gross profit", - "default": null, - "optional": true - }, - { - "name": "gross_profit_margin", - "type": "float", - "description": "Gross margin ratio.", - "default": null, - "optional": true - }, - { - "name": "provision_for_credit_losses", - "type": "float", - "description": "Provision for credit losses", - "default": null, - "optional": true - }, - { - "name": "research_and_development_expense", - "type": "float", - "description": "Research and development expense", - "default": null, - "optional": true - }, - { - "name": "selling_general_and_admin_expense", - "type": "float", - "description": "Selling, general, and admin expense", - "default": null, - "optional": true - }, - { - "name": "salaries_and_employee_benefits", - "type": "float", - "description": "Salaries and employee benefits", - "default": null, - "optional": true - }, - { - "name": "marketing_expense", - "type": "float", - "description": "Marketing expense", - "default": null, - "optional": true - }, - { - "name": "net_occupancy_and_equipment_expense", - "type": "float", - "description": "Net occupancy and equipment expense", - "default": null, - "optional": true - }, - { - "name": "other_operating_expenses", - "type": "float", - "description": "Other operating expenses", - "default": null, - "optional": true - }, - { - "name": "depreciation_expense", - "type": "float", - "description": "Depreciation expense", - "default": null, - "optional": true - }, - { - "name": "amortization_expense", - "type": "float", - "description": "Amortization expense", - "default": null, - "optional": true - }, - { - "name": "amortization_of_deferred_policy_acquisition_costs", - "type": "float", - "description": "Amortization of deferred policy acquisition costs", - "default": null, - "optional": true - }, - { - "name": "exploration_expense", - "type": "float", - "description": "Exploration expense", - "default": null, - "optional": true - }, - { - "name": "depletion_expense", - "type": "float", - "description": "Depletion expense", - "default": null, - "optional": true - }, - { - "name": "total_operating_expenses", - "type": "float", - "description": "Total operating expenses", - "default": null, - "optional": true - }, - { - "name": "total_operating_income", - "type": "float", - "description": "Total operating income", - "default": null, - "optional": true - }, - { - "name": "deposits_and_money_market_investments_interest_income", - "type": "float", - "description": "Deposits and money market investments interest income", - "default": null, - "optional": true - }, - { - "name": "federal_funds_sold_and_securities_borrowed_interest_income", - "type": "float", - "description": "Federal funds sold and securities borrowed interest income", - "default": null, - "optional": true - }, - { - "name": "investment_securities_interest_income", - "type": "float", - "description": "Investment securities interest income", - "default": null, - "optional": true - }, - { - "name": "loans_and_leases_interest_income", - "type": "float", - "description": "Loans and leases interest income", - "default": null, - "optional": true - }, - { - "name": "trading_account_interest_income", - "type": "float", - "description": "Trading account interest income", - "default": null, - "optional": true - }, - { - "name": "other_interest_income", - "type": "float", - "description": "Other interest income", - "default": null, - "optional": true - }, - { - "name": "total_non_interest_income", - "type": "float", - "description": "Total non-interest income", - "default": null, - "optional": true - }, - { - "name": "interest_and_investment_income", - "type": "float", - "description": "Interest and investment income", - "default": null, - "optional": true - }, - { - "name": "short_term_borrowings_interest_expense", - "type": "float", - "description": "Short-term borrowings interest expense", - "default": null, - "optional": true - }, - { - "name": "long_term_debt_interest_expense", - "type": "float", - "description": "Long-term debt interest expense", - "default": null, - "optional": true - }, - { - "name": "capitalized_lease_obligations_interest_expense", - "type": "float", - "description": "Capitalized lease obligations interest expense", - "default": null, - "optional": true - }, - { - "name": "deposits_interest_expense", - "type": "float", - "description": "Deposits interest expense", - "default": null, - "optional": true - }, - { - "name": "federal_funds_purchased_and_securities_sold_interest_expense", - "type": "float", - "description": "Federal funds purchased and securities sold interest expense", - "default": null, - "optional": true - }, - { - "name": "other_interest_expense", - "type": "float", - "description": "Other interest expense", - "default": null, - "optional": true - }, - { - "name": "total_interest_expense", - "type": "float", - "description": "Total interest expense", - "default": null, - "optional": true - }, - { - "name": "net_interest_income", - "type": "float", - "description": "Net interest income", - "default": null, - "optional": true - }, - { - "name": "other_non_interest_income", - "type": "float", - "description": "Other non-interest income", - "default": null, - "optional": true - }, - { - "name": "investment_banking_income", - "type": "float", - "description": "Investment banking income", - "default": null, - "optional": true - }, - { - "name": "trust_fees_by_commissions", - "type": "float", - "description": "Trust fees by commissions", - "default": null, - "optional": true - }, - { - "name": "premiums_earned", - "type": "float", - "description": "Premiums earned", - "default": null, - "optional": true - }, - { - "name": "insurance_policy_acquisition_costs", - "type": "float", - "description": "Insurance policy acquisition costs", - "default": null, - "optional": true - }, - { - "name": "current_and_future_benefits", - "type": "float", - "description": "Current and future benefits", - "default": null, - "optional": true - }, - { - "name": "property_and_liability_insurance_claims", - "type": "float", - "description": "Property and liability insurance claims", - "default": null, - "optional": true - }, - { - "name": "total_non_interest_expense", - "type": "float", - "description": "Total non-interest expense", - "default": null, - "optional": true - }, - { - "name": "net_realized_and_unrealized_capital_gains_on_investments", - "type": "float", - "description": "Net realized and unrealized capital gains on investments", - "default": null, - "optional": true - }, - { - "name": "other_gains", - "type": "float", - "description": "Other gains", - "default": null, - "optional": true - }, - { - "name": "non_operating_income", - "type": "float", - "description": "Non-operating income", - "default": null, - "optional": true - }, - { - "name": "other_income", - "type": "float", - "description": "Other income", - "default": null, - "optional": true - }, - { - "name": "other_revenue", - "type": "float", - "description": "Other revenue", - "default": null, - "optional": true - }, - { - "name": "extraordinary_income", - "type": "float", - "description": "Extraordinary income", - "default": null, - "optional": true - }, - { - "name": "total_other_income", - "type": "float", - "description": "Total other income", - "default": null, - "optional": true - }, - { - "name": "ebitda", - "type": "float", - "description": "Earnings Before Interest, Taxes, Depreciation and Amortization.", - "default": null, - "optional": true - }, - { - "name": "ebitda_margin", - "type": "float", - "description": "Margin on Earnings Before Interest, Taxes, Depreciation and Amortization.", - "default": null, - "optional": true - }, - { - "name": "total_pre_tax_income", - "type": "float", - "description": "Total pre-tax income", - "default": null, - "optional": true - }, - { - "name": "ebit", - "type": "float", - "description": "Earnings Before Interest and Taxes.", - "default": null, - "optional": true - }, - { - "name": "pre_tax_income_margin", - "type": "float", - "description": "Pre-Tax Income Margin.", - "default": null, - "optional": true - }, - { - "name": "income_tax_expense", - "type": "float", - "description": "Income tax expense", - "default": null, - "optional": true - }, - { - "name": "impairment_charge", - "type": "float", - "description": "Impairment charge", - "default": null, - "optional": true - }, - { - "name": "restructuring_charge", - "type": "float", - "description": "Restructuring charge", - "default": null, - "optional": true - }, - { - "name": "service_charges_on_deposit_accounts", - "type": "float", - "description": "Service charges on deposit accounts", - "default": null, - "optional": true - }, - { - "name": "other_service_charges", - "type": "float", - "description": "Other service charges", - "default": null, - "optional": true - }, - { - "name": "other_special_charges", - "type": "float", - "description": "Other special charges", - "default": null, - "optional": true - }, - { - "name": "other_cost_of_revenue", - "type": "float", - "description": "Other cost of revenue", - "default": null, - "optional": true - }, - { - "name": "net_income_continuing_operations", - "type": "float", - "description": "Net income (continuing operations)", - "default": null, - "optional": true - }, - { - "name": "net_income_discontinued_operations", - "type": "float", - "description": "Net income (discontinued operations)", - "default": null, - "optional": true - }, - { - "name": "consolidated_net_income", - "type": "float", - "description": "Consolidated net income", - "default": null, - "optional": true - }, - { - "name": "other_adjustments_to_consolidated_net_income", - "type": "float", - "description": "Other adjustments to consolidated net income", - "default": null, - "optional": true - }, - { - "name": "other_adjustment_to_net_income_attributable_to_common_shareholders", - "type": "float", - "description": "Other adjustment to net income attributable to common shareholders", - "default": null, - "optional": true - }, - { - "name": "net_income_attributable_to_noncontrolling_interest", - "type": "float", - "description": "Net income attributable to noncontrolling interest", - "default": null, - "optional": true - }, - { - "name": "net_income_attributable_to_common_shareholders", - "type": "float", - "description": "Net income attributable to common shareholders", - "default": null, - "optional": true - }, - { - "name": "basic_earnings_per_share", - "type": "float", - "description": "Basic earnings per share", - "default": null, - "optional": true - }, - { - "name": "diluted_earnings_per_share", - "type": "float", - "description": "Diluted earnings per share", - "default": null, - "optional": true - }, - { - "name": "basic_and_diluted_earnings_per_share", - "type": "float", - "description": "Basic and diluted earnings per share", - "default": null, - "optional": true - }, - { - "name": "cash_dividends_to_common_per_share", - "type": "float", - "description": "Cash dividends to common per share", - "default": null, - "optional": true - }, - { - "name": "preferred_stock_dividends_declared", - "type": "float", - "description": "Preferred stock dividends declared", - "default": null, - "optional": true - }, - { - "name": "weighted_average_basic_shares_outstanding", - "type": "float", - "description": "Weighted average basic shares outstanding", - "default": null, - "optional": true - }, - { - "name": "weighted_average_diluted_shares_outstanding", - "type": "float", - "description": "Weighted average diluted shares outstanding", - "default": null, - "optional": true - }, - { - "name": "weighted_average_basic_and_diluted_shares_outstanding", - "type": "float", - "description": "Weighted average basic and diluted shares outstanding", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "revenue", - "type": "float", - "description": "Total Revenue", - "default": null, - "optional": true - }, - { - "name": "cost_of_revenue_goods", - "type": "float", - "description": "Cost of Revenue - Goods", - "default": null, - "optional": true - }, - { - "name": "cost_of_revenue_services", - "type": "float", - "description": "Cost of Revenue - Services", - "default": null, - "optional": true - }, - { - "name": "cost_of_revenue", - "type": "float", - "description": "Cost of Revenue", - "default": null, - "optional": true - }, - { - "name": "gross_profit", - "type": "float", - "description": "Gross Profit", - "default": null, - "optional": true - }, - { - "name": "provisions_for_loan_lease_and_other_losses", - "type": "float", - "description": "Provisions for loan lease and other losses", - "default": null, - "optional": true - }, - { - "name": "depreciation_and_amortization", - "type": "float", - "description": "Depreciation and Amortization", - "default": null, - "optional": true - }, - { - "name": "income_tax_expense_benefit_current", - "type": "float", - "description": "Income tax expense benefit current", - "default": null, - "optional": true - }, - { - "name": "deferred_tax_benefit", - "type": "float", - "description": "Deferred tax benefit", - "default": null, - "optional": true - }, - { - "name": "benefits_costs_expenses", - "type": "float", - "description": "Benefits, costs and expenses", - "default": null, - "optional": true - }, - { - "name": "selling_general_and_administrative_expense", - "type": "float", - "description": "Selling, general and administrative expense", - "default": null, - "optional": true - }, - { - "name": "research_and_development", - "type": "float", - "description": "Research and development", - "default": null, - "optional": true - }, - { - "name": "costs_and_expenses", - "type": "float", - "description": "Costs and expenses", - "default": null, - "optional": true - }, - { - "name": "other_operating_expenses", - "type": "float", - "description": "Other Operating Expenses", - "default": null, - "optional": true - }, - { - "name": "operating_expenses", - "type": "float", - "description": "Operating expenses", - "default": null, - "optional": true - }, - { - "name": "operating_income", - "type": "float", - "description": "Operating Income/Loss", - "default": null, - "optional": true - }, - { - "name": "non_operating_income", - "type": "float", - "description": "Non Operating Income/Loss", - "default": null, - "optional": true - }, - { - "name": "interest_and_dividend_income", - "type": "float", - "description": "Interest and Dividend Income", - "default": null, - "optional": true - }, - { - "name": "total_interest_expense", - "type": "float", - "description": "Interest Expense", - "default": null, - "optional": true - }, - { - "name": "interest_and_debt_expense", - "type": "float", - "description": "Interest and Debt Expense", - "default": null, - "optional": true - }, - { - "name": "net_interest_income", - "type": "float", - "description": "Interest Income Net", - "default": null, - "optional": true - }, - { - "name": "interest_income_after_provision_for_losses", - "type": "float", - "description": "Interest Income After Provision for Losses", - "default": null, - "optional": true - }, - { - "name": "non_interest_expense", - "type": "float", - "description": "Non-Interest Expense", - "default": null, - "optional": true - }, - { - "name": "non_interest_income", - "type": "float", - "description": "Non-Interest Income", - "default": null, - "optional": true - }, - { - "name": "income_from_discontinued_operations_net_of_tax_on_disposal", - "type": "float", - "description": "Income From Discontinued Operations Net of Tax on Disposal", - "default": null, - "optional": true - }, - { - "name": "income_from_discontinued_operations_net_of_tax", - "type": "float", - "description": "Income From Discontinued Operations Net of Tax", - "default": null, - "optional": true - }, - { - "name": "income_before_equity_method_investments", - "type": "float", - "description": "Income Before Equity Method Investments", - "default": null, - "optional": true - }, - { - "name": "income_from_equity_method_investments", - "type": "float", - "description": "Income From Equity Method Investments", - "default": null, - "optional": true - }, - { - "name": "total_pre_tax_income", - "type": "float", - "description": "Income Before Tax", - "default": null, - "optional": true - }, - { - "name": "income_tax_expense", - "type": "float", - "description": "Income Tax Expense", - "default": null, - "optional": true - }, - { - "name": "income_after_tax", - "type": "float", - "description": "Income After Tax", - "default": null, - "optional": true - }, - { - "name": "consolidated_net_income", - "type": "float", - "description": "Net Income/Loss", - "default": null, - "optional": true - }, - { - "name": "net_income_attributable_noncontrolling_interest", - "type": "float", - "description": "Net income (loss) attributable to noncontrolling interest", - "default": null, - "optional": true - }, - { - "name": "net_income_attributable_to_parent", - "type": "float", - "description": "Net income (loss) attributable to parent", - "default": null, - "optional": true - }, - { - "name": "net_income_attributable_to_common_shareholders", - "type": "float", - "description": "Net Income/Loss Available To Common Stockholders Basic", - "default": null, - "optional": true - }, - { - "name": "participating_securities_earnings", - "type": "float", - "description": "Participating Securities Distributed And Undistributed Earnings Loss Basic", - "default": null, - "optional": true - }, - { - "name": "undistributed_earnings_allocated_to_participating_securities", - "type": "float", - "description": "Undistributed Earnings Allocated To Participating Securities", - "default": null, - "optional": true - }, - { - "name": "common_stock_dividends", - "type": "float", - "description": "Common Stock Dividends", - "default": null, - "optional": true - }, - { - "name": "preferred_stock_dividends_and_other_adjustments", - "type": "float", - "description": "Preferred stock dividends and other adjustments", - "default": null, - "optional": true - }, - { - "name": "basic_earnings_per_share", - "type": "float", - "description": "Earnings Per Share", - "default": null, - "optional": true - }, - { - "name": "diluted_earnings_per_share", - "type": "float", - "description": "Diluted Earnings Per Share", - "default": null, - "optional": true - }, - { - "name": "weighted_average_basic_shares_outstanding", - "type": "float", - "description": "Basic Average Shares", - "default": null, - "optional": true - }, - { - "name": "weighted_average_diluted_shares_outstanding", - "type": "float", - "description": "Diluted Average Shares", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "IncomeStatement" - }, - "/equity/fundamental/income_growth": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the growth of a company's income statement items over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.income_growth(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.income_growth(symbol='AAPL', limit=10, period='annual', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 10, - "optional": true - }, - { - "name": "period", - "type": "Literal['annual', 'quarter']", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[IncomeStatementGrowth]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Period the statement is returned for.", - "default": "", - "optional": false - }, - { - "name": "growth_revenue", - "type": "float", - "description": "Growth rate of total revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_cost_of_revenue", - "type": "float", - "description": "Growth rate of cost of goods sold.", - "default": "", - "optional": false - }, - { - "name": "growth_gross_profit", - "type": "float", - "description": "Growth rate of gross profit.", - "default": "", - "optional": false - }, - { - "name": "growth_gross_profit_ratio", - "type": "float", - "description": "Growth rate of gross profit as a percentage of revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_research_and_development_expenses", - "type": "float", - "description": "Growth rate of expenses on research and development.", - "default": "", - "optional": false - }, - { - "name": "growth_general_and_administrative_expenses", - "type": "float", - "description": "Growth rate of general and administrative expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_selling_and_marketing_expenses", - "type": "float", - "description": "Growth rate of expenses on selling and marketing activities.", - "default": "", - "optional": false - }, - { - "name": "growth_other_expenses", - "type": "float", - "description": "Growth rate of other operating expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_operating_expenses", - "type": "float", - "description": "Growth rate of total operating expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_cost_and_expenses", - "type": "float", - "description": "Growth rate of total costs and expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_interest_expense", - "type": "float", - "description": "Growth rate of interest expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_depreciation_and_amortization", - "type": "float", - "description": "Growth rate of depreciation and amortization expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_ebitda", - "type": "float", - "description": "Growth rate of Earnings Before Interest, Taxes, Depreciation, and Amortization.", - "default": "", - "optional": false - }, - { - "name": "growth_ebitda_ratio", - "type": "float", - "description": "Growth rate of EBITDA as a percentage of revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_operating_income", - "type": "float", - "description": "Growth rate of operating income.", - "default": "", - "optional": false - }, - { - "name": "growth_operating_income_ratio", - "type": "float", - "description": "Growth rate of operating income as a percentage of revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_total_other_income_expenses_net", - "type": "float", - "description": "Growth rate of net total other income and expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_income_before_tax", - "type": "float", - "description": "Growth rate of income before taxes.", - "default": "", - "optional": false - }, - { - "name": "growth_income_before_tax_ratio", - "type": "float", - "description": "Growth rate of income before taxes as a percentage of revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_income_tax_expense", - "type": "float", - "description": "Growth rate of income tax expenses.", - "default": "", - "optional": false - }, - { - "name": "growth_net_income", - "type": "float", - "description": "Growth rate of net income.", - "default": "", - "optional": false - }, - { - "name": "growth_net_income_ratio", - "type": "float", - "description": "Growth rate of net income as a percentage of revenue.", - "default": "", - "optional": false - }, - { - "name": "growth_eps", - "type": "float", - "description": "Growth rate of Earnings Per Share (EPS).", - "default": "", - "optional": false - }, - { - "name": "growth_eps_diluted", - "type": "float", - "description": "Growth rate of diluted Earnings Per Share (EPS).", - "default": "", - "optional": false - }, - { - "name": "growth_weighted_average_shs_out", - "type": "float", - "description": "Growth rate of weighted average shares outstanding.", - "default": "", - "optional": false - }, - { - "name": "growth_weighted_average_shs_out_dil", - "type": "float", - "description": "Growth rate of diluted weighted average shares outstanding.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "IncomeStatementGrowth" - }, - "/equity/fundamental/metrics": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get fundamental metrics for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.metrics(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.metrics(symbol='AAPL', period='annual', limit=100, provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, yfinance.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "Literal['annual', 'quarter']", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 100, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "with_ttm", - "type": "bool", - "description": "Include trailing twelve months (TTM) data.", - "default": false, - "optional": true - } - ], - "intrinio": [], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[KeyMetrics]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "market_cap", - "type": "float", - "description": "Market capitalization", - "default": null, - "optional": true - }, - { - "name": "pe_ratio", - "type": "float", - "description": "Price-to-earnings ratio (P/E ratio)", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Period of the data.", - "default": "", - "optional": false - }, - { - "name": "calendar_year", - "type": "int", - "description": "Calendar year.", - "default": null, - "optional": true - }, - { - "name": "revenue_per_share", - "type": "float", - "description": "Revenue per share", - "default": null, - "optional": true - }, - { - "name": "net_income_per_share", - "type": "float", - "description": "Net income per share", - "default": null, - "optional": true - }, - { - "name": "operating_cash_flow_per_share", - "type": "float", - "description": "Operating cash flow per share", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_per_share", - "type": "float", - "description": "Free cash flow per share", - "default": null, - "optional": true - }, - { - "name": "cash_per_share", - "type": "float", - "description": "Cash per share", - "default": null, - "optional": true - }, - { - "name": "book_value_per_share", - "type": "float", - "description": "Book value per share", - "default": null, - "optional": true - }, - { - "name": "tangible_book_value_per_share", - "type": "float", - "description": "Tangible book value per share", - "default": null, - "optional": true - }, - { - "name": "shareholders_equity_per_share", - "type": "float", - "description": "Shareholders equity per share", - "default": null, - "optional": true - }, - { - "name": "interest_debt_per_share", - "type": "float", - "description": "Interest debt per share", - "default": null, - "optional": true - }, - { - "name": "enterprise_value", - "type": "float", - "description": "Enterprise value", - "default": null, - "optional": true - }, - { - "name": "price_to_sales_ratio", - "type": "float", - "description": "Price-to-sales ratio", - "default": null, - "optional": true - }, - { - "name": "pocf_ratio", - "type": "float", - "description": "Price-to-operating cash flow ratio", - "default": null, - "optional": true - }, - { - "name": "pfcf_ratio", - "type": "float", - "description": "Price-to-free cash flow ratio", - "default": null, - "optional": true - }, - { - "name": "pb_ratio", - "type": "float", - "description": "Price-to-book ratio", - "default": null, - "optional": true - }, - { - "name": "ptb_ratio", - "type": "float", - "description": "Price-to-tangible book ratio", - "default": null, - "optional": true - }, - { - "name": "ev_to_sales", - "type": "float", - "description": "Enterprise value-to-sales ratio", - "default": null, - "optional": true - }, - { - "name": "enterprise_value_over_ebitda", - "type": "float", - "description": "Enterprise value-to-EBITDA ratio", - "default": null, - "optional": true - }, - { - "name": "ev_to_operating_cash_flow", - "type": "float", - "description": "Enterprise value-to-operating cash flow ratio", - "default": null, - "optional": true - }, - { - "name": "ev_to_free_cash_flow", - "type": "float", - "description": "Enterprise value-to-free cash flow ratio", - "default": null, - "optional": true - }, - { - "name": "earnings_yield", - "type": "float", - "description": "Earnings yield", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_yield", - "type": "float", - "description": "Free cash flow yield", - "default": null, - "optional": true - }, - { - "name": "debt_to_equity", - "type": "float", - "description": "Debt-to-equity ratio", - "default": null, - "optional": true - }, - { - "name": "debt_to_assets", - "type": "float", - "description": "Debt-to-assets ratio", - "default": null, - "optional": true - }, - { - "name": "net_debt_to_ebitda", - "type": "float", - "description": "Net debt-to-EBITDA ratio", - "default": null, - "optional": true - }, - { - "name": "current_ratio", - "type": "float", - "description": "Current ratio", - "default": null, - "optional": true - }, - { - "name": "interest_coverage", - "type": "float", - "description": "Interest coverage", - "default": null, - "optional": true - }, - { - "name": "income_quality", - "type": "float", - "description": "Income quality", - "default": null, - "optional": true - }, - { - "name": "dividend_yield", - "type": "float", - "description": "Dividend yield, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "payout_ratio", - "type": "float", - "description": "Payout ratio", - "default": null, - "optional": true - }, - { - "name": "sales_general_and_administrative_to_revenue", - "type": "float", - "description": "Sales general and administrative expenses-to-revenue ratio", - "default": null, - "optional": true - }, - { - "name": "research_and_development_to_revenue", - "type": "float", - "description": "Research and development expenses-to-revenue ratio", - "default": null, - "optional": true - }, - { - "name": "intangibles_to_total_assets", - "type": "float", - "description": "Intangibles-to-total assets ratio", - "default": null, - "optional": true - }, - { - "name": "capex_to_operating_cash_flow", - "type": "float", - "description": "Capital expenditures-to-operating cash flow ratio", - "default": null, - "optional": true - }, - { - "name": "capex_to_revenue", - "type": "float", - "description": "Capital expenditures-to-revenue ratio", - "default": null, - "optional": true - }, - { - "name": "capex_to_depreciation", - "type": "float", - "description": "Capital expenditures-to-depreciation ratio", - "default": null, - "optional": true - }, - { - "name": "stock_based_compensation_to_revenue", - "type": "float", - "description": "Stock-based compensation-to-revenue ratio", - "default": null, - "optional": true - }, - { - "name": "graham_number", - "type": "float", - "description": "Graham number", - "default": null, - "optional": true - }, - { - "name": "roic", - "type": "float", - "description": "Return on invested capital", - "default": null, - "optional": true - }, - { - "name": "return_on_tangible_assets", - "type": "float", - "description": "Return on tangible assets", - "default": null, - "optional": true - }, - { - "name": "graham_net_net", - "type": "float", - "description": "Graham net-net working capital", - "default": null, - "optional": true - }, - { - "name": "working_capital", - "type": "float", - "description": "Working capital", - "default": null, - "optional": true - }, - { - "name": "tangible_asset_value", - "type": "float", - "description": "Tangible asset value", - "default": null, - "optional": true - }, - { - "name": "net_current_asset_value", - "type": "float", - "description": "Net current asset value", - "default": null, - "optional": true - }, - { - "name": "invested_capital", - "type": "float", - "description": "Invested capital", - "default": null, - "optional": true - }, - { - "name": "average_receivables", - "type": "float", - "description": "Average receivables", - "default": null, - "optional": true - }, - { - "name": "average_payables", - "type": "float", - "description": "Average payables", - "default": null, - "optional": true - }, - { - "name": "average_inventory", - "type": "float", - "description": "Average inventory", - "default": null, - "optional": true - }, - { - "name": "days_sales_outstanding", - "type": "float", - "description": "Days sales outstanding", - "default": null, - "optional": true - }, - { - "name": "days_payables_outstanding", - "type": "float", - "description": "Days payables outstanding", - "default": null, - "optional": true - }, - { - "name": "days_of_inventory_on_hand", - "type": "float", - "description": "Days of inventory on hand", - "default": null, - "optional": true - }, - { - "name": "receivables_turnover", - "type": "float", - "description": "Receivables turnover", - "default": null, - "optional": true - }, - { - "name": "payables_turnover", - "type": "float", - "description": "Payables turnover", - "default": null, - "optional": true - }, - { - "name": "inventory_turnover", - "type": "float", - "description": "Inventory turnover", - "default": null, - "optional": true - }, - { - "name": "roe", - "type": "float", - "description": "Return on equity", - "default": null, - "optional": true - }, - { - "name": "capex_per_share", - "type": "float", - "description": "Capital expenditures per share", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "price_to_book", - "type": "float", - "description": "Price to book ratio.", - "default": null, - "optional": true - }, - { - "name": "price_to_tangible_book", - "type": "float", - "description": "Price to tangible book ratio.", - "default": null, - "optional": true - }, - { - "name": "price_to_revenue", - "type": "float", - "description": "Price to revenue ratio.", - "default": null, - "optional": true - }, - { - "name": "quick_ratio", - "type": "float", - "description": "Quick ratio.", - "default": null, - "optional": true - }, - { - "name": "gross_margin", - "type": "float", - "description": "Gross margin, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "ebit_margin", - "type": "float", - "description": "EBIT margin, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "profit_margin", - "type": "float", - "description": "Profit margin, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "eps", - "type": "float", - "description": "Basic earnings per share.", - "default": null, - "optional": true - }, - { - "name": "eps_growth", - "type": "float", - "description": "EPS growth, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "revenue_growth", - "type": "float", - "description": "Revenue growth, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "ebitda_growth", - "type": "float", - "description": "EBITDA growth, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "ebit_growth", - "type": "float", - "description": "EBIT growth, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "net_income_growth", - "type": "float", - "description": "Net income growth, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_to_firm_growth", - "type": "float", - "description": "Free cash flow to firm growth, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "invested_capital_growth", - "type": "float", - "description": "Invested capital growth, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "return_on_assets", - "type": "float", - "description": "Return on assets, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "return_on_equity", - "type": "float", - "description": "Return on equity, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "return_on_invested_capital", - "type": "float", - "description": "Return on invested capital, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "ebitda", - "type": "int", - "description": "Earnings before interest, taxes, depreciation, and amortization.", - "default": null, - "optional": true - }, - { - "name": "ebit", - "type": "int", - "description": "Earnings before interest and taxes.", - "default": null, - "optional": true - }, - { - "name": "long_term_debt", - "type": "int", - "description": "Long-term debt.", - "default": null, - "optional": true - }, - { - "name": "total_debt", - "type": "int", - "description": "Total debt.", - "default": null, - "optional": true - }, - { - "name": "total_capital", - "type": "int", - "description": "The sum of long-term debt and total shareholder equity.", - "default": null, - "optional": true - }, - { - "name": "enterprise_value", - "type": "int", - "description": "Enterprise value.", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_to_firm", - "type": "int", - "description": "Free cash flow to firm.", - "default": null, - "optional": true - }, - { - "name": "altman_z_score", - "type": "float", - "description": "Altman Z-score.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "Beta relative to the broad market (rolling three-year).", - "default": null, - "optional": true - }, - { - "name": "dividend_yield", - "type": "float", - "description": "Dividend yield, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "earnings_yield", - "type": "float", - "description": "Earnings yield, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "last_price", - "type": "float", - "description": "Last price of the stock.", - "default": null, - "optional": true - }, - { - "name": "year_high", - "type": "float", - "description": "52 week high", - "default": null, - "optional": true - }, - { - "name": "year_low", - "type": "float", - "description": "52 week low", - "default": null, - "optional": true - }, - { - "name": "volume_avg", - "type": "int", - "description": "Average daily volume.", - "default": null, - "optional": true - }, - { - "name": "short_interest", - "type": "int", - "description": "Number of shares reported as sold short.", - "default": null, - "optional": true - }, - { - "name": "shares_outstanding", - "type": "int", - "description": "Weighted average shares outstanding (TTM).", - "default": null, - "optional": true - }, - { - "name": "days_to_cover", - "type": "float", - "description": "Days to cover short interest, based on average daily volume.", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "forward_pe", - "type": "float", - "description": "Forward price-to-earnings ratio.", - "default": null, - "optional": true - }, - { - "name": "peg_ratio", - "type": "float", - "description": "PEG ratio (5-year expected).", - "default": null, - "optional": true - }, - { - "name": "peg_ratio_ttm", - "type": "float", - "description": "PEG ratio (TTM).", - "default": null, - "optional": true - }, - { - "name": "eps_ttm", - "type": "float", - "description": "Earnings per share (TTM).", - "default": null, - "optional": true - }, - { - "name": "eps_forward", - "type": "float", - "description": "Forward earnings per share.", - "default": null, - "optional": true - }, - { - "name": "enterprise_to_ebitda", - "type": "float", - "description": "Enterprise value to EBITDA ratio.", - "default": null, - "optional": true - }, - { - "name": "earnings_growth", - "type": "float", - "description": "Earnings growth (Year Over Year), as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "earnings_growth_quarterly", - "type": "float", - "description": "Quarterly earnings growth (Year Over Year), as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "revenue_per_share", - "type": "float", - "description": "Revenue per share (TTM).", - "default": null, - "optional": true - }, - { - "name": "revenue_growth", - "type": "float", - "description": "Revenue growth (Year Over Year), as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "enterprise_to_revenue", - "type": "float", - "description": "Enterprise value to revenue ratio.", - "default": null, - "optional": true - }, - { - "name": "cash_per_share", - "type": "float", - "description": "Cash per share.", - "default": null, - "optional": true - }, - { - "name": "quick_ratio", - "type": "float", - "description": "Quick ratio.", - "default": null, - "optional": true - }, - { - "name": "current_ratio", - "type": "float", - "description": "Current ratio.", - "default": null, - "optional": true - }, - { - "name": "debt_to_equity", - "type": "float", - "description": "Debt-to-equity ratio.", - "default": null, - "optional": true - }, - { - "name": "gross_margin", - "type": "float", - "description": "Gross margin, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "operating_margin", - "type": "float", - "description": "Operating margin, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "ebitda_margin", - "type": "float", - "description": "EBITDA margin, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "profit_margin", - "type": "float", - "description": "Profit margin, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "return_on_assets", - "type": "float", - "description": "Return on assets, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "return_on_equity", - "type": "float", - "description": "Return on equity, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield", - "type": "float", - "description": "Dividend yield, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield_5y_avg", - "type": "float", - "description": "5-year average dividend yield, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "payout_ratio", - "type": "float", - "description": "Payout ratio.", - "default": null, - "optional": true - }, - { - "name": "book_value", - "type": "float", - "description": "Book value per share.", - "default": null, - "optional": true - }, - { - "name": "price_to_book", - "type": "float", - "description": "Price-to-book ratio.", - "default": null, - "optional": true - }, - { - "name": "enterprise_value", - "type": "int", - "description": "Enterprise value.", - "default": null, - "optional": true - }, - { - "name": "overall_risk", - "type": "float", - "description": "Overall risk score.", - "default": null, - "optional": true - }, - { - "name": "audit_risk", - "type": "float", - "description": "Audit risk score.", - "default": null, - "optional": true - }, - { - "name": "board_risk", - "type": "float", - "description": "Board risk score.", - "default": null, - "optional": true - }, - { - "name": "compensation_risk", - "type": "float", - "description": "Compensation risk score.", - "default": null, - "optional": true - }, - { - "name": "shareholder_rights_risk", - "type": "float", - "description": "Shareholder rights risk score.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "Beta relative to the broad market (5-year monthly).", - "default": null, - "optional": true - }, - { - "name": "price_return_1y", - "type": "float", - "description": "One-year price return, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency in which the data is presented.", - "default": null, - "optional": true - } - ] - }, - "model": "KeyMetrics" - }, - "/equity/fundamental/management": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get executive management team data for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.management(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[KeyExecutives]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "title", - "type": "str", - "description": "Designation of the key executive.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the key executive.", - "default": "", - "optional": false - }, - { - "name": "pay", - "type": "int", - "description": "Pay of the key executive.", - "default": null, - "optional": true - }, - { - "name": "currency_pay", - "type": "str", - "description": "Currency of the pay.", - "default": null, - "optional": true - }, - { - "name": "gender", - "type": "str", - "description": "Gender of the key executive.", - "default": null, - "optional": true - }, - { - "name": "year_born", - "type": "int", - "description": "Birth year of the key executive.", - "default": null, - "optional": true - }, - { - "name": "title_since", - "type": "int", - "description": "Date the tile was held since.", - "default": null, - "optional": true - } - ], - "fmp": [], - "yfinance": [ - { - "name": "exercised_value", - "type": "int", - "description": "Value of shares exercised.", - "default": null, - "optional": true - }, - { - "name": "unexercised_value", - "type": "int", - "description": "Value of shares not exercised.", - "default": null, - "optional": true - } - ] - }, - "model": "KeyExecutives" - }, - "/equity/fundamental/management_compensation": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get executive management team compensation for a given company over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.management_compensation(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "year", - "type": "int", - "description": "Year of the compensation.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[ExecutiveCompensation]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "cik", - "type": "str", - "description": "Central Index Key (CIK) for the requested entity.", - "default": null, - "optional": true - }, - { - "name": "company_name", - "type": "str", - "description": "The name of the company.", - "default": null, - "optional": true - }, - { - "name": "industry", - "type": "str", - "description": "The industry of the company.", - "default": null, - "optional": true - }, - { - "name": "year", - "type": "int", - "description": "Year of the compensation.", - "default": null, - "optional": true - }, - { - "name": "name_and_position", - "type": "str", - "description": "Name and position.", - "default": null, - "optional": true - }, - { - "name": "salary", - "type": "Annotated[float, Ge(ge=0)]", - "description": "Salary.", - "default": null, - "optional": true - }, - { - "name": "bonus", - "type": "Annotated[float, Ge(ge=0)]", - "description": "Bonus payments.", - "default": null, - "optional": true - }, - { - "name": "stock_award", - "type": "Annotated[float, Ge(ge=0)]", - "description": "Stock awards.", - "default": null, - "optional": true - }, - { - "name": "incentive_plan_compensation", - "type": "Annotated[float, Ge(ge=0)]", - "description": "Incentive plan compensation.", - "default": null, - "optional": true - }, - { - "name": "all_other_compensation", - "type": "Annotated[float, Ge(ge=0)]", - "description": "All other compensation.", - "default": null, - "optional": true - }, - { - "name": "total", - "type": "Annotated[float, Ge(ge=0)]", - "description": "Total compensation.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "filing_date", - "type": "date", - "description": "Date of the filing.", - "default": null, - "optional": true - }, - { - "name": "accepted_date", - "type": "datetime", - "description": "Date the filing was accepted.", - "default": null, - "optional": true - }, - { - "name": "url", - "type": "str", - "description": "URL to the filing data.", - "default": null, - "optional": true - } - ] - }, - "model": "ExecutiveCompensation" - }, - "/equity/fundamental/overview": { - "deprecated": { - "flag": true, - "message": "This endpoint is deprecated; use `/equity/profile` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.3." - }, - "description": "Get company general business and stock data for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.overview(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CompanyOverview]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "price", - "type": "float", - "description": "Price of the company.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "Beta of the company.", - "default": null, - "optional": true - }, - { - "name": "vol_avg", - "type": "int", - "description": "Volume average of the company.", - "default": null, - "optional": true - }, - { - "name": "mkt_cap", - "type": "int", - "description": "Market capitalization of the company.", - "default": null, - "optional": true - }, - { - "name": "last_div", - "type": "float", - "description": "Last dividend of the company.", - "default": null, - "optional": true - }, - { - "name": "range", - "type": "str", - "description": "Range of the company.", - "default": null, - "optional": true - }, - { - "name": "changes", - "type": "float", - "description": "Changes of the company.", - "default": null, - "optional": true - }, - { - "name": "company_name", - "type": "str", - "description": "Company name of the company.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency of the company.", - "default": null, - "optional": true - }, - { - "name": "cik", - "type": "str", - "description": "Central Index Key (CIK) for the requested entity.", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "ISIN of the company.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "CUSIP of the company.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "Exchange of the company.", - "default": null, - "optional": true - }, - { - "name": "exchange_short_name", - "type": "str", - "description": "Exchange short name of the company.", - "default": null, - "optional": true - }, - { - "name": "industry", - "type": "str", - "description": "Industry of the company.", - "default": null, - "optional": true - }, - { - "name": "website", - "type": "str", - "description": "Website of the company.", - "default": null, - "optional": true - }, - { - "name": "description", - "type": "str", - "description": "Description of the company.", - "default": null, - "optional": true - }, - { - "name": "ceo", - "type": "str", - "description": "CEO of the company.", - "default": null, - "optional": true - }, - { - "name": "sector", - "type": "str", - "description": "Sector of the company.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "Country of the company.", - "default": null, - "optional": true - }, - { - "name": "full_time_employees", - "type": "str", - "description": "Full time employees of the company.", - "default": null, - "optional": true - }, - { - "name": "phone", - "type": "str", - "description": "Phone of the company.", - "default": null, - "optional": true - }, - { - "name": "address", - "type": "str", - "description": "Address of the company.", - "default": null, - "optional": true - }, - { - "name": "city", - "type": "str", - "description": "City of the company.", - "default": null, - "optional": true - }, - { - "name": "state", - "type": "str", - "description": "State of the company.", - "default": null, - "optional": true - }, - { - "name": "zip", - "type": "str", - "description": "Zip of the company.", - "default": null, - "optional": true - }, - { - "name": "dcf_diff", - "type": "float", - "description": "Discounted cash flow difference of the company.", - "default": null, - "optional": true - }, - { - "name": "dcf", - "type": "float", - "description": "Discounted cash flow of the company.", - "default": null, - "optional": true - }, - { - "name": "image", - "type": "str", - "description": "Image of the company.", - "default": null, - "optional": true - }, - { - "name": "ipo_date", - "type": "date", - "description": "IPO date of the company.", - "default": null, - "optional": true - }, - { - "name": "default_image", - "type": "bool", - "description": "If the image is the default image.", - "default": "", - "optional": false - }, - { - "name": "is_etf", - "type": "bool", - "description": "If the company is an ETF.", - "default": "", - "optional": false - }, - { - "name": "is_actively_trading", - "type": "bool", - "description": "If the company is actively trading.", - "default": "", - "optional": false - }, - { - "name": "is_adr", - "type": "bool", - "description": "If the company is an ADR.", - "default": "", - "optional": false - }, - { - "name": "is_fund", - "type": "bool", - "description": "If the company is a fund.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "CompanyOverview" - }, - "/equity/fundamental/ratios": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get an extensive set of financial and accounting ratios for a given company over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.ratios(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.ratios(symbol='AAPL', period='annual', limit=12, provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "str", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 12, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "fiscal_year", - "type": "int", - "description": "The specific fiscal year. Reports do not go beyond 2008.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[FinancialRatios]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "str", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "fiscal_period", - "type": "str", - "description": "Period of the financial ratios.", - "default": "", - "optional": false - }, - { - "name": "fiscal_year", - "type": "int", - "description": "Fiscal year.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "current_ratio", - "type": "float", - "description": "Current ratio.", - "default": null, - "optional": true - }, - { - "name": "quick_ratio", - "type": "float", - "description": "Quick ratio.", - "default": null, - "optional": true - }, - { - "name": "cash_ratio", - "type": "float", - "description": "Cash ratio.", - "default": null, - "optional": true - }, - { - "name": "days_of_sales_outstanding", - "type": "float", - "description": "Days of sales outstanding.", - "default": null, - "optional": true - }, - { - "name": "days_of_inventory_outstanding", - "type": "float", - "description": "Days of inventory outstanding.", - "default": null, - "optional": true - }, - { - "name": "operating_cycle", - "type": "float", - "description": "Operating cycle.", - "default": null, - "optional": true - }, - { - "name": "days_of_payables_outstanding", - "type": "float", - "description": "Days of payables outstanding.", - "default": null, - "optional": true - }, - { - "name": "cash_conversion_cycle", - "type": "float", - "description": "Cash conversion cycle.", - "default": null, - "optional": true - }, - { - "name": "gross_profit_margin", - "type": "float", - "description": "Gross profit margin.", - "default": null, - "optional": true - }, - { - "name": "operating_profit_margin", - "type": "float", - "description": "Operating profit margin.", - "default": null, - "optional": true - }, - { - "name": "pretax_profit_margin", - "type": "float", - "description": "Pretax profit margin.", - "default": null, - "optional": true - }, - { - "name": "net_profit_margin", - "type": "float", - "description": "Net profit margin.", - "default": null, - "optional": true - }, - { - "name": "effective_tax_rate", - "type": "float", - "description": "Effective tax rate.", - "default": null, - "optional": true - }, - { - "name": "return_on_assets", - "type": "float", - "description": "Return on assets.", - "default": null, - "optional": true - }, - { - "name": "return_on_equity", - "type": "float", - "description": "Return on equity.", - "default": null, - "optional": true - }, - { - "name": "return_on_capital_employed", - "type": "float", - "description": "Return on capital employed.", - "default": null, - "optional": true - }, - { - "name": "net_income_per_ebt", - "type": "float", - "description": "Net income per EBT.", - "default": null, - "optional": true - }, - { - "name": "ebt_per_ebit", - "type": "float", - "description": "EBT per EBIT.", - "default": null, - "optional": true - }, - { - "name": "ebit_per_revenue", - "type": "float", - "description": "EBIT per revenue.", - "default": null, - "optional": true - }, - { - "name": "debt_ratio", - "type": "float", - "description": "Debt ratio.", - "default": null, - "optional": true - }, - { - "name": "debt_equity_ratio", - "type": "float", - "description": "Debt equity ratio.", - "default": null, - "optional": true - }, - { - "name": "long_term_debt_to_capitalization", - "type": "float", - "description": "Long term debt to capitalization.", - "default": null, - "optional": true - }, - { - "name": "total_debt_to_capitalization", - "type": "float", - "description": "Total debt to capitalization.", - "default": null, - "optional": true - }, - { - "name": "interest_coverage", - "type": "float", - "description": "Interest coverage.", - "default": null, - "optional": true - }, - { - "name": "cash_flow_to_debt_ratio", - "type": "float", - "description": "Cash flow to debt ratio.", - "default": null, - "optional": true - }, - { - "name": "company_equity_multiplier", - "type": "float", - "description": "Company equity multiplier.", - "default": null, - "optional": true - }, - { - "name": "receivables_turnover", - "type": "float", - "description": "Receivables turnover.", - "default": null, - "optional": true - }, - { - "name": "payables_turnover", - "type": "float", - "description": "Payables turnover.", - "default": null, - "optional": true - }, - { - "name": "inventory_turnover", - "type": "float", - "description": "Inventory turnover.", - "default": null, - "optional": true - }, - { - "name": "fixed_asset_turnover", - "type": "float", - "description": "Fixed asset turnover.", - "default": null, - "optional": true - }, - { - "name": "asset_turnover", - "type": "float", - "description": "Asset turnover.", - "default": null, - "optional": true - }, - { - "name": "operating_cash_flow_per_share", - "type": "float", - "description": "Operating cash flow per share.", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_per_share", - "type": "float", - "description": "Free cash flow per share.", - "default": null, - "optional": true - }, - { - "name": "cash_per_share", - "type": "float", - "description": "Cash per share.", - "default": null, - "optional": true - }, - { - "name": "payout_ratio", - "type": "float", - "description": "Payout ratio.", - "default": null, - "optional": true - }, - { - "name": "operating_cash_flow_sales_ratio", - "type": "float", - "description": "Operating cash flow sales ratio.", - "default": null, - "optional": true - }, - { - "name": "free_cash_flow_operating_cash_flow_ratio", - "type": "float", - "description": "Free cash flow operating cash flow ratio.", - "default": null, - "optional": true - }, - { - "name": "cash_flow_coverage_ratios", - "type": "float", - "description": "Cash flow coverage ratios.", - "default": null, - "optional": true - }, - { - "name": "short_term_coverage_ratios", - "type": "float", - "description": "Short term coverage ratios.", - "default": null, - "optional": true - }, - { - "name": "capital_expenditure_coverage_ratio", - "type": "float", - "description": "Capital expenditure coverage ratio.", - "default": null, - "optional": true - }, - { - "name": "dividend_paid_and_capex_coverage_ratio", - "type": "float", - "description": "Dividend paid and capex coverage ratio.", - "default": null, - "optional": true - }, - { - "name": "dividend_payout_ratio", - "type": "float", - "description": "Dividend payout ratio.", - "default": null, - "optional": true - }, - { - "name": "price_book_value_ratio", - "type": "float", - "description": "Price book value ratio.", - "default": null, - "optional": true - }, - { - "name": "price_to_book_ratio", - "type": "float", - "description": "Price to book ratio.", - "default": null, - "optional": true - }, - { - "name": "price_to_sales_ratio", - "type": "float", - "description": "Price to sales ratio.", - "default": null, - "optional": true - }, - { - "name": "price_earnings_ratio", - "type": "float", - "description": "Price earnings ratio.", - "default": null, - "optional": true - }, - { - "name": "price_to_free_cash_flows_ratio", - "type": "float", - "description": "Price to free cash flows ratio.", - "default": null, - "optional": true - }, - { - "name": "price_to_operating_cash_flows_ratio", - "type": "float", - "description": "Price to operating cash flows ratio.", - "default": null, - "optional": true - }, - { - "name": "price_cash_flow_ratio", - "type": "float", - "description": "Price cash flow ratio.", - "default": null, - "optional": true - }, - { - "name": "price_earnings_to_growth_ratio", - "type": "float", - "description": "Price earnings to growth ratio.", - "default": null, - "optional": true - }, - { - "name": "price_sales_ratio", - "type": "float", - "description": "Price sales ratio.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield", - "type": "float", - "description": "Dividend yield.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield_percentage", - "type": "float", - "description": "Dividend yield percentage.", - "default": null, - "optional": true - }, - { - "name": "dividend_per_share", - "type": "float", - "description": "Dividend per share.", - "default": null, - "optional": true - }, - { - "name": "enterprise_value_multiple", - "type": "float", - "description": "Enterprise value multiple.", - "default": null, - "optional": true - }, - { - "name": "price_fair_value", - "type": "float", - "description": "Price fair value.", - "default": null, - "optional": true - } - ], - "intrinio": [] - }, - "model": "FinancialRatios" - }, - "/equity/fundamental/revenue_per_geography": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the revenue geographic breakdown for a given company over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.revenue_per_geography(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.revenue_per_geography(symbol='AAPL', period='annual', structure='flat', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "Literal['quarter', 'annual']", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "structure", - "type": "Literal['hierarchical', 'flat']", - "description": "Structure of the returned data.", - "default": "flat", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[RevenueGeographic]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "date", - "description": "The end date of the reporting period.", - "default": "", - "optional": false - }, - { - "name": "fiscal_period", - "type": "str", - "description": "The fiscal period of the reporting period.", - "default": null, - "optional": true - }, - { - "name": "fiscal_year", - "type": "int", - "description": "The fiscal year of the reporting period.", - "default": null, - "optional": true - }, - { - "name": "filing_date", - "type": "date", - "description": "The filing date of the report.", - "default": null, - "optional": true - }, - { - "name": "geographic_segment", - "type": "int", - "description": "Dictionary of the revenue by geographic segment.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "RevenueGeographic" - }, - "/equity/fundamental/revenue_per_segment": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the revenue breakdown by business segment for a given company over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.revenue_per_segment(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.revenue_per_segment(symbol='AAPL', period='annual', structure='flat', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "period", - "type": "Literal['quarter', 'annual']", - "description": "Time period of the data to return.", - "default": "annual", - "optional": true - }, - { - "name": "structure", - "type": "Literal['hierarchical', 'flat']", - "description": "Structure of the returned data.", - "default": "flat", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[RevenueBusinessLine]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "date", - "description": "The end date of the reporting period.", - "default": "", - "optional": false - }, - { - "name": "fiscal_period", - "type": "str", - "description": "The fiscal period of the reporting period.", - "default": null, - "optional": true - }, - { - "name": "fiscal_year", - "type": "int", - "description": "The fiscal year of the reporting period.", - "default": null, - "optional": true - }, - { - "name": "filing_date", - "type": "date", - "description": "The filing date of the report.", - "default": null, - "optional": true - }, - { - "name": "business_line", - "type": "int", - "description": "Dictionary containing the revenue of the business line.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "RevenueBusinessLine" - }, - "/equity/fundamental/filings": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more. SEC\nfilings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114,\nForeign Investment Disclosures and others. The annual 10-K report is required to be\nfiled annually and includes the company's financial statements, management discussion and analysis,\nand audited financial statements.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.filings(provider='fmp')\nobb.equity.fundamental.filings(limit=100, provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": null, - "optional": true - }, - { - "name": "form_type", - "type": "str", - "description": "Filter by form type. Check the data provider for available types.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 100, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "thea_enabled", - "type": "bool", - "description": "Return filings that have been read by Intrinio's Thea NLP.", - "default": null, - "optional": true - } - ], - "sec": [ - { - "name": "cik", - "type": "Union[int, str]", - "description": "Lookup filings by Central Index Key (CIK) instead of by symbol.", - "default": null, - "optional": true - }, - { - "name": "type", - "type": "Literal['1', '1-A', '1-A POS', '1-A-W', '1-E', '1-E AD', '1-K', '1-SA', '1-U', '1-Z', '1-Z-W', '10-12B', '10-12G', '10-D', '10-K', '10-KT', '10-Q', '10-QT', '11-K', '11-KT', '13F-HR', '13F-NT', '13FCONP', '144', '15-12B', '15-12G', '15-15D', '15F-12B', '15F-12G', '15F-15D', '18-12B', '18-K', '19B-4E', '2-A', '2-AF', '2-E', '20-F', '20FR12B', '20FR12G', '24F-2NT', '25', '25-NSE', '253G1', '253G2', '253G3', '253G4', '3', '305B2', '34-12H', '4', '40-17F1', '40-17F2', '40-17G', '40-17GCS', '40-202A', '40-203A', '40-206A', '40-24B2', '40-33', '40-6B', '40-8B25', '40-8F-2', '40-APP', '40-F', '40-OIP', '40FR12B', '40FR12G', '424A', '424B1', '424B2', '424B3', '424B4', '424B5', '424B7', '424B8', '424H', '425', '485APOS', '485BPOS', '485BXT', '486APOS', '486BPOS', '486BXT', '487', '497', '497AD', '497H2', '497J', '497K', '497VPI', '497VPU', '5', '6-K', '6B NTC', '6B ORDR', '8-A12B', '8-A12G', '8-K', '8-K12B', '8-K12G3', '8-K15D5', '8-M', '8F-2 NTC', '8F-2 ORDR', '9-M', 'ABS-15G', 'ABS-EE', 'ADN-MTL', 'ADV-E', 'ADV-H-C', 'ADV-H-T', 'ADV-NR', 'ANNLRPT', 'APP NTC', 'APP ORDR', 'APP WD', 'APP WDG', 'ARS', 'ATS-N', 'ATS-N-C', 'ATS-N/UA', 'AW', 'AW WD', 'C', 'C-AR', 'C-AR-W', 'C-TR', 'C-TR-W', 'C-U', 'C-U-W', 'C-W', 'CB', 'CERT', 'CERTARCA', 'CERTBATS', 'CERTCBO', 'CERTNAS', 'CERTNYS', 'CERTPAC', 'CFPORTAL', 'CFPORTAL-W', 'CORRESP', 'CT ORDER', 'D', 'DEF 14A', 'DEF 14C', 'DEFA14A', 'DEFA14C', 'DEFC14A', 'DEFC14C', 'DEFM14A', 'DEFM14C', 'DEFN14A', 'DEFR14A', 'DEFR14C', 'DEL AM', 'DFAN14A', 'DFRN14A', 'DOS', 'DOSLTR', 'DRS', 'DRSLTR', 'DSTRBRPT', 'EFFECT', 'F-1', 'F-10', 'F-10EF', 'F-10POS', 'F-1MEF', 'F-3', 'F-3ASR', 'F-3D', 'F-3DPOS', 'F-3MEF', 'F-4', 'F-4 POS', 'F-4MEF', 'F-6', 'F-6 POS', 'F-6EF', 'F-7', 'F-7 POS', 'F-8', 'F-8 POS', 'F-80', 'F-80POS', 'F-9', 'F-9 POS', 'F-N', 'F-X', 'FOCUSN', 'FWP', 'G-405', 'G-405N', 'G-FIN', 'G-FINW', 'IRANNOTICE', 'MA', 'MA-A', 'MA-I', 'MA-W', 'MSD', 'MSDCO', 'MSDW', 'N-1', 'N-14', 'N-14 8C', 'N-14MEF', 'N-18F1', 'N-1A', 'N-2', 'N-2 POSASR', 'N-23C-2', 'N-23C3A', 'N-23C3B', 'N-23C3C', 'N-2ASR', 'N-2MEF', 'N-30B-2', 'N-30D', 'N-4', 'N-5', 'N-54A', 'N-54C', 'N-6', 'N-6F', 'N-8A', 'N-8B-2', 'N-8F', 'N-8F NTC', 'N-8F ORDR', 'N-CEN', 'N-CR', 'N-CSR', 'N-CSRS', 'N-MFP', 'N-MFP1', 'N-MFP2', 'N-PX', 'N-Q', 'N-VP', 'N-VPFS', 'NO ACT', 'NPORT-EX', 'NPORT-NP', 'NPORT-P', 'NRSRO-CE', 'NRSRO-UPD', 'NSAR-A', 'NSAR-AT', 'NSAR-B', 'NSAR-BT', 'NSAR-U', 'NT 10-D', 'NT 10-K', 'NT 10-Q', 'NT 11-K', 'NT 20-F', 'NT N-CEN', 'NT N-MFP', 'NT N-MFP1', 'NT N-MFP2', 'NT NPORT-EX', 'NT NPORT-P', 'NT-NCEN', 'NT-NCSR', 'NT-NSAR', 'NTFNCEN', 'NTFNCSR', 'NTFNSAR', 'NTN 10D', 'NTN 10K', 'NTN 10Q', 'NTN 20F', 'OIP NTC', 'OIP ORDR', 'POS 8C', 'POS AM', 'POS AMI', 'POS EX', 'POS462B', 'POS462C', 'POSASR', 'PRE 14A', 'PRE 14C', 'PREC14A', 'PREC14C', 'PREM14A', 'PREM14C', 'PREN14A', 'PRER14A', 'PRER14C', 'PRRN14A', 'PX14A6G', 'PX14A6N', 'QRTLYRPT', 'QUALIF', 'REG-NR', 'REVOKED', 'RW', 'RW WD', 'S-1', 'S-11', 'S-11MEF', 'S-1MEF', 'S-20', 'S-3', 'S-3ASR', 'S-3D', 'S-3DPOS', 'S-3MEF', 'S-4', 'S-4 POS', 'S-4EF', 'S-4MEF', 'S-6', 'S-8', 'S-8 POS', 'S-B', 'S-BMEF', 'SBSE', 'SBSE-A', 'SBSE-BD', 'SBSE-C', 'SBSE-W', 'SC 13D', 'SC 13E1', 'SC 13E3', 'SC 13G', 'SC 14D9', 'SC 14F1', 'SC 14N', 'SC TO-C', 'SC TO-I', 'SC TO-T', 'SC13E4F', 'SC14D1F', 'SC14D9C', 'SC14D9F', 'SD', 'SDR', 'SE', 'SEC ACTION', 'SEC STAFF ACTION', 'SEC STAFF LETTER', 'SF-1', 'SF-3', 'SL', 'SP 15D2', 'STOP ORDER', 'SUPPL', 'T-3', 'TA-1', 'TA-2', 'TA-W', 'TACO', 'TH', 'TTW', 'UNDER', 'UPLOAD', 'WDL-REQ', 'X-17A-5']", - "description": "Type of the SEC filing form.", - "default": null, - "optional": true - }, - { - "name": "use_cache", - "type": "bool", - "description": "Whether or not to use cache. If True, cache will store for one day.", - "default": true, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CompanyFilings]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "filing_date", - "type": "date", - "description": "The date of the filing.", - "default": "", - "optional": false - }, - { - "name": "accepted_date", - "type": "datetime", - "description": "Accepted date of the filing.", - "default": null, - "optional": true - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "cik", - "type": "str", - "description": "Central Index Key (CIK) for the requested entity.", - "default": null, - "optional": true - }, - { - "name": "report_type", - "type": "str", - "description": "Type of filing.", - "default": null, - "optional": true - }, - { - "name": "filing_url", - "type": "str", - "description": "URL to the filing page.", - "default": null, - "optional": true - }, - { - "name": "report_url", - "type": "str", - "description": "URL to the actual report.", - "default": "", - "optional": false - } - ], - "fmp": [], - "intrinio": [ - { - "name": "id", - "type": "str", - "description": "Intrinio ID of the filing.", - "default": "", - "optional": false - }, - { - "name": "period_end_date", - "type": "date", - "description": "Ending date of the fiscal period for the filing.", - "default": null, - "optional": true - }, - { - "name": "sec_unique_id", - "type": "str", - "description": "SEC unique ID of the filing.", - "default": "", - "optional": false - }, - { - "name": "instance_url", - "type": "str", - "description": "URL for the XBRL filing for the report.", - "default": null, - "optional": true - }, - { - "name": "industry_group", - "type": "str", - "description": "Industry group of the company.", - "default": "", - "optional": false - }, - { - "name": "industry_category", - "type": "str", - "description": "Industry category of the company.", - "default": "", - "optional": false - } - ], - "sec": [ - { - "name": "report_date", - "type": "date", - "description": "The date of the filing.", - "default": null, - "optional": true - }, - { - "name": "act", - "type": "Union[int, str]", - "description": "The SEC Act number.", - "default": null, - "optional": true - }, - { - "name": "items", - "type": "Union[str, float]", - "description": "The SEC Item numbers.", - "default": null, - "optional": true - }, - { - "name": "primary_doc_description", - "type": "str", - "description": "The description of the primary document.", - "default": null, - "optional": true - }, - { - "name": "primary_doc", - "type": "str", - "description": "The filename of the primary document.", - "default": null, - "optional": true - }, - { - "name": "accession_number", - "type": "Union[int, str]", - "description": "The accession number.", - "default": null, - "optional": true - }, - { - "name": "file_number", - "type": "Union[int, str]", - "description": "The file number.", - "default": null, - "optional": true - }, - { - "name": "film_number", - "type": "Union[int, str]", - "description": "The film number.", - "default": null, - "optional": true - }, - { - "name": "is_inline_xbrl", - "type": "Union[int, str]", - "description": "Whether the filing is an inline XBRL filing.", - "default": null, - "optional": true - }, - { - "name": "is_xbrl", - "type": "Union[int, str]", - "description": "Whether the filing is an XBRL filing.", - "default": null, - "optional": true - }, - { - "name": "size", - "type": "Union[int, str]", - "description": "The size of the filing.", - "default": null, - "optional": true - }, - { - "name": "complete_submission_url", - "type": "str", - "description": "The URL to the complete filing submission.", - "default": null, - "optional": true - }, - { - "name": "filing_detail_url", - "type": "str", - "description": "The URL to the filing details.", - "default": null, - "optional": true - } - ] - }, - "model": "CompanyFilings" - }, - "/equity/fundamental/historical_splits": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical stock splits for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.historical_splits(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[HistoricalSplits]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "numerator", - "type": "float", - "description": "Numerator of the split.", - "default": null, - "optional": true - }, - { - "name": "denominator", - "type": "float", - "description": "Denominator of the split.", - "default": null, - "optional": true - }, - { - "name": "split_ratio", - "type": "str", - "description": "Split ratio.", - "default": null, - "optional": true - } - ], - "fmp": [] - }, - "model": "HistoricalSplits" - }, - "/equity/fundamental/transcript": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get earnings call transcripts for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.transcript(symbol='AAPL', year=2020, provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "year", - "type": "int", - "description": "Year of the earnings call transcript.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EarningsCallTranscript]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "quarter", - "type": "int", - "description": "Quarter of the earnings call transcript.", - "default": "", - "optional": false - }, - { - "name": "year", - "type": "int", - "description": "Year of the earnings call transcript.", - "default": "", - "optional": false - }, - { - "name": "date", - "type": "datetime", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "content", - "type": "str", - "description": "Content of the earnings call transcript.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "EarningsCallTranscript" - }, - "/equity/fundamental/trailing_dividend_yield": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the 1 year trailing dividend yield for a given company over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.trailing_dividend_yield(symbol='AAPL', provider='tiingo')\nobb.equity.fundamental.trailing_dividend_yield(symbol='AAPL', limit=252, provider='tiingo')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return. Default is 252, the number of trading days in a year.", - "default": 252, - "optional": true - }, - { - "name": "provider", - "type": "Literal['tiingo']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'tiingo' if there is no default.", - "default": "tiingo", - "optional": true - } - ], - "tiingo": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[TrailingDividendYield]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['tiingo']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "trailing_dividend_yield", - "type": "float", - "description": "Trailing dividend yield.", - "default": "", - "optional": false - } - ], - "tiingo": [] - }, - "model": "TrailingDividendYield" - }, - "/equity/ownership/major_holders": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get data about major holders for a given company over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.major_holders(symbol='AAPL', provider='fmp')\nobb.equity.ownership.major_holders(symbol='AAPL', page=0, provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - }, - { - "name": "page", - "type": "int", - "description": "Page number of the data to fetch.", - "default": 0, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityOwnership]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "cik", - "type": "int", - "description": "Central Index Key (CIK) for the requested entity.", - "default": "", - "optional": false - }, - { - "name": "filing_date", - "type": "date", - "description": "Filing date of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "investor_name", - "type": "str", - "description": "Investor name of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "security_name", - "type": "str", - "description": "Security name of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "type_of_security", - "type": "str", - "description": "Type of security of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "security_cusip", - "type": "str", - "description": "Security cusip of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "shares_type", - "type": "str", - "description": "Shares type of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "put_call_share", - "type": "str", - "description": "Put call share of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "investment_discretion", - "type": "str", - "description": "Investment discretion of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "industry_title", - "type": "str", - "description": "Industry title of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "weight", - "type": "float", - "description": "Weight of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "last_weight", - "type": "float", - "description": "Last weight of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "change_in_weight", - "type": "float", - "description": "Change in weight of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "change_in_weight_percentage", - "type": "float", - "description": "Change in weight percentage of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "market_value", - "type": "int", - "description": "Market value of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "last_market_value", - "type": "int", - "description": "Last market value of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "change_in_market_value", - "type": "int", - "description": "Change in market value of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "change_in_market_value_percentage", - "type": "float", - "description": "Change in market value percentage of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "shares_number", - "type": "int", - "description": "Shares number of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "last_shares_number", - "type": "int", - "description": "Last shares number of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "change_in_shares_number", - "type": "float", - "description": "Change in shares number of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "change_in_shares_number_percentage", - "type": "float", - "description": "Change in shares number percentage of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "quarter_end_price", - "type": "float", - "description": "Quarter end price of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "avg_price_paid", - "type": "float", - "description": "Average price paid of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "is_new", - "type": "bool", - "description": "Is the stock ownership new.", - "default": "", - "optional": false - }, - { - "name": "is_sold_out", - "type": "bool", - "description": "Is the stock ownership sold out.", - "default": "", - "optional": false - }, - { - "name": "ownership", - "type": "float", - "description": "How much is the ownership.", - "default": "", - "optional": false - }, - { - "name": "last_ownership", - "type": "float", - "description": "Last ownership amount.", - "default": "", - "optional": false - }, - { - "name": "change_in_ownership", - "type": "float", - "description": "Change in ownership amount.", - "default": "", - "optional": false - }, - { - "name": "change_in_ownership_percentage", - "type": "float", - "description": "Change in ownership percentage.", - "default": "", - "optional": false - }, - { - "name": "holding_period", - "type": "int", - "description": "Holding period of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "first_added", - "type": "date", - "description": "First added date of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "performance", - "type": "float", - "description": "Performance of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "performance_percentage", - "type": "float", - "description": "Performance percentage of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "last_performance", - "type": "float", - "description": "Last performance of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "change_in_performance", - "type": "float", - "description": "Change in performance of the stock ownership.", - "default": "", - "optional": false - }, - { - "name": "is_counted_for_performance", - "type": "bool", - "description": "Is the stock ownership counted for performance.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "EquityOwnership" - }, - "/equity/ownership/institutional": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get data about institutional ownership for a given company over time.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.institutional(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "include_current_quarter", - "type": "bool", - "description": "Include current quarter data.", - "default": false, - "optional": true - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[InstitutionalOwnership]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "cik", - "type": "str", - "description": "Central Index Key (CIK) for the requested entity.", - "default": null, - "optional": true - }, - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - } - ], - "fmp": [ - { - "name": "investors_holding", - "type": "int", - "description": "Number of investors holding the stock.", - "default": "", - "optional": false - }, - { - "name": "last_investors_holding", - "type": "int", - "description": "Number of investors holding the stock in the last quarter.", - "default": "", - "optional": false - }, - { - "name": "investors_holding_change", - "type": "int", - "description": "Change in the number of investors holding the stock.", - "default": "", - "optional": false - }, - { - "name": "number_of_13f_shares", - "type": "int", - "description": "Number of 13F shares.", - "default": null, - "optional": true - }, - { - "name": "last_number_of_13f_shares", - "type": "int", - "description": "Number of 13F shares in the last quarter.", - "default": null, - "optional": true - }, - { - "name": "number_of_13f_shares_change", - "type": "int", - "description": "Change in the number of 13F shares.", - "default": null, - "optional": true - }, - { - "name": "total_invested", - "type": "float", - "description": "Total amount invested.", - "default": "", - "optional": false - }, - { - "name": "last_total_invested", - "type": "float", - "description": "Total amount invested in the last quarter.", - "default": "", - "optional": false - }, - { - "name": "total_invested_change", - "type": "float", - "description": "Change in the total amount invested.", - "default": "", - "optional": false - }, - { - "name": "ownership_percent", - "type": "float", - "description": "Ownership percent.", - "default": "", - "optional": false - }, - { - "name": "last_ownership_percent", - "type": "float", - "description": "Ownership percent in the last quarter.", - "default": "", - "optional": false - }, - { - "name": "ownership_percent_change", - "type": "float", - "description": "Change in the ownership percent.", - "default": "", - "optional": false - }, - { - "name": "new_positions", - "type": "int", - "description": "Number of new positions.", - "default": "", - "optional": false - }, - { - "name": "last_new_positions", - "type": "int", - "description": "Number of new positions in the last quarter.", - "default": "", - "optional": false - }, - { - "name": "new_positions_change", - "type": "int", - "description": "Change in the number of new positions.", - "default": "", - "optional": false - }, - { - "name": "increased_positions", - "type": "int", - "description": "Number of increased positions.", - "default": "", - "optional": false - }, - { - "name": "last_increased_positions", - "type": "int", - "description": "Number of increased positions in the last quarter.", - "default": "", - "optional": false - }, - { - "name": "increased_positions_change", - "type": "int", - "description": "Change in the number of increased positions.", - "default": "", - "optional": false - }, - { - "name": "closed_positions", - "type": "int", - "description": "Number of closed positions.", - "default": "", - "optional": false - }, - { - "name": "last_closed_positions", - "type": "int", - "description": "Number of closed positions in the last quarter.", - "default": "", - "optional": false - }, - { - "name": "closed_positions_change", - "type": "int", - "description": "Change in the number of closed positions.", - "default": "", - "optional": false - }, - { - "name": "reduced_positions", - "type": "int", - "description": "Number of reduced positions.", - "default": "", - "optional": false - }, - { - "name": "last_reduced_positions", - "type": "int", - "description": "Number of reduced positions in the last quarter.", - "default": "", - "optional": false - }, - { - "name": "reduced_positions_change", - "type": "int", - "description": "Change in the number of reduced positions.", - "default": "", - "optional": false - }, - { - "name": "total_calls", - "type": "int", - "description": "Total number of call options contracts traded for Apple Inc. on the specified date.", - "default": "", - "optional": false - }, - { - "name": "last_total_calls", - "type": "int", - "description": "Total number of call options contracts traded for Apple Inc. on the previous reporting date.", - "default": "", - "optional": false - }, - { - "name": "total_calls_change", - "type": "int", - "description": "Change in the total number of call options contracts traded between the current and previous reporting dates.", - "default": "", - "optional": false - }, - { - "name": "total_puts", - "type": "int", - "description": "Total number of put options contracts traded for Apple Inc. on the specified date.", - "default": "", - "optional": false - }, - { - "name": "last_total_puts", - "type": "int", - "description": "Total number of put options contracts traded for Apple Inc. on the previous reporting date.", - "default": "", - "optional": false - }, - { - "name": "total_puts_change", - "type": "int", - "description": "Change in the total number of put options contracts traded between the current and previous reporting dates.", - "default": "", - "optional": false - }, - { - "name": "put_call_ratio", - "type": "float", - "description": "Put-call ratio, which is the ratio of the total number of put options to call options traded on the specified date.", - "default": "", - "optional": false - }, - { - "name": "last_put_call_ratio", - "type": "float", - "description": "Put-call ratio on the previous reporting date.", - "default": "", - "optional": false - }, - { - "name": "put_call_ratio_change", - "type": "float", - "description": "Change in the put-call ratio between the current and previous reporting dates.", - "default": "", - "optional": false - } - ] - }, - "model": "InstitutionalOwnership" - }, - "/equity/ownership/insider_trading": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get data about trading by a company's management team and board of directors.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.insider_trading(symbol='AAPL', provider='fmp')\nobb.equity.ownership.insider_trading(symbol='AAPL', limit=500, provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 500, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "transaction_type", - "type": "Literal[None, 'award', 'conversion', 'return', 'expire_short', 'in_kind', 'gift', 'expire_long', 'discretionary', 'other', 'small', 'exempt', 'otm', 'purchase', 'sale', 'tender', 'will', 'itm', 'trust']", - "description": "Type of the transaction.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": "", - "optional": false - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": "", - "optional": false - }, - { - "name": "ownership_type", - "type": "Literal['D', 'I']", - "description": "Type of ownership.", - "default": null, - "optional": true - }, - { - "name": "sort_by", - "type": "Literal['filing_date', 'updated_on']", - "description": "Field to sort by.", - "default": "updated_on", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[InsiderTrading]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "company_cik", - "type": "Union[int, str]", - "description": "CIK number of the company.", - "default": null, - "optional": true - }, - { - "name": "filing_date", - "type": "Union[date, datetime]", - "description": "Filing date of the trade.", - "default": null, - "optional": true - }, - { - "name": "transaction_date", - "type": "date", - "description": "Date of the transaction.", - "default": null, - "optional": true - }, - { - "name": "owner_cik", - "type": "Union[int, str]", - "description": "Reporting individual's CIK.", - "default": null, - "optional": true - }, - { - "name": "owner_name", - "type": "str", - "description": "Name of the reporting individual.", - "default": null, - "optional": true - }, - { - "name": "owner_title", - "type": "str", - "description": "The title held by the reporting individual.", - "default": null, - "optional": true - }, - { - "name": "transaction_type", - "type": "str", - "description": "Type of transaction being reported.", - "default": null, - "optional": true - }, - { - "name": "acquisition_or_disposition", - "type": "str", - "description": "Acquisition or disposition of the shares.", - "default": null, - "optional": true - }, - { - "name": "security_type", - "type": "str", - "description": "The type of security transacted.", - "default": null, - "optional": true - }, - { - "name": "securities_owned", - "type": "float", - "description": "Number of securities owned by the reporting individual.", - "default": null, - "optional": true - }, - { - "name": "securities_transacted", - "type": "float", - "description": "Number of securities transacted by the reporting individual.", - "default": null, - "optional": true - }, - { - "name": "transaction_price", - "type": "float", - "description": "The price of the transaction.", - "default": null, - "optional": true - }, - { - "name": "filing_url", - "type": "str", - "description": "Link to the filing.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "form_type", - "type": "str", - "description": "Form type of the insider trading.", - "default": "", - "optional": false - } - ], - "intrinio": [ - { - "name": "company_name", - "type": "str", - "description": "Name of the company.", - "default": "", - "optional": false - }, - { - "name": "conversion_exercise_price", - "type": "float", - "description": "Conversion/Exercise price of the shares.", - "default": null, - "optional": true - }, - { - "name": "deemed_execution_date", - "type": "date", - "description": "Deemed execution date of the trade.", - "default": null, - "optional": true - }, - { - "name": "exercise_date", - "type": "date", - "description": "Exercise date of the trade.", - "default": null, - "optional": true - }, - { - "name": "expiration_date", - "type": "date", - "description": "Expiration date of the derivative.", - "default": null, - "optional": true - }, - { - "name": "underlying_security_title", - "type": "str", - "description": "Name of the underlying non-derivative security related to this derivative transaction.", - "default": null, - "optional": true - }, - { - "name": "underlying_shares", - "type": "Union[float, int]", - "description": "Number of underlying shares related to this derivative transaction.", - "default": null, - "optional": true - }, - { - "name": "nature_of_ownership", - "type": "str", - "description": "Nature of ownership of the insider trading.", - "default": null, - "optional": true - }, - { - "name": "director", - "type": "bool", - "description": "Whether the owner is a director.", - "default": null, - "optional": true - }, - { - "name": "officer", - "type": "bool", - "description": "Whether the owner is an officer.", - "default": null, - "optional": true - }, - { - "name": "ten_percent_owner", - "type": "bool", - "description": "Whether the owner is a 10% owner.", - "default": null, - "optional": true - }, - { - "name": "other_relation", - "type": "bool", - "description": "Whether the owner is having another relation.", - "default": null, - "optional": true - }, - { - "name": "derivative_transaction", - "type": "bool", - "description": "Whether the owner is having a derivative transaction.", - "default": null, - "optional": true - }, - { - "name": "report_line_number", - "type": "int", - "description": "Report line number of the insider trading.", - "default": null, - "optional": true - } - ] - }, - "model": "InsiderTrading" - }, - "/equity/ownership/share_statistics": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get data about share float for a given company.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.share_statistics(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[ShareStatistics]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - }, - { - "name": "free_float", - "type": "float", - "description": "Percentage of unrestricted shares of a publicly-traded company.", - "default": null, - "optional": true - }, - { - "name": "float_shares", - "type": "float", - "description": "Number of shares available for trading by the general public.", - "default": null, - "optional": true - }, - { - "name": "outstanding_shares", - "type": "float", - "description": "Total number of shares of a publicly-traded company.", - "default": null, - "optional": true - }, - { - "name": "source", - "type": "str", - "description": "Source of the received data.", - "default": null, - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "adjusted_outstanding_shares", - "type": "float", - "description": "Total number of shares of a publicly-traded company, adjusted for splits.", - "default": null, - "optional": true - }, - { - "name": "public_float", - "type": "float", - "description": "Aggregate market value of the shares of a publicly-traded company.", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "implied_shares_outstanding", - "type": "int", - "description": "Implied Shares Outstanding of common equity, assuming the conversion of all convertible subsidiary equity into common.", - "default": null, - "optional": true - }, - { - "name": "short_interest", - "type": "int", - "description": "Number of shares that are reported short.", - "default": null, - "optional": true - }, - { - "name": "short_percent_of_float", - "type": "float", - "description": "Percentage of shares that are reported short, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "days_to_cover", - "type": "float", - "description": "Number of days to repurchase the shares as a ratio of average daily volume", - "default": null, - "optional": true - }, - { - "name": "short_interest_prev_month", - "type": "int", - "description": "Number of shares that were reported short in the previous month.", - "default": null, - "optional": true - }, - { - "name": "short_interest_prev_date", - "type": "date", - "description": "Date of the previous month's report.", - "default": null, - "optional": true - }, - { - "name": "insider_ownership", - "type": "float", - "description": "Percentage of shares held by insiders, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "institution_ownership", - "type": "float", - "description": "Percentage of shares held by institutions, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "institution_float_ownership", - "type": "float", - "description": "Percentage of float held by institutions, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "institutions_count", - "type": "int", - "description": "Number of institutions holding shares.", - "default": null, - "optional": true - } - ] - }, - "model": "ShareStatistics" - }, - "/equity/ownership/form_13f": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "The Securities and Exchange Commission's (SEC) Form 13F is a quarterly report\nthat is required to be filed by all institutional investment managers with at least\n$100 million in assets under management.\nManagers are required to file Form 13F within 45 days after the last day of the calendar quarter.\nMost funds wait until the end of this period in order to conceal\ntheir investment strategy from competitors and the public.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.form_13f(symbol='NVDA', provider='sec')\n# Enter a date (calendar quarter ending) for a specific report.\nobb.equity.ownership.form_13f(symbol='BRK-A', date='2016-09-30', provider='sec')\n# Example finding Michael Burry's filings.\ncik = obb.regulators.sec.institutions_search(\"Scion Asset Management\").results[0].cik\n# Use the `limit` parameter to return N number of reports from the most recent.\nobb.equity.ownership.form_13f(cik, limit=2).to_df()\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for. A CIK or Symbol can be used.", - "default": "", - "optional": false - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for. The date represents the end of the reporting period. All form 13F-HR filings are based on the calendar year and are reported quarterly. If a date is not supplied, the most recent filing is returned. Submissions beginning 2013-06-30 are supported.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return. The number of previous filings to return. The date parameter takes priority over this parameter.", - "default": 1, - "optional": true - }, - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[Form13FHR]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "period_ending", - "type": "date", - "description": "The end-of-quarter date of the filing.", - "default": "", - "optional": false - }, - { - "name": "issuer", - "type": "str", - "description": "The name of the issuer.", - "default": "", - "optional": false - }, - { - "name": "cusip", - "type": "str", - "description": "The CUSIP of the security.", - "default": "", - "optional": false - }, - { - "name": "asset_class", - "type": "str", - "description": "The title of the asset class for the security.", - "default": "", - "optional": false - }, - { - "name": "security_type", - "type": "Literal['SH', 'PRN']", - "description": "The total number of shares of the class of security or the principal amount of such class. 'SH' for shares. 'PRN' for principal amount. Convertible debt securities are reported as 'PRN'.", - "default": null, - "optional": true - }, - { - "name": "option_type", - "type": "Literal['call', 'put']", - "description": "Defined when the holdings being reported are put or call options. Only long positions are reported.", - "default": null, - "optional": true - }, - { - "name": "voting_authority_sole", - "type": "int", - "description": "The number of shares for which the Manager exercises sole voting authority (none).", - "default": null, - "optional": true - }, - { - "name": "voting_authority_shared", - "type": "int", - "description": "The number of shares for which the Manager exercises a defined shared voting authority (none).", - "default": null, - "optional": true - }, - { - "name": "voting_authority_other", - "type": "int", - "description": "The number of shares for which the Manager exercises other shared voting authority (none).", - "default": null, - "optional": true - }, - { - "name": "principal_amount", - "type": "int", - "description": "The total number of shares of the class of security or the principal amount of such class. Only long positions are reported", - "default": "", - "optional": false - }, - { - "name": "value", - "type": "int", - "description": "The fair market value of the holding of the particular class of security. The value reported for options is the fair market value of the underlying security with respect to the number of shares controlled. Values are rounded to the nearest US dollar and use the closing price of the last trading day of the calendar year or quarter.", - "default": "", - "optional": false - } - ], - "sec": [ - { - "name": "weight", - "type": "float", - "description": "The weight of the security relative to the market value of all securities in the filing , as a normalized percent.", - "default": "", - "optional": false - } - ] - }, - "model": "Form13FHR" - }, - "/equity/price/quote": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the latest quote for a given stock. Quote includes price, volume, and other data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.quote(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, yfinance.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "source", - "type": "Literal['iex', 'bats', 'bats_delayed', 'utp_delayed', 'cta_a_delayed', 'cta_b_delayed', 'intrinio_mx', 'intrinio_mx_plus', 'delayed_sip']", - "description": "Source of the data.", - "default": "iex", - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityQuote]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "asset_type", - "type": "str", - "description": "Type of asset - i.e, stock, ETF, etc.", - "default": null, - "optional": true - }, - { - "name": "name", - "type": "str", - "description": "Name of the company or asset.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The name or symbol of the venue where the data is from.", - "default": null, - "optional": true - }, - { - "name": "bid", - "type": "float", - "description": "Price of the top bid order.", - "default": null, - "optional": true - }, - { - "name": "bid_size", - "type": "int", - "description": "This represents the number of round lot orders at the given price. The normal round lot size is 100 shares. A size of 2 means there are 200 shares available at the given price.", - "default": null, - "optional": true - }, - { - "name": "bid_exchange", - "type": "str", - "description": "The specific trading venue where the purchase order was placed.", - "default": null, - "optional": true - }, - { - "name": "ask", - "type": "float", - "description": "Price of the top ask order.", - "default": null, - "optional": true - }, - { - "name": "ask_size", - "type": "int", - "description": "This represents the number of round lot orders at the given price. The normal round lot size is 100 shares. A size of 2 means there are 200 shares available at the given price.", - "default": null, - "optional": true - }, - { - "name": "ask_exchange", - "type": "str", - "description": "The specific trading venue where the sale order was placed.", - "default": null, - "optional": true - }, - { - "name": "quote_conditions", - "type": "Union[str, int, List[str], List[int]]", - "description": "Conditions or condition codes applicable to the quote.", - "default": null, - "optional": true - }, - { - "name": "quote_indicators", - "type": "Union[str, int, List[str], List[int]]", - "description": "Indicators or indicator codes applicable to the participant quote related to the price bands for the issue, or the affect the quote has on the NBBO.", - "default": null, - "optional": true - }, - { - "name": "sales_conditions", - "type": "Union[str, int, List[str], List[int]]", - "description": "Conditions or condition codes applicable to the sale.", - "default": null, - "optional": true - }, - { - "name": "sequence_number", - "type": "int", - "description": "The sequence number represents the sequence in which message events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11).", - "default": null, - "optional": true - }, - { - "name": "market_center", - "type": "str", - "description": "The ID of the UTP participant that originated the message.", - "default": null, - "optional": true - }, - { - "name": "participant_timestamp", - "type": "datetime", - "description": "Timestamp for when the quote was generated by the exchange.", - "default": null, - "optional": true - }, - { - "name": "trf_timestamp", - "type": "datetime", - "description": "Timestamp for when the TRF (Trade Reporting Facility) received the message.", - "default": null, - "optional": true - }, - { - "name": "sip_timestamp", - "type": "datetime", - "description": "Timestamp for when the SIP (Security Information Processor) received the message from the exchange.", - "default": null, - "optional": true - }, - { - "name": "last_price", - "type": "float", - "description": "Price of the last trade.", - "default": null, - "optional": true - }, - { - "name": "last_tick", - "type": "str", - "description": "Whether the last sale was an up or down tick.", - "default": null, - "optional": true - }, - { - "name": "last_size", - "type": "int", - "description": "Size of the last trade.", - "default": null, - "optional": true - }, - { - "name": "last_timestamp", - "type": "datetime", - "description": "Date and Time when the last price was recorded.", - "default": null, - "optional": true - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": null, - "optional": true - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": null, - "optional": true - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": null, - "optional": true - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "Union[float, int]", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "exchange_volume", - "type": "Union[float, int]", - "description": "Volume of shares exchanged during the trading day on the specific exchange.", - "default": null, - "optional": true - }, - { - "name": "prev_close", - "type": "float", - "description": "The previous close price.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in price from previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change in price as a normalized percentage.", - "default": null, - "optional": true - }, - { - "name": "year_high", - "type": "float", - "description": "The one year high (52W High).", - "default": null, - "optional": true - }, - { - "name": "year_low", - "type": "float", - "description": "The one year low (52W Low).", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "price_avg50", - "type": "float", - "description": "50 day moving average price.", - "default": null, - "optional": true - }, - { - "name": "price_avg200", - "type": "float", - "description": "200 day moving average price.", - "default": null, - "optional": true - }, - { - "name": "avg_volume", - "type": "int", - "description": "Average volume over the last 10 trading days.", - "default": null, - "optional": true - }, - { - "name": "market_cap", - "type": "float", - "description": "Market cap of the company.", - "default": null, - "optional": true - }, - { - "name": "shares_outstanding", - "type": "int", - "description": "Number of shares outstanding.", - "default": null, - "optional": true - }, - { - "name": "eps", - "type": "float", - "description": "Earnings per share.", - "default": null, - "optional": true - }, - { - "name": "pe", - "type": "float", - "description": "Price earnings ratio.", - "default": null, - "optional": true - }, - { - "name": "earnings_announcement", - "type": "datetime", - "description": "Upcoming earnings announcement date.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "is_darkpool", - "type": "bool", - "description": "Whether or not the current trade is from a darkpool.", - "default": null, - "optional": true - }, - { - "name": "source", - "type": "str", - "description": "Source of the Intrinio data.", - "default": null, - "optional": true - }, - { - "name": "updated_on", - "type": "datetime", - "description": "Date and Time when the data was last updated.", - "default": "", - "optional": false - }, - { - "name": "security", - "type": "IntrinioSecurity", - "description": "Security details related to the quote.", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "ma_50d", - "type": "float", - "description": "50-day moving average price.", - "default": null, - "optional": true - }, - { - "name": "ma_200d", - "type": "float", - "description": "200-day moving average price.", - "default": null, - "optional": true - }, - { - "name": "volume_average", - "type": "float", - "description": "Average daily trading volume.", - "default": null, - "optional": true - }, - { - "name": "volume_average_10d", - "type": "float", - "description": "Average daily trading volume in the last 10 days.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency of the price.", - "default": null, - "optional": true - } - ] - }, - "model": "EquityQuote" - }, - "/equity/price/nbbo": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the National Best Bid and Offer for a given stock.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.nbbo(symbol='AAPL', provider='polygon')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['polygon']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'polygon' if there is no default.", - "default": "polygon", - "optional": true - } - ], - "polygon": [ - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return. Up to ten million records will be returned. Pagination occurs in groups of 50,000. Remaining limit values will always return 50,000 more records unless it is the last page. High volume tickers will require multiple max requests for a single day's NBBO records. Expect stocks, like SPY, to approach 1GB in size, per day, as a raw CSV. Splitting large requests into chunks is recommended for full-day requests of high-volume symbols.", - "default": 50000, - "optional": true - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for. Use bracketed the timestamp parameters to specify exact time ranges.", - "default": null, - "optional": true - }, - { - "name": "timestamp_lt", - "type": "Union[datetime, str]", - "description": "Query by datetime, less than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", - "default": null, - "optional": true - }, - { - "name": "timestamp_gt", - "type": "Union[datetime, str]", - "description": "Query by datetime, greater than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", - "default": null, - "optional": true - }, - { - "name": "timestamp_lte", - "type": "Union[datetime, str]", - "description": "Query by datetime, less than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", - "default": null, - "optional": true - }, - { - "name": "timestamp_gte", - "type": "Union[datetime, str]", - "description": "Query by datetime, greater than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityNBBO]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['polygon']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "ask_exchange", - "type": "str", - "description": "The exchange ID for the ask.", - "default": "", - "optional": false - }, - { - "name": "ask", - "type": "float", - "description": "The last ask price.", - "default": "", - "optional": false - }, - { - "name": "ask_size", - "type": "int", - "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", - "default": "", - "optional": false - }, - { - "name": "bid_size", - "type": "int", - "description": "The bid size in round lots.", - "default": "", - "optional": false - }, - { - "name": "bid", - "type": "float", - "description": "The last bid price.", - "default": "", - "optional": false - }, - { - "name": "bid_exchange", - "type": "str", - "description": "The exchange ID for the bid.", - "default": "", - "optional": false - } - ], - "polygon": [ - { - "name": "tape", - "type": "str", - "description": "The exchange tape.", - "default": null, - "optional": true - }, - { - "name": "conditions", - "type": "Union[str, List[int], List[str]]", - "description": "A list of condition codes.", - "default": null, - "optional": true - }, - { - "name": "indicators", - "type": "List[int]", - "description": "A list of indicator codes.", - "default": null, - "optional": true - }, - { - "name": "sequence_num", - "type": "int", - "description": "The sequence number represents the sequence in which message events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11)", - "default": null, - "optional": true - }, - { - "name": "participant_timestamp", - "type": "datetime", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", - "default": null, - "optional": true - }, - { - "name": "sip_timestamp", - "type": "datetime", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this quote from the exchange which produced it.", - "default": null, - "optional": true - }, - { - "name": "trf_timestamp", - "type": "datetime", - "description": "The nanosecond accuracy TRF (Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this quote.", - "default": null, - "optional": true - } - ] - }, - "model": "EquityNBBO" - }, - "/equity/price/historical": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get historical price data for a given stock. This includes open, high, low, close, and volume.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.historical(symbol='AAPL', provider='fmp')\nobb.equity.price.historical(symbol='AAPL', interval='1d', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", - "default": "", - "optional": false - }, - { - "name": "interval", - "type": "str", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "start_time", - "type": "datetime.time", - "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'.", - "default": null, - "optional": true - }, - { - "name": "end_time", - "type": "datetime.time", - "description": "Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'.", - "default": null, - "optional": true - }, - { - "name": "timezone", - "type": "str", - "description": "Timezone of the data, in the IANA format (Continent/City).", - "default": "America/New_York", - "optional": true - }, - { - "name": "source", - "type": "Literal['realtime', 'delayed', 'nasdaq_basic']", - "description": "The source of the data.", - "default": "realtime", - "optional": true - } - ], - "polygon": [ - { - "name": "adjustment", - "type": "Literal['splits_only', 'unadjusted']", - "description": "The adjustment factor to apply. Default is splits only.", - "default": "splits_only", - "optional": true - }, - { - "name": "extended_hours", - "type": "bool", - "description": "Include Pre and Post market data.", - "default": false, - "optional": true - }, - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", - "default": "asc", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 49999, - "optional": true - } - ], - "tiingo": [], - "yfinance": [ - { - "name": "extended_hours", - "type": "bool", - "description": "Include Pre and Post market data.", - "default": false, - "optional": true - }, - { - "name": "include_actions", - "type": "bool", - "description": "Include dividends and stock splits in results.", - "default": true, - "optional": true - }, - { - "name": "adjustment", - "type": "Literal['splits_only', 'splits_and_dividends']", - "description": "The adjustment factor to apply. Default is splits only.", - "default": "splits_only", - "optional": true - }, - { - "name": "adjusted", - "type": "bool", - "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'adjustment' set as 'splits_and_dividends' instead.", - "default": false, - "optional": true - }, - { - "name": "prepost", - "type": "bool", - "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'extended_hours' as True instead.", - "default": false, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityHistorical]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "Union[date, datetime]", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": "", - "optional": false - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": "", - "optional": false - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": "", - "optional": false - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "Union[float, int]", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "vwap", - "type": "float", - "description": "Volume Weighted Average Price over the period.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "unadjusted_volume", - "type": "float", - "description": "Unadjusted volume of the symbol.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change in the price from the previous close, as a normalized percent.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "average", - "type": "float", - "description": "Average trade price of an individual equity during the interval.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price of the symbol from the previous day.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Percent change in the price of the symbol from the previous day.", - "default": null, - "optional": true - }, - { - "name": "adj_open", - "type": "float", - "description": "The adjusted open price.", - "default": null, - "optional": true - }, - { - "name": "adj_high", - "type": "float", - "description": "The adjusted high price.", - "default": null, - "optional": true - }, - { - "name": "adj_low", - "type": "float", - "description": "The adjusted low price.", - "default": null, - "optional": true - }, - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "adj_volume", - "type": "float", - "description": "The adjusted volume.", - "default": null, - "optional": true - }, - { - "name": "fifty_two_week_high", - "type": "float", - "description": "52 week high price for the symbol.", - "default": null, - "optional": true - }, - { - "name": "fifty_two_week_low", - "type": "float", - "description": "52 week low price for the symbol.", - "default": null, - "optional": true - }, - { - "name": "factor", - "type": "float", - "description": "factor by which to multiply equity prices before this date, in order to calculate historically-adjusted equity prices.", - "default": null, - "optional": true - }, - { - "name": "split_ratio", - "type": "float", - "description": "Ratio of the equity split, if a split occurred.", - "default": null, - "optional": true - }, - { - "name": "dividend", - "type": "float", - "description": "Dividend amount, if a dividend was paid.", - "default": null, - "optional": true - }, - { - "name": "close_time", - "type": "datetime", - "description": "The timestamp that represents the end of the interval span.", - "default": null, - "optional": true - }, - { - "name": "interval", - "type": "str", - "description": "The data time frequency.", - "default": null, - "optional": true - }, - { - "name": "intra_period", - "type": "bool", - "description": "If true, the equity price represents an unfinished period (be it day, week, quarter, month, or year), meaning that the close price is the latest price available, not the official close price for the period", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "transactions", - "type": "Annotated[int, Gt(gt=0)]", - "description": "Number of transactions for the symbol in the time period.", - "default": null, - "optional": true - } - ], - "tiingo": [ - { - "name": "adj_open", - "type": "float", - "description": "The adjusted open price.", - "default": null, - "optional": true - }, - { - "name": "adj_high", - "type": "float", - "description": "The adjusted high price.", - "default": null, - "optional": true - }, - { - "name": "adj_low", - "type": "float", - "description": "The adjusted low price.", - "default": null, - "optional": true - }, - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "adj_volume", - "type": "float", - "description": "The adjusted volume.", - "default": null, - "optional": true - }, - { - "name": "split_ratio", - "type": "float", - "description": "Ratio of the equity split, if a split occurred.", - "default": null, - "optional": true - }, - { - "name": "dividend", - "type": "float", - "description": "Dividend amount, if a dividend was paid.", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "split_ratio", - "type": "float", - "description": "Ratio of the equity split, if a split occurred.", - "default": null, - "optional": true - }, - { - "name": "dividend", - "type": "float", - "description": "Dividend amount (split-adjusted), if a dividend was paid.", - "default": null, - "optional": true - } - ] - }, - "model": "EquityHistorical" - }, - "/equity/price/performance": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get price performance data for a given stock. This includes price changes for different time periods.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.performance(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[PricePerformance]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "one_day", - "type": "float", - "description": "One-day return.", - "default": null, - "optional": true - }, - { - "name": "wtd", - "type": "float", - "description": "Week to date return.", - "default": null, - "optional": true - }, - { - "name": "one_week", - "type": "float", - "description": "One-week return.", - "default": null, - "optional": true - }, - { - "name": "mtd", - "type": "float", - "description": "Month to date return.", - "default": null, - "optional": true - }, - { - "name": "one_month", - "type": "float", - "description": "One-month return.", - "default": null, - "optional": true - }, - { - "name": "qtd", - "type": "float", - "description": "Quarter to date return.", - "default": null, - "optional": true - }, - { - "name": "three_month", - "type": "float", - "description": "Three-month return.", - "default": null, - "optional": true - }, - { - "name": "six_month", - "type": "float", - "description": "Six-month return.", - "default": null, - "optional": true - }, - { - "name": "ytd", - "type": "float", - "description": "Year to date return.", - "default": null, - "optional": true - }, - { - "name": "one_year", - "type": "float", - "description": "One-year return.", - "default": null, - "optional": true - }, - { - "name": "two_year", - "type": "float", - "description": "Two-year return.", - "default": null, - "optional": true - }, - { - "name": "three_year", - "type": "float", - "description": "Three-year return.", - "default": null, - "optional": true - }, - { - "name": "four_year", - "type": "float", - "description": "Four-year", - "default": null, - "optional": true - }, - { - "name": "five_year", - "type": "float", - "description": "Five-year return.", - "default": null, - "optional": true - }, - { - "name": "ten_year", - "type": "float", - "description": "Ten-year return.", - "default": null, - "optional": true - }, - { - "name": "max", - "type": "float", - "description": "Return from the beginning of the time series.", - "default": null, - "optional": true - } - ], - "fmp": [] - }, - "model": "PricePerformance" - }, - "/equity/shorts/fails_to_deliver": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get reported Fail-to-deliver (FTD) data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.shorts.fails_to_deliver(symbol='AAPL', provider='sec')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [ - { - "name": "limit", - "type": "int", - "description": "Limit the number of reports to parse, from most recent. Approximately 24 reports per year, going back to 2009.", - "default": 24, - "optional": true - }, - { - "name": "skip_reports", - "type": "int", - "description": "Skip N number of reports from current. A value of 1 will skip the most recent report.", - "default": 0, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityFTD]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "settlement_date", - "type": "date", - "description": "The settlement date of the fail.", - "default": null, - "optional": true - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "CUSIP of the Security.", - "default": null, - "optional": true - }, - { - "name": "quantity", - "type": "int", - "description": "The number of fails on that settlement date.", - "default": null, - "optional": true - }, - { - "name": "price", - "type": "float", - "description": "The price at the previous closing price from the settlement date.", - "default": null, - "optional": true - }, - { - "name": "description", - "type": "str", - "description": "The description of the Security.", - "default": null, - "optional": true - } - ], - "sec": [] - }, - "model": "EquityFTD" - }, - "/equity/search": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Search for stock symbol, CIK, LEI, or company name.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.search(provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Search query.", - "default": "", - "optional": true - }, - { - "name": "is_symbol", - "type": "bool", - "description": "Whether to search by ticker symbol.", - "default": false, - "optional": true - }, - { - "name": "use_cache", - "type": "bool", - "description": "Whether to use the cache or not.", - "default": true, - "optional": true - }, - { - "name": "provider", - "type": "Literal['intrinio', 'sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", - "default": "intrinio", - "optional": true - } - ], - "intrinio": [ - { - "name": "active", - "type": "bool", - "description": "When true, return companies that are actively traded (having stock prices within the past 14 days). When false, return companies that are not actively traded or never have been traded.", - "default": true, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 10000, - "optional": true - } - ], - "sec": [ - { - "name": "is_fund", - "type": "bool", - "description": "Whether to direct the search to the list of mutual funds and ETFs.", - "default": false, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquitySearch]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['intrinio', 'sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "name", - "type": "str", - "description": "Name of the company.", - "default": "", - "optional": false - } - ], - "intrinio": [ - { - "name": "cik", - "type": "str", - "description": "", - "default": "", - "optional": false - }, - { - "name": "lei", - "type": "str", - "description": "The Legal Entity Identifier (LEI) of the company.", - "default": "", - "optional": false - }, - { - "name": "intrinio_id", - "type": "str", - "description": "The Intrinio ID of the company.", - "default": "", - "optional": false - } - ], - "sec": [ - { - "name": "cik", - "type": "str", - "description": "Central Index Key", - "default": "", - "optional": false - } - ] - }, - "model": "EquitySearch" - }, - "/equity/screener": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Screen for companies meeting various criteria. These criteria include\nmarket cap, price, beta, volume, and dividend yield.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.screener(provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "mktcap_min", - "type": "int", - "description": "Filter by market cap greater than this value.", - "default": null, - "optional": true - }, - { - "name": "mktcap_max", - "type": "int", - "description": "Filter by market cap less than this value.", - "default": null, - "optional": true - }, - { - "name": "price_min", - "type": "float", - "description": "Filter by price greater than this value.", - "default": null, - "optional": true - }, - { - "name": "price_max", - "type": "float", - "description": "Filter by price less than this value.", - "default": null, - "optional": true - }, - { - "name": "beta_min", - "type": "float", - "description": "Filter by a beta greater than this value.", - "default": null, - "optional": true - }, - { - "name": "beta_max", - "type": "float", - "description": "Filter by a beta less than this value.", - "default": null, - "optional": true - }, - { - "name": "volume_min", - "type": "int", - "description": "Filter by volume greater than this value.", - "default": null, - "optional": true - }, - { - "name": "volume_max", - "type": "int", - "description": "Filter by volume less than this value.", - "default": null, - "optional": true - }, - { - "name": "dividend_min", - "type": "float", - "description": "Filter by dividend amount greater than this value.", - "default": null, - "optional": true - }, - { - "name": "dividend_max", - "type": "float", - "description": "Filter by dividend amount less than this value.", - "default": null, - "optional": true - }, - { - "name": "is_etf", - "type": "bool", - "description": "If true, returns only ETFs.", - "default": false, - "optional": true - }, - { - "name": "is_active", - "type": "bool", - "description": "If false, returns only inactive tickers.", - "default": true, - "optional": true - }, - { - "name": "sector", - "type": "Literal['Consumer Cyclical', 'Energy', 'Technology', 'Industrials', 'Financial Services', 'Basic Materials', 'Communication Services', 'Consumer Defensive', 'Healthcare', 'Real Estate', 'Utilities', 'Industrial Goods', 'Financial', 'Services', 'Conglomerates']", - "description": "Filter by sector.", - "default": null, - "optional": true - }, - { - "name": "industry", - "type": "str", - "description": "Filter by industry.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "Filter by country, as a two-letter country code.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "Literal['amex', 'ams', 'ase', 'asx', 'ath', 'bme', 'bru', 'bud', 'bue', 'cai', 'cnq', 'cph', 'dfm', 'doh', 'etf', 'euronext', 'hel', 'hkse', 'ice', 'iob', 'ist', 'jkt', 'jnb', 'jpx', 'kls', 'koe', 'ksc', 'kuw', 'lse', 'mex', 'mutual_fund', 'nasdaq', 'neo', 'nse', 'nyse', 'nze', 'osl', 'otc', 'pnk', 'pra', 'ris', 'sao', 'sau', 'set', 'sgo', 'shh', 'shz', 'six', 'sto', 'tai', 'tlv', 'tsx', 'two', 'vie', 'wse', 'xetra']", - "description": "Filter by exchange.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "Limit the number of results to return.", - "default": 50000, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityScreener]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the company.", - "default": "", - "optional": false - } - ], - "fmp": [ - { - "name": "market_cap", - "type": "int", - "description": "The market cap of ticker.", - "default": null, - "optional": true - }, - { - "name": "sector", - "type": "str", - "description": "The sector the ticker belongs to.", - "default": null, - "optional": true - }, - { - "name": "industry", - "type": "str", - "description": "The industry ticker belongs to.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "The beta of the ETF.", - "default": null, - "optional": true - }, - { - "name": "price", - "type": "float", - "description": "The current price.", - "default": null, - "optional": true - }, - { - "name": "last_annual_dividend", - "type": "float", - "description": "The last annual amount dividend paid.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The current trading volume.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The exchange code the asset trades on.", - "default": null, - "optional": true - }, - { - "name": "exchange_name", - "type": "str", - "description": "The full name of the primary exchange.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "The two-letter country abbreviation where the head office is located.", - "default": null, - "optional": true - }, - { - "name": "is_etf", - "type": "Literal[True, False]", - "description": "Whether the ticker is an ETF.", - "default": null, - "optional": true - }, - { - "name": "actively_trading", - "type": "Literal[True, False]", - "description": "Whether the ETF is actively trading.", - "default": null, - "optional": true - } - ] - }, - "model": "EquityScreener" - }, - "/equity/profile": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get general information about a company. This includes company name, industry, sector and price data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.profile(symbol='AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, yfinance.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EquityInfo]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Common name of the company.", - "default": null, - "optional": true - }, - { - "name": "cik", - "type": "str", - "description": "Central Index Key (CIK) for the requested entity.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "CUSIP identifier for the company.", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "International Securities Identification Number.", - "default": null, - "optional": true - }, - { - "name": "lei", - "type": "str", - "description": "Legal Entity Identifier assigned to the company.", - "default": null, - "optional": true - }, - { - "name": "legal_name", - "type": "str", - "description": "Official legal name of the company.", - "default": null, - "optional": true - }, - { - "name": "stock_exchange", - "type": "str", - "description": "Stock exchange where the company is traded.", - "default": null, - "optional": true - }, - { - "name": "sic", - "type": "int", - "description": "Standard Industrial Classification code for the company.", - "default": null, - "optional": true - }, - { - "name": "short_description", - "type": "str", - "description": "Short description of the company.", - "default": null, - "optional": true - }, - { - "name": "long_description", - "type": "str", - "description": "Long description of the company.", - "default": null, - "optional": true - }, - { - "name": "ceo", - "type": "str", - "description": "Chief Executive Officer of the company.", - "default": null, - "optional": true - }, - { - "name": "company_url", - "type": "str", - "description": "URL of the company's website.", - "default": null, - "optional": true - }, - { - "name": "business_address", - "type": "str", - "description": "Address of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "mailing_address", - "type": "str", - "description": "Mailing address of the company.", - "default": null, - "optional": true - }, - { - "name": "business_phone_no", - "type": "str", - "description": "Phone number of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "hq_address1", - "type": "str", - "description": "Address of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "hq_address2", - "type": "str", - "description": "Address of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "hq_address_city", - "type": "str", - "description": "City of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "hq_address_postal_code", - "type": "str", - "description": "Zip code of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "hq_state", - "type": "str", - "description": "State of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "hq_country", - "type": "str", - "description": "Country of the company's headquarters.", - "default": null, - "optional": true - }, - { - "name": "inc_state", - "type": "str", - "description": "State in which the company is incorporated.", - "default": null, - "optional": true - }, - { - "name": "inc_country", - "type": "str", - "description": "Country in which the company is incorporated.", - "default": null, - "optional": true - }, - { - "name": "employees", - "type": "int", - "description": "Number of employees working for the company.", - "default": null, - "optional": true - }, - { - "name": "entity_legal_form", - "type": "str", - "description": "Legal form of the company.", - "default": null, - "optional": true - }, - { - "name": "entity_status", - "type": "str", - "description": "Status of the company.", - "default": null, - "optional": true - }, - { - "name": "latest_filing_date", - "type": "date", - "description": "Date of the company's latest filing.", - "default": null, - "optional": true - }, - { - "name": "irs_number", - "type": "str", - "description": "IRS number assigned to the company.", - "default": null, - "optional": true - }, - { - "name": "sector", - "type": "str", - "description": "Sector in which the company operates.", - "default": null, - "optional": true - }, - { - "name": "industry_category", - "type": "str", - "description": "Category of industry in which the company operates.", - "default": null, - "optional": true - }, - { - "name": "industry_group", - "type": "str", - "description": "Group of industry in which the company operates.", - "default": null, - "optional": true - }, - { - "name": "template", - "type": "str", - "description": "Template used to standardize the company's financial statements.", - "default": null, - "optional": true - }, - { - "name": "standardized_active", - "type": "bool", - "description": "Whether the company is active or not.", - "default": null, - "optional": true - }, - { - "name": "first_fundamental_date", - "type": "date", - "description": "Date of the company's first fundamental.", - "default": null, - "optional": true - }, - { - "name": "last_fundamental_date", - "type": "date", - "description": "Date of the company's last fundamental.", - "default": null, - "optional": true - }, - { - "name": "first_stock_price_date", - "type": "date", - "description": "Date of the company's first stock price.", - "default": null, - "optional": true - }, - { - "name": "last_stock_price_date", - "type": "date", - "description": "Date of the company's last stock price.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "is_etf", - "type": "bool", - "description": "If the symbol is an ETF.", - "default": "", - "optional": false - }, - { - "name": "is_actively_trading", - "type": "bool", - "description": "If the company is actively trading.", - "default": "", - "optional": false - }, - { - "name": "is_adr", - "type": "bool", - "description": "If the stock is an ADR.", - "default": "", - "optional": false - }, - { - "name": "is_fund", - "type": "bool", - "description": "If the company is a fund.", - "default": "", - "optional": false - }, - { - "name": "image", - "type": "str", - "description": "Image of the company.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency in which the stock is traded.", - "default": null, - "optional": true - }, - { - "name": "market_cap", - "type": "int", - "description": "Market capitalization of the company.", - "default": null, - "optional": true - }, - { - "name": "last_price", - "type": "float", - "description": "The last traded price.", - "default": null, - "optional": true - }, - { - "name": "year_high", - "type": "float", - "description": "The one-year high of the price.", - "default": null, - "optional": true - }, - { - "name": "year_low", - "type": "float", - "description": "The one-year low of the price.", - "default": null, - "optional": true - }, - { - "name": "volume_avg", - "type": "int", - "description": "Average daily trading volume.", - "default": null, - "optional": true - }, - { - "name": "annualized_dividend_amount", - "type": "float", - "description": "The annualized dividend payment based on the most recent regular dividend payment.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "Beta of the stock relative to the market.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "id", - "type": "str", - "description": "Intrinio ID for the company.", - "default": null, - "optional": true - }, - { - "name": "thea_enabled", - "type": "bool", - "description": "Whether the company has been enabled for Thea.", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "exchange_timezone", - "type": "str", - "description": "The timezone of the exchange.", - "default": null, - "optional": true - }, - { - "name": "issue_type", - "type": "str", - "description": "The issuance type of the asset.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "The currency in which the asset is traded.", - "default": null, - "optional": true - }, - { - "name": "market_cap", - "type": "int", - "description": "The market capitalization of the asset.", - "default": null, - "optional": true - }, - { - "name": "shares_outstanding", - "type": "int", - "description": "The number of listed shares outstanding.", - "default": null, - "optional": true - }, - { - "name": "shares_float", - "type": "int", - "description": "The number of shares in the public float.", - "default": null, - "optional": true - }, - { - "name": "shares_implied_outstanding", - "type": "int", - "description": "Implied shares outstanding of common equityassuming the conversion of all convertible subsidiary equity into common.", - "default": null, - "optional": true - }, - { - "name": "shares_short", - "type": "int", - "description": "The reported number of shares short.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield", - "type": "float", - "description": "The dividend yield of the asset, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "The beta of the asset relative to the broad market.", - "default": null, - "optional": true - } - ] - }, - "model": "EquityInfo" - }, - "/equity/market_snapshots": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get an updated equity market snapshot. This includes price data for thousands of stocks.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.market_snapshots(provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "market", - "type": "Literal['amex', 'ams', 'ase', 'asx', 'ath', 'bme', 'bru', 'bud', 'bue', 'cai', 'cnq', 'cph', 'dfm', 'doh', 'etf', 'euronext', 'hel', 'hkse', 'ice', 'iob', 'ist', 'jkt', 'jnb', 'jpx', 'kls', 'koe', 'ksc', 'kuw', 'lse', 'mex', 'mutual_fund', 'nasdaq', 'neo', 'nse', 'nyse', 'nze', 'osl', 'otc', 'pnk', 'pra', 'ris', 'sao', 'sau', 'set', 'sgo', 'shh', 'shz', 'six', 'sto', 'tai', 'tlv', 'tsx', 'two', 'vie', 'wse', 'xetra']", - "description": "The market to fetch data for.", - "default": "nasdaq", - "optional": true - } - ], - "intrinio": [ - { - "name": "date", - "type": "Union[Union[date, datetime, str], str]", - "description": "The date of the data. Can be a datetime or an ISO datetime string. Historical data appears to go back to mid-June 2022. Example: '2024-03-08T12:15:00+0400'", - "default": null, - "optional": true - } - ], - "polygon": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[MarketSnapshots]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": null, - "optional": true - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": null, - "optional": true - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": null, - "optional": true - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "prev_close", - "type": "float", - "description": "The previous close price.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "The change in price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "The change in price from the previous close, as a normalized percent.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "last_price", - "type": "float", - "description": "The last price of the stock.", - "default": null, - "optional": true - }, - { - "name": "last_price_timestamp", - "type": "Union[date, datetime]", - "description": "The timestamp of the last price.", - "default": null, - "optional": true - }, - { - "name": "ma50", - "type": "float", - "description": "The 50-day moving average.", - "default": null, - "optional": true - }, - { - "name": "ma200", - "type": "float", - "description": "The 200-day moving average.", - "default": null, - "optional": true - }, - { - "name": "year_high", - "type": "float", - "description": "The 52-week high.", - "default": null, - "optional": true - }, - { - "name": "year_low", - "type": "float", - "description": "The 52-week low.", - "default": null, - "optional": true - }, - { - "name": "volume_avg", - "type": "int", - "description": "Average daily trading volume.", - "default": null, - "optional": true - }, - { - "name": "market_cap", - "type": "int", - "description": "Market cap of the stock.", - "default": null, - "optional": true - }, - { - "name": "eps", - "type": "float", - "description": "Earnings per share.", - "default": null, - "optional": true - }, - { - "name": "pe", - "type": "float", - "description": "Price to earnings ratio.", - "default": null, - "optional": true - }, - { - "name": "shares_outstanding", - "type": "int", - "description": "Number of shares outstanding.", - "default": null, - "optional": true - }, - { - "name": "name", - "type": "str", - "description": "The company name associated with the symbol.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The exchange of the stock.", - "default": null, - "optional": true - }, - { - "name": "earnings_date", - "type": "Union[date, datetime]", - "description": "The upcoming earnings announcement date.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "last_price", - "type": "float", - "description": "The last trade price.", - "default": null, - "optional": true - }, - { - "name": "last_size", - "type": "int", - "description": "The last trade size.", - "default": null, - "optional": true - }, - { - "name": "last_volume", - "type": "int", - "description": "The last trade volume.", - "default": null, - "optional": true - }, - { - "name": "last_trade_timestamp", - "type": "datetime", - "description": "The timestamp of the last trade.", - "default": null, - "optional": true - }, - { - "name": "bid_size", - "type": "int", - "description": "The size of the last bid price. Bid price and size is not always available.", - "default": null, - "optional": true - }, - { - "name": "bid_price", - "type": "float", - "description": "The last bid price. Bid price and size is not always available.", - "default": null, - "optional": true - }, - { - "name": "ask_price", - "type": "float", - "description": "The last ask price. Ask price and size is not always available.", - "default": null, - "optional": true - }, - { - "name": "ask_size", - "type": "int", - "description": "The size of the last ask price. Ask price and size is not always available.", - "default": null, - "optional": true - }, - { - "name": "last_bid_timestamp", - "type": "datetime", - "description": "The timestamp of the last bid price. Bid price and size is not always available.", - "default": null, - "optional": true - }, - { - "name": "last_ask_timestamp", - "type": "datetime", - "description": "The timestamp of the last ask price. Ask price and size is not always available.", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "vwap", - "type": "float", - "description": "The volume weighted average price of the stock on the current trading day.", - "default": null, - "optional": true - }, - { - "name": "prev_open", - "type": "float", - "description": "The previous trading session opening price.", - "default": null, - "optional": true - }, - { - "name": "prev_high", - "type": "float", - "description": "The previous trading session high price.", - "default": null, - "optional": true - }, - { - "name": "prev_low", - "type": "float", - "description": "The previous trading session low price.", - "default": null, - "optional": true - }, - { - "name": "prev_volume", - "type": "float", - "description": "The previous trading session volume.", - "default": null, - "optional": true - }, - { - "name": "prev_vwap", - "type": "float", - "description": "The previous trading session VWAP.", - "default": null, - "optional": true - }, - { - "name": "last_updated", - "type": "datetime", - "description": "The last time the data was updated.", - "default": "", - "optional": false - }, - { - "name": "bid", - "type": "float", - "description": "The current bid price.", - "default": null, - "optional": true - }, - { - "name": "bid_size", - "type": "int", - "description": "The current bid size.", - "default": null, - "optional": true - }, - { - "name": "ask_size", - "type": "int", - "description": "The current ask size.", - "default": null, - "optional": true - }, - { - "name": "ask", - "type": "float", - "description": "The current ask price.", - "default": null, - "optional": true - }, - { - "name": "quote_timestamp", - "type": "datetime", - "description": "The timestamp of the last quote.", - "default": null, - "optional": true - }, - { - "name": "last_trade_price", - "type": "float", - "description": "The last trade price.", - "default": null, - "optional": true - }, - { - "name": "last_trade_size", - "type": "int", - "description": "The last trade size.", - "default": null, - "optional": true - }, - { - "name": "last_trade_conditions", - "type": "List[int]", - "description": "The last trade condition codes.", - "default": null, - "optional": true - }, - { - "name": "last_trade_exchange", - "type": "int", - "description": "The last trade exchange ID code.", - "default": null, - "optional": true - }, - { - "name": "last_trade_timestamp", - "type": "datetime", - "description": "The last trade timestamp.", - "default": null, - "optional": true - } - ] - }, - "model": "MarketSnapshots" - }, - "/etf/search": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Search for ETFs.\n\nAn empty query returns the full list of ETFs from the provider.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\n# An empty query returns the full list of ETFs from the provider.\nobb.etf.search(provider='fmp')\n# The query will return results from text-based fields containing the term.\nobb.etf.search(query='commercial real estate', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Search query.", - "default": "", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "exchange", - "type": "Literal['AMEX', 'NYSE', 'NASDAQ', 'ETF', 'TSX', 'EURONEXT']", - "description": "The exchange code the ETF trades on.", - "default": null, - "optional": true - }, - { - "name": "is_active", - "type": "Literal[True, False]", - "description": "Whether the ETF is actively trading.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "exchange", - "type": "Literal['xnas', 'arcx', 'bats', 'xnys', 'bvmf', 'xshg', 'xshe', 'xhkg', 'xbom', 'xnse', 'xidx', 'tase', 'xkrx', 'xkls', 'xmex', 'xses', 'roco', 'xtai', 'xbkk', 'xist']", - "description": "Target a specific exchange by providing the MIC code.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfSearch]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.(ETF)", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the ETF.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "market_cap", - "type": "float", - "description": "The market cap of the ETF.", - "default": null, - "optional": true - }, - { - "name": "sector", - "type": "str", - "description": "The sector of the ETF.", - "default": null, - "optional": true - }, - { - "name": "industry", - "type": "str", - "description": "The industry of the ETF.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "The beta of the ETF.", - "default": null, - "optional": true - }, - { - "name": "price", - "type": "float", - "description": "The current price of the ETF.", - "default": null, - "optional": true - }, - { - "name": "last_annual_dividend", - "type": "float", - "description": "The last annual dividend paid.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "float", - "description": "The current trading volume of the ETF.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The exchange code the ETF trades on.", - "default": null, - "optional": true - }, - { - "name": "exchange_name", - "type": "str", - "description": "The full name of the exchange the ETF trades on.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "The country the ETF is registered in.", - "default": null, - "optional": true - }, - { - "name": "actively_trading", - "type": "Literal[True, False]", - "description": "Whether the ETF is actively trading.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "exchange", - "type": "str", - "description": "The exchange MIC code.", - "default": null, - "optional": true - }, - { - "name": "figi_ticker", - "type": "str", - "description": "The OpenFIGI ticker.", - "default": null, - "optional": true - }, - { - "name": "ric", - "type": "str", - "description": "The Reuters Instrument Code.", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "The International Securities Identification Number.", - "default": null, - "optional": true - }, - { - "name": "sedol", - "type": "str", - "description": "The Stock Exchange Daily Official List.", - "default": null, - "optional": true - }, - { - "name": "intrinio_id", - "type": "str", - "description": "The unique Intrinio ID for the security.", - "default": null, - "optional": true - } - ] - }, - "model": "EtfSearch" - }, - "/etf/historical": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "ETF Historical Market Price.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.historical(symbol='SPY', provider='fmp')\nobb.etf.historical(symbol='SPY', provider='yfinance')\n# This function accepts multiple tickers.\nobb.etf.historical(symbol='SPY,IWM,QQQ,DJIA', provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", - "default": "", - "optional": false - }, - { - "name": "interval", - "type": "str", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "start_time", - "type": "datetime.time", - "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'.", - "default": null, - "optional": true - }, - { - "name": "end_time", - "type": "datetime.time", - "description": "Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'.", - "default": null, - "optional": true - }, - { - "name": "timezone", - "type": "str", - "description": "Timezone of the data, in the IANA format (Continent/City).", - "default": "America/New_York", - "optional": true - }, - { - "name": "source", - "type": "Literal['realtime', 'delayed', 'nasdaq_basic']", - "description": "The source of the data.", - "default": "realtime", - "optional": true - } - ], - "polygon": [ - { - "name": "adjustment", - "type": "Literal['splits_only', 'unadjusted']", - "description": "The adjustment factor to apply. Default is splits only.", - "default": "splits_only", - "optional": true - }, - { - "name": "extended_hours", - "type": "bool", - "description": "Include Pre and Post market data.", - "default": false, - "optional": true - }, - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", - "default": "asc", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 49999, - "optional": true - } - ], - "tiingo": [], - "yfinance": [ - { - "name": "extended_hours", - "type": "bool", - "description": "Include Pre and Post market data.", - "default": false, - "optional": true - }, - { - "name": "include_actions", - "type": "bool", - "description": "Include dividends and stock splits in results.", - "default": true, - "optional": true - }, - { - "name": "adjustment", - "type": "Literal['splits_only', 'splits_and_dividends']", - "description": "The adjustment factor to apply. Default is splits only.", - "default": "splits_only", - "optional": true - }, - { - "name": "adjusted", - "type": "bool", - "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'adjustment' set as 'splits_and_dividends' instead.", - "default": false, - "optional": true - }, - { - "name": "prepost", - "type": "bool", - "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'extended_hours' as True instead.", - "default": false, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfHistorical]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "Union[date, datetime]", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "float", - "description": "The open price.", - "default": "", - "optional": false - }, - { - "name": "high", - "type": "float", - "description": "The high price.", - "default": "", - "optional": false - }, - { - "name": "low", - "type": "float", - "description": "The low price.", - "default": "", - "optional": false - }, - { - "name": "close", - "type": "float", - "description": "The close price.", - "default": "", - "optional": false - }, - { - "name": "volume", - "type": "Union[float, int]", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "vwap", - "type": "float", - "description": "Volume Weighted Average Price over the period.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "unadjusted_volume", - "type": "float", - "description": "Unadjusted volume of the symbol.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change in the price from the previous close, as a normalized percent.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "average", - "type": "float", - "description": "Average trade price of an individual equity during the interval.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price of the symbol from the previous day.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Percent change in the price of the symbol from the previous day.", - "default": null, - "optional": true - }, - { - "name": "adj_open", - "type": "float", - "description": "The adjusted open price.", - "default": null, - "optional": true - }, - { - "name": "adj_high", - "type": "float", - "description": "The adjusted high price.", - "default": null, - "optional": true - }, - { - "name": "adj_low", - "type": "float", - "description": "The adjusted low price.", - "default": null, - "optional": true - }, - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "adj_volume", - "type": "float", - "description": "The adjusted volume.", - "default": null, - "optional": true - }, - { - "name": "fifty_two_week_high", - "type": "float", - "description": "52 week high price for the symbol.", - "default": null, - "optional": true - }, - { - "name": "fifty_two_week_low", - "type": "float", - "description": "52 week low price for the symbol.", - "default": null, - "optional": true - }, - { - "name": "factor", - "type": "float", - "description": "factor by which to multiply equity prices before this date, in order to calculate historically-adjusted equity prices.", - "default": null, - "optional": true - }, - { - "name": "split_ratio", - "type": "float", - "description": "Ratio of the equity split, if a split occurred.", - "default": null, - "optional": true - }, - { - "name": "dividend", - "type": "float", - "description": "Dividend amount, if a dividend was paid.", - "default": null, - "optional": true - }, - { - "name": "close_time", - "type": "datetime", - "description": "The timestamp that represents the end of the interval span.", - "default": null, - "optional": true - }, - { - "name": "interval", - "type": "str", - "description": "The data time frequency.", - "default": null, - "optional": true - }, - { - "name": "intra_period", - "type": "bool", - "description": "If true, the equity price represents an unfinished period (be it day, week, quarter, month, or year), meaning that the close price is the latest price available, not the official close price for the period", - "default": null, - "optional": true - } - ], - "polygon": [ - { - "name": "transactions", - "type": "Annotated[int, Gt(gt=0)]", - "description": "Number of transactions for the symbol in the time period.", - "default": null, - "optional": true - } - ], - "tiingo": [ - { - "name": "adj_open", - "type": "float", - "description": "The adjusted open price.", - "default": null, - "optional": true - }, - { - "name": "adj_high", - "type": "float", - "description": "The adjusted high price.", - "default": null, - "optional": true - }, - { - "name": "adj_low", - "type": "float", - "description": "The adjusted low price.", - "default": null, - "optional": true - }, - { - "name": "adj_close", - "type": "float", - "description": "The adjusted close price.", - "default": null, - "optional": true - }, - { - "name": "adj_volume", - "type": "float", - "description": "The adjusted volume.", - "default": null, - "optional": true - }, - { - "name": "split_ratio", - "type": "float", - "description": "Ratio of the equity split, if a split occurred.", - "default": null, - "optional": true - }, - { - "name": "dividend", - "type": "float", - "description": "Dividend amount, if a dividend was paid.", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "split_ratio", - "type": "float", - "description": "Ratio of the equity split, if a split occurred.", - "default": null, - "optional": true - }, - { - "name": "dividend", - "type": "float", - "description": "Dividend amount (split-adjusted), if a dividend was paid.", - "default": null, - "optional": true - } - ] - }, - "model": "EtfHistorical" - }, - "/etf/info": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "ETF Information Overview.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.info(symbol='SPY', provider='fmp')\n# This function accepts multiple tickers.\nobb.etf.info(symbol='SPY,IWM,QQQ,DJIA', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp, intrinio, yfinance.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfInfo]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data. (ETF)", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the ETF.", - "default": "", - "optional": false - }, - { - "name": "description", - "type": "str", - "description": "Description of the fund.", - "default": null, - "optional": true - }, - { - "name": "inception_date", - "type": "str", - "description": "Inception date of the ETF.", - "default": "", - "optional": false - } - ], - "fmp": [ - { - "name": "issuer", - "type": "str", - "description": "Company of the ETF.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "CUSIP of the ETF.", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "ISIN of the ETF.", - "default": null, - "optional": true - }, - { - "name": "domicile", - "type": "str", - "description": "Domicile of the ETF.", - "default": null, - "optional": true - }, - { - "name": "asset_class", - "type": "str", - "description": "Asset class of the ETF.", - "default": null, - "optional": true - }, - { - "name": "aum", - "type": "float", - "description": "Assets under management.", - "default": null, - "optional": true - }, - { - "name": "nav", - "type": "float", - "description": "Net asset value of the ETF.", - "default": null, - "optional": true - }, - { - "name": "nav_currency", - "type": "str", - "description": "Currency of the ETF's net asset value.", - "default": null, - "optional": true - }, - { - "name": "expense_ratio", - "type": "float", - "description": "The expense ratio, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "holdings_count", - "type": "int", - "description": "Number of holdings.", - "default": null, - "optional": true - }, - { - "name": "avg_volume", - "type": "float", - "description": "Average daily trading volume.", - "default": null, - "optional": true - }, - { - "name": "website", - "type": "str", - "description": "Website of the issuer.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "fund_listing_date", - "type": "date", - "description": "The date on which the Exchange Traded Product (ETP) or share class of the ETP is listed on a specific exchange.", - "default": null, - "optional": true - }, - { - "name": "data_change_date", - "type": "date", - "description": "The last date on which there was a change in a classifications data field for this ETF.", - "default": null, - "optional": true - }, - { - "name": "etn_maturity_date", - "type": "date", - "description": "If the product is an ETN, this field identifies the maturity date for the ETN.", - "default": null, - "optional": true - }, - { - "name": "is_listed", - "type": "bool", - "description": "If true, the ETF is still listed on an exchange.", - "default": null, - "optional": true - }, - { - "name": "close_date", - "type": "date", - "description": "The date on which the ETF was de-listed if it is no longer listed.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The exchange Market Identifier Code (MIC).", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "International Securities Identification Number (ISIN).", - "default": null, - "optional": true - }, - { - "name": "ric", - "type": "str", - "description": "Reuters Instrument Code (RIC).", - "default": null, - "optional": true - }, - { - "name": "sedol", - "type": "str", - "description": "Stock Exchange Daily Official List (SEDOL).", - "default": null, - "optional": true - }, - { - "name": "figi_symbol", - "type": "str", - "description": "Financial Instrument Global Identifier (FIGI) symbol.", - "default": null, - "optional": true - }, - { - "name": "share_class_figi", - "type": "str", - "description": "Financial Instrument Global Identifier (FIGI).", - "default": null, - "optional": true - }, - { - "name": "firstbridge_id", - "type": "str", - "description": "The FirstBridge unique identifier for the Exchange Traded Fund (ETF).", - "default": null, - "optional": true - }, - { - "name": "firstbridge_parent_id", - "type": "str", - "description": "The FirstBridge unique identifier for the parent Exchange Traded Fund (ETF), if applicable.", - "default": null, - "optional": true - }, - { - "name": "intrinio_id", - "type": "str", - "description": "Intrinio unique identifier for the security.", - "default": null, - "optional": true - }, - { - "name": "intraday_nav_symbol", - "type": "str", - "description": "Intraday Net Asset Value (NAV) symbol.", - "default": null, - "optional": true - }, - { - "name": "primary_symbol", - "type": "str", - "description": "The primary ticker field is used for Exchange Traded Products (ETPs) that have multiple listings and share classes. If an ETP has multiple listings or share classes, the same primary ticker is assigned to all the listings and share classes.", - "default": null, - "optional": true - }, - { - "name": "etp_structure_type", - "type": "str", - "description": "Classifies Exchange Traded Products (ETPs) into very broad categories based on its legal structure.", - "default": null, - "optional": true - }, - { - "name": "legal_structure", - "type": "str", - "description": "Legal structure of the fund.", - "default": null, - "optional": true - }, - { - "name": "issuer", - "type": "str", - "description": "Issuer of the ETF.", - "default": null, - "optional": true - }, - { - "name": "etn_issuing_bank", - "type": "str", - "description": "If the product is an Exchange Traded Note (ETN), this field identifies the issuing bank.", - "default": null, - "optional": true - }, - { - "name": "fund_family", - "type": "str", - "description": "This field identifies the fund family to which the ETF belongs, as categorized by the ETF Sponsor.", - "default": null, - "optional": true - }, - { - "name": "investment_style", - "type": "str", - "description": "Investment style of the ETF.", - "default": null, - "optional": true - }, - { - "name": "derivatives_based", - "type": "str", - "description": "This field is populated if the ETF holds either listed or over-the-counter derivatives in its portfolio.", - "default": null, - "optional": true - }, - { - "name": "income_category", - "type": "str", - "description": "Identifies if an Exchange Traded Fund (ETF) falls into a category that is specifically designed to provide a high yield or income", - "default": null, - "optional": true - }, - { - "name": "asset_class", - "type": "str", - "description": "Captures the underlying nature of the securities in the Exchanged Traded Product (ETP).", - "default": null, - "optional": true - }, - { - "name": "other_asset_types", - "type": "str", - "description": "If 'asset_class' field is classified as 'Other Asset Types' this field captures the specific category of the underlying assets.", - "default": null, - "optional": true - }, - { - "name": "single_category_designation", - "type": "str", - "description": "This categorization is created for those users who want every ETF to be 'forced' into a single bucket, so that the assets for all categories will always sum to the total market.", - "default": null, - "optional": true - }, - { - "name": "beta_type", - "type": "str", - "description": "This field identifies whether an ETF provides 'Traditional' beta exposure or 'Smart' beta exposure. ETFs that are active (i.e. non-indexed), leveraged / inverse or have a proprietary quant model (i.e. that don't provide indexed exposure to a targeted factor) are classified separately.", - "default": null, - "optional": true - }, - { - "name": "beta_details", - "type": "str", - "description": "This field provides further detail within the traditional and smart beta categories.", - "default": null, - "optional": true - }, - { - "name": "market_cap_range", - "type": "str", - "description": "Equity ETFs are classified as falling into categories based on the description of their investment strategy in the prospectus. Examples ('Mega Cap', 'Large Cap', 'Mid Cap', etc.)", - "default": null, - "optional": true - }, - { - "name": "market_cap_weighting_type", - "type": "str", - "description": "For ETFs that take the value 'Market Cap Weighted' in the 'index_weighting_scheme' field, this field provides detail on the market cap weighting type.", - "default": null, - "optional": true - }, - { - "name": "index_weighting_scheme", - "type": "str", - "description": "For ETFs that track an underlying index, this field provides detail on the index weighting type.", - "default": null, - "optional": true - }, - { - "name": "index_linked", - "type": "str", - "description": "This field identifies whether an ETF is index linked or active.", - "default": null, - "optional": true - }, - { - "name": "index_name", - "type": "str", - "description": "This field identifies the name of the underlying index tracked by the ETF, if applicable.", - "default": null, - "optional": true - }, - { - "name": "index_symbol", - "type": "str", - "description": "This field identifies the OpenFIGI ticker for the Index underlying the ETF.", - "default": null, - "optional": true - }, - { - "name": "parent_index", - "type": "str", - "description": "This field identifies the name of the parent index, which represents the broader universe from which the index underlying the ETF is created, if applicable.", - "default": null, - "optional": true - }, - { - "name": "index_family", - "type": "str", - "description": "This field identifies the index family to which the index underlying the ETF belongs. The index family is represented as categorized by the index provider.", - "default": null, - "optional": true - }, - { - "name": "broader_index_family", - "type": "str", - "description": "This field identifies the broader index family to which the index underlying the ETF belongs. The broader index family is represented as categorized by the index provider.", - "default": null, - "optional": true - }, - { - "name": "index_provider", - "type": "str", - "description": "This field identifies the Index provider for the index underlying the ETF, if applicable.", - "default": null, - "optional": true - }, - { - "name": "index_provider_code", - "type": "str", - "description": "This field provides the First Bridge code for each Index provider, corresponding to the index underlying the ETF if applicable.", - "default": null, - "optional": true - }, - { - "name": "replication_structure", - "type": "str", - "description": "The replication structure of the Exchange Traded Product (ETP).", - "default": null, - "optional": true - }, - { - "name": "growth_value_tilt", - "type": "str", - "description": "Classifies equity ETFs as either 'Growth' or Value' based on the stated style tilt in the ETF prospectus. Equity ETFs that do not have a stated style tilt are classified as 'Core / Blend'.", - "default": null, - "optional": true - }, - { - "name": "growth_type", - "type": "str", - "description": "For ETFs that are classified as 'Growth' in 'growth_value_tilt', this field further identifies those where the stocks in the ETF are both selected and weighted based on their growth (style factor) scores.", - "default": null, - "optional": true - }, - { - "name": "value_type", - "type": "str", - "description": "For ETFs that are classified as 'Value' in 'growth_value_tilt', this field further identifies those where the stocks in the ETF are both selected and weighted based on their value (style factor) scores.", - "default": null, - "optional": true - }, - { - "name": "sector", - "type": "str", - "description": "For equity ETFs that aim to provide targeted exposure to a sector or industry, this field identifies the Sector that it provides the exposure to.", - "default": null, - "optional": true - }, - { - "name": "industry", - "type": "str", - "description": "For equity ETFs that aim to provide targeted exposure to an industry, this field identifies the Industry that it provides the exposure to.", - "default": null, - "optional": true - }, - { - "name": "industry_group", - "type": "str", - "description": "For equity ETFs that aim to provide targeted exposure to a sub-industry, this field identifies the sub-Industry that it provides the exposure to.", - "default": null, - "optional": true - }, - { - "name": "cross_sector_theme", - "type": "str", - "description": "For equity ETFs that aim to provide targeted exposure to a specific investment theme that cuts across GICS sectors, this field identifies the specific cross-sector theme. Examples ('Agri-business', 'Natural Resources', 'Green Investing', etc.)", - "default": null, - "optional": true - }, - { - "name": "natural_resources_type", - "type": "str", - "description": "For ETFs that are classified as 'Natural Resources' in the 'cross_sector_theme' field, this field provides further detail on the type of Natural Resources exposure.", - "default": null, - "optional": true - }, - { - "name": "us_or_excludes_us", - "type": "str", - "description": "Takes the value of 'Domestic' for US exposure, 'International' for non-US exposure and 'Global' for exposure that includes all regions including the US.", - "default": null, - "optional": true - }, - { - "name": "developed_emerging", - "type": "str", - "description": "This field identifies the stage of development of the markets that the ETF provides exposure to.", - "default": null, - "optional": true - }, - { - "name": "specialized_region", - "type": "str", - "description": "This field is populated if the ETF provides targeted exposure to a specific type of geography-based grouping that does not fall into a specific country or continent grouping. Examples ('BRIC', 'Chindia', etc.)", - "default": null, - "optional": true - }, - { - "name": "continent", - "type": "str", - "description": "This field is populated if the ETF provides targeted exposure to a specific continent or country within that Continent.", - "default": null, - "optional": true - }, - { - "name": "latin_america_sub_group", - "type": "str", - "description": "For ETFs that are classified as 'Latin America' in the 'continent' field, this field provides further detail on the type of regional exposure.", - "default": null, - "optional": true - }, - { - "name": "europe_sub_group", - "type": "str", - "description": "For ETFs that are classified as 'Europe' in the 'continent' field, this field provides further detail on the type of regional exposure.", - "default": null, - "optional": true - }, - { - "name": "asia_sub_group", - "type": "str", - "description": "For ETFs that are classified as 'Asia' in the 'continent' field, this field provides further detail on the type of regional exposure.", - "default": null, - "optional": true - }, - { - "name": "specific_country", - "type": "str", - "description": "This field is populated if the ETF provides targeted exposure to a specific country.", - "default": null, - "optional": true - }, - { - "name": "china_listing_location", - "type": "str", - "description": "For ETFs that are classified as 'China' in the 'country' field, this field provides further detail on the type of exposure in the underlying securities.", - "default": null, - "optional": true - }, - { - "name": "us_state", - "type": "str", - "description": "Takes the value of a US state if the ETF provides targeted exposure to the municipal bonds or equities of companies.", - "default": null, - "optional": true - }, - { - "name": "real_estate", - "type": "str", - "description": "For ETFs that provide targeted real estate exposure, this field is populated if the ETF provides targeted exposure to a specific segment of the real estate market.", - "default": null, - "optional": true - }, - { - "name": "fundamental_weighting_type", - "type": "str", - "description": "For ETFs that take the value 'Fundamental Weighted' in the 'index_weighting_scheme' field, this field provides detail on the fundamental weighting methodology.", - "default": null, - "optional": true - }, - { - "name": "dividend_weighting_type", - "type": "str", - "description": "For ETFs that take the value 'Dividend Weighted' in the 'index_weighting_scheme' field, this field provides detail on the dividend weighting methodology.", - "default": null, - "optional": true - }, - { - "name": "bond_type", - "type": "str", - "description": "For ETFs where 'asset_class_type' is 'Bonds', this field provides detail on the type of bonds held in the ETF.", - "default": null, - "optional": true - }, - { - "name": "government_bond_types", - "type": "str", - "description": "For bond ETFs that take the value 'Treasury & Government' in 'bond_type', this field provides detail on the exposure.", - "default": null, - "optional": true - }, - { - "name": "municipal_bond_region", - "type": "str", - "description": "For bond ETFs that take the value 'Municipal' in 'bond_type', this field provides additional detail on the geographic exposure.", - "default": null, - "optional": true - }, - { - "name": "municipal_vrdo", - "type": "bool", - "description": "For bond ETFs that take the value 'Municipal' in 'bond_type', this field identifies those ETFs that specifically provide exposure to Variable Rate Demand Obligations.", - "default": null, - "optional": true - }, - { - "name": "mortgage_bond_types", - "type": "str", - "description": "For bond ETFs that take the value 'Mortgage' in 'bond_type', this field provides additional detail on the type of underlying securities.", - "default": null, - "optional": true - }, - { - "name": "bond_tax_status", - "type": "str", - "description": "For all US bond ETFs, this field provides additional detail on the tax treatment of the underlying securities.", - "default": null, - "optional": true - }, - { - "name": "credit_quality", - "type": "str", - "description": "For all bond ETFs, this field helps to identify if the ETF provides targeted exposure to securities of a specific credit quality range.", - "default": null, - "optional": true - }, - { - "name": "average_maturity", - "type": "str", - "description": "For all bond ETFs, this field helps to identify if the ETF provides targeted exposure to securities of a specific maturity range.", - "default": null, - "optional": true - }, - { - "name": "specific_maturity_year", - "type": "int", - "description": "For all bond ETFs that take the value 'Specific Maturity Year' in the 'average_maturity' field, this field specifies the calendar year.", - "default": null, - "optional": true - }, - { - "name": "commodity_types", - "type": "str", - "description": "For ETFs where 'asset_class_type' is 'Commodities', this field provides detail on the type of commodities held in the ETF.", - "default": null, - "optional": true - }, - { - "name": "energy_type", - "type": "str", - "description": "For ETFs where 'commodity_type' is 'Energy', this field provides detail on the type of energy exposure provided by the ETF.", - "default": null, - "optional": true - }, - { - "name": "agricultural_type", - "type": "str", - "description": "For ETFs where 'commodity_type' is 'Agricultural', this field provides detail on the type of agricultural exposure provided by the ETF.", - "default": null, - "optional": true - }, - { - "name": "livestock_type", - "type": "str", - "description": "For ETFs where 'commodity_type' is 'Livestock', this field provides detail on the type of livestock exposure provided by the ETF.", - "default": null, - "optional": true - }, - { - "name": "metal_type", - "type": "str", - "description": "For ETFs where 'commodity_type' is 'Gold & Metals', this field provides detail on the type of exposure provided by the ETF.", - "default": null, - "optional": true - }, - { - "name": "inverse_leveraged", - "type": "str", - "description": "This field is populated if the ETF provides inverse or leveraged exposure.", - "default": null, - "optional": true - }, - { - "name": "target_date_multi_asset_type", - "type": "str", - "description": "For ETFs where 'asset_class_type' is 'Target Date / MultiAsset', this field provides detail on the type of commodities held in the ETF.", - "default": null, - "optional": true - }, - { - "name": "currency_pair", - "type": "str", - "description": "This field is populated if the ETF's strategy involves providing exposure to the movements of a currency or involves hedging currency exposure.", - "default": null, - "optional": true - }, - { - "name": "social_environmental_type", - "type": "str", - "description": "This field is populated if the ETF's strategy involves providing exposure to a specific social or environmental theme.", - "default": null, - "optional": true - }, - { - "name": "clean_energy_type", - "type": "str", - "description": "This field is populated if the ETF has a value of 'Clean Energy' in the 'social_environmental_type' field.", - "default": null, - "optional": true - }, - { - "name": "dividend_type", - "type": "str", - "description": "This field is populated if the ETF has an intended investment objective of holding dividend-oriented stocks as stated in the prospectus.", - "default": null, - "optional": true - }, - { - "name": "regular_dividend_payor_type", - "type": "str", - "description": "This field is populated if the ETF has a value of'Dividend - Regular Payors' in the 'dividend_type' field.", - "default": null, - "optional": true - }, - { - "name": "quant_strategies_type", - "type": "str", - "description": "This field is populated if the ETF has either an index-linked or active strategy that is based on a proprietary quantitative strategy.", - "default": null, - "optional": true - }, - { - "name": "other_quant_models", - "type": "str", - "description": "For ETFs where 'quant_strategies_type' is 'Other Quant Model', this field provides the name of the specific proprietary quant model used as the underlying strategy for the ETF.", - "default": null, - "optional": true - }, - { - "name": "hedge_fund_type", - "type": "str", - "description": "For ETFs where 'other_asset_types' is 'Hedge Fund Replication', this field provides detail on the type of hedge fund replication strategy.", - "default": null, - "optional": true - }, - { - "name": "excludes_financials", - "type": "bool", - "description": "For equity ETFs, identifies those ETFs where the underlying fund holdings will not hold financials stocks, based on the funds intended objective.", - "default": null, - "optional": true - }, - { - "name": "excludes_technology", - "type": "bool", - "description": "For equity ETFs, identifies those ETFs where the underlying fund holdings will not hold technology stocks, based on the funds intended objective.", - "default": null, - "optional": true - }, - { - "name": "holds_only_nyse_stocks", - "type": "bool", - "description": "If true, the ETF is an equity ETF and holds only stocks listed on NYSE.", - "default": null, - "optional": true - }, - { - "name": "holds_only_nasdaq_stocks", - "type": "bool", - "description": "If true, the ETF is an equity ETF and holds only stocks listed on Nasdaq.", - "default": null, - "optional": true - }, - { - "name": "holds_mlp", - "type": "bool", - "description": "If true, the ETF's investment objective explicitly specifies that it holds MLPs as an intended part of its investment strategy.", - "default": null, - "optional": true - }, - { - "name": "holds_preferred_stock", - "type": "bool", - "description": "If true, the ETF's investment objective explicitly specifies that it holds preferred stock as an intended part of its investment strategy.", - "default": null, - "optional": true - }, - { - "name": "holds_closed_end_funds", - "type": "bool", - "description": "If true, the ETF's investment objective explicitly specifies that it holds closed end funds as an intended part of its investment strategy.", - "default": null, - "optional": true - }, - { - "name": "holds_adr", - "type": "bool", - "description": "If true, he ETF's investment objective explicitly specifies that it holds American Depositary Receipts (ADRs) as an intended part of its investment strategy.", - "default": null, - "optional": true - }, - { - "name": "laddered", - "type": "bool", - "description": "For bond ETFs, this field identifies those ETFs that specifically hold bonds in a laddered structure, where the bonds are scheduled to mature in an annual, sequential structure.", - "default": null, - "optional": true - }, - { - "name": "zero_coupon", - "type": "bool", - "description": "For bond ETFs, this field identifies those ETFs that specifically hold zero coupon Treasury Bills.", - "default": null, - "optional": true - }, - { - "name": "floating_rate", - "type": "bool", - "description": "For bond ETFs, this field identifies those ETFs that specifically hold floating rate bonds.", - "default": null, - "optional": true - }, - { - "name": "build_america_bonds", - "type": "bool", - "description": "For municipal bond ETFs, this field identifies those ETFs that specifically hold Build America Bonds.", - "default": null, - "optional": true - }, - { - "name": "dynamic_futures_roll", - "type": "bool", - "description": "If the product holds futures contracts, this field identifies those products where the roll strategy is dynamic (rather than entirely rules based), so as to minimize roll costs.", - "default": null, - "optional": true - }, - { - "name": "currency_hedged", - "type": "bool", - "description": "This field is populated if the ETF's strategy involves hedging currency exposure.", - "default": null, - "optional": true - }, - { - "name": "includes_short_exposure", - "type": "bool", - "description": "This field is populated if the ETF has short exposure in any of its holdings e.g. in a long/short or inverse ETF.", - "default": null, - "optional": true - }, - { - "name": "ucits", - "type": "bool", - "description": "If true, the Exchange Traded Product (ETP) is Undertakings for the Collective Investment in Transferable Securities (UCITS) compliant", - "default": null, - "optional": true - }, - { - "name": "registered_countries", - "type": "str", - "description": "The list of countries where the ETF is legally registered for sale. This may differ from where the ETF is domiciled or traded, particularly in Europe.", - "default": null, - "optional": true - }, - { - "name": "issuer_country", - "type": "str", - "description": "2 letter ISO country code for the country where the issuer is located.", - "default": null, - "optional": true - }, - { - "name": "domicile", - "type": "str", - "description": "2 letter ISO country code for the country where the ETP is domiciled.", - "default": null, - "optional": true - }, - { - "name": "listing_country", - "type": "str", - "description": "2 letter ISO country code for the country of the primary listing.", - "default": null, - "optional": true - }, - { - "name": "listing_region", - "type": "str", - "description": "Geographic region in the country of the primary listing falls.", - "default": null, - "optional": true - }, - { - "name": "bond_currency_denomination", - "type": "str", - "description": "For all bond ETFs, this field provides additional detail on the currency denomination of the underlying securities.", - "default": null, - "optional": true - }, - { - "name": "base_currency", - "type": "str", - "description": "Base currency in which NAV is reported.", - "default": null, - "optional": true - }, - { - "name": "listing_currency", - "type": "str", - "description": "Listing currency of the Exchange Traded Product (ETP) in which it is traded. Reported using the 3-digit ISO currency code.", - "default": null, - "optional": true - }, - { - "name": "number_of_holdings", - "type": "int", - "description": "The number of holdings in the ETF.", - "default": null, - "optional": true - }, - { - "name": "month_end_assets", - "type": "float", - "description": "Net assets in millions of dollars as of the most recent month end.", - "default": null, - "optional": true - }, - { - "name": "net_expense_ratio", - "type": "float", - "description": "Gross expense net of Fee Waivers, as a percentage of net assets as published by the ETF issuer.", - "default": null, - "optional": true - }, - { - "name": "etf_portfolio_turnover", - "type": "float", - "description": "The percentage of positions turned over in the last 12 months.", - "default": null, - "optional": true - } - ], - "yfinance": [ - { - "name": "fund_type", - "type": "str", - "description": "The legal type of fund.", - "default": null, - "optional": true - }, - { - "name": "fund_family", - "type": "str", - "description": "The fund family.", - "default": null, - "optional": true - }, - { - "name": "category", - "type": "str", - "description": "The fund category.", - "default": null, - "optional": true - }, - { - "name": "exchange", - "type": "str", - "description": "The exchange the fund is listed on.", - "default": null, - "optional": true - }, - { - "name": "exchange_timezone", - "type": "str", - "description": "The timezone of the exchange.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "The currency in which the fund is listed.", - "default": null, - "optional": true - }, - { - "name": "nav_price", - "type": "float", - "description": "The net asset value per unit of the fund.", - "default": null, - "optional": true - }, - { - "name": "total_assets", - "type": "int", - "description": "The total value of assets held by the fund.", - "default": null, - "optional": true - }, - { - "name": "trailing_pe", - "type": "float", - "description": "The trailing twelve month P/E ratio of the fund's assets.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield", - "type": "float", - "description": "The dividend yield of the fund, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "dividend_rate_ttm", - "type": "float", - "description": "The trailing twelve month annual dividend rate of the fund, in currency units.", - "default": null, - "optional": true - }, - { - "name": "dividend_yield_ttm", - "type": "float", - "description": "The trailing twelve month annual dividend yield of the fund, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "year_high", - "type": "float", - "description": "The fifty-two week high price.", - "default": null, - "optional": true - }, - { - "name": "year_low", - "type": "float", - "description": "The fifty-two week low price.", - "default": null, - "optional": true - }, - { - "name": "ma_50d", - "type": "float", - "description": "50-day moving average price.", - "default": null, - "optional": true - }, - { - "name": "ma_200d", - "type": "float", - "description": "200-day moving average price.", - "default": null, - "optional": true - }, - { - "name": "return_ytd", - "type": "float", - "description": "The year-to-date return of the fund, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "return_3y_avg", - "type": "float", - "description": "The three year average return of the fund, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "return_5y_avg", - "type": "float", - "description": "The five year average return of the fund, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "beta_3y_avg", - "type": "float", - "description": "The three year average beta of the fund.", - "default": null, - "optional": true - }, - { - "name": "volume_avg", - "type": "float", - "description": "The average daily trading volume of the fund.", - "default": null, - "optional": true - }, - { - "name": "volume_avg_10d", - "type": "float", - "description": "The average daily trading volume of the fund over the past ten days.", - "default": null, - "optional": true - }, - { - "name": "bid", - "type": "float", - "description": "The current bid price.", - "default": null, - "optional": true - }, - { - "name": "bid_size", - "type": "float", - "description": "The current bid size.", - "default": null, - "optional": true - }, - { - "name": "ask", - "type": "float", - "description": "The current ask price.", - "default": null, - "optional": true - }, - { - "name": "ask_size", - "type": "float", - "description": "The current ask size.", - "default": null, - "optional": true - }, - { - "name": "open", - "type": "float", - "description": "The open price of the most recent trading session.", - "default": null, - "optional": true - }, - { - "name": "high", - "type": "float", - "description": "The highest price of the most recent trading session.", - "default": null, - "optional": true - }, - { - "name": "low", - "type": "float", - "description": "The lowest price of the most recent trading session.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The trading volume of the most recent trading session.", - "default": null, - "optional": true - }, - { - "name": "prev_close", - "type": "float", - "description": "The previous closing price.", - "default": null, - "optional": true - } - ] - }, - "model": "EtfInfo" - }, - "/etf/sectors": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "ETF Sector weighting.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.sectors(symbol='SPY', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for. (ETF)", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfSectors]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "sector", - "type": "str", - "description": "Sector of exposure.", - "default": "", - "optional": false - }, - { - "name": "weight", - "type": "float", - "description": "Exposure of the ETF to the sector in normalized percentage points.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "EtfSectors" - }, - "/etf/countries": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "ETF Country weighting.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.countries(symbol='VT', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfCountries]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "country", - "type": "str", - "description": "The country of the exposure. Corresponding values are normalized percentage points.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "EtfCountries" - }, - "/etf/price_performance": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Price performance as a return, over different periods.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.price_performance(symbol='QQQ', provider='fmp')\nobb.etf.price_performance(symbol='SPY,QQQ,IWM,DJIA', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "return_type", - "type": "Literal['trailing', 'calendar']", - "description": "The type of returns to return, a trailing or calendar window.", - "default": "trailing", - "optional": true - }, - { - "name": "adjustment", - "type": "Literal['splits_only', 'splits_and_dividends']", - "description": "The adjustment factor, 'splits_only' will return pure price performance.", - "default": "splits_and_dividends", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfPricePerformance]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "one_day", - "type": "float", - "description": "One-day return.", - "default": null, - "optional": true - }, - { - "name": "wtd", - "type": "float", - "description": "Week to date return.", - "default": null, - "optional": true - }, - { - "name": "one_week", - "type": "float", - "description": "One-week return.", - "default": null, - "optional": true - }, - { - "name": "mtd", - "type": "float", - "description": "Month to date return.", - "default": null, - "optional": true - }, - { - "name": "one_month", - "type": "float", - "description": "One-month return.", - "default": null, - "optional": true - }, - { - "name": "qtd", - "type": "float", - "description": "Quarter to date return.", - "default": null, - "optional": true - }, - { - "name": "three_month", - "type": "float", - "description": "Three-month return.", - "default": null, - "optional": true - }, - { - "name": "six_month", - "type": "float", - "description": "Six-month return.", - "default": null, - "optional": true - }, - { - "name": "ytd", - "type": "float", - "description": "Year to date return.", - "default": null, - "optional": true - }, - { - "name": "one_year", - "type": "float", - "description": "One-year return.", - "default": null, - "optional": true - }, - { - "name": "two_year", - "type": "float", - "description": "Two-year return.", - "default": null, - "optional": true - }, - { - "name": "three_year", - "type": "float", - "description": "Three-year return.", - "default": null, - "optional": true - }, - { - "name": "four_year", - "type": "float", - "description": "Four-year", - "default": null, - "optional": true - }, - { - "name": "five_year", - "type": "float", - "description": "Five-year return.", - "default": null, - "optional": true - }, - { - "name": "ten_year", - "type": "float", - "description": "Ten-year return.", - "default": null, - "optional": true - }, - { - "name": "max", - "type": "float", - "description": "Return from the beginning of the time series.", - "default": null, - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "max_annualized", - "type": "float", - "description": "Annualized rate of return from inception.", - "default": null, - "optional": true - }, - { - "name": "volatility_one_year", - "type": "float", - "description": "Trailing one-year annualized volatility.", - "default": null, - "optional": true - }, - { - "name": "volatility_three_year", - "type": "float", - "description": "Trailing three-year annualized volatility.", - "default": null, - "optional": true - }, - { - "name": "volatility_five_year", - "type": "float", - "description": "Trailing five-year annualized volatility.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The trading volume.", - "default": null, - "optional": true - }, - { - "name": "volume_avg_30", - "type": "float", - "description": "The one-month average daily volume.", - "default": null, - "optional": true - }, - { - "name": "volume_avg_90", - "type": "float", - "description": "The three-month average daily volume.", - "default": null, - "optional": true - }, - { - "name": "volume_avg_180", - "type": "float", - "description": "The six-month average daily volume.", - "default": null, - "optional": true - }, - { - "name": "beta", - "type": "float", - "description": "Beta compared to the S&P 500.", - "default": null, - "optional": true - }, - { - "name": "nav", - "type": "float", - "description": "Net asset value per share.", - "default": null, - "optional": true - }, - { - "name": "year_high", - "type": "float", - "description": "The 52-week high price.", - "default": null, - "optional": true - }, - { - "name": "year_low", - "type": "float", - "description": "The 52-week low price.", - "default": null, - "optional": true - }, - { - "name": "market_cap", - "type": "float", - "description": "The market capitalization.", - "default": null, - "optional": true - }, - { - "name": "shares_outstanding", - "type": "int", - "description": "The number of shares outstanding.", - "default": null, - "optional": true - }, - { - "name": "updated", - "type": "date", - "description": "The date of the data.", - "default": null, - "optional": true - } - ] - }, - "model": "EtfPricePerformance" - }, - "/etf/holdings": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the holdings for an individual ETF.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.holdings(symbol='XLK', provider='fmp')\n# Including a date (FMP, SEC) will return the holdings as per NPORT-P filings.\nobb.etf.holdings(symbol='XLK', date=2022-03-31, provider='fmp')\n# The same data can be returned from the SEC directly.\nobb.etf.holdings(symbol='XLK', date=2022-03-31, provider='sec')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for. (ETF)", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "date", - "type": "Union[Union[str, date], str]", - "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF.", - "default": null, - "optional": true - }, - { - "name": "cik", - "type": "str", - "description": "The CIK of the filing entity. Overrides symbol.", - "default": null, - "optional": true - } - ], - "intrinio": [], - "sec": [ - { - "name": "date", - "type": "Union[Union[str, date], str]", - "description": "A specific date to get data for. The date represents the period ending. The date entered will return the closest filing.", - "default": null, - "optional": true - }, - { - "name": "use_cache", - "type": "bool", - "description": "Whether or not to use cache for the request.", - "default": true, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfHoldings]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data. (ETF)", - "default": null, - "optional": true - }, - { - "name": "name", - "type": "str", - "description": "Name of the ETF holding.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "lei", - "type": "str", - "description": "The LEI of the holding.", - "default": null, - "optional": true - }, - { - "name": "title", - "type": "str", - "description": "The title of the holding.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "The CUSIP of the holding.", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "The ISIN of the holding.", - "default": null, - "optional": true - }, - { - "name": "balance", - "type": "int", - "description": "The balance of the holding, in shares or units.", - "default": null, - "optional": true - }, - { - "name": "units", - "type": "Union[str, float]", - "description": "The type of units.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "The currency of the holding.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "The value of the holding, in dollars.", - "default": null, - "optional": true - }, - { - "name": "weight", - "type": "float", - "description": "The weight of the holding, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "payoff_profile", - "type": "str", - "description": "The payoff profile of the holding.", - "default": null, - "optional": true - }, - { - "name": "asset_category", - "type": "str", - "description": "The asset category of the holding.", - "default": null, - "optional": true - }, - { - "name": "issuer_category", - "type": "str", - "description": "The issuer category of the holding.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "The country of the holding.", - "default": null, - "optional": true - }, - { - "name": "is_restricted", - "type": "str", - "description": "Whether the holding is restricted.", - "default": null, - "optional": true - }, - { - "name": "fair_value_level", - "type": "int", - "description": "The fair value level of the holding.", - "default": null, - "optional": true - }, - { - "name": "is_cash_collateral", - "type": "str", - "description": "Whether the holding is cash collateral.", - "default": null, - "optional": true - }, - { - "name": "is_non_cash_collateral", - "type": "str", - "description": "Whether the holding is non-cash collateral.", - "default": null, - "optional": true - }, - { - "name": "is_loan_by_fund", - "type": "str", - "description": "Whether the holding is loan by fund.", - "default": null, - "optional": true - }, - { - "name": "cik", - "type": "str", - "description": "The CIK of the filing.", - "default": null, - "optional": true - }, - { - "name": "acceptance_datetime", - "type": "str", - "description": "The acceptance datetime of the filing.", - "default": null, - "optional": true - }, - { - "name": "updated", - "type": "Union[date, datetime]", - "description": "The date the data was updated.", - "default": null, - "optional": true - } - ], - "intrinio": [ - { - "name": "security_type", - "type": "str", - "description": "The type of instrument for this holding. Examples(Bond='BOND', Equity='EQUI')", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "The International Securities Identification Number.", - "default": null, - "optional": true - }, - { - "name": "ric", - "type": "str", - "description": "The Reuters Instrument Code.", - "default": null, - "optional": true - }, - { - "name": "sedol", - "type": "str", - "description": "The Stock Exchange Daily Official List.", - "default": null, - "optional": true - }, - { - "name": "share_class_figi", - "type": "str", - "description": "The OpenFIGI symbol for the holding.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "The country or region of the holding.", - "default": null, - "optional": true - }, - { - "name": "maturity_date", - "type": "date", - "description": "The maturity date for the debt security, if available.", - "default": null, - "optional": true - }, - { - "name": "contract_expiry_date", - "type": "date", - "description": "Expiry date for the futures contract held, if available.", - "default": null, - "optional": true - }, - { - "name": "coupon", - "type": "float", - "description": "The coupon rate of the debt security, if available.", - "default": null, - "optional": true - }, - { - "name": "balance", - "type": "Union[float, int]", - "description": "The number of units of the security held, if available.", - "default": null, - "optional": true - }, - { - "name": "unit", - "type": "str", - "description": "The units of the 'balance' field.", - "default": null, - "optional": true - }, - { - "name": "units_per_share", - "type": "float", - "description": "Number of units of the security held per share outstanding of the ETF, if available.", - "default": null, - "optional": true - }, - { - "name": "face_value", - "type": "float", - "description": "The face value of the debt security, if available.", - "default": null, - "optional": true - }, - { - "name": "derivatives_value", - "type": "float", - "description": "The notional value of derivatives contracts held.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "The market value of the holding, on the 'as_of' date.", - "default": null, - "optional": true - }, - { - "name": "weight", - "type": "float", - "description": "The weight of the holding, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "updated", - "type": "date", - "description": "The 'as_of' date for the holding.", - "default": null, - "optional": true - } - ], - "sec": [ - { - "name": "lei", - "type": "str", - "description": "The LEI of the holding.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "The CUSIP of the holding.", - "default": null, - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "The ISIN of the holding.", - "default": null, - "optional": true - }, - { - "name": "other_id", - "type": "str", - "description": "Internal identifier for the holding.", - "default": null, - "optional": true - }, - { - "name": "balance", - "type": "float", - "description": "The balance of the holding.", - "default": null, - "optional": true - }, - { - "name": "weight", - "type": "float", - "description": "The weight of the holding in ETF in %.", - "default": null, - "optional": true - }, - { - "name": "value", - "type": "float", - "description": "The value of the holding in USD.", - "default": null, - "optional": true - }, - { - "name": "payoff_profile", - "type": "str", - "description": "The payoff profile of the holding.", - "default": null, - "optional": true - }, - { - "name": "units", - "type": "Union[str, float]", - "description": "The units of the holding.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "The currency of the holding.", - "default": null, - "optional": true - }, - { - "name": "asset_category", - "type": "str", - "description": "The asset category of the holding.", - "default": null, - "optional": true - }, - { - "name": "issuer_category", - "type": "str", - "description": "The issuer category of the holding.", - "default": null, - "optional": true - }, - { - "name": "country", - "type": "str", - "description": "The country of the holding.", - "default": null, - "optional": true - }, - { - "name": "is_restricted", - "type": "str", - "description": "Whether the holding is restricted.", - "default": null, - "optional": true - }, - { - "name": "fair_value_level", - "type": "int", - "description": "The fair value level of the holding.", - "default": null, - "optional": true - }, - { - "name": "is_cash_collateral", - "type": "str", - "description": "Whether the holding is cash collateral.", - "default": null, - "optional": true - }, - { - "name": "is_non_cash_collateral", - "type": "str", - "description": "Whether the holding is non-cash collateral.", - "default": null, - "optional": true - }, - { - "name": "is_loan_by_fund", - "type": "str", - "description": "Whether the holding is loan by fund.", - "default": null, - "optional": true - }, - { - "name": "loan_value", - "type": "float", - "description": "The loan value of the holding.", - "default": null, - "optional": true - }, - { - "name": "issuer_conditional", - "type": "str", - "description": "The issuer conditions of the holding.", - "default": null, - "optional": true - }, - { - "name": "asset_conditional", - "type": "str", - "description": "The asset conditions of the holding.", - "default": null, - "optional": true - }, - { - "name": "maturity_date", - "type": "date", - "description": "The maturity date of the debt security.", - "default": null, - "optional": true - }, - { - "name": "coupon_kind", - "type": "str", - "description": "The type of coupon for the debt security.", - "default": null, - "optional": true - }, - { - "name": "rate_type", - "type": "str", - "description": "The type of rate for the debt security, floating or fixed.", - "default": null, - "optional": true - }, - { - "name": "annualized_return", - "type": "float", - "description": "The annualized return on the debt security.", - "default": null, - "optional": true - }, - { - "name": "is_default", - "type": "str", - "description": "If the debt security is defaulted.", - "default": null, - "optional": true - }, - { - "name": "in_arrears", - "type": "str", - "description": "If the debt security is in arrears.", - "default": null, - "optional": true - }, - { - "name": "is_paid_kind", - "type": "str", - "description": "If the debt security payments are paid in kind.", - "default": null, - "optional": true - }, - { - "name": "derivative_category", - "type": "str", - "description": "The derivative category of the holding.", - "default": null, - "optional": true - }, - { - "name": "counterparty", - "type": "str", - "description": "The counterparty of the derivative.", - "default": null, - "optional": true - }, - { - "name": "underlying_name", - "type": "str", - "description": "The name of the underlying asset associated with the derivative.", - "default": null, - "optional": true - }, - { - "name": "option_type", - "type": "str", - "description": "The type of option.", - "default": null, - "optional": true - }, - { - "name": "derivative_payoff", - "type": "str", - "description": "The payoff profile of the derivative.", - "default": null, - "optional": true - }, - { - "name": "expiry_date", - "type": "date", - "description": "The expiry or termination date of the derivative.", - "default": null, - "optional": true - }, - { - "name": "exercise_price", - "type": "float", - "description": "The exercise price of the option.", - "default": null, - "optional": true - }, - { - "name": "exercise_currency", - "type": "str", - "description": "The currency of the option exercise price.", - "default": null, - "optional": true - }, - { - "name": "shares_per_contract", - "type": "float", - "description": "The number of shares per contract.", - "default": null, - "optional": true - }, - { - "name": "delta", - "type": "Union[str, float]", - "description": "The delta of the option.", - "default": null, - "optional": true - }, - { - "name": "rate_type_rec", - "type": "str", - "description": "The type of rate for reveivable portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "receive_currency", - "type": "str", - "description": "The receive currency of the swap.", - "default": null, - "optional": true - }, - { - "name": "upfront_receive", - "type": "float", - "description": "The upfront amount received of the swap.", - "default": null, - "optional": true - }, - { - "name": "floating_rate_index_rec", - "type": "str", - "description": "The floating rate index for reveivable portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "floating_rate_spread_rec", - "type": "float", - "description": "The floating rate spread for reveivable portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "rate_tenor_rec", - "type": "str", - "description": "The rate tenor for reveivable portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "rate_tenor_unit_rec", - "type": "Union[int, str]", - "description": "The rate tenor unit for reveivable portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "reset_date_rec", - "type": "str", - "description": "The reset date for reveivable portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "reset_date_unit_rec", - "type": "Union[int, str]", - "description": "The reset date unit for reveivable portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "rate_type_pmnt", - "type": "str", - "description": "The type of rate for payment portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "payment_currency", - "type": "str", - "description": "The payment currency of the swap.", - "default": null, - "optional": true - }, - { - "name": "upfront_payment", - "type": "float", - "description": "The upfront amount received of the swap.", - "default": null, - "optional": true - }, - { - "name": "floating_rate_index_pmnt", - "type": "str", - "description": "The floating rate index for payment portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "floating_rate_spread_pmnt", - "type": "float", - "description": "The floating rate spread for payment portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "rate_tenor_pmnt", - "type": "str", - "description": "The rate tenor for payment portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "rate_tenor_unit_pmnt", - "type": "Union[int, str]", - "description": "The rate tenor unit for payment portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "reset_date_pmnt", - "type": "str", - "description": "The reset date for payment portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "reset_date_unit_pmnt", - "type": "Union[int, str]", - "description": "The reset date unit for payment portion of the swap.", - "default": null, - "optional": true - }, - { - "name": "repo_type", - "type": "str", - "description": "The type of repo.", - "default": null, - "optional": true - }, - { - "name": "is_cleared", - "type": "str", - "description": "If the repo is cleared.", - "default": null, - "optional": true - }, - { - "name": "is_tri_party", - "type": "str", - "description": "If the repo is tri party.", - "default": null, - "optional": true - }, - { - "name": "principal_amount", - "type": "float", - "description": "The principal amount of the repo.", - "default": null, - "optional": true - }, - { - "name": "principal_currency", - "type": "str", - "description": "The currency of the principal amount.", - "default": null, - "optional": true - }, - { - "name": "collateral_type", - "type": "str", - "description": "The collateral type of the repo.", - "default": null, - "optional": true - }, - { - "name": "collateral_amount", - "type": "float", - "description": "The collateral amount of the repo.", - "default": null, - "optional": true - }, - { - "name": "collateral_currency", - "type": "str", - "description": "The currency of the collateral amount.", - "default": null, - "optional": true - }, - { - "name": "exchange_currency", - "type": "str", - "description": "The currency of the exchange rate.", - "default": null, - "optional": true - }, - { - "name": "exchange_rate", - "type": "float", - "description": "The exchange rate.", - "default": null, - "optional": true - }, - { - "name": "currency_sold", - "type": "str", - "description": "The currency sold in a Forward Derivative.", - "default": null, - "optional": true - }, - { - "name": "currency_amount_sold", - "type": "float", - "description": "The amount of currency sold in a Forward Derivative.", - "default": null, - "optional": true - }, - { - "name": "currency_bought", - "type": "str", - "description": "The currency bought in a Forward Derivative.", - "default": null, - "optional": true - }, - { - "name": "currency_amount_bought", - "type": "float", - "description": "The amount of currency bought in a Forward Derivative.", - "default": null, - "optional": true - }, - { - "name": "notional_amount", - "type": "float", - "description": "The notional amount of the derivative.", - "default": null, - "optional": true - }, - { - "name": "notional_currency", - "type": "str", - "description": "The currency of the derivative's notional amount.", - "default": null, - "optional": true - }, - { - "name": "unrealized_gain", - "type": "float", - "description": "The unrealized gain or loss on the derivative.", - "default": null, - "optional": true - } - ] - }, - "model": "EtfHoldings" - }, - "/etf/holdings_date": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Use this function to get the holdings dates, if available.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.holdings_date(symbol='XLK', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for. (ETF)", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [ - { - "name": "cik", - "type": "str", - "description": "The CIK of the filing entity. Overrides symbol.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfHoldingsDate]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - } - ], - "fmp": [] - }, - "model": "EtfHoldingsDate" - }, - "/etf/holdings_performance": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the recent price performance of each ticker held in the ETF.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.holdings_performance(symbol='XLK', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfHoldingsPerformance]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": null, - "optional": true - }, - { - "name": "one_day", - "type": "float", - "description": "One-day return.", - "default": null, - "optional": true - }, - { - "name": "wtd", - "type": "float", - "description": "Week to date return.", - "default": null, - "optional": true - }, - { - "name": "one_week", - "type": "float", - "description": "One-week return.", - "default": null, - "optional": true - }, - { - "name": "mtd", - "type": "float", - "description": "Month to date return.", - "default": null, - "optional": true - }, - { - "name": "one_month", - "type": "float", - "description": "One-month return.", - "default": null, - "optional": true - }, - { - "name": "qtd", - "type": "float", - "description": "Quarter to date return.", - "default": null, - "optional": true - }, - { - "name": "three_month", - "type": "float", - "description": "Three-month return.", - "default": null, - "optional": true - }, - { - "name": "six_month", - "type": "float", - "description": "Six-month return.", - "default": null, - "optional": true - }, - { - "name": "ytd", - "type": "float", - "description": "Year to date return.", - "default": null, - "optional": true - }, - { - "name": "one_year", - "type": "float", - "description": "One-year return.", - "default": null, - "optional": true - }, - { - "name": "two_year", - "type": "float", - "description": "Two-year return.", - "default": null, - "optional": true - }, - { - "name": "three_year", - "type": "float", - "description": "Three-year return.", - "default": null, - "optional": true - }, - { - "name": "four_year", - "type": "float", - "description": "Four-year", - "default": null, - "optional": true - }, - { - "name": "five_year", - "type": "float", - "description": "Five-year return.", - "default": null, - "optional": true - }, - { - "name": "ten_year", - "type": "float", - "description": "Ten-year return.", - "default": null, - "optional": true - }, - { - "name": "max", - "type": "float", - "description": "Return from the beginning of the time series.", - "default": null, - "optional": true - } - ], - "fmp": [] - }, - "model": "EtfHoldingsPerformance" - }, - "/etf/equity_exposure": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Get the exposure to ETFs for a specific stock.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.equity_exposure(symbol='MSFT', provider='fmp')\n# This function accepts multiple tickers.\nobb.etf.equity_exposure(symbol='MSFT,AAPL', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. (Stock) Multiple items allowed for provider(s): fmp.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EtfEquityExposure]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "equity_symbol", - "type": "str", - "description": "The symbol of the equity requested.", - "default": "", - "optional": false - }, - { - "name": "etf_symbol", - "type": "str", - "description": "The symbol of the ETF with exposure to the requested equity.", - "default": "", - "optional": false - }, - { - "name": "shares", - "type": "float", - "description": "The number of shares held in the ETF.", - "default": null, - "optional": true - }, - { - "name": "weight", - "type": "float", - "description": "The weight of the equity in the ETF, as a normalized percent.", - "default": null, - "optional": true - }, - { - "name": "market_value", - "type": "Union[float, int]", - "description": "The market value of the equity position in the ETF.", - "default": null, - "optional": true - } - ], - "fmp": [] - }, - "model": "EtfEquityExposure" - }, - "/fixedincome/rate/ameribor": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Ameribor.\n\nAmeribor (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of\nshort-term interbank borrowing. This rate is based on transactions in overnight unsecured loans conducted on the\nAmerican Financial Exchange (AFX).", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.ameribor(provider='fred')\nobb.fixedincome.rate.ameribor(parameter=30_day_ma, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "parameter", - "type": "Literal['overnight', 'term_30', 'term_90', '1_week_term_structure', '1_month_term_structure', '3_month_term_structure', '6_month_term_structure', '1_year_term_structure', '2_year_term_structure', '30_day_ma', '90_day_ma']", - "description": "Period of AMERIBOR rate.", - "default": "overnight", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[AMERIBOR]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "AMERIBOR rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "AMERIBOR" - }, - "/fixedincome/rate/sonia": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Sterling Overnight Index Average.\n\nSONIA (Sterling Overnight Index Average) is an important interest rate benchmark. SONIA is based on actual\ntransactions and reflects the average of the interest rates that banks pay to borrow sterling overnight from other\nfinancial institutions and other institutional investors.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.sonia(provider='fred')\nobb.fixedincome.rate.sonia(parameter=total_nominal_value, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "parameter", - "type": "Literal['rate', 'index', '10th_percentile', '25th_percentile', '75th_percentile', '90th_percentile', 'total_nominal_value']", - "description": "Period of SONIA rate.", - "default": "rate", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SONIA]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "SONIA rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "SONIA" - }, - "/fixedincome/rate/iorb": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Interest on Reserve Balances.\n\nGet Interest Rate on Reserve Balances data A bank rate is the interest rate a nation's central bank charges to its\ndomestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the\nUnited States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.iorb(provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[IORB]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "IORB rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "IORB" - }, - "/fixedincome/rate/effr": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Fed Funds Rate.\n\nGet Effective Federal Funds Rate data. A bank rate is the interest rate a nation's central bank charges to its\ndomestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the\nUnited States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.effr(provider='fred')\nobb.fixedincome.rate.effr(parameter=daily, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['federal_reserve', 'fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'federal_reserve' if there is no default.", - "default": "federal_reserve", - "optional": true - } - ], - "federal_reserve": [], - "fred": [ - { - "name": "parameter", - "type": "Literal['monthly', 'daily', 'weekly', 'daily_excl_weekend', 'annual', 'biweekly', 'volume']", - "description": "Period of FED rate.", - "default": "weekly", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[FEDFUNDS]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['federal_reserve', 'fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "FED rate.", - "default": "", - "optional": false - } - ], - "federal_reserve": [], - "fred": [] - }, - "model": "FEDFUNDS" - }, - "/fixedincome/rate/effr_forecast": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Fed Funds Rate Projections.\n\nThe projections for the federal funds rate are the value of the midpoint of the\nprojected appropriate target range for the federal funds rate or the projected\nappropriate target level for the federal funds rate at the end of the specified\ncalendar year or over the longer run.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.effr_forecast(provider='fred')\nobb.fixedincome.rate.effr_forecast(long_run=True, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "long_run", - "type": "bool", - "description": "Flag to show long run projections", - "default": false, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[PROJECTIONS]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "range_high", - "type": "float", - "description": "High projection of rates.", - "default": "", - "optional": false - }, - { - "name": "central_tendency_high", - "type": "float", - "description": "Central tendency of high projection of rates.", - "default": "", - "optional": false - }, - { - "name": "median", - "type": "float", - "description": "Median projection of rates.", - "default": "", - "optional": false - }, - { - "name": "range_midpoint", - "type": "float", - "description": "Midpoint projection of rates.", - "default": "", - "optional": false - }, - { - "name": "central_tendency_midpoint", - "type": "float", - "description": "Central tendency of midpoint projection of rates.", - "default": "", - "optional": false - }, - { - "name": "range_low", - "type": "float", - "description": "Low projection of rates.", - "default": "", - "optional": false - }, - { - "name": "central_tendency_low", - "type": "float", - "description": "Central tendency of low projection of rates.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "PROJECTIONS" - }, - "/fixedincome/rate/estr": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Euro Short-Term Rate.\n\nThe euro short-term rate (\u20acSTR) reflects the wholesale euro unsecured overnight borrowing costs of banks located in\nthe euro area. The \u20acSTR is published on each TARGET2 business day based on transactions conducted and settled on\nthe previous TARGET2 business day (the reporting date \u201cT\u201d) with a maturity date of T+1 which are deemed to have been\nexecuted at arm\u2019s length and thus reflect market rates in an unbiased way.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.estr(provider='fred')\nobb.fixedincome.rate.estr(parameter=number_of_active_banks, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "parameter", - "type": "Literal['volume_weighted_trimmed_mean_rate', 'number_of_transactions', 'number_of_active_banks', 'total_volume', 'share_of_volume_of_the_5_largest_active_banks', 'rate_at_75th_percentile_of_volume', 'rate_at_25th_percentile_of_volume']", - "description": "Period of ESTR rate.", - "default": "volume_weighted_trimmed_mean_rate", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[ESTR]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "ESTR rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "ESTR" - }, - "/fixedincome/rate/ecb": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "European Central Bank Interest Rates.\n\nThe Governing Council of the ECB sets the key interest rates for the euro area:\n\n- The interest rate on the main refinancing operations (MRO), which provide\nthe bulk of liquidity to the banking system.\n- The rate on the deposit facility, which banks may use to make overnight deposits with the Eurosystem.\n- The rate on the marginal lending facility, which offers overnight credit to banks from the Eurosystem.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.ecb(provider='fred')\nobb.fixedincome.rate.ecb(interest_rate_type='refinancing', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "interest_rate_type", - "type": "Literal['deposit', 'lending', 'refinancing']", - "description": "The type of interest rate.", - "default": "lending", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[EuropeanCentralBankInterestRates]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "European Central Bank Interest Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "EuropeanCentralBankInterestRates" - }, - "/fixedincome/rate/dpcredit": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Discount Window Primary Credit Rate.\n\nA bank rate is the interest rate a nation's central bank charges to its domestic banks to borrow money.\nThe rates central banks charge are set to stabilize the economy.\nIn the United States, the Federal Reserve System's Board of Governors set the bank rate,\nalso known as the discount rate.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.dpcredit(provider='fred')\nobb.fixedincome.rate.dpcredit(start_date='2023-02-01', end_date='2023-05-01', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "parameter", - "type": "Literal['daily_excl_weekend', 'monthly', 'weekly', 'daily', 'annual']", - "description": "FRED series ID of DWPCR data.", - "default": "daily_excl_weekend", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[DiscountWindowPrimaryCreditRate]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "Discount Window Primary Credit Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "DiscountWindowPrimaryCreditRate" - }, - "/fixedincome/spreads/tcm": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Treasury Constant Maturity.\n\nGet data for 10-Year Treasury Constant Maturity Minus Selected Treasury Constant Maturity.\nConstant maturity is the theoretical value of a U.S. Treasury that is based on recent values of auctioned U.S.\nTreasuries. The value is obtained by the U.S. Treasury on a daily basis through interpolation of the Treasury\nyield curve which, in turn, is based on closing bid-yields of actively-traded Treasury securities.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.spreads.tcm(provider='fred')\nobb.fixedincome.spreads.tcm(maturity='2y', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "maturity", - "type": "Literal['3m', '2y']", - "description": "The maturity", - "default": "3m", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[TreasuryConstantMaturity]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "TreasuryConstantMaturity Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "TreasuryConstantMaturity" - }, - "/fixedincome/spreads/tcm_effr": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Select Treasury Constant Maturity.\n\nGet data for Selected Treasury Constant Maturity Minus Federal Funds Rate\nConstant maturity is the theoretical value of a U.S. Treasury that is based on recent values of auctioned U.S.\nTreasuries. The value is obtained by the U.S. Treasury on a daily basis through interpolation of the Treasury\nyield curve which, in turn, is based on closing bid-yields of actively-traded Treasury securities.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.spreads.tcm_effr(provider='fred')\nobb.fixedincome.spreads.tcm_effr(maturity='10y', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "maturity", - "type": "Literal['10y', '5y', '1y', '6m', '3m']", - "description": "The maturity", - "default": "10y", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SelectedTreasuryConstantMaturity]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "Selected Treasury Constant Maturity Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "SelectedTreasuryConstantMaturity" - }, - "/fixedincome/spreads/treasury_effr": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Select Treasury Bill.\n\nGet Selected Treasury Bill Minus Federal Funds Rate.\nConstant maturity is the theoretical value of a U.S. Treasury that is based on recent values of\nauctioned U.S. Treasuries.\nThe value is obtained by the U.S. Treasury on a daily basis through interpolation of the Treasury\nyield curve which, in turn, is based on closing bid-yields of actively-traded Treasury securities.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.spreads.treasury_effr(provider='fred')\nobb.fixedincome.spreads.treasury_effr(maturity='6m', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "maturity", - "type": "Literal['3m', '6m']", - "description": "The maturity", - "default": "3m", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SelectedTreasuryBill]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "SelectedTreasuryBill Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "SelectedTreasuryBill" - }, - "/fixedincome/government/us_yield_curve": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "US Yield Curve. Get United States yield curve.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.government.us_yield_curve(provider='fred')\nobb.fixedincome.government.us_yield_curve(inflation_adjusted=True, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for. Defaults to the most recent FRED entry.", - "default": null, - "optional": true - }, - { - "name": "inflation_adjusted", - "type": "bool", - "description": "Get inflation adjusted rates.", - "default": false, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[USYieldCurve]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "maturity", - "type": "float", - "description": "Maturity of the treasury rate in years.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "Associated rate given in decimal form (0.05 is 5%)", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "USYieldCurve" - }, - "/fixedincome/government/treasury_rates": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Government Treasury Rates.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.government.treasury_rates(provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['federal_reserve', 'fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'federal_reserve' if there is no default.", - "default": "federal_reserve", - "optional": true - } - ], - "federal_reserve": [], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[TreasuryRates]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['federal_reserve', 'fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "week_4", - "type": "float", - "description": "4 week Treasury bills rate (secondary market).", - "default": null, - "optional": true - }, - { - "name": "month_1", - "type": "float", - "description": "1 month Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "month_2", - "type": "float", - "description": "2 month Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "month_3", - "type": "float", - "description": "3 month Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "month_6", - "type": "float", - "description": "6 month Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_1", - "type": "float", - "description": "1 year Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_2", - "type": "float", - "description": "2 year Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_3", - "type": "float", - "description": "3 year Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_5", - "type": "float", - "description": "5 year Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_7", - "type": "float", - "description": "7 year Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_10", - "type": "float", - "description": "10 year Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_20", - "type": "float", - "description": "20 year Treasury rate.", - "default": null, - "optional": true - }, - { - "name": "year_30", - "type": "float", - "description": "30 year Treasury rate.", - "default": null, - "optional": true - } - ], - "federal_reserve": [], - "fmp": [] - }, - "model": "TreasuryRates" - }, - "/fixedincome/corporate/ice_bofa": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "ICE BofA US Corporate Bond Indices.\n\nThe ICE BofA US Corporate Index tracks the performance of US dollar denominated investment grade corporate debt\npublicly issued in the US domestic market. Qualifying securities must have an investment grade rating (based on an\naverage of Moody\u2019s, S&P and Fitch), at least 18 months to final maturity at the time of issuance, at least one year\nremaining term to final maturity as of the rebalance date, a fixed coupon schedule and a minimum amount\noutstanding of $250 million. The ICE BofA US Corporate Index is a component of the US Corporate Master Index.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.ice_bofa(provider='fred')\nobb.fixedincome.corporate.ice_bofa(index_type='yield_to_worst', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "index_type", - "type": "Literal['yield', 'yield_to_worst', 'total_return', 'spread']", - "description": "The type of series.", - "default": "yield", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "category", - "type": "Literal['all', 'duration', 'eur', 'usd']", - "description": "The type of category.", - "default": "all", - "optional": true - }, - { - "name": "area", - "type": "Literal['asia', 'emea', 'eu', 'ex_g10', 'latin_america', 'us']", - "description": "The type of area.", - "default": "us", - "optional": true - }, - { - "name": "grade", - "type": "Literal['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'ccc', 'crossover', 'high_grade', 'high_yield', 'non_financial', 'non_sovereign', 'private_sector', 'public_sector']", - "description": "The type of grade.", - "default": "non_sovereign", - "optional": true - }, - { - "name": "options", - "type": "bool", - "description": "Whether to include options in the results.", - "default": false, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[ICEBofA]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "ICE BofA US Corporate Bond Indices Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "ICEBofA" - }, - "/fixedincome/corporate/moody": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Moody Corporate Bond Index.\n\nMoody's Aaa and Baa are investment bonds that acts as an index of\nthe performance of all bonds given an Aaa or Baa rating by Moody's Investors Service respectively.\nThese corporate bonds often are used in macroeconomics as an alternative to the federal ten-year\nTreasury Bill as an indicator of the interest rate.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.moody(provider='fred')\nobb.fixedincome.corporate.moody(index_type='baa', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "index_type", - "type": "Literal['aaa', 'baa']", - "description": "The type of series.", - "default": "aaa", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "spread", - "type": "Literal['treasury', 'fed_funds']", - "description": "The type of spread.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[MoodyCorporateBondIndex]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "Moody Corporate Bond Index Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "MoodyCorporateBondIndex" - }, - "/fixedincome/corporate/hqm": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "High Quality Market Corporate Bond.\n\nThe HQM yield curve represents the high quality corporate bond market, i.e.,\ncorporate bonds rated AAA, AA, or A. The HQM curve contains two regression terms.\nThese terms are adjustment factors that blend AAA, AA, and A bonds into a single HQM yield curve\nthat is the market-weighted average (MWA) quality of high quality bonds.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.hqm(provider='fred')\nobb.fixedincome.corporate.hqm(yield_curve='par', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - }, - { - "name": "yield_curve", - "type": "Literal['spot', 'par']", - "description": "The yield curve type.", - "default": "spot", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[HighQualityMarketCorporateBond]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "HighQualityMarketCorporateBond Rate.", - "default": "", - "optional": false - }, - { - "name": "maturity", - "type": "str", - "description": "Maturity.", - "default": "", - "optional": false - }, - { - "name": "yield_curve", - "type": "Literal['spot', 'par']", - "description": "The yield curve type.", - "default": "", - "optional": false - } - ], - "fred": [ - { - "name": "series_id", - "type": "str", - "description": "FRED series id.", - "default": "", - "optional": false - } - ] - }, - "model": "HighQualityMarketCorporateBond" - }, - "/fixedincome/corporate/spot_rates": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Spot Rates.\n\nThe spot rates for any maturity is the yield on a bond that provides a single payment at that maturity.\nThis is a zero coupon bond.\nBecause each spot rate pertains to a single cashflow, it is the relevant interest rate\nconcept for discounting a pension liability at the same maturity.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.spot_rates(provider='fred')\nobb.fixedincome.corporate.spot_rates(maturity='10,20,30,50', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "maturity", - "type": "Union[Union[float, str], List[Union[float, str]]]", - "description": "Maturities in years. Multiple items allowed for provider(s): fred.", - "default": 10.0, - "optional": true - }, - { - "name": "category", - "type": "Union[str, List[str]]", - "description": "Rate category. Options: spot_rate, par_yield. Multiple items allowed for provider(s): fred.", - "default": "spot_rate", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SpotRate]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "Spot Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "SpotRate" - }, - "/fixedincome/corporate/commercial_paper": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Commercial Paper.\n\nCommercial paper (CP) consists of short-term, promissory notes issued primarily by corporations.\nMaturities range up to 270 days but average about 30 days.\nMany companies use CP to raise cash needed for current transactions,\nand many find it to be a lower-cost alternative to bank loans.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.commercial_paper(provider='fred')\nobb.fixedincome.corporate.commercial_paper(maturity='15d', provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "maturity", - "type": "Literal['overnight', '7d', '15d', '30d', '60d', '90d']", - "description": "The maturity.", - "default": "30d", - "optional": true - }, - { - "name": "category", - "type": "Literal['asset_backed', 'financial', 'nonfinancial']", - "description": "The category.", - "default": "financial", - "optional": true - }, - { - "name": "grade", - "type": "Literal['aa', 'a2_p2']", - "description": "The grade.", - "default": "aa", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CommercialPaper]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "Commercial Paper Rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "CommercialPaper" - }, - "/fixedincome/sofr": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Secured Overnight Financing Rate.\n\nThe Secured Overnight Financing Rate (SOFR) is a broad measure of the cost of\nborrowing cash overnight collateralizing by Treasury securities.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.sofr(provider='fred')\nobb.fixedincome.sofr(period=overnight, provider='fred')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['fred']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", - "default": "fred", - "optional": true - } - ], - "fred": [ - { - "name": "period", - "type": "Literal['overnight', '30_day', '90_day', '180_day', 'index']", - "description": "Period of SOFR rate.", - "default": "overnight", - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SOFR]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fred']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "date", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "rate", - "type": "float", - "description": "SOFR rate.", - "default": "", - "optional": false - } - ], - "fred": [] - }, - "model": "SOFR" - }, - "/index/price/historical": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Historical Index Levels.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.price.historical(symbol='^GSPC', provider='fmp')\n# Not all providers have the same symbols.\nobb.index.price.historical(symbol='SPX', provider='intrinio')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, polygon, yfinance.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "interval", - "type": "str", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 10000, - "optional": true - } - ], - "polygon": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", - "default": "asc", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 49999, - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[IndexHistorical]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "Union[date, datetime]", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The open price.", - "default": null, - "optional": true - }, - { - "name": "high", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The high price.", - "default": null, - "optional": true - }, - { - "name": "low", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The low price.", - "default": null, - "optional": true - }, - { - "name": "close", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The close price.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The trading volume.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "vwap", - "type": "float", - "description": "Volume Weighted Average Price over the period.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change in the price from the previous close, as a normalized percent.", - "default": null, - "optional": true - } - ], - "intrinio": [], - "polygon": [ - { - "name": "transactions", - "type": "Annotated[int, Gt(gt=0)]", - "description": "Number of transactions for the symbol in the time period.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "IndexHistorical" - }, - "/index/market": { - "deprecated": { - "flag": true, - "message": "This endpoint is deprecated; use `/index/price/historical` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.3." - }, - "description": "Historical Market Indices.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.market(symbol='^IBEX', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, polygon, yfinance.", - "default": "", - "optional": false - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "interval", - "type": "str", - "description": "Time interval of the data to return.", - "default": "1d", - "optional": true - }, - { - "name": "provider", - "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "intrinio": [ - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 10000, - "optional": true - } - ], - "polygon": [ - { - "name": "sort", - "type": "Literal['asc', 'desc']", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", - "default": "asc", - "optional": true - }, - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return.", - "default": 49999, - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[MarketIndices]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "Union[date, datetime]", - "description": "The date of the data.", - "default": "", - "optional": false - }, - { - "name": "open", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The open price.", - "default": null, - "optional": true - }, - { - "name": "high", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The high price.", - "default": null, - "optional": true - }, - { - "name": "low", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The low price.", - "default": null, - "optional": true - }, - { - "name": "close", - "type": "Annotated[float, Strict(strict=True)]", - "description": "The close price.", - "default": null, - "optional": true - }, - { - "name": "volume", - "type": "int", - "description": "The trading volume.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "vwap", - "type": "float", - "description": "Volume Weighted Average Price over the period.", - "default": null, - "optional": true - }, - { - "name": "change", - "type": "float", - "description": "Change in the price from the previous close.", - "default": null, - "optional": true - }, - { - "name": "change_percent", - "type": "float", - "description": "Change in the price from the previous close, as a normalized percent.", - "default": null, - "optional": true - } - ], - "intrinio": [], - "polygon": [ - { - "name": "transactions", - "type": "Annotated[int, Gt(gt=0)]", - "description": "Number of transactions for the symbol in the time period.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "model": "MarketIndices" - }, - "/index/constituents": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Index Constituents.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.constituents(symbol='dowjones', provider='fmp')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['fmp']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[IndexConstituents]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - }, - { - "name": "name", - "type": "str", - "description": "Name of the constituent company in the index.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "sector", - "type": "str", - "description": "Sector the constituent company in the index belongs to.", - "default": "", - "optional": false - }, - { - "name": "sub_sector", - "type": "str", - "description": "Sub-sector the constituent company in the index belongs to.", - "default": null, - "optional": true - }, - { - "name": "headquarter", - "type": "str", - "description": "Location of the headquarter of the constituent company in the index.", - "default": null, - "optional": true - }, - { - "name": "date_first_added", - "type": "Union[str, date]", - "description": "Date the constituent company was added to the index.", - "default": null, - "optional": true - }, - { - "name": "cik", - "type": "int", - "description": "Central Index Key (CIK) for the requested entity.", - "default": null, - "optional": true - }, - { - "name": "founded", - "type": "Union[str, date]", - "description": "Founding year of the constituent company in the index.", - "default": null, - "optional": true - } - ] - }, - "model": "IndexConstituents" - }, - "/index/available": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "All indices available from a given provider.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.available(provider='fmp')\nobb.index.available(provider='yfinance')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "provider", - "type": "Literal['fmp', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", - "default": "fmp", - "optional": true - } - ], - "fmp": [], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[AvailableIndices]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['fmp', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "name", - "type": "str", - "description": "Name of the index.", - "default": null, - "optional": true - }, - { - "name": "currency", - "type": "str", - "description": "Currency the index is traded in.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "stock_exchange", - "type": "str", - "description": "Stock exchange where the index is listed.", - "default": "", - "optional": false - }, - { - "name": "exchange_short_name", - "type": "str", - "description": "Short name of the stock exchange where the index is listed.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "code", - "type": "str", - "description": "ID code for keying the index in the OpenBB Terminal.", - "default": "", - "optional": false - }, - { - "name": "symbol", - "type": "str", - "description": "Symbol for the index.", - "default": "", - "optional": false - } - ] - }, - "model": "AvailableIndices" - }, - "/news/world": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "World News. Global news data.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.news.world(provider='fmp')\nobb.news.world(limit=100, provider='intrinio')\n# Get news on the specified dates.\nobb.news.world(start_date='2024-02-01', end_date='2024-02-07', provider='intrinio')\n# Display the headlines of the news.\nobb.news.world(display=headline, provider='benzinga')\n# Get news by topics.\nobb.news.world(topics=finance, provider='benzinga')\n# Get news by source using 'tingo' as provider.\nobb.news.world(provider='tiingo', source=bloomberg)\n```\n\n", - "parameters": { - "standard": [ - { - "name": "limit", - "type": "int", - "description": "The number of data entries to return. The number of articles to return.", - "default": 2500, - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "provider", - "type": "Literal['benzinga', 'fmp', 'intrinio', 'tiingo']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", - "default": "benzinga", - "optional": true - } - ], - "benzinga": [ - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - }, - { - "name": "display", - "type": "Literal['headline', 'abstract', 'full']", - "description": "Specify headline only (headline), headline + teaser (abstract), or headline + full body (full).", - "default": "full", - "optional": true - }, - { - "name": "updated_since", - "type": "int", - "description": "Number of seconds since the news was updated.", - "default": null, - "optional": true - }, - { - "name": "published_since", - "type": "int", - "description": "Number of seconds since the news was published.", - "default": null, - "optional": true - }, - { - "name": "sort", - "type": "Literal['id', 'created', 'updated']", - "description": "Key to sort the news by.", - "default": "created", - "optional": true - }, - { - "name": "order", - "type": "Literal['asc', 'desc']", - "description": "Order to sort the news by.", - "default": "desc", - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "The ISIN of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "The CUSIP of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "channels", - "type": "str", - "description": "Channels of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "topics", - "type": "str", - "description": "Topics of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "authors", - "type": "str", - "description": "Authors of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "content_types", - "type": "str", - "description": "Content types of the news to retrieve.", - "default": null, - "optional": true - } - ], - "fmp": [], - "intrinio": [], - "tiingo": [ - { - "name": "offset", - "type": "int", - "description": "Page offset, used in conjunction with limit.", - "default": 0, - "optional": true - }, - { - "name": "source", - "type": "str", - "description": "A comma-separated list of the domains requested.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[WorldNews]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['benzinga', 'fmp', 'intrinio', 'tiingo']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "datetime", - "description": "The date of the data. The published date of the article.", - "default": "", - "optional": false - }, - { - "name": "title", - "type": "str", - "description": "Title of the article.", - "default": "", - "optional": false - }, - { - "name": "images", - "type": "List[Dict[str, str]]", - "description": "Images associated with the article.", - "default": null, - "optional": true - }, - { - "name": "text", - "type": "str", - "description": "Text/body of the article.", - "default": null, - "optional": true - }, - { - "name": "url", - "type": "str", - "description": "URL to the article.", - "default": null, - "optional": true - } - ], - "benzinga": [ - { - "name": "id", - "type": "str", - "description": "Article ID.", - "default": "", - "optional": false - }, - { - "name": "author", - "type": "str", - "description": "Author of the news.", - "default": null, - "optional": true - }, - { - "name": "teaser", - "type": "str", - "description": "Teaser of the news.", - "default": null, - "optional": true - }, - { - "name": "channels", - "type": "str", - "description": "Channels associated with the news.", - "default": null, - "optional": true - }, - { - "name": "stocks", - "type": "str", - "description": "Stocks associated with the news.", - "default": null, - "optional": true - }, - { - "name": "tags", - "type": "str", - "description": "Tags associated with the news.", - "default": null, - "optional": true - }, - { - "name": "updated", - "type": "datetime", - "description": "Updated date of the news.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "site", - "type": "str", - "description": "News source.", - "default": "", - "optional": false - } - ], - "intrinio": [ - { - "name": "id", - "type": "str", - "description": "Article ID.", - "default": "", - "optional": false - }, - { - "name": "company", - "type": "Dict[str, Any]", - "description": "Company details related to the news article.", - "default": "", - "optional": false - } - ], - "tiingo": [ - { - "name": "symbols", - "type": "str", - "description": "Ticker tagged in the fetched news.", - "default": null, - "optional": true - }, - { - "name": "article_id", - "type": "int", - "description": "Unique ID of the news article.", - "default": "", - "optional": false - }, - { - "name": "site", - "type": "str", - "description": "News source.", - "default": "", - "optional": false - }, - { - "name": "tags", - "type": "str", - "description": "Tags associated with the news article.", - "default": null, - "optional": true - }, - { - "name": "crawl_date", - "type": "datetime", - "description": "Date the news article was crawled.", - "default": "", - "optional": false - } - ] - }, - "model": "WorldNews" - }, - "/news/company": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Company News. Get news for one or more companies.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.news.company(provider='benzinga')\nobb.news.company(limit=100, provider='benzinga')\n# Get news on the specified dates.\nobb.news.company(symbol='AAPL', start_date='2024-02-01', end_date='2024-02-07', provider='intrinio')\n# Display the headlines of the news.\nobb.news.company(symbol='AAPL', display=headline, provider='benzinga')\n# Get news for multiple symbols.\nobb.news.company(symbol='aapl,tsla', provider='fmp')\n# Get news company's ISIN.\nobb.news.company(symbol='NVDA', isin=US0378331005, provider='benzinga')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "Union[str, List[str]]", - "description": "Symbol to get data for. Multiple items allowed for provider(s): benzinga, fmp, intrinio, polygon, tiingo, yfinance.", - "default": null, - "optional": true - }, - { - "name": "start_date", - "type": "Union[date, str]", - "description": "Start date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "end_date", - "type": "Union[date, str]", - "description": "End date of the data, in YYYY-MM-DD format.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "Annotated[int, Ge(ge=0)]", - "description": "The number of data entries to return.", - "default": 2500, - "optional": true - }, - { - "name": "provider", - "type": "Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", - "default": "benzinga", - "optional": true - } - ], - "benzinga": [ - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - }, - { - "name": "display", - "type": "Literal['headline', 'abstract', 'full']", - "description": "Specify headline only (headline), headline + teaser (abstract), or headline + full body (full).", - "default": "full", - "optional": true - }, - { - "name": "updated_since", - "type": "int", - "description": "Number of seconds since the news was updated.", - "default": null, - "optional": true - }, - { - "name": "published_since", - "type": "int", - "description": "Number of seconds since the news was published.", - "default": null, - "optional": true - }, - { - "name": "sort", - "type": "Literal['id', 'created', 'updated']", - "description": "Key to sort the news by.", - "default": "created", - "optional": true - }, - { - "name": "order", - "type": "Literal['asc', 'desc']", - "description": "Order to sort the news by.", - "default": "desc", - "optional": true - }, - { - "name": "isin", - "type": "str", - "description": "The company's ISIN.", - "default": null, - "optional": true - }, - { - "name": "cusip", - "type": "str", - "description": "The company's CUSIP.", - "default": null, - "optional": true - }, - { - "name": "channels", - "type": "str", - "description": "Channels of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "topics", - "type": "str", - "description": "Topics of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "authors", - "type": "str", - "description": "Authors of the news to retrieve.", - "default": null, - "optional": true - }, - { - "name": "content_types", - "type": "str", - "description": "Content types of the news to retrieve.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "page", - "type": "int", - "description": "Page number of the results. Use in combination with limit.", - "default": 0, - "optional": true - } - ], - "intrinio": [], - "polygon": [ - { - "name": "order", - "type": "Literal['asc', 'desc']", - "description": "Sort order of the articles.", - "default": "desc", - "optional": true - } - ], - "tiingo": [ - { - "name": "offset", - "type": "int", - "description": "Page offset, used in conjunction with limit.", - "default": 0, - "optional": true - }, - { - "name": "source", - "type": "str", - "description": "A comma-separated list of the domains requested.", - "default": null, - "optional": true - } - ], - "yfinance": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CompanyNews]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "date", - "type": "datetime", - "description": "The date of the data. Here it is the published date of the article.", - "default": "", - "optional": false - }, - { - "name": "title", - "type": "str", - "description": "Title of the article.", - "default": "", - "optional": false - }, - { - "name": "text", - "type": "str", - "description": "Text/body of the article.", - "default": null, - "optional": true - }, - { - "name": "images", - "type": "List[Dict[str, str]]", - "description": "Images associated with the article.", - "default": null, - "optional": true - }, - { - "name": "url", - "type": "str", - "description": "URL to the article.", - "default": "", - "optional": false - }, - { - "name": "symbols", - "type": "str", - "description": "Symbols associated with the article.", - "default": null, - "optional": true - } - ], - "benzinga": [ - { - "name": "id", - "type": "str", - "description": "Article ID.", - "default": "", - "optional": false - }, - { - "name": "author", - "type": "str", - "description": "Author of the article.", - "default": null, - "optional": true - }, - { - "name": "teaser", - "type": "str", - "description": "Teaser of the news.", - "default": null, - "optional": true - }, - { - "name": "channels", - "type": "str", - "description": "Channels associated with the news.", - "default": null, - "optional": true - }, - { - "name": "stocks", - "type": "str", - "description": "Stocks associated with the news.", - "default": null, - "optional": true - }, - { - "name": "tags", - "type": "str", - "description": "Tags associated with the news.", - "default": null, - "optional": true - }, - { - "name": "updated", - "type": "datetime", - "description": "Updated date of the news.", - "default": null, - "optional": true - } - ], - "fmp": [ - { - "name": "source", - "type": "str", - "description": "Name of the news source.", - "default": "", - "optional": false - } - ], - "intrinio": [ - { - "name": "id", - "type": "str", - "description": "Article ID.", - "default": "", - "optional": false - } - ], - "polygon": [ - { - "name": "source", - "type": "str", - "description": "Source of the article.", - "default": null, - "optional": true - }, - { - "name": "tags", - "type": "str", - "description": "Keywords/tags in the article", - "default": null, - "optional": true - }, - { - "name": "id", - "type": "str", - "description": "Article ID.", - "default": "", - "optional": false - }, - { - "name": "amp_url", - "type": "str", - "description": "AMP URL.", - "default": null, - "optional": true - }, - { - "name": "publisher", - "type": "PolygonPublisher", - "description": "Publisher of the article.", - "default": "", - "optional": false - } - ], - "tiingo": [ - { - "name": "tags", - "type": "str", - "description": "Tags associated with the news article.", - "default": null, - "optional": true - }, - { - "name": "article_id", - "type": "int", - "description": "Unique ID of the news article.", - "default": "", - "optional": false - }, - { - "name": "source", - "type": "str", - "description": "News source.", - "default": "", - "optional": false - }, - { - "name": "crawl_date", - "type": "datetime", - "description": "Date the news article was crawled.", - "default": "", - "optional": false - } - ], - "yfinance": [ - { - "name": "source", - "type": "str", - "description": "Source of the news article", - "default": "", - "optional": false - } - ] - }, - "model": "CompanyNews" - }, - "/regulators/sec/cik_map": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Map a ticker symbol to a CIK number.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.cik_map(symbol='MSFT', provider='sec')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol to get data for.", - "default": "", - "optional": false - }, - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[CikMap]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [ - { - "name": "cik", - "type": "Union[int, str]", - "description": "Central Index Key (CIK) for the requested entity.", - "default": null, - "optional": true - } - ], - "sec": [] - }, - "model": "CikMap" - }, - "/regulators/sec/institutions_search": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "Search SEC-regulated institutions by name and return a list of results with CIK numbers.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.institutions_search(provider='sec')\nobb.regulators.sec.institutions_search(query='blackstone real estate', provider='sec')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Search query.", - "default": "", - "optional": true - }, - { - "name": "use_cache", - "type": "bool", - "description": "Whether or not to use cache. If True, cache will store for seven days.", - "default": true, - "optional": true - }, - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[InstitutionsSearch]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [], - "sec": [ - { - "name": "name", - "type": "str", - "description": "The name of the institution.", - "default": null, - "optional": true - }, - { - "name": "cik", - "type": "Union[int, str]", - "description": "Central Index Key (CIK)", - "default": null, - "optional": true - } - ] - }, - "model": "InstitutionsSearch" + "openbb": "4.1.7", + "info": { + "title": "OpenBB Platform (Python)", + "description": "This is the OpenBB Platform (Python).", + "core": "1.1.6", + "extensions": { + "openbb_core_extension": [ + "commodity@1.0.4", + "crypto@1.1.5", + "currency@1.1.5", + "derivatives@1.1.5", + "economy@1.1.5", + "equity@1.1.5", + "etf@1.1.5", + "fixedincome@1.1.5", + "index@1.1.5", + "news@1.1.5", + "regulators@1.1.5" + ], + "openbb_provider_extension": [ + "benzinga@1.1.5", + "federal_reserve@1.1.5", + "fmp@1.1.5", + "fred@1.1.5", + "intrinio@1.1.5", + "oecd@1.1.5", + "polygon@1.1.5", + "sec@1.1.5", + "tiingo@1.1.5", + "tradingeconomics@1.1.5", + "yfinance@1.1.5" + ], + "openbb_obbject_extension": [] + } }, - "/regulators/sec/schema_files": { - "deprecated": { - "flag": null, - "message": null - }, - "description": "A tool for navigating the directory of SEC XML schema files by year.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.schema_files(provider='sec')\n# Get a list of schema files.\ndata = obb.regulators.sec.schema_files().results\ndata.files[0]\n'https://xbrl.fasb.org/us-gaap/'\n# The directory structure can be navigated by constructing a URL from the 'results' list.\nurl = data.files[0]+data.files[-1]\n# The URL base will always be the 0 position in the list, feed the URL back in as a parameter.\nobb.regulators.sec.schema_files(url=url).results.files\n['https://xbrl.fasb.org/us-gaap/2024/'\n'USGAAP2024FileList.xml'\n'dis/'\n'dqcrules/'\n'ebp/'\n'elts/'\n'entire/'\n'meta/'\n'stm/'\n'us-gaap-2024.zip']\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Search query.", - "default": "", - "optional": true - }, - { - "name": "use_cache", - "type": "bool", - "description": "Whether or not to use cache. If True, cache will store for seven days.", - "default": true, - "optional": true - }, - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [ - { - "name": "url", - "type": "str", - "description": "Enter an optional URL path to fetch the next level.", - "default": null, - "optional": true - } - ] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SchemaFiles]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [], - "sec": [ - { - "name": "files", - "type": "List[str]", - "description": "Dictionary of URLs to SEC Schema Files", - "default": "", - "optional": false - } - ] - }, - "model": "SchemaFiles" + "paths": { + "/crypto/price/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical price data for cryptocurrency pair(s) within a provider.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.crypto.price.historical(symbol='BTCUSD', provider='fmp')\nobb.crypto.price.historical(symbol='BTCUSD', start_date='2024-01-01', end_date='2024-01-31', provider='fmp')\nobb.crypto.price.historical(symbol='BTCUSD,ETHUSD', start_date='2024-01-01', end_date='2024-01-31', provider='polygon')\n# Get monthly historical prices from Yahoo Finance for Ethereum.\nobb.crypto.price.historical(symbol='ETH-USD', interval=1m, start_date='2024-01-01', end_date='2024-12-31', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'polygon', 'tiingo', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "interval", + "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + } + ], + "polygon": [ + { + "name": "interval", + "type": "str", + "description": "Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y", + "default": "1d", + "optional": true + }, + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", + "default": "asc", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 49999, + "optional": true + } + ], + "tiingo": [ + { + "name": "interval", + "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + }, + { + "name": "exchanges", + "type": "List[str]", + "description": "To limit the query to a subset of exchanges e.g. ['POLONIEX', 'GDAX']", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "interval", + "type": "Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1W', '1M', '1Q']", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CryptoHistorical]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'polygon', 'tiingo', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "Union[date, datetime]", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": "", + "optional": false + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": "", + "optional": false + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": "", + "optional": false + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + }, + { + "name": "vwap", + "type": "Annotated[float, Gt(gt=0)]", + "description": "Volume Weighted Average Price over the period.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change in the price from the previous close, as a normalized percent.", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "transactions", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Number of transactions for the symbol in the time period.", + "default": null, + "optional": true + } + ], + "tiingo": [ + { + "name": "transactions", + "type": "int", + "description": "Number of transactions for the symbol in the time period.", + "default": null, + "optional": true + }, + { + "name": "volume_notional", + "type": "float", + "description": "The last size done for the asset on the specific date in the quote currency. The volume of the asset on the specific date in the quote currency.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "CryptoHistorical" + }, + "/crypto/search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search available cryptocurrency pairs within a provider.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.crypto.search(provider='fmp')\nobb.crypto.search(query='BTCUSD', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Search query.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CryptoSearch]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data. (Crypto)", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the crypto.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "currency", + "type": "str", + "description": "The currency the crypto trades for.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The exchange code the crypto trades on.", + "default": null, + "optional": true + }, + { + "name": "exchange_name", + "type": "str", + "description": "The short name of the exchange the crypto trades on.", + "default": null, + "optional": true + } + ] + }, + "model": "CryptoSearch" + }, + "/currency/price/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Currency Historical Price. Currency historical data.\n\nCurrency historical prices refer to the past exchange rates of one currency against\nanother over a specific period.\nThis data provides insight into the fluctuations and trends in the foreign exchange market,\nhelping analysts, traders, and economists understand currency performance,\nevaluate economic health, and make predictions about future movements.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.price.historical(symbol='EURUSD', provider='fmp')\n# Filter historical data with specific start and end date.\nobb.currency.price.historical(symbol='EURUSD', start_date='2023-01-01', end_date='2023-12-31', provider='fmp')\n# Get data with different granularity.\nobb.currency.price.historical(symbol='EURUSD', provider='polygon', interval=15m)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'polygon', 'tiingo', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "interval", + "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + } + ], + "polygon": [ + { + "name": "interval", + "type": "str", + "description": "Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y", + "default": "1d", + "optional": true + }, + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", + "default": "asc", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 49999, + "optional": true + } + ], + "tiingo": [ + { + "name": "interval", + "type": "Literal['1m', '5m', '15m', '30m', '1h', '4h', '1d']", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + } + ], + "yfinance": [ + { + "name": "interval", + "type": "Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1W', '1M', '1Q']", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CurrencyHistorical]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'polygon', 'tiingo', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "Union[date, datetime]", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": "", + "optional": false + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": "", + "optional": false + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": "", + "optional": false + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "vwap", + "type": "Annotated[float, Gt(gt=0)]", + "description": "Volume Weighted Average Price over the period.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change in the price from the previous close, as a normalized percent.", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "transactions", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Number of transactions for the symbol in the time period.", + "default": null, + "optional": true + } + ], + "tiingo": [], + "yfinance": [] + }, + "model": "CurrencyHistorical" + }, + "/currency/search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Currency Search.\n\nSearch available currency pairs.\nCurrency pairs are the national currencies from two countries coupled for trading on\nthe foreign exchange (FX) marketplace.\nBoth currencies will have exchange rates on which the trade will have its position basis.\nAll trading within the forex market, whether selling, buying, or trading, will take place through currency pairs.\n(ref: Investopedia)\nMajor currency pairs include pairs such as EUR/USD, USD/JPY, GBP/USD, etc.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.search(provider='intrinio')\n# Search for 'EURUSD' currency pair using 'intrinio' as provider.\nobb.currency.search(provider='intrinio', symbol=EURUSD)\n# Search for actively traded currency pairs on the queried date using 'polygon' as provider.\nobb.currency.search(provider='polygon', date=2024-01-02, active=True)\n# Search for terms using 'polygon' as provider.\nobb.currency.search(provider='polygon', search=Euro zone)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [], + "polygon": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol of the pair to search.", + "default": null, + "optional": true + }, + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + }, + { + "name": "search", + "type": "str", + "description": "Search for terms within the ticker and/or company name.", + "default": "", + "optional": true + }, + { + "name": "active", + "type": "bool", + "description": "Specify if the tickers returned should be actively traded on the queried date.", + "default": true, + "optional": true + }, + { + "name": "order", + "type": "Literal['asc', 'desc']", + "description": "Order data by ascending or descending.", + "default": "asc", + "optional": true + }, + { + "name": "sort", + "type": "Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']", + "description": "Sort field used for ordering.", + "default": "", + "optional": true + }, + { + "name": "limit", + "type": "Annotated[int, Gt(gt=0)]", + "description": "The number of data entries to return.", + "default": 1000, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CurrencyPairs]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "name", + "type": "str", + "description": "Name of the currency pair.", + "default": "", + "optional": false + } + ], + "fmp": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol of the currency pair.", + "default": "", + "optional": false + }, + { + "name": "currency", + "type": "str", + "description": "Base currency of the currency pair.", + "default": "", + "optional": false + }, + { + "name": "stock_exchange", + "type": "str", + "description": "Stock exchange of the currency pair.", + "default": null, + "optional": true + }, + { + "name": "exchange_short_name", + "type": "str", + "description": "Short name of the stock exchange of the currency pair.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "code", + "type": "str", + "description": "Code of the currency pair.", + "default": "", + "optional": false + }, + { + "name": "base_currency", + "type": "str", + "description": "ISO 4217 currency code of the base currency.", + "default": "", + "optional": false + }, + { + "name": "quote_currency", + "type": "str", + "description": "ISO 4217 currency code of the quote currency.", + "default": "", + "optional": false + } + ], + "polygon": [ + { + "name": "market", + "type": "str", + "description": "Name of the trading market. Always 'fx'.", + "default": "", + "optional": false + }, + { + "name": "locale", + "type": "str", + "description": "Locale of the currency pair.", + "default": "", + "optional": false + }, + { + "name": "currency_symbol", + "type": "str", + "description": "The symbol of the quote currency.", + "default": null, + "optional": true + }, + { + "name": "currency_name", + "type": "str", + "description": "Name of the quote currency.", + "default": null, + "optional": true + }, + { + "name": "base_currency_symbol", + "type": "str", + "description": "The symbol of the base currency.", + "default": null, + "optional": true + }, + { + "name": "base_currency_name", + "type": "str", + "description": "Name of the base currency.", + "default": null, + "optional": true + }, + { + "name": "last_updated_utc", + "type": "datetime", + "description": "The last updated timestamp in UTC.", + "default": "", + "optional": false + }, + { + "name": "delisted_utc", + "type": "datetime", + "description": "The delisted timestamp in UTC.", + "default": null, + "optional": true + } + ] + }, + "model": "CurrencyPairs" + }, + "/currency/snapshots": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Snapshots of currency exchange rates from an indirect or direct perspective of a base currency.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.snapshots(provider='fmp')\n# Get exchange rates from USD and XAU to EUR, JPY, and GBP using 'fmp' as provider.\nobb.currency.snapshots(provider='fmp', base='USD,XAU', counter_currencies='EUR,JPY,GBP', quote_type='indirect')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "base", + "type": "Union[str, List[str]]", + "description": "The base currency symbol. Multiple items allowed for provider(s): fmp.", + "default": "usd", + "optional": true + }, + { + "name": "quote_type", + "type": "Literal['direct', 'indirect']", + "description": "Whether the quote is direct or indirect. Selecting 'direct' will return the exchange rate as the amount of domestic currency required to buy one unit of the foreign currency. Selecting 'indirect' (default) will return the exchange rate as the amount of foreign currency required to buy one unit of the domestic currency.", + "default": "indirect", + "optional": true + }, + { + "name": "counter_currencies", + "type": "Union[List[str], str]", + "description": "An optional list of counter currency symbols to filter for. None returns all.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CurrencySnapshots]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "base_currency", + "type": "str", + "description": "The base, or domestic, currency.", + "default": "", + "optional": false + }, + { + "name": "counter_currency", + "type": "str", + "description": "The counter, or foreign, currency.", + "default": "", + "optional": false + }, + { + "name": "last_rate", + "type": "float", + "description": "The exchange rate, relative to the base currency. Rates are expressed as the amount of foreign currency received from selling one unit of the base currency, or the quantity of foreign currency required to purchase one unit of the domestic currency. To inverse the perspective, set the 'quote_type' parameter as 'direct'.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": null, + "optional": true + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": null, + "optional": true + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": null, + "optional": true + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "prev_close", + "type": "float", + "description": "The previous close price.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "change", + "type": "float", + "description": "The change in the price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "The change in the price from the previous close, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "ma50", + "type": "float", + "description": "The 50-day moving average.", + "default": null, + "optional": true + }, + { + "name": "ma200", + "type": "float", + "description": "The 200-day moving average.", + "default": null, + "optional": true + }, + { + "name": "year_high", + "type": "float", + "description": "The 52-week high.", + "default": null, + "optional": true + }, + { + "name": "year_low", + "type": "float", + "description": "The 52-week low.", + "default": null, + "optional": true + }, + { + "name": "last_rate_timestamp", + "type": "datetime", + "description": "The timestamp of the last rate.", + "default": null, + "optional": true + } + ] + }, + "model": "CurrencySnapshots" + }, + "/derivatives/options/chains": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the complete options chain for a ticker.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.derivatives.options.chains(symbol='AAPL', provider='intrinio')\n# Use the \"date\" parameter to get the end-of-day-data for a specific date, where supported.\nobb.derivatives.options.chains(symbol='AAPL', date=2023-01-25, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [ + { + "name": "date", + "type": "Union[date, str]", + "description": "The end-of-day date for options chains data.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[OptionsChains]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data. Here, it is the underlying symbol for the option.", + "default": null, + "optional": true + }, + { + "name": "contract_symbol", + "type": "str", + "description": "Contract symbol for the option.", + "default": "", + "optional": false + }, + { + "name": "eod_date", + "type": "date", + "description": "Date for which the options chains are returned.", + "default": null, + "optional": true + }, + { + "name": "expiration", + "type": "date", + "description": "Expiration date of the contract.", + "default": "", + "optional": false + }, + { + "name": "strike", + "type": "float", + "description": "Strike price of the contract.", + "default": "", + "optional": false + }, + { + "name": "option_type", + "type": "str", + "description": "Call or Put.", + "default": "", + "optional": false + }, + { + "name": "open_interest", + "type": "int", + "description": "Open interest on the contract.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "theoretical_price", + "type": "float", + "description": "Theoretical value of the option.", + "default": null, + "optional": true + }, + { + "name": "last_trade_price", + "type": "float", + "description": "Last trade price of the option.", + "default": null, + "optional": true + }, + { + "name": "tick", + "type": "str", + "description": "Whether the last tick was up or down in price.", + "default": null, + "optional": true + }, + { + "name": "bid", + "type": "float", + "description": "Current bid price for the option.", + "default": null, + "optional": true + }, + { + "name": "bid_size", + "type": "int", + "description": "Bid size for the option.", + "default": null, + "optional": true + }, + { + "name": "ask", + "type": "float", + "description": "Current ask price for the option.", + "default": null, + "optional": true + }, + { + "name": "ask_size", + "type": "int", + "description": "Ask size for the option.", + "default": null, + "optional": true + }, + { + "name": "mark", + "type": "float", + "description": "The mid-price between the latest bid and ask.", + "default": null, + "optional": true + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": null, + "optional": true + }, + { + "name": "open_bid", + "type": "float", + "description": "The opening bid price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "open_ask", + "type": "float", + "description": "The opening ask price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": null, + "optional": true + }, + { + "name": "bid_high", + "type": "float", + "description": "The highest bid price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "ask_high", + "type": "float", + "description": "The highest ask price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": null, + "optional": true + }, + { + "name": "bid_low", + "type": "float", + "description": "The lowest bid price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "ask_low", + "type": "float", + "description": "The lowest ask price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": null, + "optional": true + }, + { + "name": "close_size", + "type": "int", + "description": "The closing trade size for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close_time", + "type": "datetime", + "description": "The time of the closing price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close_bid", + "type": "float", + "description": "The closing bid price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close_bid_size", + "type": "int", + "description": "The closing bid size for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close_bid_time", + "type": "datetime", + "description": "The time of the bid closing price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close_ask", + "type": "float", + "description": "The closing ask price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close_ask_size", + "type": "int", + "description": "The closing ask size for the option that day.", + "default": null, + "optional": true + }, + { + "name": "close_ask_time", + "type": "datetime", + "description": "The time of the ask closing price for the option that day.", + "default": null, + "optional": true + }, + { + "name": "prev_close", + "type": "float", + "description": "The previous close price.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "The change in the price of the option.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change, in normalizezd percentage points, of the option.", + "default": null, + "optional": true + }, + { + "name": "implied_volatility", + "type": "float", + "description": "Implied volatility of the option.", + "default": null, + "optional": true + }, + { + "name": "delta", + "type": "float", + "description": "Delta of the option.", + "default": null, + "optional": true + }, + { + "name": "gamma", + "type": "float", + "description": "Gamma of the option.", + "default": null, + "optional": true + }, + { + "name": "theta", + "type": "float", + "description": "Theta of the option.", + "default": null, + "optional": true + }, + { + "name": "vega", + "type": "float", + "description": "Vega of the option.", + "default": null, + "optional": true + }, + { + "name": "rho", + "type": "float", + "description": "Rho of the option.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "exercise_style", + "type": "str", + "description": "The exercise style of the option, American or European.", + "default": null, + "optional": true + } + ] + }, + "model": "OptionsChains" + }, + "/derivatives/options/unusual": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the complete options chain for a ticker.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.derivatives.options.unusual(provider='intrinio')\n# Use the 'symbol' parameter to get the most recent activity for a specific symbol.\nobb.derivatives.options.unusual(symbol='TSLA', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for. (the underlying symbol)", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format. If no symbol is supplied, requests are only allowed for a single date. Use the start_date for the target date. Intrinio appears to have data beginning Feb/2022, but is unclear when it actually began.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format. If a symbol is not supplied, do not include an end date.", + "default": null, + "optional": true + }, + { + "name": "trade_type", + "type": "Literal['block', 'sweep', 'large']", + "description": "The type of unusual activity to query for.", + "default": null, + "optional": true + }, + { + "name": "sentiment", + "type": "Literal['bullish', 'bearish', 'neutral']", + "description": "The sentiment type to query for.", + "default": null, + "optional": true + }, + { + "name": "min_value", + "type": "Union[float, int]", + "description": "The inclusive minimum total value for the unusual activity.", + "default": null, + "optional": true + }, + { + "name": "max_value", + "type": "Union[float, int]", + "description": "The inclusive maximum total value for the unusual activity.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return. A typical day for all symbols will yield 50-80K records. The API will paginate at 1000 records. The high default limit (100K) is to be able to reliably capture the most days. The high absolute limit (1.25M) is to allow for outlier days. Queries at the absolute limit will take a long time, and might be unreliable. Apply filters to improve performance.", + "default": 100000, + "optional": true + }, + { + "name": "source", + "type": "Literal['delayed', 'realtime']", + "description": "The source of the data. Either realtime or delayed.", + "default": "delayed", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[OptionsUnusual]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "underlying_symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data. (the underlying symbol)", + "default": null, + "optional": true + }, + { + "name": "contract_symbol", + "type": "str", + "description": "Contract symbol for the option.", + "default": "", + "optional": false + } + ], + "intrinio": [ + { + "name": "trade_timestamp", + "type": "datetime", + "description": "The datetime of order placement.", + "default": "", + "optional": false + }, + { + "name": "trade_type", + "type": "Literal['block', 'sweep', 'large']", + "description": "The type of unusual trade.", + "default": "", + "optional": false + }, + { + "name": "sentiment", + "type": "Literal['bullish', 'bearish', 'neutral']", + "description": "Bullish, Bearish, or Neutral Sentiment is estimated based on whether the trade was executed at the bid, ask, or mark price.", + "default": "", + "optional": false + }, + { + "name": "bid_at_execution", + "type": "float", + "description": "Bid price at execution.", + "default": "", + "optional": false + }, + { + "name": "ask_at_execution", + "type": "float", + "description": "Ask price at execution.", + "default": "", + "optional": false + }, + { + "name": "average_price", + "type": "float", + "description": "The average premium paid per option contract.", + "default": "", + "optional": false + }, + { + "name": "underlying_price_at_execution", + "type": "float", + "description": "Price of the underlying security at execution of trade.", + "default": null, + "optional": true + }, + { + "name": "total_size", + "type": "int", + "description": "The total number of contracts involved in a single transaction.", + "default": "", + "optional": false + }, + { + "name": "total_value", + "type": "Union[int, float]", + "description": "The aggregated value of all option contract premiums included in the trade.", + "default": "", + "optional": false + } + ] + }, + "model": "OptionsUnusual" + }, + "/derivatives/futures/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Historical futures prices.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.derivatives.futures.historical(symbol='ES', provider='yfinance')\n# Enter multiple symbols.\nobb.derivatives.futures.historical(symbol='ES,NQ', provider='yfinance')\n# Enter expiration dates as \"YYYY-MM\".\nobb.derivatives.futures.historical(symbol='ES', provider='yfinance', expiration='2025-12')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "expiration", + "type": "str", + "description": "Future expiry date with format YYYY-MM", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [ + { + "name": "interval", + "type": "Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1W', '1M', '1Q']", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[FuturesHistorical]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "datetime", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": "", + "optional": false + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": "", + "optional": false + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": "", + "optional": false + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [] + }, + "model": "FuturesHistorical" + }, + "/derivatives/futures/curve": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Futures Term Structure, current or historical.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\n# Enter a date to get the term structure from a historical date.\nobb.derivatives.futures.curve(symbol='NG', provider='yfinance', date='2023-01-01')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[FuturesCurve]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "expiration", + "type": "str", + "description": "Futures expiration month.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "The close price.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "FuturesCurve" + }, + "/economy/gdp/forecast": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Forecasted GDP Data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.forecast(provider='oecd')\nobb.economy.gdp.forecast(period='annual', type='real', provider='oecd')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "period", + "type": "Literal['quarter', 'annual']", + "description": "Time period of the data to return. Units for nominal GDP period. Either quarter or annual.", + "default": "annual", + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "type", + "type": "Literal['nominal', 'real']", + "description": "Type of GDP to get forecast of. Either nominal or real.", + "default": "real", + "optional": true + }, + { + "name": "provider", + "type": "Literal['oecd']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", + "default": "oecd", + "optional": true + } + ], + "oecd": [ + { + "name": "country", + "type": "Literal['argentina', 'asia', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_17', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'non-oecd', 'norway', 'oecd_total', 'peru', 'poland', 'portugal', 'romania', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'world']", + "description": "Country to get GDP for.", + "default": "united_states", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[GdpForecast]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['oecd']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "Nominal GDP value on the date.", + "default": null, + "optional": true + } + ], + "oecd": [] + }, + "model": "GdpForecast" + }, + "/economy/gdp/nominal": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Nominal GDP Data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.nominal(provider='oecd')\nobb.economy.gdp.nominal(units='usd', provider='oecd')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "units", + "type": "Literal['usd', 'usd_cap']", + "description": "The unit of measurement for the data. Units to get nominal GDP in. Either usd or usd_cap indicating per capita.", + "default": "usd", + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['oecd']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", + "default": "oecd", + "optional": true + } + ], + "oecd": [ + { + "name": "country", + "type": "Literal['australia', 'austria', 'belgium', 'brazil', 'canada', 'chile', 'colombia', 'costa_rica', 'czech_republic', 'denmark', 'estonia', 'euro_area', 'european_union', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'poland', 'portugal', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'all']", + "description": "Country to get GDP for.", + "default": "united_states", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[GdpNominal]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['oecd']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "Nominal GDP value on the date.", + "default": null, + "optional": true + } + ], + "oecd": [] + }, + "model": "GdpNominal" + }, + "/economy/gdp/real": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Real GDP Data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.gdp.real(provider='oecd')\nobb.economy.gdp.real(units='yoy', provider='oecd')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "units", + "type": "Literal['idx', 'qoq', 'yoy']", + "description": "The unit of measurement for the data. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)", + "default": "yoy", + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['oecd']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", + "default": "oecd", + "optional": true + } + ], + "oecd": [ + { + "name": "country", + "type": "Literal['G20', 'G7', 'argentina', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_19', 'europe', 'european_union_27', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'oecd_total', 'poland', 'portugal', 'romania', 'russia', 'saudi_arabia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'all']", + "description": "Country to get GDP for.", + "default": "united_states", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[GdpReal]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['oecd']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "Nominal GDP value on the date.", + "default": null, + "optional": true + } + ], + "oecd": [] + }, + "model": "GdpReal" + }, + "/economy/calendar": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the upcoming, or historical, economic calendar of global events.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\n# By default, the calendar will be forward-looking.\nobb.economy.calendar(provider='fmp')\nobb.economy.calendar(provider='fmp', start_date='2020-03-01', end_date='2020-03-31')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'tradingeconomics']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "tradingeconomics": [ + { + "name": "country", + "type": "Union[str, List[str]]", + "description": "Country of the event. Multiple items allowed for provider(s): tradingeconomics.", + "default": null, + "optional": true + }, + { + "name": "importance", + "type": "Literal['Low', 'Medium', 'High']", + "description": "Importance of the event.", + "default": null, + "optional": true + }, + { + "name": "group", + "type": "Literal['interest rate', 'inflation', 'bonds', 'consumer', 'gdp', 'government', 'housing', 'labour', 'markets', 'money', 'prices', 'trade', 'business']", + "description": "Grouping of events", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EconomicCalendar]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'tradingeconomics']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "datetime", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "Country of event.", + "default": null, + "optional": true + }, + { + "name": "event", + "type": "str", + "description": "Event name.", + "default": null, + "optional": true + }, + { + "name": "reference", + "type": "str", + "description": "Abbreviated period for which released data refers to.", + "default": null, + "optional": true + }, + { + "name": "source", + "type": "str", + "description": "Source of the data.", + "default": null, + "optional": true + }, + { + "name": "sourceurl", + "type": "str", + "description": "Source URL.", + "default": null, + "optional": true + }, + { + "name": "actual", + "type": "Union[str, float]", + "description": "Latest released value.", + "default": null, + "optional": true + }, + { + "name": "previous", + "type": "Union[str, float]", + "description": "Value for the previous period after the revision (if revision is applicable).", + "default": null, + "optional": true + }, + { + "name": "consensus", + "type": "Union[str, float]", + "description": "Average forecast among a representative group of economists.", + "default": null, + "optional": true + }, + { + "name": "forecast", + "type": "Union[str, float]", + "description": "Trading Economics projections", + "default": null, + "optional": true + }, + { + "name": "url", + "type": "str", + "description": "Trading Economics URL", + "default": null, + "optional": true + }, + { + "name": "importance", + "type": "Union[Literal[0, 1, 2, 3], str]", + "description": "Importance of the event. 1-Low, 2-Medium, 3-High", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency of the data.", + "default": null, + "optional": true + }, + { + "name": "unit", + "type": "str", + "description": "Unit of the data.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "change", + "type": "float", + "description": "Value change since previous.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Percentage change since previous.", + "default": null, + "optional": true + }, + { + "name": "updated_at", + "type": "datetime", + "description": "Last updated timestamp.", + "default": null, + "optional": true + }, + { + "name": "created_at", + "type": "datetime", + "description": "Created at timestamp.", + "default": null, + "optional": true + } + ], + "tradingeconomics": [] + }, + "model": "EconomicCalendar" + }, + "/economy/cpi": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Consumer Price Index (CPI).\n\nReturns either the rescaled index value, or a rate of change (inflation).", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.cpi(country='japan,china,turkey', provider='fred')\n# Use the `units` parameter to define the reference period for the change in values.\nobb.economy.cpi(country='united_states,united_kingdom', units='growth_previous', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "country", + "type": "Union[str, List[str]]", + "description": "The country to get data. Multiple items allowed for provider(s): fred.", + "default": "", + "optional": false + }, + { + "name": "units", + "type": "Literal['growth_previous', 'growth_same', 'index_2015']", + "description": "The unit of measurement for the data. Options: - `growth_previous`: Percent growth from the previous period. If monthly data, this is month-over-month, etc - `growth_same`: Percent growth from the same period in the previous year. If looking at monthly data, this would be year-over-year, etc. - `index_2015`: Rescaled index value, such that the value in 2015 is 100.", + "default": "growth_same", + "optional": true + }, + { + "name": "frequency", + "type": "Literal['monthly', 'quarter', 'annual']", + "description": "The frequency of the data. Options: `monthly`, `quarter`, and `annual`.", + "default": "monthly", + "optional": true + }, + { + "name": "harmonized", + "type": "bool", + "description": "Whether you wish to obtain harmonized data.", + "default": false, + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ConsumerPriceIndex]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "ConsumerPriceIndex" + }, + "/economy/risk_premium": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Market Risk Premium by country.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.risk_premium(provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[RiskPremium]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "country", + "type": "str", + "description": "Market country.", + "default": "", + "optional": false + }, + { + "name": "continent", + "type": "str", + "description": "Continent of the country.", + "default": null, + "optional": true + }, + { + "name": "total_equity_risk_premium", + "type": "Annotated[float, Gt(gt=0)]", + "description": "Total equity risk premium for the country.", + "default": null, + "optional": true + }, + { + "name": "country_risk_premium", + "type": "Annotated[float, Ge(ge=0)]", + "description": "Country-specific risk premium.", + "default": null, + "optional": true + } + ], + "fmp": [] + }, + "model": "RiskPremium" + }, + "/economy/fred_search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search for FRED series or economic releases by ID or string.\n\nThis does not return the observation values, only the metadata.\nUse this function to find series IDs for `fred_series()`.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.fred_search(provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "The search word(s).", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "is_release", + "type": "bool", + "description": "Is release? If True, other search filter variables are ignored. If no query text or release_id is supplied, this defaults to True.", + "default": false, + "optional": true + }, + { + "name": "release_id", + "type": "Union[int, str]", + "description": "A specific release ID to target.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return. (1-1000)", + "default": null, + "optional": true + }, + { + "name": "offset", + "type": "Annotated[int, Ge(ge=0)]", + "description": "Offset the results in conjunction with limit.", + "default": 0, + "optional": true + }, + { + "name": "filter_variable", + "type": "Literal[None, 'frequency', 'units', 'seasonal_adjustment']", + "description": "Filter by an attribute.", + "default": null, + "optional": true + }, + { + "name": "filter_value", + "type": "str", + "description": "String value to filter the variable by. Used in conjunction with filter_variable.", + "default": null, + "optional": true + }, + { + "name": "tag_names", + "type": "str", + "description": "A semicolon delimited list of tag names that series match all of. Example: 'japan;imports'", + "default": null, + "optional": true + }, + { + "name": "exclude_tag_names", + "type": "str", + "description": "A semicolon delimited list of tag names that series match none of. Example: 'imports;services'. Requires that variable tag_names also be set to limit the number of matching series.", + "default": null, + "optional": true + }, + { + "name": "series_id", + "type": "str", + "description": "A FRED Series ID to return series group information for. This returns the required information to query for regional data. Not all series that are in FRED have geographical data. Entering a value for series_id will override all other parameters. Multiple series_ids can be separated by commas.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[FredSearch]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "release_id", + "type": "Union[int, str]", + "description": "The release ID for queries.", + "default": null, + "optional": true + }, + { + "name": "series_id", + "type": "str", + "description": "The series ID for the item in the release.", + "default": null, + "optional": true + }, + { + "name": "name", + "type": "str", + "description": "The name of the release.", + "default": null, + "optional": true + }, + { + "name": "title", + "type": "str", + "description": "The title of the series.", + "default": null, + "optional": true + }, + { + "name": "observation_start", + "type": "date", + "description": "The date of the first observation in the series.", + "default": null, + "optional": true + }, + { + "name": "observation_end", + "type": "date", + "description": "The date of the last observation in the series.", + "default": null, + "optional": true + }, + { + "name": "frequency", + "type": "str", + "description": "The frequency of the data.", + "default": null, + "optional": true + }, + { + "name": "frequency_short", + "type": "str", + "description": "Short form of the data frequency.", + "default": null, + "optional": true + }, + { + "name": "units", + "type": "str", + "description": "The units of the data.", + "default": null, + "optional": true + }, + { + "name": "units_short", + "type": "str", + "description": "Short form of the data units.", + "default": null, + "optional": true + }, + { + "name": "seasonal_adjustment", + "type": "str", + "description": "The seasonal adjustment of the data.", + "default": null, + "optional": true + }, + { + "name": "seasonal_adjustment_short", + "type": "str", + "description": "Short form of the data seasonal adjustment.", + "default": null, + "optional": true + }, + { + "name": "last_updated", + "type": "datetime", + "description": "The datetime of the last update to the data.", + "default": null, + "optional": true + }, + { + "name": "notes", + "type": "str", + "description": "Description of the release.", + "default": null, + "optional": true + }, + { + "name": "press_release", + "type": "bool", + "description": "If the release is a press release.", + "default": null, + "optional": true + }, + { + "name": "url", + "type": "str", + "description": "URL to the release.", + "default": null, + "optional": true + } + ], + "fred": [ + { + "name": "popularity", + "type": "int", + "description": "Popularity of the series", + "default": null, + "optional": true + }, + { + "name": "group_popularity", + "type": "int", + "description": "Group popularity of the release", + "default": null, + "optional": true + }, + { + "name": "region_type", + "type": "str", + "description": "The region type of the series.", + "default": null, + "optional": true + }, + { + "name": "series_group", + "type": "Union[int, str]", + "description": "The series group ID of the series. This value is used to query for regional data.", + "default": null, + "optional": true + } + ] + }, + "model": "FredSearch" + }, + "/economy/fred_series": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get data by series ID from FRED.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.fred_series(symbol='NFCI', provider='fred')\n# Multiple series can be passed in as a list.\nobb.economy.fred_series(symbol='NFCI,STLFSI4', provider='fred')\n# Use the `transform` parameter to transform the data as change, log, or percent change.\nobb.economy.fred_series(symbol='CBBTCUSD', transform=pc1, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fred.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 100000, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred', 'intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "frequency", + "type": "Literal[None, 'a', 'q', 'm', 'w', 'd', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']", + "description": "Frequency aggregation to convert high frequency data to lower frequency. None = No change a = Annual q = Quarterly m = Monthly w = Weekly d = Daily wef = Weekly, Ending Friday weth = Weekly, Ending Thursday wew = Weekly, Ending Wednesday wetu = Weekly, Ending Tuesday wem = Weekly, Ending Monday wesu = Weekly, Ending Sunday wesa = Weekly, Ending Saturday bwew = Biweekly, Ending Wednesday bwem = Biweekly, Ending Monday", + "default": null, + "optional": true + }, + { + "name": "aggregation_method", + "type": "Literal[None, 'avg', 'sum', 'eop']", + "description": "A key that indicates the aggregation method used for frequency aggregation. This parameter has no affect if the frequency parameter is not set. avg = Average sum = Sum eop = End of Period", + "default": "eop", + "optional": true + }, + { + "name": "transform", + "type": "Literal[None, 'chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']", + "description": "Transformation type None = No transformation chg = Change ch1 = Change from Year Ago pch = Percent Change pc1 = Percent Change from Year Ago pca = Compounded Annual Rate of Change cch = Continuously Compounded Rate of Change cca = Continuously Compounded Annual Rate of Change log = Natural Log", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "all_pages", + "type": "bool", + "description": "Returns all pages of data from the API call at once.", + "default": false, + "optional": true + }, + { + "name": "sleep", + "type": "float", + "description": "Time to sleep between requests to avoid rate limiting.", + "default": 1.0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[FredSeries]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred', 'intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + } + ], + "fred": [], + "intrinio": [ + { + "name": "value", + "type": "float", + "description": "Value of the index.", + "default": null, + "optional": true + } + ] + }, + "model": "FredSeries" + }, + "/economy/money_measures": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Money Measures (M1/M2 and components).\n\nThe Federal Reserve publishes as part of the H.6 Release.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.money_measures(provider='federal_reserve')\nobb.economy.money_measures(adjusted=False, provider='federal_reserve')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "adjusted", + "type": "bool", + "description": "Whether to return seasonally adjusted data.", + "default": true, + "optional": true + }, + { + "name": "provider", + "type": "Literal['federal_reserve']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'federal_reserve' if there is no default.", + "default": "federal_reserve", + "optional": true + } + ], + "federal_reserve": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[MoneyMeasures]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['federal_reserve']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "month", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "M1", + "type": "float", + "description": "Value of the M1 money supply in billions.", + "default": "", + "optional": false + }, + { + "name": "M2", + "type": "float", + "description": "Value of the M2 money supply in billions.", + "default": "", + "optional": false + }, + { + "name": "currency", + "type": "float", + "description": "Value of currency in circulation in billions.", + "default": null, + "optional": true + }, + { + "name": "demand_deposits", + "type": "float", + "description": "Value of demand deposits in billions.", + "default": null, + "optional": true + }, + { + "name": "retail_money_market_funds", + "type": "float", + "description": "Value of retail money market funds in billions.", + "default": null, + "optional": true + }, + { + "name": "other_liquid_deposits", + "type": "float", + "description": "Value of other liquid deposits in billions.", + "default": null, + "optional": true + }, + { + "name": "small_denomination_time_deposits", + "type": "float", + "description": "Value of small denomination time deposits in billions.", + "default": null, + "optional": true + } + ], + "federal_reserve": [] + }, + "model": "MoneyMeasures" + }, + "/economy/unemployment": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get global unemployment data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.unemployment(provider='oecd')\nobb.economy.unemployment(country=all, frequency=quarterly, provider='oecd')\n# Demographics for the statistics are selected with the `age` parameter.\nobb.economy.unemployment(country=all, frequency=quarterly, age=25-54, provider='oecd')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['oecd']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", + "default": "oecd", + "optional": true + } + ], + "oecd": [ + { + "name": "country", + "type": "Literal['colombia', 'new_zealand', 'united_kingdom', 'italy', 'luxembourg', 'euro_area19', 'sweden', 'oecd', 'south_africa', 'denmark', 'canada', 'switzerland', 'slovakia', 'hungary', 'portugal', 'spain', 'france', 'czech_republic', 'costa_rica', 'japan', 'slovenia', 'russia', 'austria', 'latvia', 'netherlands', 'israel', 'iceland', 'united_states', 'ireland', 'mexico', 'germany', 'greece', 'turkey', 'australia', 'poland', 'south_korea', 'chile', 'finland', 'european_union27_2020', 'norway', 'lithuania', 'euro_area20', 'estonia', 'belgium', 'brazil', 'indonesia', 'all']", + "description": "Country to get GDP for.", + "default": "united_states", + "optional": true + }, + { + "name": "sex", + "type": "Literal['total', 'male', 'female']", + "description": "Sex to get unemployment for.", + "default": "total", + "optional": true + }, + { + "name": "frequency", + "type": "Literal['monthly', 'quarterly', 'annual']", + "description": "Frequency to get unemployment for.", + "default": "monthly", + "optional": true + }, + { + "name": "age", + "type": "Literal['total', '15-24', '15-64', '25-54', '55-64']", + "description": "Age group to get unemployment for. Total indicates 15 years or over", + "default": "total", + "optional": true + }, + { + "name": "seasonal_adjustment", + "type": "bool", + "description": "Whether to get seasonally adjusted unemployment. Defaults to False.", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[Unemployment]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['oecd']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "Unemployment rate (given as a whole number, i.e 10=10%)", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "Country for which unemployment rate is given", + "default": null, + "optional": true + } + ], + "oecd": [] + }, + "model": "Unemployment" + }, + "/economy/composite_leading_indicator": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Use the composite leading indicator (CLI).\n\nIt is designed to provide early signals of turning points\nin business cycles showing fluctuation of the economic activity around its long term potential level.\n\nCLIs show short-term economic movements in qualitative rather than quantitative terms.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.composite_leading_indicator(provider='oecd')\nobb.economy.composite_leading_indicator(country=all, provider='oecd')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['oecd']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", + "default": "oecd", + "optional": true + } + ], + "oecd": [ + { + "name": "country", + "type": "Literal['united_states', 'united_kingdom', 'japan', 'mexico', 'indonesia', 'australia', 'brazil', 'canada', 'italy', 'germany', 'turkey', 'france', 'south_africa', 'south_korea', 'spain', 'india', 'china', 'g7', 'g20', 'all']", + "description": "Country to get GDP for.", + "default": "united_states", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CLI]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['oecd']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "CLI value", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "Country for which CLI is given", + "default": null, + "optional": true + } + ], + "oecd": [] + }, + "model": "CLI" + }, + "/economy/short_term_interest_rate": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Short-term interest rates.\n\nThey are the rates at which short-term borrowings are effected between\nfinancial institutions or the rate at which short-term government paper is issued or traded in the market.\n\nShort-term interest rates are generally averages of daily rates, measured as a percentage.\nShort-term interest rates are based on three-month money market rates where available.\nTypical standardised names are \"money market rate\" and \"treasury bill rate\".", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.short_term_interest_rate(provider='oecd')\nobb.economy.short_term_interest_rate(country=all, frequency=quarterly, provider='oecd')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['oecd']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", + "default": "oecd", + "optional": true + } + ], + "oecd": [ + { + "name": "country", + "type": "Literal['belgium', 'ireland', 'mexico', 'indonesia', 'new_zealand', 'japan', 'united_kingdom', 'france', 'chile', 'canada', 'netherlands', 'united_states', 'south_korea', 'norway', 'austria', 'south_africa', 'denmark', 'switzerland', 'hungary', 'luxembourg', 'australia', 'germany', 'sweden', 'iceland', 'turkey', 'greece', 'israel', 'czech_republic', 'latvia', 'slovenia', 'poland', 'estonia', 'lithuania', 'portugal', 'costa_rica', 'slovakia', 'finland', 'spain', 'russia', 'euro_area19', 'colombia', 'italy', 'india', 'china', 'croatia', 'all']", + "description": "Country to get GDP for.", + "default": "united_states", + "optional": true + }, + { + "name": "frequency", + "type": "Literal['monthly', 'quarterly', 'annual']", + "description": "Frequency to get interest rate for for.", + "default": "monthly", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[STIR]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['oecd']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "Interest rate (given as a whole number, i.e 10=10%)", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "Country for which interest rate is given", + "default": null, + "optional": true + } + ], + "oecd": [] + }, + "model": "STIR" + }, + "/economy/long_term_interest_rate": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Long-term interest rates that refer to government bonds maturing in ten years.\n\nRates are mainly determined by the price charged by the lender, the risk from the borrower and the\nfall in the capital value. Long-term interest rates are generally averages of daily rates,\nmeasured as a percentage. These interest rates are implied by the prices at which the government bonds are\ntraded on financial markets, not the interest rates at which the loans were issued.\nIn all cases, they refer to bonds whose capital repayment is guaranteed by governments.\nLong-term interest rates are one of the determinants of business investment.\nLow long-term interest rates encourage investment in new equipment and high interest rates discourage it.\nInvestment is, in turn, a major source of economic growth.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.long_term_interest_rate(provider='oecd')\nobb.economy.long_term_interest_rate(country=all, frequency=quarterly, provider='oecd')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['oecd']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'oecd' if there is no default.", + "default": "oecd", + "optional": true + } + ], + "oecd": [ + { + "name": "country", + "type": "Literal['belgium', 'ireland', 'mexico', 'indonesia', 'new_zealand', 'japan', 'united_kingdom', 'france', 'chile', 'canada', 'netherlands', 'united_states', 'south_korea', 'norway', 'austria', 'south_africa', 'denmark', 'switzerland', 'hungary', 'luxembourg', 'australia', 'germany', 'sweden', 'iceland', 'turkey', 'greece', 'israel', 'czech_republic', 'latvia', 'slovenia', 'poland', 'estonia', 'lithuania', 'portugal', 'costa_rica', 'slovakia', 'finland', 'spain', 'russia', 'euro_area19', 'colombia', 'italy', 'india', 'china', 'croatia', 'all']", + "description": "Country to get GDP for.", + "default": "united_states", + "optional": true + }, + { + "name": "frequency", + "type": "Literal['monthly', 'quarterly', 'annual']", + "description": "Frequency to get interest rate for for.", + "default": "monthly", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[LTIR]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['oecd']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "Interest rate (given as a whole number, i.e 10=10%)", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "Country for which interest rate is given", + "default": null, + "optional": true + } + ], + "oecd": [] + }, + "model": "LTIR" + }, + "/economy/fred_regional": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Query the Geo Fred API for regional economic data by series group.\n\nThe series group ID is found by using `fred_search` and the `series_id` parameter.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.economy.fred_regional(symbol='NYICLAIMS', provider='fred')\n# With a date, time series data is returned.\nobb.economy.fred_regional(symbol='NYICLAIMS', start_date='2021-01-01', end_date='2021-12-31', limit=10, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 100000, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "is_series_group", + "type": "bool", + "description": "When True, the symbol provided is for a series_group, else it is for a series ID.", + "default": false, + "optional": true + }, + { + "name": "region_type", + "type": "Literal['bea', 'msa', 'frb', 'necta', 'state', 'country', 'county', 'censusregion']", + "description": "The type of regional data. Parameter is only valid when `is_series_group` is True.", + "default": null, + "optional": true + }, + { + "name": "season", + "type": "Literal['SA', 'NSA', 'SSA']", + "description": "The seasonal adjustments to the data. Parameter is only valid when `is_series_group` is True.", + "default": "NSA", + "optional": true + }, + { + "name": "units", + "type": "str", + "description": "The units of the data. This should match the units returned from searching by series ID. An incorrect field will not necessarily return an error. Parameter is only valid when `is_series_group` is True.", + "default": null, + "optional": true + }, + { + "name": "frequency", + "type": "Literal['d', 'w', 'bw', 'm', 'q', 'sa', 'a', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']", + "description": "Frequency aggregation to convert high frequency data to lower frequency. Parameter is only valid when `is_series_group` is True. a = Annual sa= Semiannual q = Quarterly m = Monthly w = Weekly d = Daily wef = Weekly, Ending Friday weth = Weekly, Ending Thursday wew = Weekly, Ending Wednesday wetu = Weekly, Ending Tuesday wem = Weekly, Ending Monday wesu = Weekly, Ending Sunday wesa = Weekly, Ending Saturday bwew = Biweekly, Ending Wednesday bwem = Biweekly, Ending Monday", + "default": null, + "optional": true + }, + { + "name": "aggregation_method", + "type": "Literal['avg', 'sum', 'eop']", + "description": "A key that indicates the aggregation method used for frequency aggregation. This parameter has no affect if the frequency parameter is not set. Only valid when `is_series_group` is True. avg = Average sum = Sum eop = End of Period", + "default": "avg", + "optional": true + }, + { + "name": "transform", + "type": "Literal['lin', 'chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']", + "description": "Transformation type. Only valid when `is_series_group` is True. lin = Levels (No transformation) chg = Change ch1 = Change from Year Ago pch = Percent Change pc1 = Percent Change from Year Ago pca = Compounded Annual Rate of Change cch = Continuously Compounded Rate of Change cca = Continuously Compounded Annual Rate of Change log = Natural Log", + "default": "lin", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[FredRegional]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + } + ], + "fred": [ + { + "name": "region", + "type": "str", + "description": "The name of the region.", + "default": "", + "optional": false + }, + { + "name": "code", + "type": "Union[str, int]", + "description": "The code of the region.", + "default": "", + "optional": false + }, + { + "name": "value", + "type": "Union[float, int]", + "description": "The obersvation value. The units are defined in the search results by series ID.", + "default": null, + "optional": true + }, + { + "name": "series_id", + "type": "str", + "description": "The individual series ID for the region.", + "default": "", + "optional": false + } + ] + }, + "model": "FredRegional" + }, + "/equity/calendar/ipo": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical and upcoming initial public offerings (IPOs).", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.ipo(provider='intrinio')\n# Get all IPOs available.\nobb.equity.calendar.ipo(provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": null, + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 100, + "optional": true + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [ + { + "name": "status", + "type": "Literal['upcoming', 'priced', 'withdrawn']", + "description": "Status of the IPO. [upcoming, priced, or withdrawn]", + "default": null, + "optional": true + }, + { + "name": "min_value", + "type": "int", + "description": "Return IPOs with an offer dollar amount greater than the given amount.", + "default": null, + "optional": true + }, + { + "name": "max_value", + "type": "int", + "description": "Return IPOs with an offer dollar amount less than the given amount.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CalendarIpo]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "ipo_date", + "type": "date", + "description": "The date of the IPO, when the stock first trades on a major exchange.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "status", + "type": "Literal['upcoming', 'priced', 'withdrawn']", + "description": "The status of the IPO. Upcoming IPOs have not taken place yet but are expected to. Priced IPOs have taken place. Withdrawn IPOs were expected to take place, but were subsequently withdrawn.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The acronym of the stock exchange that the company is going to trade publicly on. Typically NYSE or NASDAQ.", + "default": null, + "optional": true + }, + { + "name": "offer_amount", + "type": "float", + "description": "The total dollar amount of shares offered in the IPO. Typically this is share price * share count", + "default": null, + "optional": true + }, + { + "name": "share_price", + "type": "float", + "description": "The price per share at which the IPO was offered.", + "default": null, + "optional": true + }, + { + "name": "share_price_lowest", + "type": "float", + "description": "The expected lowest price per share at which the IPO will be offered. Before an IPO is priced, companies typically provide a range of prices per share at which they expect to offer the IPO (typically available for upcoming IPOs).", + "default": null, + "optional": true + }, + { + "name": "share_price_highest", + "type": "float", + "description": "The expected highest price per share at which the IPO will be offered. Before an IPO is priced, companies typically provide a range of prices per share at which they expect to offer the IPO (typically available for upcoming IPOs).", + "default": null, + "optional": true + }, + { + "name": "share_count", + "type": "int", + "description": "The number of shares offered in the IPO.", + "default": null, + "optional": true + }, + { + "name": "share_count_lowest", + "type": "int", + "description": "The expected lowest number of shares that will be offered in the IPO. Before an IPO is priced, companies typically provide a range of shares that they expect to offer in the IPO (typically available for upcoming IPOs).", + "default": null, + "optional": true + }, + { + "name": "share_count_highest", + "type": "int", + "description": "The expected highest number of shares that will be offered in the IPO. Before an IPO is priced, companies typically provide a range of shares that they expect to offer in the IPO (typically available for upcoming IPOs).", + "default": null, + "optional": true + }, + { + "name": "announcement_url", + "type": "str", + "description": "The URL to the company's announcement of the IPO", + "default": null, + "optional": true + }, + { + "name": "sec_report_url", + "type": "str", + "description": "The URL to the company's S-1, S-1/A, F-1, or F-1/A SEC filing, which is required to be filed before an IPO takes place.", + "default": null, + "optional": true + }, + { + "name": "open_price", + "type": "float", + "description": "The opening price at the beginning of the first trading day (only available for priced IPOs).", + "default": null, + "optional": true + }, + { + "name": "close_price", + "type": "float", + "description": "The closing price at the end of the first trading day (only available for priced IPOs).", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The volume at the end of the first trading day (only available for priced IPOs).", + "default": null, + "optional": true + }, + { + "name": "day_change", + "type": "float", + "description": "The percentage change between the open price and the close price on the first trading day (only available for priced IPOs).", + "default": null, + "optional": true + }, + { + "name": "week_change", + "type": "float", + "description": "The percentage change between the open price on the first trading day and the close price approximately a week after the first trading day (only available for priced IPOs).", + "default": null, + "optional": true + }, + { + "name": "month_change", + "type": "float", + "description": "The percentage change between the open price on the first trading day and the close price approximately a month after the first trading day (only available for priced IPOs).", + "default": null, + "optional": true + }, + { + "name": "id", + "type": "str", + "description": "The Intrinio ID of the IPO.", + "default": null, + "optional": true + }, + { + "name": "company", + "type": "IntrinioCompany", + "description": "The company that is going public via the IPO.", + "default": null, + "optional": true + }, + { + "name": "security", + "type": "IntrinioSecurity", + "description": "The primary Security for the Company that is going public via the IPO", + "default": null, + "optional": true + } + ] + }, + "model": "CalendarIpo" + }, + "/equity/calendar/dividend": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical and upcoming dividend payments. Includes dividend amount, ex-dividend and payment dates.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.dividend(provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CalendarDividend]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "ex_dividend_date", + "type": "date", + "description": "The ex-dividend date - the date on which the stock begins trading without rights to the dividend.", + "default": "", + "optional": false + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "amount", + "type": "float", + "description": "The dividend amount per share.", + "default": null, + "optional": true + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": null, + "optional": true + }, + { + "name": "record_date", + "type": "date", + "description": "The record date of ownership for eligibility.", + "default": null, + "optional": true + }, + { + "name": "payment_date", + "type": "date", + "description": "The payment date of the dividend.", + "default": null, + "optional": true + }, + { + "name": "declaration_date", + "type": "date", + "description": "Declaration date of the dividend.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "adjusted_amount", + "type": "float", + "description": "The adjusted-dividend amount.", + "default": null, + "optional": true + }, + { + "name": "label", + "type": "str", + "description": "Ex-dividend date formatted for display.", + "default": null, + "optional": true + } + ] + }, + "model": "CalendarDividend" + }, + "/equity/calendar/splits": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical and upcoming stock split operations.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.splits(provider='fmp')\n# Get stock splits calendar for specific dates.\nobb.equity.calendar.splits(start_date='2024-02-01', end_date='2024-02-07', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CalendarSplits]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "label", + "type": "str", + "description": "Label of the stock splits.", + "default": "", + "optional": false + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "numerator", + "type": "float", + "description": "Numerator of the stock splits.", + "default": "", + "optional": false + }, + { + "name": "denominator", + "type": "float", + "description": "Denominator of the stock splits.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "CalendarSplits" + }, + "/equity/calendar/earnings": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical and upcoming company earnings releases. Includes earnings per share (EPS) and revenue data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.calendar.earnings(provider='fmp')\n# Get earnings calendar for specific dates.\nobb.equity.calendar.earnings(start_date='2024-02-01', end_date='2024-02-07', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CalendarEarnings]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "report_date", + "type": "date", + "description": "The date of the earnings report.", + "default": "", + "optional": false + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": null, + "optional": true + }, + { + "name": "eps_previous", + "type": "float", + "description": "The earnings-per-share from the same previously reported period.", + "default": null, + "optional": true + }, + { + "name": "eps_consensus", + "type": "float", + "description": "The analyst conesus earnings-per-share estimate.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "eps_actual", + "type": "float", + "description": "The actual earnings per share announced.", + "default": null, + "optional": true + }, + { + "name": "revenue_actual", + "type": "float", + "description": "The actual reported revenue.", + "default": null, + "optional": true + }, + { + "name": "revenue_consensus", + "type": "float", + "description": "The revenue forecast consensus.", + "default": null, + "optional": true + }, + { + "name": "period_ending", + "type": "date", + "description": "The fiscal period end date.", + "default": null, + "optional": true + }, + { + "name": "reporting_time", + "type": "str", + "description": "The reporting time - e.g. after market close.", + "default": null, + "optional": true + }, + { + "name": "updated_date", + "type": "date", + "description": "The date the data was updated last.", + "default": null, + "optional": true + } + ] + }, + "model": "CalendarEarnings" + }, + "/equity/compare/peers": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the closest peers for a given company.\n\nPeers consist of companies trading on the same exchange, operating within the same sector\nand with comparable market capitalizations.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.compare.peers(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityPeers]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "peers_list", + "type": "List[str]", + "description": "A list of equity peers based on sector, exchange and market cap.", + "default": "", + "optional": true + } + ], + "fmp": [] + }, + "model": "EquityPeers" + }, + "/equity/estimates/price_target": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get analyst price targets by company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.price_target(provider='benzinga')\n# Get price targets for Microsoft using 'benzinga' as provider.\nobb.equity.estimates.price_target(start_date=2020-01-01, end_date=2024-02-16, limit=10, symbol='msft', provider='benzinga', action=downgrades)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): benzinga, fmp.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 200, + "optional": true + }, + { + "name": "provider", + "type": "Literal['benzinga', 'fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", + "default": "benzinga", + "optional": true + } + ], + "benzinga": [ + { + "name": "page", + "type": "int", + "description": "Page offset. For optimization, performance and technical reasons, page offsets are limited from 0 - 100000. Limit the query results by other parameters such as date. Used in conjunction with the limit and date parameters.", + "default": 0, + "optional": true + }, + { + "name": "date", + "type": "Union[date, str]", + "description": "Date for calendar data, shorthand for date_from and date_to.", + "default": null, + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "updated", + "type": "Union[date, int]", + "description": "Records last Updated Unix timestamp (UTC). This will force the sort order to be Greater Than or Equal to the timestamp indicated. The date can be a date string or a Unix timestamp. The date string must be in the format of YYYY-MM-DD.", + "default": null, + "optional": true + }, + { + "name": "importance", + "type": "int", + "description": "Importance level to filter by. Uses Greater Than or Equal To the importance indicated", + "default": null, + "optional": true + }, + { + "name": "action", + "type": "Literal['downgrades', 'maintains', 'reinstates', 'reiterates', 'upgrades', 'assumes', 'initiates', 'terminates', 'removes', 'suspends', 'firm_dissolved']", + "description": "Filter by a specific action_company.", + "default": null, + "optional": true + }, + { + "name": "analyst_ids", + "type": "Union[List[str], str]", + "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts.", + "default": null, + "optional": true + }, + { + "name": "firm_ids", + "type": "Union[List[str], str]", + "description": "Comma-separated list of firm IDs.", + "default": null, + "optional": true + }, + { + "name": "fields", + "type": "Union[List[str], str]", + "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "with_grade", + "type": "bool", + "description": "Include upgrades and downgrades in the response.", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[PriceTarget]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['benzinga', 'fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "published_date", + "type": "Union[date, datetime]", + "description": "Published date of the price target.", + "default": "", + "optional": false + }, + { + "name": "published_time", + "type": "datetime.time", + "description": "Time of the original rating, UTC.", + "default": null, + "optional": true + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "exchange", + "type": "str", + "description": "Exchange where the company is traded.", + "default": null, + "optional": true + }, + { + "name": "company_name", + "type": "str", + "description": "Name of company that is the subject of rating.", + "default": null, + "optional": true + }, + { + "name": "analyst_name", + "type": "str", + "description": "Analyst name.", + "default": null, + "optional": true + }, + { + "name": "analyst_firm", + "type": "str", + "description": "Name of the analyst firm that published the price target.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency the data is denominated in.", + "default": null, + "optional": true + }, + { + "name": "price_target", + "type": "float", + "description": "The current price target.", + "default": null, + "optional": true + }, + { + "name": "adj_price_target", + "type": "float", + "description": "Adjusted price target for splits and stock dividends.", + "default": null, + "optional": true + }, + { + "name": "price_target_previous", + "type": "float", + "description": "Previous price target.", + "default": null, + "optional": true + }, + { + "name": "previous_adj_price_target", + "type": "float", + "description": "Previous adjusted price target.", + "default": null, + "optional": true + }, + { + "name": "price_when_posted", + "type": "float", + "description": "Price when posted.", + "default": null, + "optional": true + }, + { + "name": "rating_current", + "type": "str", + "description": "The analyst's rating for the company.", + "default": null, + "optional": true + }, + { + "name": "rating_previous", + "type": "str", + "description": "Previous analyst rating for the company.", + "default": null, + "optional": true + }, + { + "name": "action", + "type": "str", + "description": "Description of the change in rating from firm's last rating.", + "default": null, + "optional": true + } + ], + "benzinga": [ + { + "name": "action_change", + "type": "Literal['Announces', 'Maintains', 'Lowers', 'Raises', 'Removes', 'Adjusts']", + "description": "Description of the change in price target from firm's last price target.", + "default": null, + "optional": true + }, + { + "name": "importance", + "type": "Literal[0, 1, 2, 3, 4, 5]", + "description": "Subjective Basis of How Important Event is to Market. 5 = High", + "default": null, + "optional": true + }, + { + "name": "notes", + "type": "str", + "description": "Notes of the price target.", + "default": null, + "optional": true + }, + { + "name": "analyst_id", + "type": "str", + "description": "Id of the analyst.", + "default": null, + "optional": true + }, + { + "name": "url_news", + "type": "str", + "description": "URL for analyst ratings news articles for this ticker on Benzinga.com.", + "default": null, + "optional": true + }, + { + "name": "url_analyst", + "type": "str", + "description": "URL for analyst ratings page for this ticker on Benzinga.com.", + "default": null, + "optional": true + }, + { + "name": "id", + "type": "str", + "description": "Unique ID of this entry.", + "default": null, + "optional": true + }, + { + "name": "last_updated", + "type": "datetime", + "description": "Last updated timestamp, UTC.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "news_url", + "type": "str", + "description": "News URL of the price target.", + "default": null, + "optional": true + }, + { + "name": "news_title", + "type": "str", + "description": "News title of the price target.", + "default": null, + "optional": true + }, + { + "name": "news_publisher", + "type": "str", + "description": "News publisher of the price target.", + "default": null, + "optional": true + }, + { + "name": "news_base_url", + "type": "str", + "description": "News base URL of the price target.", + "default": null, + "optional": true + } + ] + }, + "model": "PriceTarget" + }, + "/equity/estimates/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical analyst estimates for earnings and revenue.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.historical(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "period", + "type": "Literal['quarter', 'annual']", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[AnalystEstimates]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "estimated_revenue_low", + "type": "int", + "description": "Estimated revenue low.", + "default": null, + "optional": true + }, + { + "name": "estimated_revenue_high", + "type": "int", + "description": "Estimated revenue high.", + "default": null, + "optional": true + }, + { + "name": "estimated_revenue_avg", + "type": "int", + "description": "Estimated revenue average.", + "default": null, + "optional": true + }, + { + "name": "estimated_sga_expense_low", + "type": "int", + "description": "Estimated SGA expense low.", + "default": null, + "optional": true + }, + { + "name": "estimated_sga_expense_high", + "type": "int", + "description": "Estimated SGA expense high.", + "default": null, + "optional": true + }, + { + "name": "estimated_sga_expense_avg", + "type": "int", + "description": "Estimated SGA expense average.", + "default": null, + "optional": true + }, + { + "name": "estimated_ebitda_low", + "type": "int", + "description": "Estimated EBITDA low.", + "default": null, + "optional": true + }, + { + "name": "estimated_ebitda_high", + "type": "int", + "description": "Estimated EBITDA high.", + "default": null, + "optional": true + }, + { + "name": "estimated_ebitda_avg", + "type": "int", + "description": "Estimated EBITDA average.", + "default": null, + "optional": true + }, + { + "name": "estimated_ebit_low", + "type": "int", + "description": "Estimated EBIT low.", + "default": null, + "optional": true + }, + { + "name": "estimated_ebit_high", + "type": "int", + "description": "Estimated EBIT high.", + "default": null, + "optional": true + }, + { + "name": "estimated_ebit_avg", + "type": "int", + "description": "Estimated EBIT average.", + "default": null, + "optional": true + }, + { + "name": "estimated_net_income_low", + "type": "int", + "description": "Estimated net income low.", + "default": null, + "optional": true + }, + { + "name": "estimated_net_income_high", + "type": "int", + "description": "Estimated net income high.", + "default": null, + "optional": true + }, + { + "name": "estimated_net_income_avg", + "type": "int", + "description": "Estimated net income average.", + "default": null, + "optional": true + }, + { + "name": "estimated_eps_avg", + "type": "float", + "description": "Estimated EPS average.", + "default": null, + "optional": true + }, + { + "name": "estimated_eps_high", + "type": "float", + "description": "Estimated EPS high.", + "default": null, + "optional": true + }, + { + "name": "estimated_eps_low", + "type": "float", + "description": "Estimated EPS low.", + "default": null, + "optional": true + }, + { + "name": "number_analyst_estimated_revenue", + "type": "int", + "description": "Number of analysts who estimated revenue.", + "default": null, + "optional": true + }, + { + "name": "number_analysts_estimated_eps", + "type": "int", + "description": "Number of analysts who estimated EPS.", + "default": null, + "optional": true + } + ], + "fmp": [] + }, + "model": "AnalystEstimates" + }, + "/equity/estimates/consensus": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get consensus price target and recommendation.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.consensus(symbol='AAPL', provider='fmp')\nobb.equity.estimates.consensus(symbol='AAPL,MSFT', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, yfinance.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "industry_group_number", + "type": "int", + "description": "The Zacks industry group number.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[PriceTargetConsensus]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "The company name", + "default": null, + "optional": true + }, + { + "name": "target_high", + "type": "float", + "description": "High target of the price target consensus.", + "default": null, + "optional": true + }, + { + "name": "target_low", + "type": "float", + "description": "Low target of the price target consensus.", + "default": null, + "optional": true + }, + { + "name": "target_consensus", + "type": "float", + "description": "Consensus target of the price target consensus.", + "default": null, + "optional": true + }, + { + "name": "target_median", + "type": "float", + "description": "Median target of the price target consensus.", + "default": null, + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "standard_deviation", + "type": "float", + "description": "The standard deviation of target price estimates.", + "default": null, + "optional": true + }, + { + "name": "total_anaylsts", + "type": "int", + "description": "The total number of target price estimates in consensus.", + "default": null, + "optional": true + }, + { + "name": "raised", + "type": "int", + "description": "The number of analysts that have raised their target price estimates.", + "default": null, + "optional": true + }, + { + "name": "lowered", + "type": "int", + "description": "The number of analysts that have lowered their target price estimates.", + "default": null, + "optional": true + }, + { + "name": "most_recent_date", + "type": "date", + "description": "The date of the most recent estimate.", + "default": null, + "optional": true + }, + { + "name": "industry_group_number", + "type": "int", + "description": "The Zacks industry group number.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "recommendation", + "type": "str", + "description": "Recommendation - buy, sell, etc.", + "default": null, + "optional": true + }, + { + "name": "recommendation_mean", + "type": "float", + "description": "Mean recommendation score where 1 is strong buy and 5 is strong sell.", + "default": null, + "optional": true + }, + { + "name": "number_of_analysts", + "type": "int", + "description": "Number of analysts providing opinions.", + "default": null, + "optional": true + }, + { + "name": "current_price", + "type": "float", + "description": "Current price of the stock.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency the stock is priced in.", + "default": null, + "optional": true + } + ] + }, + "model": "PriceTargetConsensus" + }, + "/equity/estimates/analyst_search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search for specific analysts and get their forecast track record.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.analyst_search(provider='benzinga')\nobb.equity.estimates.analyst_search(firm_name='Wedbush', provider='benzinga')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "analyst_name", + "type": "Union[str, List[str]]", + "description": "Analyst names to return. Omitting will return all available analysts. Multiple items allowed for provider(s): benzinga.", + "default": null, + "optional": true + }, + { + "name": "firm_name", + "type": "Union[str, List[str]]", + "description": "Firm names to return. Omitting will return all available firms. Multiple items allowed for provider(s): benzinga.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['benzinga']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", + "default": "benzinga", + "optional": true + } + ], + "benzinga": [ + { + "name": "analyst_ids", + "type": "Union[str, List[str]]", + "description": "List of analyst IDs to return. Multiple items allowed for provider(s): benzinga.", + "default": null, + "optional": true + }, + { + "name": "firm_ids", + "type": "Union[str, List[str]]", + "description": "Firm IDs to return. Multiple items allowed for provider(s): benzinga.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "Number of results returned. Limit 1000.", + "default": 100, + "optional": true + }, + { + "name": "page", + "type": "int", + "description": "Page offset. For optimization, performance and technical reasons, page offsets are limited from 0 - 100000. Limit the query results by other parameters such as date.", + "default": 0, + "optional": true + }, + { + "name": "fields", + "type": "Union[str, List[str]]", + "description": "Fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple items allowed for provider(s): benzinga.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[AnalystSearch]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['benzinga']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "last_updated", + "type": "datetime", + "description": "Date of the last update.", + "default": null, + "optional": true + }, + { + "name": "firm_name", + "type": "str", + "description": "Firm name of the analyst.", + "default": null, + "optional": true + }, + { + "name": "name_first", + "type": "str", + "description": "Analyst first name.", + "default": null, + "optional": true + }, + { + "name": "name_last", + "type": "str", + "description": "Analyst last name.", + "default": null, + "optional": true + }, + { + "name": "name_full", + "type": "str", + "description": "Analyst full name.", + "default": "", + "optional": false + } + ], + "benzinga": [ + { + "name": "analyst_id", + "type": "str", + "description": "ID of the analyst.", + "default": null, + "optional": true + }, + { + "name": "firm_id", + "type": "str", + "description": "ID of the analyst firm.", + "default": null, + "optional": true + }, + { + "name": "smart_score", + "type": "float", + "description": "A weighted average of the total_ratings_percentile, overall_avg_return_percentile, and overall_success_rate", + "default": null, + "optional": true + }, + { + "name": "overall_success_rate", + "type": "float", + "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain overall.", + "default": null, + "optional": true + }, + { + "name": "overall_avg_return_percentile", + "type": "float", + "description": "The percentile (normalized) of this analyst's overall average return per rating in comparison to other analysts' overall average returns per rating.", + "default": null, + "optional": true + }, + { + "name": "total_ratings_percentile", + "type": "float", + "description": "The percentile (normalized) of this analyst's total number of ratings in comparison to the total number of ratings published by all other analysts", + "default": null, + "optional": true + }, + { + "name": "total_ratings", + "type": "int", + "description": "Number of recommendations made by this analyst.", + "default": null, + "optional": true + }, + { + "name": "overall_gain_count", + "type": "int", + "description": "The number of ratings that have gained value since the date of recommendation", + "default": null, + "optional": true + }, + { + "name": "overall_loss_count", + "type": "int", + "description": "The number of ratings that have lost value since the date of recommendation", + "default": null, + "optional": true + }, + { + "name": "overall_average_return", + "type": "float", + "description": "The average percent (normalized) price difference per rating since the date of recommendation", + "default": null, + "optional": true + }, + { + "name": "overall_std_dev", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings since the date of recommendation", + "default": null, + "optional": true + }, + { + "name": "gain_count_1m", + "type": "int", + "description": "The number of ratings that have gained value over the last month", + "default": null, + "optional": true + }, + { + "name": "loss_count_1m", + "type": "int", + "description": "The number of ratings that have lost value over the last month", + "default": null, + "optional": true + }, + { + "name": "average_return_1m", + "type": "float", + "description": "The average percent (normalized) price difference per rating over the last month", + "default": null, + "optional": true + }, + { + "name": "std_dev_1m", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last month", + "default": null, + "optional": true + }, + { + "name": "smart_score_1m", + "type": "float", + "description": "A weighted average smart score over the last month.", + "default": null, + "optional": true + }, + { + "name": "success_rate_1m", + "type": "float", + "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain over the last month", + "default": null, + "optional": true + }, + { + "name": "gain_count_3m", + "type": "int", + "description": "The number of ratings that have gained value over the last 3 months", + "default": null, + "optional": true + }, + { + "name": "loss_count_3m", + "type": "int", + "description": "The number of ratings that have lost value over the last 3 months", + "default": null, + "optional": true + }, + { + "name": "average_return_3m", + "type": "float", + "description": "The average percent (normalized) price difference per rating over the last 3 months", + "default": null, + "optional": true + }, + { + "name": "std_dev_3m", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 months", + "default": null, + "optional": true + }, + { + "name": "smart_score_3m", + "type": "float", + "description": "A weighted average smart score over the last 3 months.", + "default": null, + "optional": true + }, + { + "name": "success_rate_3m", + "type": "float", + "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 3 months", + "default": null, + "optional": true + }, + { + "name": "gain_count_6m", + "type": "int", + "description": "The number of ratings that have gained value over the last 6 months", + "default": null, + "optional": true + }, + { + "name": "loss_count_6m", + "type": "int", + "description": "The number of ratings that have lost value over the last 6 months", + "default": null, + "optional": true + }, + { + "name": "average_return_6m", + "type": "float", + "description": "The average percent (normalized) price difference per rating over the last 6 months", + "default": null, + "optional": true + }, + { + "name": "std_dev_6m", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 6 months", + "default": null, + "optional": true + }, + { + "name": "gain_count_9m", + "type": "int", + "description": "The number of ratings that have gained value over the last 9 months", + "default": null, + "optional": true + }, + { + "name": "loss_count_9m", + "type": "int", + "description": "The number of ratings that have lost value over the last 9 months", + "default": null, + "optional": true + }, + { + "name": "average_return_9m", + "type": "float", + "description": "The average percent (normalized) price difference per rating over the last 9 months", + "default": null, + "optional": true + }, + { + "name": "std_dev_9m", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 9 months", + "default": null, + "optional": true + }, + { + "name": "smart_score_9m", + "type": "float", + "description": "A weighted average smart score over the last 9 months.", + "default": null, + "optional": true + }, + { + "name": "success_rate_9m", + "type": "float", + "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 9 months", + "default": null, + "optional": true + }, + { + "name": "gain_count_1y", + "type": "int", + "description": "The number of ratings that have gained value over the last 1 year", + "default": null, + "optional": true + }, + { + "name": "loss_count_1y", + "type": "int", + "description": "The number of ratings that have lost value over the last 1 year", + "default": null, + "optional": true + }, + { + "name": "average_return_1y", + "type": "float", + "description": "The average percent (normalized) price difference per rating over the last 1 year", + "default": null, + "optional": true + }, + { + "name": "std_dev_1y", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 1 year", + "default": null, + "optional": true + }, + { + "name": "smart_score_1y", + "type": "float", + "description": "A weighted average smart score over the last 1 year.", + "default": null, + "optional": true + }, + { + "name": "success_rate_1y", + "type": "float", + "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 1 year", + "default": null, + "optional": true + }, + { + "name": "gain_count_2y", + "type": "int", + "description": "The number of ratings that have gained value over the last 2 years", + "default": null, + "optional": true + }, + { + "name": "loss_count_2y", + "type": "int", + "description": "The number of ratings that have lost value over the last 2 years", + "default": null, + "optional": true + }, + { + "name": "average_return_2y", + "type": "float", + "description": "The average percent (normalized) price difference per rating over the last 2 years", + "default": null, + "optional": true + }, + { + "name": "std_dev_2y", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 2 years", + "default": null, + "optional": true + }, + { + "name": "smart_score_2y", + "type": "float", + "description": "A weighted average smart score over the last 3 years.", + "default": null, + "optional": true + }, + { + "name": "success_rate_2y", + "type": "float", + "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 2 years", + "default": null, + "optional": true + }, + { + "name": "gain_count_3y", + "type": "int", + "description": "The number of ratings that have gained value over the last 3 years", + "default": null, + "optional": true + }, + { + "name": "loss_count_3y", + "type": "int", + "description": "The number of ratings that have lost value over the last 3 years", + "default": null, + "optional": true + }, + { + "name": "average_return_3y", + "type": "float", + "description": "The average percent (normalized) price difference per rating over the last 3 years", + "default": null, + "optional": true + }, + { + "name": "std_dev_3y", + "type": "float", + "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 years", + "default": null, + "optional": true + }, + { + "name": "smart_score_3y", + "type": "float", + "description": "A weighted average smart score over the last 3 years.", + "default": null, + "optional": true + }, + { + "name": "success_rate_3y", + "type": "float", + "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 3 years", + "default": null, + "optional": true + } + ] + }, + "model": "AnalystSearch" + }, + "/equity/estimates/forward_sales": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get forward sales estimates.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.forward_sales(symbol='AAPL', provider='intrinio')\nobb.equity.estimates.forward_sales(fiscal_year=2025, fiscal_period=fy, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [ + { + "name": "fiscal_year", + "type": "int", + "description": "The future fiscal year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used.", + "default": null, + "optional": true + }, + { + "name": "fiscal_period", + "type": "Literal['fy', 'q1', 'q2', 'q3', 'q4']", + "description": "The future fiscal period to retrieve estimates for.", + "default": null, + "optional": true + }, + { + "name": "calendar_year", + "type": "int", + "description": "The future calendar year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used.", + "default": null, + "optional": true + }, + { + "name": "calendar_period", + "type": "Literal['q1', 'q2', 'q3', 'q4']", + "description": "The future calendar period to retrieve estimates for.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ForwardSalesEstimates]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": null, + "optional": true + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "fiscal_year", + "type": "int", + "description": "Fiscal year for the estimate.", + "default": null, + "optional": true + }, + { + "name": "fiscal_period", + "type": "str", + "description": "Fiscal quarter for the estimate.", + "default": null, + "optional": true + }, + { + "name": "calendar_year", + "type": "int", + "description": "Calendar year for the estimate.", + "default": null, + "optional": true + }, + { + "name": "calendar_period", + "type": "str", + "description": "Calendar quarter for the estimate.", + "default": null, + "optional": true + }, + { + "name": "low_estimate", + "type": "int", + "description": "The sales estimate low for the period.", + "default": null, + "optional": true + }, + { + "name": "high_estimate", + "type": "int", + "description": "The sales estimate high for the period.", + "default": null, + "optional": true + }, + { + "name": "mean", + "type": "int", + "description": "The sales estimate mean for the period.", + "default": null, + "optional": true + }, + { + "name": "median", + "type": "int", + "description": "The sales estimate median for the period.", + "default": null, + "optional": true + }, + { + "name": "standard_deviation", + "type": "int", + "description": "The sales estimate standard deviation for the period.", + "default": null, + "optional": true + }, + { + "name": "number_of_analysts", + "type": "int", + "description": "Number of analysts providing estimates for the period.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "revisions_1w_up", + "type": "int", + "description": "Number of revisions up in the last week.", + "default": null, + "optional": true + }, + { + "name": "revisions_1w_down", + "type": "int", + "description": "Number of revisions down in the last week.", + "default": null, + "optional": true + }, + { + "name": "revisions_1w_change_percent", + "type": "float", + "description": "The analyst revisions percent change in estimate for the period of 1 week.", + "default": null, + "optional": true + }, + { + "name": "revisions_1m_up", + "type": "int", + "description": "Number of revisions up in the last month.", + "default": null, + "optional": true + }, + { + "name": "revisions_1m_down", + "type": "int", + "description": "Number of revisions down in the last month.", + "default": null, + "optional": true + }, + { + "name": "revisions_1m_change_percent", + "type": "float", + "description": "The analyst revisions percent change in estimate for the period of 1 month.", + "default": null, + "optional": true + }, + { + "name": "revisions_3m_up", + "type": "int", + "description": "Number of revisions up in the last 3 months.", + "default": null, + "optional": true + }, + { + "name": "revisions_3m_down", + "type": "int", + "description": "Number of revisions down in the last 3 months.", + "default": null, + "optional": true + }, + { + "name": "revisions_3m_change_percent", + "type": "float", + "description": "The analyst revisions percent change in estimate for the period of 3 months.", + "default": null, + "optional": true + } + ] + }, + "model": "ForwardSalesEstimates" + }, + "/equity/estimates/forward_eps": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get forward EPS estimates.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.forward_eps(symbol='AAPL', provider='intrinio')\nobb.equity.estimates.forward_eps(fiscal_year=2025, fiscal_period=fy, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "fiscal_period", + "type": "Literal['annual', 'quarter']", + "description": "The future fiscal period to retrieve estimates for.", + "default": "annual", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": null, + "optional": true + }, + { + "name": "include_historical", + "type": "bool", + "description": "If True, the data will include all past data and the limit will be ignored.", + "default": false, + "optional": true + } + ], + "intrinio": [ + { + "name": "fiscal_year", + "type": "int", + "description": "The future fiscal year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used.", + "default": null, + "optional": true + }, + { + "name": "fiscal_period", + "type": "Literal['fy', 'q1', 'q2', 'q3', 'q4']", + "description": "The future fiscal period to retrieve estimates for.", + "default": null, + "optional": true + }, + { + "name": "calendar_year", + "type": "int", + "description": "The future calendar year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used.", + "default": null, + "optional": true + }, + { + "name": "calendar_period", + "type": "Literal['q1', 'q2', 'q3', 'q4']", + "description": "The future calendar period to retrieve estimates for.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ForwardEpsEstimates]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": null, + "optional": true + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "fiscal_year", + "type": "int", + "description": "Fiscal year for the estimate.", + "default": null, + "optional": true + }, + { + "name": "fiscal_period", + "type": "str", + "description": "Fiscal quarter for the estimate.", + "default": null, + "optional": true + }, + { + "name": "calendar_year", + "type": "int", + "description": "Calendar year for the estimate.", + "default": null, + "optional": true + }, + { + "name": "calendar_period", + "type": "str", + "description": "Calendar quarter for the estimate.", + "default": null, + "optional": true + }, + { + "name": "low_estimate", + "type": "float", + "description": "Estimated EPS low for the period.", + "default": null, + "optional": true + }, + { + "name": "high_estimate", + "type": "float", + "description": "Estimated EPS high for the period.", + "default": null, + "optional": true + }, + { + "name": "mean", + "type": "float", + "description": "Estimated EPS mean for the period.", + "default": null, + "optional": true + }, + { + "name": "median", + "type": "float", + "description": "Estimated EPS median for the period.", + "default": null, + "optional": true + }, + { + "name": "standard_deviation", + "type": "float", + "description": "Estimated EPS standard deviation for the period.", + "default": null, + "optional": true + }, + { + "name": "number_of_analysts", + "type": "int", + "description": "Number of analysts providing estimates for the period.", + "default": null, + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "revisions_change_percent", + "type": "float", + "description": "The earnings per share (EPS) percent change in estimate for the period.", + "default": null, + "optional": true + }, + { + "name": "mean_1w", + "type": "float", + "description": "The mean estimate for the period one week ago.", + "default": null, + "optional": true + }, + { + "name": "mean_1m", + "type": "float", + "description": "The mean estimate for the period one month ago.", + "default": null, + "optional": true + }, + { + "name": "mean_2m", + "type": "float", + "description": "The mean estimate for the period two months ago.", + "default": null, + "optional": true + }, + { + "name": "mean_3m", + "type": "float", + "description": "The mean estimate for the period three months ago.", + "default": null, + "optional": true + } + ] + }, + "model": "ForwardEpsEstimates" + }, + "/equity/discovery/gainers": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the top price gainers in the stock market.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.gainers(provider='yfinance')\nobb.equity.discovery.gainers(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityGainers]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": "", + "optional": false + }, + { + "name": "change", + "type": "float", + "description": "Change in price value.", + "default": "", + "optional": false + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "market_cap", + "type": "float", + "description": "Market Cap.", + "default": "", + "optional": false + }, + { + "name": "avg_volume_3_months", + "type": "float", + "description": "Average volume over the last 3 months in millions.", + "default": "", + "optional": false + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "PE Ratio (TTM).", + "default": null, + "optional": true + } + ] + }, + "model": "EquityGainers" + }, + "/equity/discovery/losers": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the top price losers in the stock market.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.losers(provider='yfinance')\nobb.equity.discovery.losers(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityLosers]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": "", + "optional": false + }, + { + "name": "change", + "type": "float", + "description": "Change in price value.", + "default": "", + "optional": false + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "market_cap", + "type": "float", + "description": "Market Cap.", + "default": "", + "optional": false + }, + { + "name": "avg_volume_3_months", + "type": "float", + "description": "Average volume over the last 3 months in millions.", + "default": "", + "optional": false + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "PE Ratio (TTM).", + "default": null, + "optional": true + } + ] + }, + "model": "EquityLosers" + }, + "/equity/discovery/active": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the most actively traded stocks based on volume.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.active(provider='yfinance')\nobb.equity.discovery.active(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityActive]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": "", + "optional": false + }, + { + "name": "change", + "type": "float", + "description": "Change in price value.", + "default": "", + "optional": false + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "market_cap", + "type": "float", + "description": "Market Cap displayed in billions.", + "default": "", + "optional": false + }, + { + "name": "avg_volume_3_months", + "type": "float", + "description": "Average volume over the last 3 months in millions.", + "default": "", + "optional": false + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "PE Ratio (TTM).", + "default": null, + "optional": true + } + ] + }, + "model": "EquityActive" + }, + "/equity/discovery/undervalued_large_caps": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get potentially undervalued large cap stocks.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.undervalued_large_caps(provider='yfinance')\nobb.equity.discovery.undervalued_large_caps(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityUndervaluedLargeCaps]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": "", + "optional": false + }, + { + "name": "change", + "type": "float", + "description": "Change in price value.", + "default": "", + "optional": false + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "market_cap", + "type": "float", + "description": "Market Cap.", + "default": null, + "optional": true + }, + { + "name": "avg_volume_3_months", + "type": "float", + "description": "Average volume over the last 3 months in millions.", + "default": null, + "optional": true + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "PE Ratio (TTM).", + "default": null, + "optional": true + } + ] + }, + "model": "EquityUndervaluedLargeCaps" + }, + "/equity/discovery/undervalued_growth": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get potentially undervalued growth stocks.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.undervalued_growth(provider='yfinance')\nobb.equity.discovery.undervalued_growth(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityUndervaluedGrowth]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": "", + "optional": false + }, + { + "name": "change", + "type": "float", + "description": "Change in price value.", + "default": "", + "optional": false + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "market_cap", + "type": "float", + "description": "Market Cap.", + "default": null, + "optional": true + }, + { + "name": "avg_volume_3_months", + "type": "float", + "description": "Average volume over the last 3 months in millions.", + "default": null, + "optional": true + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "PE Ratio (TTM).", + "default": null, + "optional": true + } + ] + }, + "model": "EquityUndervaluedGrowth" + }, + "/equity/discovery/aggressive_small_caps": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get top small cap stocks based on earnings growth.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.aggressive_small_caps(provider='yfinance')\nobb.equity.discovery.aggressive_small_caps(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityAggressiveSmallCaps]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": "", + "optional": false + }, + { + "name": "change", + "type": "float", + "description": "Change in price value.", + "default": "", + "optional": false + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "market_cap", + "type": "float", + "description": "Market Cap.", + "default": null, + "optional": true + }, + { + "name": "avg_volume_3_months", + "type": "float", + "description": "Average volume over the last 3 months in millions.", + "default": null, + "optional": true + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "PE Ratio (TTM).", + "default": null, + "optional": true + } + ] + }, + "model": "EquityAggressiveSmallCaps" + }, + "/equity/discovery/growth_tech": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get top tech stocks based on revenue and earnings growth.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.growth_tech(provider='yfinance')\nobb.equity.discovery.growth_tech(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'yfinance' if there is no default.", + "default": "yfinance", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[GrowthTechEquities]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the entity.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": "", + "optional": false + }, + { + "name": "change", + "type": "float", + "description": "Change in price value.", + "default": "", + "optional": false + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "float", + "description": "The trading volume.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "market_cap", + "type": "float", + "description": "Market Cap.", + "default": null, + "optional": true + }, + { + "name": "avg_volume_3_months", + "type": "float", + "description": "Average volume over the last 3 months in millions.", + "default": null, + "optional": true + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "PE Ratio (TTM).", + "default": null, + "optional": true + } + ] + }, + "model": "GrowthTechEquities" + }, + "/equity/discovery/filings": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more.\n\nSEC filings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114,\nForeign Investment Disclosures and others. The annual 10-K report is required to be\nfiled annually and includes the company's financial statements, management discussion and analysis,\nand audited financial statements.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.filings(provider='fmp')\n# Get filings for the year 2023, limited to 100 results\nobb.equity.discovery.filings(start_date='2023-01-01', end_date='2023-12-31', limit=100, provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "form_type", + "type": "str", + "description": "Filter by form type. Visit https://www.sec.gov/forms for a list of supported form types.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 100, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "is_done", + "type": "bool", + "description": "Flag for whether or not the filing is done.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[DiscoveryFilings]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "cik", + "type": "str", + "description": "Central Index Key (CIK) for the requested entity.", + "default": "", + "optional": false + }, + { + "name": "title", + "type": "str", + "description": "Title of the filing.", + "default": "", + "optional": false + }, + { + "name": "date", + "type": "datetime", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "form_type", + "type": "str", + "description": "The form type of the filing", + "default": "", + "optional": false + }, + { + "name": "link", + "type": "str", + "description": "URL to the filing page on the SEC site.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "DiscoveryFilings" + }, + "/equity/fundamental/multiples": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get equity valuation multiples for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.multiples(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityValuationMultiples]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "revenue_per_share_ttm", + "type": "float", + "description": "Revenue per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "net_income_per_share_ttm", + "type": "float", + "description": "Net income per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "operating_cash_flow_per_share_ttm", + "type": "float", + "description": "Operating cash flow per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_per_share_ttm", + "type": "float", + "description": "Free cash flow per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "cash_per_share_ttm", + "type": "float", + "description": "Cash per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "book_value_per_share_ttm", + "type": "float", + "description": "Book value per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "tangible_book_value_per_share_ttm", + "type": "float", + "description": "Tangible book value per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "shareholders_equity_per_share_ttm", + "type": "float", + "description": "Shareholders equity per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "interest_debt_per_share_ttm", + "type": "float", + "description": "Interest debt per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "market_cap_ttm", + "type": "float", + "description": "Market capitalization calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "enterprise_value_ttm", + "type": "float", + "description": "Enterprise value calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "pe_ratio_ttm", + "type": "float", + "description": "Price-to-earnings ratio (P/E ratio) calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "price_to_sales_ratio_ttm", + "type": "float", + "description": "Price-to-sales ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "pocf_ratio_ttm", + "type": "float", + "description": "Price-to-operating cash flow ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "pfcf_ratio_ttm", + "type": "float", + "description": "Price-to-free cash flow ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "pb_ratio_ttm", + "type": "float", + "description": "Price-to-book ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "ptb_ratio_ttm", + "type": "float", + "description": "Price-to-tangible book ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "ev_to_sales_ttm", + "type": "float", + "description": "Enterprise value-to-sales ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "enterprise_value_over_ebitda_ttm", + "type": "float", + "description": "Enterprise value-to-EBITDA ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "ev_to_operating_cash_flow_ttm", + "type": "float", + "description": "Enterprise value-to-operating cash flow ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "ev_to_free_cash_flow_ttm", + "type": "float", + "description": "Enterprise value-to-free cash flow ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "earnings_yield_ttm", + "type": "float", + "description": "Earnings yield calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_yield_ttm", + "type": "float", + "description": "Free cash flow yield calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "debt_to_equity_ttm", + "type": "float", + "description": "Debt-to-equity ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "debt_to_assets_ttm", + "type": "float", + "description": "Debt-to-assets ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "net_debt_to_ebitda_ttm", + "type": "float", + "description": "Net debt-to-EBITDA ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "current_ratio_ttm", + "type": "float", + "description": "Current ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "interest_coverage_ttm", + "type": "float", + "description": "Interest coverage calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "income_quality_ttm", + "type": "float", + "description": "Income quality calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield_ttm", + "type": "float", + "description": "Dividend yield calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield_percentage_ttm", + "type": "float", + "description": "Dividend yield percentage calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "dividend_to_market_cap_ttm", + "type": "float", + "description": "Dividend to market capitalization ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "dividend_per_share_ttm", + "type": "float", + "description": "Dividend per share calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "payout_ratio_ttm", + "type": "float", + "description": "Payout ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "sales_general_and_administrative_to_revenue_ttm", + "type": "float", + "description": "Sales general and administrative expenses-to-revenue ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "research_and_development_to_revenue_ttm", + "type": "float", + "description": "Research and development expenses-to-revenue ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "intangibles_to_total_assets_ttm", + "type": "float", + "description": "Intangibles-to-total assets ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "capex_to_operating_cash_flow_ttm", + "type": "float", + "description": "Capital expenditures-to-operating cash flow ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "capex_to_revenue_ttm", + "type": "float", + "description": "Capital expenditures-to-revenue ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "capex_to_depreciation_ttm", + "type": "float", + "description": "Capital expenditures-to-depreciation ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "stock_based_compensation_to_revenue_ttm", + "type": "float", + "description": "Stock-based compensation-to-revenue ratio calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "graham_number_ttm", + "type": "float", + "description": "Graham number calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "roic_ttm", + "type": "float", + "description": "Return on invested capital calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "return_on_tangible_assets_ttm", + "type": "float", + "description": "Return on tangible assets calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "graham_net_net_ttm", + "type": "float", + "description": "Graham net-net working capital calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "working_capital_ttm", + "type": "float", + "description": "Working capital calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "tangible_asset_value_ttm", + "type": "float", + "description": "Tangible asset value calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "net_current_asset_value_ttm", + "type": "float", + "description": "Net current asset value calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "invested_capital_ttm", + "type": "float", + "description": "Invested capital calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "average_receivables_ttm", + "type": "float", + "description": "Average receivables calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "average_payables_ttm", + "type": "float", + "description": "Average payables calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "average_inventory_ttm", + "type": "float", + "description": "Average inventory calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "days_sales_outstanding_ttm", + "type": "float", + "description": "Days sales outstanding calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "days_payables_outstanding_ttm", + "type": "float", + "description": "Days payables outstanding calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "days_of_inventory_on_hand_ttm", + "type": "float", + "description": "Days of inventory on hand calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "receivables_turnover_ttm", + "type": "float", + "description": "Receivables turnover calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "payables_turnover_ttm", + "type": "float", + "description": "Payables turnover calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "inventory_turnover_ttm", + "type": "float", + "description": "Inventory turnover calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "roe_ttm", + "type": "float", + "description": "Return on equity calculated as trailing twelve months.", + "default": null, + "optional": true + }, + { + "name": "capex_per_share_ttm", + "type": "float", + "description": "Capital expenditures per share calculated as trailing twelve months.", + "default": null, + "optional": true + } + ], + "fmp": [] + }, + "model": "EquityValuationMultiples" + }, + "/equity/fundamental/balance": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the balance sheet for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.balance(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.balance(symbol='AAPL', period='annual', limit=5, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "limit", + "type": "Annotated[int, Ge(ge=0)]", + "description": "The number of data entries to return.", + "default": 5, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "fiscal_year", + "type": "int", + "description": "The specific fiscal year. Reports do not go beyond 2008.", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "filing_date", + "type": "date", + "description": "Filing date of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "filing_date_lt", + "type": "date", + "description": "Filing date less than the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_lte", + "type": "date", + "description": "Filing date less than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_gt", + "type": "date", + "description": "Filing date greater than the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_gte", + "type": "date", + "description": "Filing date greater than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date", + "type": "date", + "description": "Period of report date of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_lt", + "type": "date", + "description": "Period of report date less than the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_lte", + "type": "date", + "description": "Period of report date less than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_gt", + "type": "date", + "description": "Period of report date greater than the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_gte", + "type": "date", + "description": "Period of report date greater than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "include_sources", + "type": "bool", + "description": "Whether to include the sources of the financial statement.", + "default": true, + "optional": true + }, + { + "name": "order", + "type": "Literal['asc', 'desc']", + "description": "Order of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "sort", + "type": "Literal['filing_date', 'period_of_report_date']", + "description": "Sort of the financial statement.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[BalanceSheet]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": "", + "optional": false + }, + { + "name": "fiscal_period", + "type": "str", + "description": "The fiscal period of the report.", + "default": null, + "optional": true + }, + { + "name": "fiscal_year", + "type": "int", + "description": "The fiscal year of the fiscal period.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "filing_date", + "type": "date", + "description": "The date when the filing was made.", + "default": null, + "optional": true + }, + { + "name": "accepted_date", + "type": "datetime", + "description": "The date and time when the filing was accepted.", + "default": null, + "optional": true + }, + { + "name": "reported_currency", + "type": "str", + "description": "The currency in which the balance sheet was reported.", + "default": null, + "optional": true + }, + { + "name": "cash_and_cash_equivalents", + "type": "float", + "description": "Cash and cash equivalents.", + "default": null, + "optional": true + }, + { + "name": "short_term_investments", + "type": "float", + "description": "Short term investments.", + "default": null, + "optional": true + }, + { + "name": "cash_and_short_term_investments", + "type": "float", + "description": "Cash and short term investments.", + "default": null, + "optional": true + }, + { + "name": "net_receivables", + "type": "float", + "description": "Net receivables.", + "default": null, + "optional": true + }, + { + "name": "inventory", + "type": "float", + "description": "Inventory.", + "default": null, + "optional": true + }, + { + "name": "other_current_assets", + "type": "float", + "description": "Other current assets.", + "default": null, + "optional": true + }, + { + "name": "total_current_assets", + "type": "float", + "description": "Total current assets.", + "default": null, + "optional": true + }, + { + "name": "plant_property_equipment_net", + "type": "float", + "description": "Plant property equipment net.", + "default": null, + "optional": true + }, + { + "name": "goodwill", + "type": "float", + "description": "Goodwill.", + "default": null, + "optional": true + }, + { + "name": "intangible_assets", + "type": "float", + "description": "Intangible assets.", + "default": null, + "optional": true + }, + { + "name": "goodwill_and_intangible_assets", + "type": "float", + "description": "Goodwill and intangible assets.", + "default": null, + "optional": true + }, + { + "name": "long_term_investments", + "type": "float", + "description": "Long term investments.", + "default": null, + "optional": true + }, + { + "name": "tax_assets", + "type": "float", + "description": "Tax assets.", + "default": null, + "optional": true + }, + { + "name": "other_non_current_assets", + "type": "float", + "description": "Other non current assets.", + "default": null, + "optional": true + }, + { + "name": "non_current_assets", + "type": "float", + "description": "Total non current assets.", + "default": null, + "optional": true + }, + { + "name": "other_assets", + "type": "float", + "description": "Other assets.", + "default": null, + "optional": true + }, + { + "name": "total_assets", + "type": "float", + "description": "Total assets.", + "default": null, + "optional": true + }, + { + "name": "accounts_payable", + "type": "float", + "description": "Accounts payable.", + "default": null, + "optional": true + }, + { + "name": "short_term_debt", + "type": "float", + "description": "Short term debt.", + "default": null, + "optional": true + }, + { + "name": "tax_payables", + "type": "float", + "description": "Tax payables.", + "default": null, + "optional": true + }, + { + "name": "current_deferred_revenue", + "type": "float", + "description": "Current deferred revenue.", + "default": null, + "optional": true + }, + { + "name": "other_current_liabilities", + "type": "float", + "description": "Other current liabilities.", + "default": null, + "optional": true + }, + { + "name": "total_current_liabilities", + "type": "float", + "description": "Total current liabilities.", + "default": null, + "optional": true + }, + { + "name": "long_term_debt", + "type": "float", + "description": "Long term debt.", + "default": null, + "optional": true + }, + { + "name": "deferred_revenue_non_current", + "type": "float", + "description": "Non current deferred revenue.", + "default": null, + "optional": true + }, + { + "name": "deferred_tax_liabilities_non_current", + "type": "float", + "description": "Deferred tax liabilities non current.", + "default": null, + "optional": true + }, + { + "name": "other_non_current_liabilities", + "type": "float", + "description": "Other non current liabilities.", + "default": null, + "optional": true + }, + { + "name": "total_non_current_liabilities", + "type": "float", + "description": "Total non current liabilities.", + "default": null, + "optional": true + }, + { + "name": "other_liabilities", + "type": "float", + "description": "Other liabilities.", + "default": null, + "optional": true + }, + { + "name": "capital_lease_obligations", + "type": "float", + "description": "Capital lease obligations.", + "default": null, + "optional": true + }, + { + "name": "total_liabilities", + "type": "float", + "description": "Total liabilities.", + "default": null, + "optional": true + }, + { + "name": "preferred_stock", + "type": "float", + "description": "Preferred stock.", + "default": null, + "optional": true + }, + { + "name": "common_stock", + "type": "float", + "description": "Common stock.", + "default": null, + "optional": true + }, + { + "name": "retained_earnings", + "type": "float", + "description": "Retained earnings.", + "default": null, + "optional": true + }, + { + "name": "accumulated_other_comprehensive_income", + "type": "float", + "description": "Accumulated other comprehensive income (loss).", + "default": null, + "optional": true + }, + { + "name": "other_shareholders_equity", + "type": "float", + "description": "Other shareholders equity.", + "default": null, + "optional": true + }, + { + "name": "other_total_shareholders_equity", + "type": "float", + "description": "Other total shareholders equity.", + "default": null, + "optional": true + }, + { + "name": "total_common_equity", + "type": "float", + "description": "Total common equity.", + "default": null, + "optional": true + }, + { + "name": "total_equity_non_controlling_interests", + "type": "float", + "description": "Total equity non controlling interests.", + "default": null, + "optional": true + }, + { + "name": "total_liabilities_and_shareholders_equity", + "type": "float", + "description": "Total liabilities and shareholders equity.", + "default": null, + "optional": true + }, + { + "name": "minority_interest", + "type": "float", + "description": "Minority interest.", + "default": null, + "optional": true + }, + { + "name": "total_liabilities_and_total_equity", + "type": "float", + "description": "Total liabilities and total equity.", + "default": null, + "optional": true + }, + { + "name": "total_investments", + "type": "float", + "description": "Total investments.", + "default": null, + "optional": true + }, + { + "name": "total_debt", + "type": "float", + "description": "Total debt.", + "default": null, + "optional": true + }, + { + "name": "net_debt", + "type": "float", + "description": "Net debt.", + "default": null, + "optional": true + }, + { + "name": "link", + "type": "str", + "description": "Link to the filing.", + "default": null, + "optional": true + }, + { + "name": "final_link", + "type": "str", + "description": "Link to the filing document.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "reported_currency", + "type": "str", + "description": "The currency in which the balance sheet is reported.", + "default": null, + "optional": true + }, + { + "name": "cash_and_cash_equivalents", + "type": "float", + "description": "Cash and cash equivalents.", + "default": null, + "optional": true + }, + { + "name": "cash_and_due_from_banks", + "type": "float", + "description": "Cash and due from banks.", + "default": null, + "optional": true + }, + { + "name": "restricted_cash", + "type": "float", + "description": "Restricted cash.", + "default": null, + "optional": true + }, + { + "name": "short_term_investments", + "type": "float", + "description": "Short term investments.", + "default": null, + "optional": true + }, + { + "name": "federal_funds_sold", + "type": "float", + "description": "Federal funds sold.", + "default": null, + "optional": true + }, + { + "name": "accounts_receivable", + "type": "float", + "description": "Accounts receivable.", + "default": null, + "optional": true + }, + { + "name": "note_and_lease_receivable", + "type": "float", + "description": "Note and lease receivable. (Vendor non-trade receivables)", + "default": null, + "optional": true + }, + { + "name": "inventories", + "type": "float", + "description": "Net Inventories.", + "default": null, + "optional": true + }, + { + "name": "customer_and_other_receivables", + "type": "float", + "description": "Customer and other receivables.", + "default": null, + "optional": true + }, + { + "name": "interest_bearing_deposits_at_other_banks", + "type": "float", + "description": "Interest bearing deposits at other banks.", + "default": null, + "optional": true + }, + { + "name": "time_deposits_placed_and_other_short_term_investments", + "type": "float", + "description": "Time deposits placed and other short term investments.", + "default": null, + "optional": true + }, + { + "name": "trading_account_securities", + "type": "float", + "description": "Trading account securities.", + "default": null, + "optional": true + }, + { + "name": "loans_and_leases", + "type": "float", + "description": "Loans and leases.", + "default": null, + "optional": true + }, + { + "name": "allowance_for_loan_and_lease_losses", + "type": "float", + "description": "Allowance for loan and lease losses.", + "default": null, + "optional": true + }, + { + "name": "current_deferred_refundable_income_taxes", + "type": "float", + "description": "Current deferred refundable income taxes.", + "default": null, + "optional": true + }, + { + "name": "other_current_assets", + "type": "float", + "description": "Other current assets.", + "default": null, + "optional": true + }, + { + "name": "loans_and_leases_net_of_allowance", + "type": "float", + "description": "Loans and leases net of allowance.", + "default": null, + "optional": true + }, + { + "name": "accrued_investment_income", + "type": "float", + "description": "Accrued investment income.", + "default": null, + "optional": true + }, + { + "name": "other_current_non_operating_assets", + "type": "float", + "description": "Other current non-operating assets.", + "default": null, + "optional": true + }, + { + "name": "loans_held_for_sale", + "type": "float", + "description": "Loans held for sale.", + "default": null, + "optional": true + }, + { + "name": "prepaid_expenses", + "type": "float", + "description": "Prepaid expenses.", + "default": null, + "optional": true + }, + { + "name": "total_current_assets", + "type": "float", + "description": "Total current assets.", + "default": null, + "optional": true + }, + { + "name": "plant_property_equipment_gross", + "type": "float", + "description": "Plant property equipment gross.", + "default": null, + "optional": true + }, + { + "name": "accumulated_depreciation", + "type": "float", + "description": "Accumulated depreciation.", + "default": null, + "optional": true + }, + { + "name": "premises_and_equipment_net", + "type": "float", + "description": "Net premises and equipment.", + "default": null, + "optional": true + }, + { + "name": "plant_property_equipment_net", + "type": "float", + "description": "Net plant property equipment.", + "default": null, + "optional": true + }, + { + "name": "long_term_investments", + "type": "float", + "description": "Long term investments.", + "default": null, + "optional": true + }, + { + "name": "mortgage_servicing_rights", + "type": "float", + "description": "Mortgage servicing rights.", + "default": null, + "optional": true + }, + { + "name": "unearned_premiums_asset", + "type": "float", + "description": "Unearned premiums asset.", + "default": null, + "optional": true + }, + { + "name": "non_current_note_lease_receivables", + "type": "float", + "description": "Non-current note lease receivables.", + "default": null, + "optional": true + }, + { + "name": "deferred_acquisition_cost", + "type": "float", + "description": "Deferred acquisition cost.", + "default": null, + "optional": true + }, + { + "name": "goodwill", + "type": "float", + "description": "Goodwill.", + "default": null, + "optional": true + }, + { + "name": "separate_account_business_assets", + "type": "float", + "description": "Separate account business assets.", + "default": null, + "optional": true + }, + { + "name": "non_current_deferred_refundable_income_taxes", + "type": "float", + "description": "Noncurrent deferred refundable income taxes.", + "default": null, + "optional": true + }, + { + "name": "intangible_assets", + "type": "float", + "description": "Intangible assets.", + "default": null, + "optional": true + }, + { + "name": "employee_benefit_assets", + "type": "float", + "description": "Employee benefit assets.", + "default": null, + "optional": true + }, + { + "name": "other_assets", + "type": "float", + "description": "Other assets.", + "default": null, + "optional": true + }, + { + "name": "other_non_current_operating_assets", + "type": "float", + "description": "Other noncurrent operating assets.", + "default": null, + "optional": true + }, + { + "name": "other_non_current_non_operating_assets", + "type": "float", + "description": "Other noncurrent non-operating assets.", + "default": null, + "optional": true + }, + { + "name": "interest_bearing_deposits", + "type": "float", + "description": "Interest bearing deposits.", + "default": null, + "optional": true + }, + { + "name": "total_non_current_assets", + "type": "float", + "description": "Total noncurrent assets.", + "default": null, + "optional": true + }, + { + "name": "total_assets", + "type": "float", + "description": "Total assets.", + "default": null, + "optional": true + }, + { + "name": "non_interest_bearing_deposits", + "type": "float", + "description": "Non interest bearing deposits.", + "default": null, + "optional": true + }, + { + "name": "federal_funds_purchased_and_securities_sold", + "type": "float", + "description": "Federal funds purchased and securities sold.", + "default": null, + "optional": true + }, + { + "name": "bankers_acceptance_outstanding", + "type": "float", + "description": "Bankers acceptance outstanding.", + "default": null, + "optional": true + }, + { + "name": "short_term_debt", + "type": "float", + "description": "Short term debt.", + "default": null, + "optional": true + }, + { + "name": "accounts_payable", + "type": "float", + "description": "Accounts payable.", + "default": null, + "optional": true + }, + { + "name": "current_deferred_revenue", + "type": "float", + "description": "Current deferred revenue.", + "default": null, + "optional": true + }, + { + "name": "current_deferred_payable_income_tax_liabilities", + "type": "float", + "description": "Current deferred payable income tax liabilities.", + "default": null, + "optional": true + }, + { + "name": "accrued_interest_payable", + "type": "float", + "description": "Accrued interest payable.", + "default": null, + "optional": true + }, + { + "name": "accrued_expenses", + "type": "float", + "description": "Accrued expenses.", + "default": null, + "optional": true + }, + { + "name": "other_short_term_payables", + "type": "float", + "description": "Other short term payables.", + "default": null, + "optional": true + }, + { + "name": "customer_deposits", + "type": "float", + "description": "Customer deposits.", + "default": null, + "optional": true + }, + { + "name": "dividends_payable", + "type": "float", + "description": "Dividends payable.", + "default": null, + "optional": true + }, + { + "name": "claims_and_claim_expense", + "type": "float", + "description": "Claims and claim expense.", + "default": null, + "optional": true + }, + { + "name": "future_policy_benefits", + "type": "float", + "description": "Future policy benefits.", + "default": null, + "optional": true + }, + { + "name": "current_employee_benefit_liabilities", + "type": "float", + "description": "Current employee benefit liabilities.", + "default": null, + "optional": true + }, + { + "name": "unearned_premiums_liability", + "type": "float", + "description": "Unearned premiums liability.", + "default": null, + "optional": true + }, + { + "name": "other_taxes_payable", + "type": "float", + "description": "Other taxes payable.", + "default": null, + "optional": true + }, + { + "name": "policy_holder_funds", + "type": "float", + "description": "Policy holder funds.", + "default": null, + "optional": true + }, + { + "name": "other_current_liabilities", + "type": "float", + "description": "Other current liabilities.", + "default": null, + "optional": true + }, + { + "name": "other_current_non_operating_liabilities", + "type": "float", + "description": "Other current non-operating liabilities.", + "default": null, + "optional": true + }, + { + "name": "separate_account_business_liabilities", + "type": "float", + "description": "Separate account business liabilities.", + "default": null, + "optional": true + }, + { + "name": "total_current_liabilities", + "type": "float", + "description": "Total current liabilities.", + "default": null, + "optional": true + }, + { + "name": "long_term_debt", + "type": "float", + "description": "Long term debt.", + "default": null, + "optional": true + }, + { + "name": "other_long_term_liabilities", + "type": "float", + "description": "Other long term liabilities.", + "default": null, + "optional": true + }, + { + "name": "non_current_deferred_revenue", + "type": "float", + "description": "Non-current deferred revenue.", + "default": null, + "optional": true + }, + { + "name": "non_current_deferred_payable_income_tax_liabilities", + "type": "float", + "description": "Non-current deferred payable income tax liabilities.", + "default": null, + "optional": true + }, + { + "name": "non_current_employee_benefit_liabilities", + "type": "float", + "description": "Non-current employee benefit liabilities.", + "default": null, + "optional": true + }, + { + "name": "other_non_current_operating_liabilities", + "type": "float", + "description": "Other non-current operating liabilities.", + "default": null, + "optional": true + }, + { + "name": "other_non_current_non_operating_liabilities", + "type": "float", + "description": "Other non-current, non-operating liabilities.", + "default": null, + "optional": true + }, + { + "name": "total_non_current_liabilities", + "type": "float", + "description": "Total non-current liabilities.", + "default": null, + "optional": true + }, + { + "name": "capital_lease_obligations", + "type": "float", + "description": "Capital lease obligations.", + "default": null, + "optional": true + }, + { + "name": "asset_retirement_reserve_litigation_obligation", + "type": "float", + "description": "Asset retirement reserve litigation obligation.", + "default": null, + "optional": true + }, + { + "name": "total_liabilities", + "type": "float", + "description": "Total liabilities.", + "default": null, + "optional": true + }, + { + "name": "commitments_contingencies", + "type": "float", + "description": "Commitments contingencies.", + "default": null, + "optional": true + }, + { + "name": "redeemable_non_controlling_interest", + "type": "float", + "description": "Redeemable non-controlling interest.", + "default": null, + "optional": true + }, + { + "name": "preferred_stock", + "type": "float", + "description": "Preferred stock.", + "default": null, + "optional": true + }, + { + "name": "common_stock", + "type": "float", + "description": "Common stock.", + "default": null, + "optional": true + }, + { + "name": "retained_earnings", + "type": "float", + "description": "Retained earnings.", + "default": null, + "optional": true + }, + { + "name": "treasury_stock", + "type": "float", + "description": "Treasury stock.", + "default": null, + "optional": true + }, + { + "name": "accumulated_other_comprehensive_income", + "type": "float", + "description": "Accumulated other comprehensive income.", + "default": null, + "optional": true + }, + { + "name": "participating_policy_holder_equity", + "type": "float", + "description": "Participating policy holder equity.", + "default": null, + "optional": true + }, + { + "name": "other_equity_adjustments", + "type": "float", + "description": "Other equity adjustments.", + "default": null, + "optional": true + }, + { + "name": "total_common_equity", + "type": "float", + "description": "Total common equity.", + "default": null, + "optional": true + }, + { + "name": "total_preferred_common_equity", + "type": "float", + "description": "Total preferred common equity.", + "default": null, + "optional": true + }, + { + "name": "non_controlling_interest", + "type": "float", + "description": "Non-controlling interest.", + "default": null, + "optional": true + }, + { + "name": "total_equity_non_controlling_interests", + "type": "float", + "description": "Total equity non-controlling interests.", + "default": null, + "optional": true + }, + { + "name": "total_liabilities_shareholders_equity", + "type": "float", + "description": "Total liabilities and shareholders equity.", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "accounts_receivable", + "type": "int", + "description": "Accounts receivable", + "default": null, + "optional": true + }, + { + "name": "marketable_securities", + "type": "int", + "description": "Marketable securities", + "default": null, + "optional": true + }, + { + "name": "prepaid_expenses", + "type": "int", + "description": "Prepaid expenses", + "default": null, + "optional": true + }, + { + "name": "other_current_assets", + "type": "int", + "description": "Other current assets", + "default": null, + "optional": true + }, + { + "name": "total_current_assets", + "type": "int", + "description": "Total current assets", + "default": null, + "optional": true + }, + { + "name": "property_plant_equipment_net", + "type": "int", + "description": "Property plant and equipment net", + "default": null, + "optional": true + }, + { + "name": "inventory", + "type": "int", + "description": "Inventory", + "default": null, + "optional": true + }, + { + "name": "other_non_current_assets", + "type": "int", + "description": "Other non-current assets", + "default": null, + "optional": true + }, + { + "name": "total_non_current_assets", + "type": "int", + "description": "Total non-current assets", + "default": null, + "optional": true + }, + { + "name": "intangible_assets", + "type": "int", + "description": "Intangible assets", + "default": null, + "optional": true + }, + { + "name": "total_assets", + "type": "int", + "description": "Total assets", + "default": null, + "optional": true + }, + { + "name": "accounts_payable", + "type": "int", + "description": "Accounts payable", + "default": null, + "optional": true + }, + { + "name": "employee_wages", + "type": "int", + "description": "Employee wages", + "default": null, + "optional": true + }, + { + "name": "other_current_liabilities", + "type": "int", + "description": "Other current liabilities", + "default": null, + "optional": true + }, + { + "name": "total_current_liabilities", + "type": "int", + "description": "Total current liabilities", + "default": null, + "optional": true + }, + { + "name": "other_non_current_liabilities", + "type": "int", + "description": "Other non-current liabilities", + "default": null, + "optional": true + }, + { + "name": "total_non_current_liabilities", + "type": "int", + "description": "Total non-current liabilities", + "default": null, + "optional": true + }, + { + "name": "long_term_debt", + "type": "int", + "description": "Long term debt", + "default": null, + "optional": true + }, + { + "name": "total_liabilities", + "type": "int", + "description": "Total liabilities", + "default": null, + "optional": true + }, + { + "name": "minority_interest", + "type": "int", + "description": "Minority interest", + "default": null, + "optional": true + }, + { + "name": "temporary_equity_attributable_to_parent", + "type": "int", + "description": "Temporary equity attributable to parent", + "default": null, + "optional": true + }, + { + "name": "equity_attributable_to_parent", + "type": "int", + "description": "Equity attributable to parent", + "default": null, + "optional": true + }, + { + "name": "temporary_equity", + "type": "int", + "description": "Temporary equity", + "default": null, + "optional": true + }, + { + "name": "preferred_stock", + "type": "int", + "description": "Preferred stock", + "default": null, + "optional": true + }, + { + "name": "redeemable_non_controlling_interest", + "type": "int", + "description": "Redeemable non-controlling interest", + "default": null, + "optional": true + }, + { + "name": "redeemable_non_controlling_interest_other", + "type": "int", + "description": "Redeemable non-controlling interest other", + "default": null, + "optional": true + }, + { + "name": "total_stock_holders_equity", + "type": "int", + "description": "Total stock holders equity", + "default": null, + "optional": true + }, + { + "name": "total_liabilities_and_stock_holders_equity", + "type": "int", + "description": "Total liabilities and stockholders equity", + "default": null, + "optional": true + }, + { + "name": "total_equity", + "type": "int", + "description": "Total equity", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "BalanceSheet" + }, + "/equity/fundamental/balance_growth": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the growth of a company's balance sheet items over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.balance_growth(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.balance_growth(symbol='AAPL', limit=10, provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 10, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[BalanceSheetGrowth]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Reporting period.", + "default": "", + "optional": false + }, + { + "name": "growth_cash_and_cash_equivalents", + "type": "float", + "description": "Growth rate of cash and cash equivalents.", + "default": "", + "optional": false + }, + { + "name": "growth_short_term_investments", + "type": "float", + "description": "Growth rate of short-term investments.", + "default": "", + "optional": false + }, + { + "name": "growth_cash_and_short_term_investments", + "type": "float", + "description": "Growth rate of cash and short-term investments.", + "default": "", + "optional": false + }, + { + "name": "growth_net_receivables", + "type": "float", + "description": "Growth rate of net receivables.", + "default": "", + "optional": false + }, + { + "name": "growth_inventory", + "type": "float", + "description": "Growth rate of inventory.", + "default": "", + "optional": false + }, + { + "name": "growth_other_current_assets", + "type": "float", + "description": "Growth rate of other current assets.", + "default": "", + "optional": false + }, + { + "name": "growth_total_current_assets", + "type": "float", + "description": "Growth rate of total current assets.", + "default": "", + "optional": false + }, + { + "name": "growth_property_plant_equipment_net", + "type": "float", + "description": "Growth rate of net property, plant, and equipment.", + "default": "", + "optional": false + }, + { + "name": "growth_goodwill", + "type": "float", + "description": "Growth rate of goodwill.", + "default": "", + "optional": false + }, + { + "name": "growth_intangible_assets", + "type": "float", + "description": "Growth rate of intangible assets.", + "default": "", + "optional": false + }, + { + "name": "growth_goodwill_and_intangible_assets", + "type": "float", + "description": "Growth rate of goodwill and intangible assets.", + "default": "", + "optional": false + }, + { + "name": "growth_long_term_investments", + "type": "float", + "description": "Growth rate of long-term investments.", + "default": "", + "optional": false + }, + { + "name": "growth_tax_assets", + "type": "float", + "description": "Growth rate of tax assets.", + "default": "", + "optional": false + }, + { + "name": "growth_other_non_current_assets", + "type": "float", + "description": "Growth rate of other non-current assets.", + "default": "", + "optional": false + }, + { + "name": "growth_total_non_current_assets", + "type": "float", + "description": "Growth rate of total non-current assets.", + "default": "", + "optional": false + }, + { + "name": "growth_other_assets", + "type": "float", + "description": "Growth rate of other assets.", + "default": "", + "optional": false + }, + { + "name": "growth_total_assets", + "type": "float", + "description": "Growth rate of total assets.", + "default": "", + "optional": false + }, + { + "name": "growth_account_payables", + "type": "float", + "description": "Growth rate of accounts payable.", + "default": "", + "optional": false + }, + { + "name": "growth_short_term_debt", + "type": "float", + "description": "Growth rate of short-term debt.", + "default": "", + "optional": false + }, + { + "name": "growth_tax_payables", + "type": "float", + "description": "Growth rate of tax payables.", + "default": "", + "optional": false + }, + { + "name": "growth_deferred_revenue", + "type": "float", + "description": "Growth rate of deferred revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_other_current_liabilities", + "type": "float", + "description": "Growth rate of other current liabilities.", + "default": "", + "optional": false + }, + { + "name": "growth_total_current_liabilities", + "type": "float", + "description": "Growth rate of total current liabilities.", + "default": "", + "optional": false + }, + { + "name": "growth_long_term_debt", + "type": "float", + "description": "Growth rate of long-term debt.", + "default": "", + "optional": false + }, + { + "name": "growth_deferred_revenue_non_current", + "type": "float", + "description": "Growth rate of non-current deferred revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_deferrred_tax_liabilities_non_current", + "type": "float", + "description": "Growth rate of non-current deferred tax liabilities.", + "default": "", + "optional": false + }, + { + "name": "growth_other_non_current_liabilities", + "type": "float", + "description": "Growth rate of other non-current liabilities.", + "default": "", + "optional": false + }, + { + "name": "growth_total_non_current_liabilities", + "type": "float", + "description": "Growth rate of total non-current liabilities.", + "default": "", + "optional": false + }, + { + "name": "growth_other_liabilities", + "type": "float", + "description": "Growth rate of other liabilities.", + "default": "", + "optional": false + }, + { + "name": "growth_total_liabilities", + "type": "float", + "description": "Growth rate of total liabilities.", + "default": "", + "optional": false + }, + { + "name": "growth_common_stock", + "type": "float", + "description": "Growth rate of common stock.", + "default": "", + "optional": false + }, + { + "name": "growth_retained_earnings", + "type": "float", + "description": "Growth rate of retained earnings.", + "default": "", + "optional": false + }, + { + "name": "growth_accumulated_other_comprehensive_income_loss", + "type": "float", + "description": "Growth rate of accumulated other comprehensive income/loss.", + "default": "", + "optional": false + }, + { + "name": "growth_othertotal_stockholders_equity", + "type": "float", + "description": "Growth rate of other total stockholders' equity.", + "default": "", + "optional": false + }, + { + "name": "growth_total_stockholders_equity", + "type": "float", + "description": "Growth rate of total stockholders' equity.", + "default": "", + "optional": false + }, + { + "name": "growth_total_liabilities_and_stockholders_equity", + "type": "float", + "description": "Growth rate of total liabilities and stockholders' equity.", + "default": "", + "optional": false + }, + { + "name": "growth_total_investments", + "type": "float", + "description": "Growth rate of total investments.", + "default": "", + "optional": false + }, + { + "name": "growth_total_debt", + "type": "float", + "description": "Growth rate of total debt.", + "default": "", + "optional": false + }, + { + "name": "growth_net_debt", + "type": "float", + "description": "Growth rate of net debt.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "BalanceSheetGrowth" + }, + "/equity/fundamental/cash": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the cash flow statement for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.cash(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.cash(symbol='AAPL', period='annual', limit=5, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "limit", + "type": "Annotated[int, Ge(ge=0)]", + "description": "The number of data entries to return.", + "default": 5, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "fiscal_year", + "type": "int", + "description": "The specific fiscal year. Reports do not go beyond 2008.", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "filing_date", + "type": "date", + "description": "Filing date of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "filing_date_lt", + "type": "date", + "description": "Filing date less than the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_lte", + "type": "date", + "description": "Filing date less than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_gt", + "type": "date", + "description": "Filing date greater than the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_gte", + "type": "date", + "description": "Filing date greater than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date", + "type": "date", + "description": "Period of report date of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_lt", + "type": "date", + "description": "Period of report date less than the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_lte", + "type": "date", + "description": "Period of report date less than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_gt", + "type": "date", + "description": "Period of report date greater than the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_gte", + "type": "date", + "description": "Period of report date greater than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "include_sources", + "type": "bool", + "description": "Whether to include the sources of the financial statement.", + "default": false, + "optional": true + }, + { + "name": "order", + "type": "Literal[None, 'asc', 'desc']", + "description": "Order of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "sort", + "type": "Literal[None, 'filing_date', 'period_of_report_date']", + "description": "Sort of the financial statement.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CashFlowStatement]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": "", + "optional": false + }, + { + "name": "fiscal_period", + "type": "str", + "description": "The fiscal period of the report.", + "default": null, + "optional": true + }, + { + "name": "fiscal_year", + "type": "int", + "description": "The fiscal year of the fiscal period.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "filing_date", + "type": "date", + "description": "The date of the filing.", + "default": null, + "optional": true + }, + { + "name": "accepted_date", + "type": "datetime", + "description": "The date the filing was accepted.", + "default": null, + "optional": true + }, + { + "name": "reported_currency", + "type": "str", + "description": "The currency in which the cash flow statement was reported.", + "default": null, + "optional": true + }, + { + "name": "net_income", + "type": "float", + "description": "Net income.", + "default": null, + "optional": true + }, + { + "name": "depreciation_and_amortization", + "type": "float", + "description": "Depreciation and amortization.", + "default": null, + "optional": true + }, + { + "name": "deferred_income_tax", + "type": "float", + "description": "Deferred income tax.", + "default": null, + "optional": true + }, + { + "name": "stock_based_compensation", + "type": "float", + "description": "Stock-based compensation.", + "default": null, + "optional": true + }, + { + "name": "change_in_working_capital", + "type": "float", + "description": "Change in working capital.", + "default": null, + "optional": true + }, + { + "name": "change_in_account_receivables", + "type": "float", + "description": "Change in account receivables.", + "default": null, + "optional": true + }, + { + "name": "change_in_inventory", + "type": "float", + "description": "Change in inventory.", + "default": null, + "optional": true + }, + { + "name": "change_in_account_payable", + "type": "float", + "description": "Change in account payable.", + "default": null, + "optional": true + }, + { + "name": "change_in_other_working_capital", + "type": "float", + "description": "Change in other working capital.", + "default": null, + "optional": true + }, + { + "name": "change_in_other_non_cash_items", + "type": "float", + "description": "Change in other non-cash items.", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_operating_activities", + "type": "float", + "description": "Net cash from operating activities.", + "default": null, + "optional": true + }, + { + "name": "purchase_of_property_plant_and_equipment", + "type": "float", + "description": "Purchase of property, plant and equipment.", + "default": null, + "optional": true + }, + { + "name": "acquisitions", + "type": "float", + "description": "Acquisitions.", + "default": null, + "optional": true + }, + { + "name": "purchase_of_investment_securities", + "type": "float", + "description": "Purchase of investment securities.", + "default": null, + "optional": true + }, + { + "name": "sale_and_maturity_of_investments", + "type": "float", + "description": "Sale and maturity of investments.", + "default": null, + "optional": true + }, + { + "name": "other_investing_activities", + "type": "float", + "description": "Other investing activities.", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_investing_activities", + "type": "float", + "description": "Net cash from investing activities.", + "default": null, + "optional": true + }, + { + "name": "repayment_of_debt", + "type": "float", + "description": "Repayment of debt.", + "default": null, + "optional": true + }, + { + "name": "issuance_of_common_equity", + "type": "float", + "description": "Issuance of common equity.", + "default": null, + "optional": true + }, + { + "name": "repurchase_of_common_equity", + "type": "float", + "description": "Repurchase of common equity.", + "default": null, + "optional": true + }, + { + "name": "payment_of_dividends", + "type": "float", + "description": "Payment of dividends.", + "default": null, + "optional": true + }, + { + "name": "other_financing_activities", + "type": "float", + "description": "Other financing activities.", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_financing_activities", + "type": "float", + "description": "Net cash from financing activities.", + "default": null, + "optional": true + }, + { + "name": "effect_of_exchange_rate_changes_on_cash", + "type": "float", + "description": "Effect of exchange rate changes on cash.", + "default": null, + "optional": true + }, + { + "name": "net_change_in_cash_and_equivalents", + "type": "float", + "description": "Net change in cash and equivalents.", + "default": null, + "optional": true + }, + { + "name": "cash_at_beginning_of_period", + "type": "float", + "description": "Cash at beginning of period.", + "default": null, + "optional": true + }, + { + "name": "cash_at_end_of_period", + "type": "float", + "description": "Cash at end of period.", + "default": null, + "optional": true + }, + { + "name": "operating_cash_flow", + "type": "float", + "description": "Operating cash flow.", + "default": null, + "optional": true + }, + { + "name": "capital_expenditure", + "type": "float", + "description": "Capital expenditure.", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow", + "type": "float", + "description": "None", + "default": null, + "optional": true + }, + { + "name": "link", + "type": "str", + "description": "Link to the filing.", + "default": null, + "optional": true + }, + { + "name": "final_link", + "type": "str", + "description": "Link to the filing document.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "reported_currency", + "type": "str", + "description": "The currency in which the balance sheet is reported.", + "default": null, + "optional": true + }, + { + "name": "net_income_continuing_operations", + "type": "float", + "description": "Net Income (Continuing Operations)", + "default": null, + "optional": true + }, + { + "name": "net_income_discontinued_operations", + "type": "float", + "description": "Net Income (Discontinued Operations)", + "default": null, + "optional": true + }, + { + "name": "net_income", + "type": "float", + "description": "Consolidated Net Income.", + "default": null, + "optional": true + }, + { + "name": "provision_for_loan_losses", + "type": "float", + "description": "Provision for Loan Losses", + "default": null, + "optional": true + }, + { + "name": "provision_for_credit_losses", + "type": "float", + "description": "Provision for credit losses", + "default": null, + "optional": true + }, + { + "name": "depreciation_expense", + "type": "float", + "description": "Depreciation Expense.", + "default": null, + "optional": true + }, + { + "name": "amortization_expense", + "type": "float", + "description": "Amortization Expense.", + "default": null, + "optional": true + }, + { + "name": "share_based_compensation", + "type": "float", + "description": "Share-based compensation.", + "default": null, + "optional": true + }, + { + "name": "non_cash_adjustments_to_reconcile_net_income", + "type": "float", + "description": "Non-Cash Adjustments to Reconcile Net Income.", + "default": null, + "optional": true + }, + { + "name": "changes_in_operating_assets_and_liabilities", + "type": "float", + "description": "Changes in Operating Assets and Liabilities (Net)", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_continuing_operating_activities", + "type": "float", + "description": "Net Cash from Continuing Operating Activities", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_discontinued_operating_activities", + "type": "float", + "description": "Net Cash from Discontinued Operating Activities", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_operating_activities", + "type": "float", + "description": "Net Cash from Operating Activities", + "default": null, + "optional": true + }, + { + "name": "divestitures", + "type": "float", + "description": "Divestitures", + "default": null, + "optional": true + }, + { + "name": "sale_of_property_plant_and_equipment", + "type": "float", + "description": "Sale of Property, Plant, and Equipment", + "default": null, + "optional": true + }, + { + "name": "acquisitions", + "type": "float", + "description": "Acquisitions", + "default": null, + "optional": true + }, + { + "name": "purchase_of_investments", + "type": "float", + "description": "Purchase of Investments", + "default": null, + "optional": true + }, + { + "name": "purchase_of_investment_securities", + "type": "float", + "description": "Purchase of Investment Securities", + "default": null, + "optional": true + }, + { + "name": "sale_and_maturity_of_investments", + "type": "float", + "description": "Sale and Maturity of Investments", + "default": null, + "optional": true + }, + { + "name": "loans_held_for_sale", + "type": "float", + "description": "Loans Held for Sale (Net)", + "default": null, + "optional": true + }, + { + "name": "purchase_of_property_plant_and_equipment", + "type": "float", + "description": "Purchase of Property, Plant, and Equipment", + "default": null, + "optional": true + }, + { + "name": "other_investing_activities", + "type": "float", + "description": "Other Investing Activities (Net)", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_continuing_investing_activities", + "type": "float", + "description": "Net Cash from Continuing Investing Activities", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_discontinued_investing_activities", + "type": "float", + "description": "Net Cash from Discontinued Investing Activities", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_investing_activities", + "type": "float", + "description": "Net Cash from Investing Activities", + "default": null, + "optional": true + }, + { + "name": "payment_of_dividends", + "type": "float", + "description": "Payment of Dividends", + "default": null, + "optional": true + }, + { + "name": "repurchase_of_common_equity", + "type": "float", + "description": "Repurchase of Common Equity", + "default": null, + "optional": true + }, + { + "name": "repurchase_of_preferred_equity", + "type": "float", + "description": "Repurchase of Preferred Equity", + "default": null, + "optional": true + }, + { + "name": "issuance_of_common_equity", + "type": "float", + "description": "Issuance of Common Equity", + "default": null, + "optional": true + }, + { + "name": "issuance_of_preferred_equity", + "type": "float", + "description": "Issuance of Preferred Equity", + "default": null, + "optional": true + }, + { + "name": "issuance_of_debt", + "type": "float", + "description": "Issuance of Debt", + "default": null, + "optional": true + }, + { + "name": "repayment_of_debt", + "type": "float", + "description": "Repayment of Debt", + "default": null, + "optional": true + }, + { + "name": "other_financing_activities", + "type": "float", + "description": "Other Financing Activities (Net)", + "default": null, + "optional": true + }, + { + "name": "cash_interest_received", + "type": "float", + "description": "Cash Interest Received", + "default": null, + "optional": true + }, + { + "name": "net_change_in_deposits", + "type": "float", + "description": "Net Change in Deposits", + "default": null, + "optional": true + }, + { + "name": "net_increase_in_fed_funds_sold", + "type": "float", + "description": "Net Increase in Fed Funds Sold", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_continuing_financing_activities", + "type": "float", + "description": "Net Cash from Continuing Financing Activities", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_discontinued_financing_activities", + "type": "float", + "description": "Net Cash from Discontinued Financing Activities", + "default": null, + "optional": true + }, + { + "name": "net_cash_from_financing_activities", + "type": "float", + "description": "Net Cash from Financing Activities", + "default": null, + "optional": true + }, + { + "name": "effect_of_exchange_rate_changes", + "type": "float", + "description": "Effect of Exchange Rate Changes", + "default": null, + "optional": true + }, + { + "name": "other_net_changes_in_cash", + "type": "float", + "description": "Other Net Changes in Cash", + "default": null, + "optional": true + }, + { + "name": "net_change_in_cash_and_equivalents", + "type": "float", + "description": "Net Change in Cash and Equivalents", + "default": null, + "optional": true + }, + { + "name": "cash_income_taxes_paid", + "type": "float", + "description": "Cash Income Taxes Paid", + "default": null, + "optional": true + }, + { + "name": "cash_interest_paid", + "type": "float", + "description": "Cash Interest Paid", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "net_cash_flow_from_operating_activities_continuing", + "type": "int", + "description": "Net cash flow from operating activities continuing.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_operating_activities_discontinued", + "type": "int", + "description": "Net cash flow from operating activities discontinued.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_operating_activities", + "type": "int", + "description": "Net cash flow from operating activities.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_investing_activities_continuing", + "type": "int", + "description": "Net cash flow from investing activities continuing.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_investing_activities_discontinued", + "type": "int", + "description": "Net cash flow from investing activities discontinued.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_investing_activities", + "type": "int", + "description": "Net cash flow from investing activities.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_financing_activities_continuing", + "type": "int", + "description": "Net cash flow from financing activities continuing.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_financing_activities_discontinued", + "type": "int", + "description": "Net cash flow from financing activities discontinued.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_from_financing_activities", + "type": "int", + "description": "Net cash flow from financing activities.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_continuing", + "type": "int", + "description": "Net cash flow continuing.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow_discontinued", + "type": "int", + "description": "Net cash flow discontinued.", + "default": null, + "optional": true + }, + { + "name": "exchange_gains_losses", + "type": "int", + "description": "Exchange gains losses.", + "default": null, + "optional": true + }, + { + "name": "net_cash_flow", + "type": "int", + "description": "Net cash flow.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "CashFlowStatement" + }, + "/equity/fundamental/reported_financials": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get financial statements as reported by the company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.reported_financials(symbol='AAPL', provider='intrinio')\n# Get AAPL balance sheet with a limit of 10 items.\nobb.equity.fundamental.reported_financials(symbol='AAPL', period='annual', statement_type='balance', limit=10, provider='intrinio')\n# Get reported income statement\nobb.equity.fundamental.reported_financials(symbol='AAPL', statement_type='income', provider='intrinio')\n# Get reported cash flow statement\nobb.equity.fundamental.reported_financials(symbol='AAPL', statement_type='cash', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "statement_type", + "type": "str", + "description": "The type of financial statement - i.e, balance, income, cash.", + "default": "balance", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return. Although the response object contains multiple results, because of the variance in the fields, year-to-year and quarter-to-quarter, it is recommended to view results in small chunks.", + "default": 100, + "optional": true + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [ + { + "name": "fiscal_year", + "type": "int", + "description": "The specific fiscal year. Reports do not go beyond 2008.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ReportedFinancials]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The ending date of the reporting period.", + "default": "", + "optional": false + }, + { + "name": "fiscal_period", + "type": "str", + "description": "The fiscal period of the report (e.g. FY, Q1, etc.).", + "default": "", + "optional": false + }, + { + "name": "fiscal_year", + "type": "int", + "description": "The fiscal year of the fiscal period.", + "default": null, + "optional": true + } + ], + "intrinio": [] + }, + "model": "ReportedFinancials" + }, + "/equity/fundamental/cash_growth": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the growth of a company's cash flow statement items over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.cash_growth(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.cash_growth(symbol='AAPL', limit=10, provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 10, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CashFlowStatementGrowth]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Period the statement is returned for.", + "default": "", + "optional": false + }, + { + "name": "growth_net_income", + "type": "float", + "description": "Growth rate of net income.", + "default": "", + "optional": false + }, + { + "name": "growth_depreciation_and_amortization", + "type": "float", + "description": "Growth rate of depreciation and amortization.", + "default": "", + "optional": false + }, + { + "name": "growth_deferred_income_tax", + "type": "float", + "description": "Growth rate of deferred income tax.", + "default": "", + "optional": false + }, + { + "name": "growth_stock_based_compensation", + "type": "float", + "description": "Growth rate of stock-based compensation.", + "default": "", + "optional": false + }, + { + "name": "growth_change_in_working_capital", + "type": "float", + "description": "Growth rate of change in working capital.", + "default": "", + "optional": false + }, + { + "name": "growth_accounts_receivables", + "type": "float", + "description": "Growth rate of accounts receivables.", + "default": "", + "optional": false + }, + { + "name": "growth_inventory", + "type": "float", + "description": "Growth rate of inventory.", + "default": "", + "optional": false + }, + { + "name": "growth_accounts_payables", + "type": "float", + "description": "Growth rate of accounts payables.", + "default": "", + "optional": false + }, + { + "name": "growth_other_working_capital", + "type": "float", + "description": "Growth rate of other working capital.", + "default": "", + "optional": false + }, + { + "name": "growth_other_non_cash_items", + "type": "float", + "description": "Growth rate of other non-cash items.", + "default": "", + "optional": false + }, + { + "name": "growth_net_cash_provided_by_operating_activities", + "type": "float", + "description": "Growth rate of net cash provided by operating activities.", + "default": "", + "optional": false + }, + { + "name": "growth_investments_in_property_plant_and_equipment", + "type": "float", + "description": "Growth rate of investments in property, plant, and equipment.", + "default": "", + "optional": false + }, + { + "name": "growth_acquisitions_net", + "type": "float", + "description": "Growth rate of net acquisitions.", + "default": "", + "optional": false + }, + { + "name": "growth_purchases_of_investments", + "type": "float", + "description": "Growth rate of purchases of investments.", + "default": "", + "optional": false + }, + { + "name": "growth_sales_maturities_of_investments", + "type": "float", + "description": "Growth rate of sales maturities of investments.", + "default": "", + "optional": false + }, + { + "name": "growth_other_investing_activities", + "type": "float", + "description": "Growth rate of other investing activities.", + "default": "", + "optional": false + }, + { + "name": "growth_net_cash_used_for_investing_activities", + "type": "float", + "description": "Growth rate of net cash used for investing activities.", + "default": "", + "optional": false + }, + { + "name": "growth_debt_repayment", + "type": "float", + "description": "Growth rate of debt repayment.", + "default": "", + "optional": false + }, + { + "name": "growth_common_stock_issued", + "type": "float", + "description": "Growth rate of common stock issued.", + "default": "", + "optional": false + }, + { + "name": "growth_common_stock_repurchased", + "type": "float", + "description": "Growth rate of common stock repurchased.", + "default": "", + "optional": false + }, + { + "name": "growth_dividends_paid", + "type": "float", + "description": "Growth rate of dividends paid.", + "default": "", + "optional": false + }, + { + "name": "growth_other_financing_activities", + "type": "float", + "description": "Growth rate of other financing activities.", + "default": "", + "optional": false + }, + { + "name": "growth_net_cash_used_provided_by_financing_activities", + "type": "float", + "description": "Growth rate of net cash used/provided by financing activities.", + "default": "", + "optional": false + }, + { + "name": "growth_effect_of_forex_changes_on_cash", + "type": "float", + "description": "Growth rate of the effect of foreign exchange changes on cash.", + "default": "", + "optional": false + }, + { + "name": "growth_net_change_in_cash", + "type": "float", + "description": "Growth rate of net change in cash.", + "default": "", + "optional": false + }, + { + "name": "growth_cash_at_end_of_period", + "type": "float", + "description": "Growth rate of cash at the end of the period.", + "default": "", + "optional": false + }, + { + "name": "growth_cash_at_beginning_of_period", + "type": "float", + "description": "Growth rate of cash at the beginning of the period.", + "default": "", + "optional": false + }, + { + "name": "growth_operating_cash_flow", + "type": "float", + "description": "Growth rate of operating cash flow.", + "default": "", + "optional": false + }, + { + "name": "growth_capital_expenditure", + "type": "float", + "description": "Growth rate of capital expenditure.", + "default": "", + "optional": false + }, + { + "name": "growth_free_cash_flow", + "type": "float", + "description": "Growth rate of free cash flow.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "CashFlowStatementGrowth" + }, + "/equity/fundamental/dividends": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical dividend data for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.dividends(symbol='AAPL', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 100, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[HistoricalDividends]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "ex_dividend_date", + "type": "date", + "description": "The ex-dividend date - the date on which the stock begins trading without rights to the dividend.", + "default": "", + "optional": false + }, + { + "name": "amount", + "type": "float", + "description": "The dividend amount per share.", + "default": "", + "optional": false + } + ], + "fmp": [ + { + "name": "label", + "type": "str", + "description": "Label of the historical dividends.", + "default": "", + "optional": false + }, + { + "name": "adj_dividend", + "type": "float", + "description": "Adjusted dividend of the historical dividends.", + "default": "", + "optional": false + }, + { + "name": "record_date", + "type": "date", + "description": "Record date of the historical dividends.", + "default": null, + "optional": true + }, + { + "name": "payment_date", + "type": "date", + "description": "Payment date of the historical dividends.", + "default": null, + "optional": true + }, + { + "name": "declaration_date", + "type": "date", + "description": "Declaration date of the historical dividends.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "factor", + "type": "float", + "description": "factor by which to multiply stock prices before this date, in order to calculate historically-adjusted stock prices.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "The currency in which the dividend is paid.", + "default": null, + "optional": true + }, + { + "name": "split_ratio", + "type": "float", + "description": "The ratio of the stock split, if a stock split occurred.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "HistoricalDividends" + }, + "/equity/fundamental/historical_eps": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical earnings per share data for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.historical_eps(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[HistoricalEps]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "announce_time", + "type": "str", + "description": "Timing of the earnings announcement.", + "default": null, + "optional": true + }, + { + "name": "eps_actual", + "type": "float", + "description": "Actual EPS from the earnings date.", + "default": null, + "optional": true + }, + { + "name": "eps_estimated", + "type": "float", + "description": "Estimated EPS for the earnings date.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "revenue_estimated", + "type": "float", + "description": "Estimated consensus revenue for the reporting period.", + "default": null, + "optional": true + }, + { + "name": "revenue_actual", + "type": "float", + "description": "The actual reported revenue.", + "default": null, + "optional": true + }, + { + "name": "reporting_time", + "type": "str", + "description": "The reporting time - e.g. after market close.", + "default": null, + "optional": true + }, + { + "name": "updated_at", + "type": "date", + "description": "The date when the data was last updated.", + "default": null, + "optional": true + }, + { + "name": "period_ending", + "type": "date", + "description": "The fiscal period end date.", + "default": null, + "optional": true + } + ] + }, + "model": "HistoricalEps" + }, + "/equity/fundamental/employee_count": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical employee count data for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.employee_count(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[HistoricalEmployees]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "cik", + "type": "int", + "description": "Central Index Key (CIK) for the requested entity.", + "default": "", + "optional": false + }, + { + "name": "acceptance_time", + "type": "datetime", + "description": "Time of acceptance of the company employee.", + "default": "", + "optional": false + }, + { + "name": "period_of_report", + "type": "date", + "description": "Date of reporting of the company employee.", + "default": "", + "optional": false + }, + { + "name": "company_name", + "type": "str", + "description": "Registered name of the company to retrieve the historical employees of.", + "default": "", + "optional": false + }, + { + "name": "form_type", + "type": "str", + "description": "Form type of the company employee.", + "default": "", + "optional": false + }, + { + "name": "filing_date", + "type": "date", + "description": "Filing date of the company employee", + "default": "", + "optional": false + }, + { + "name": "employee_count", + "type": "int", + "description": "Count of employees of the company.", + "default": "", + "optional": false + }, + { + "name": "source", + "type": "str", + "description": "Source URL which retrieves this data for the company.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "HistoricalEmployees" + }, + "/equity/fundamental/search_attributes": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search Intrinio data tags to search in latest or historical attributes.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.search_attributes(query='ebitda', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Query to search for.", + "default": "", + "optional": false + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 1000, + "optional": true + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SearchAttributes]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "id", + "type": "str", + "description": "ID of the financial attribute.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the financial attribute.", + "default": "", + "optional": false + }, + { + "name": "tag", + "type": "str", + "description": "Tag of the financial attribute.", + "default": "", + "optional": false + }, + { + "name": "statement_code", + "type": "str", + "description": "Code of the financial statement.", + "default": "", + "optional": false + }, + { + "name": "statement_type", + "type": "str", + "description": "Type of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "parent_name", + "type": "str", + "description": "Parent's name of the financial attribute.", + "default": null, + "optional": true + }, + { + "name": "sequence", + "type": "int", + "description": "Sequence of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "factor", + "type": "str", + "description": "Unit of the financial attribute.", + "default": null, + "optional": true + }, + { + "name": "transaction", + "type": "str", + "description": "Transaction type (credit/debit) of the financial attribute.", + "default": null, + "optional": true + }, + { + "name": "type", + "type": "str", + "description": "Type of the financial attribute.", + "default": null, + "optional": true + }, + { + "name": "unit", + "type": "str", + "description": "Unit of the financial attribute.", + "default": null, + "optional": true + } + ], + "intrinio": [] + }, + "model": "SearchAttributes" + }, + "/equity/fundamental/latest_attributes": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the latest value of a data tag from Intrinio.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.latest_attributes(symbol='AAPL', tag='ceo', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", + "default": "", + "optional": false + }, + { + "name": "tag", + "type": "Union[str, List[str]]", + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[LatestAttributes]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "tag", + "type": "str", + "description": "Tag name for the fetched data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "Union[str, float]", + "description": "The value of the data.", + "default": null, + "optional": true + } + ], + "intrinio": [] + }, + "model": "LatestAttributes" + }, + "/equity/fundamental/historical_attributes": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the historical values of a data tag from Intrinio.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.historical_attributes(symbol='AAPL', tag='ebitda', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", + "default": "", + "optional": false + }, + { + "name": "tag", + "type": "Union[str, List[str]]", + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "frequency", + "type": "Literal['daily', 'weekly', 'monthly', 'quarterly', 'yearly']", + "description": "The frequency of the data.", + "default": "yearly", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 1000, + "optional": true + }, + { + "name": "tag_type", + "type": "str", + "description": "Filter by type, when applicable.", + "default": null, + "optional": true + }, + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order.", + "default": "desc", + "optional": true + }, + { + "name": "provider", + "type": "Literal['intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[HistoricalAttributes]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "tag", + "type": "str", + "description": "Tag name for the fetched data.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "The value of the data.", + "default": null, + "optional": true + } + ], + "intrinio": [] + }, + "model": "HistoricalAttributes" + }, + "/equity/fundamental/income": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the income statement for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.income(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.income(symbol='AAPL', period='annual', limit=5, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "limit", + "type": "Annotated[int, Ge(ge=0)]", + "description": "The number of data entries to return.", + "default": 5, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "fiscal_year", + "type": "int", + "description": "The specific fiscal year. Reports do not go beyond 2008.", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "filing_date", + "type": "date", + "description": "Filing date of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "filing_date_lt", + "type": "date", + "description": "Filing date less than the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_lte", + "type": "date", + "description": "Filing date less than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_gt", + "type": "date", + "description": "Filing date greater than the given date.", + "default": null, + "optional": true + }, + { + "name": "filing_date_gte", + "type": "date", + "description": "Filing date greater than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date", + "type": "date", + "description": "Period of report date of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_lt", + "type": "date", + "description": "Period of report date less than the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_lte", + "type": "date", + "description": "Period of report date less than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_gt", + "type": "date", + "description": "Period of report date greater than the given date.", + "default": null, + "optional": true + }, + { + "name": "period_of_report_date_gte", + "type": "date", + "description": "Period of report date greater than or equal to the given date.", + "default": null, + "optional": true + }, + { + "name": "include_sources", + "type": "bool", + "description": "Whether to include the sources of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "order", + "type": "Literal['asc', 'desc']", + "description": "Order of the financial statement.", + "default": null, + "optional": true + }, + { + "name": "sort", + "type": "Literal['filing_date', 'period_of_report_date']", + "description": "Sort of the financial statement.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[IncomeStatement]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": "", + "optional": false + }, + { + "name": "fiscal_period", + "type": "str", + "description": "The fiscal period of the report.", + "default": null, + "optional": true + }, + { + "name": "fiscal_year", + "type": "int", + "description": "The fiscal year of the fiscal period.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "filing_date", + "type": "date", + "description": "The date when the filing was made.", + "default": null, + "optional": true + }, + { + "name": "accepted_date", + "type": "datetime", + "description": "The date and time when the filing was accepted.", + "default": null, + "optional": true + }, + { + "name": "reported_currency", + "type": "str", + "description": "The currency in which the balance sheet was reported.", + "default": null, + "optional": true + }, + { + "name": "revenue", + "type": "float", + "description": "Total revenue.", + "default": null, + "optional": true + }, + { + "name": "cost_of_revenue", + "type": "float", + "description": "Cost of revenue.", + "default": null, + "optional": true + }, + { + "name": "gross_profit", + "type": "float", + "description": "Gross profit.", + "default": null, + "optional": true + }, + { + "name": "gross_profit_margin", + "type": "float", + "description": "Gross profit margin.", + "default": null, + "optional": true + }, + { + "name": "general_and_admin_expense", + "type": "float", + "description": "General and administrative expenses.", + "default": null, + "optional": true + }, + { + "name": "research_and_development_expense", + "type": "float", + "description": "Research and development expenses.", + "default": null, + "optional": true + }, + { + "name": "selling_and_marketing_expense", + "type": "float", + "description": "Selling and marketing expenses.", + "default": null, + "optional": true + }, + { + "name": "selling_general_and_admin_expense", + "type": "float", + "description": "Selling, general and administrative expenses.", + "default": null, + "optional": true + }, + { + "name": "other_expenses", + "type": "float", + "description": "Other expenses.", + "default": null, + "optional": true + }, + { + "name": "total_operating_expenses", + "type": "float", + "description": "Total operating expenses.", + "default": null, + "optional": true + }, + { + "name": "cost_and_expenses", + "type": "float", + "description": "Cost and expenses.", + "default": null, + "optional": true + }, + { + "name": "interest_income", + "type": "float", + "description": "Interest income.", + "default": null, + "optional": true + }, + { + "name": "total_interest_expense", + "type": "float", + "description": "Total interest expenses.", + "default": null, + "optional": true + }, + { + "name": "depreciation_and_amortization", + "type": "float", + "description": "Depreciation and amortization.", + "default": null, + "optional": true + }, + { + "name": "ebitda", + "type": "float", + "description": "EBITDA.", + "default": null, + "optional": true + }, + { + "name": "ebitda_margin", + "type": "float", + "description": "EBITDA margin.", + "default": null, + "optional": true + }, + { + "name": "total_operating_income", + "type": "float", + "description": "Total operating income.", + "default": null, + "optional": true + }, + { + "name": "operating_income_margin", + "type": "float", + "description": "Operating income margin.", + "default": null, + "optional": true + }, + { + "name": "total_other_income_expenses", + "type": "float", + "description": "Total other income and expenses.", + "default": null, + "optional": true + }, + { + "name": "total_pre_tax_income", + "type": "float", + "description": "Total pre-tax income.", + "default": null, + "optional": true + }, + { + "name": "pre_tax_income_margin", + "type": "float", + "description": "Pre-tax income margin.", + "default": null, + "optional": true + }, + { + "name": "income_tax_expense", + "type": "float", + "description": "Income tax expense.", + "default": null, + "optional": true + }, + { + "name": "consolidated_net_income", + "type": "float", + "description": "Consolidated net income.", + "default": null, + "optional": true + }, + { + "name": "net_income_margin", + "type": "float", + "description": "Net income margin.", + "default": null, + "optional": true + }, + { + "name": "basic_earnings_per_share", + "type": "float", + "description": "Basic earnings per share.", + "default": null, + "optional": true + }, + { + "name": "diluted_earnings_per_share", + "type": "float", + "description": "Diluted earnings per share.", + "default": null, + "optional": true + }, + { + "name": "weighted_average_basic_shares_outstanding", + "type": "float", + "description": "Weighted average basic shares outstanding.", + "default": null, + "optional": true + }, + { + "name": "weighted_average_diluted_shares_outstanding", + "type": "float", + "description": "Weighted average diluted shares outstanding.", + "default": null, + "optional": true + }, + { + "name": "link", + "type": "str", + "description": "Link to the filing.", + "default": null, + "optional": true + }, + { + "name": "final_link", + "type": "str", + "description": "Link to the filing document.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "reported_currency", + "type": "str", + "description": "The currency in which the balance sheet is reported.", + "default": null, + "optional": true + }, + { + "name": "revenue", + "type": "float", + "description": "Total revenue", + "default": null, + "optional": true + }, + { + "name": "operating_revenue", + "type": "float", + "description": "Total operating revenue", + "default": null, + "optional": true + }, + { + "name": "cost_of_revenue", + "type": "float", + "description": "Total cost of revenue", + "default": null, + "optional": true + }, + { + "name": "operating_cost_of_revenue", + "type": "float", + "description": "Total operating cost of revenue", + "default": null, + "optional": true + }, + { + "name": "gross_profit", + "type": "float", + "description": "Total gross profit", + "default": null, + "optional": true + }, + { + "name": "gross_profit_margin", + "type": "float", + "description": "Gross margin ratio.", + "default": null, + "optional": true + }, + { + "name": "provision_for_credit_losses", + "type": "float", + "description": "Provision for credit losses", + "default": null, + "optional": true + }, + { + "name": "research_and_development_expense", + "type": "float", + "description": "Research and development expense", + "default": null, + "optional": true + }, + { + "name": "selling_general_and_admin_expense", + "type": "float", + "description": "Selling, general, and admin expense", + "default": null, + "optional": true + }, + { + "name": "salaries_and_employee_benefits", + "type": "float", + "description": "Salaries and employee benefits", + "default": null, + "optional": true + }, + { + "name": "marketing_expense", + "type": "float", + "description": "Marketing expense", + "default": null, + "optional": true + }, + { + "name": "net_occupancy_and_equipment_expense", + "type": "float", + "description": "Net occupancy and equipment expense", + "default": null, + "optional": true + }, + { + "name": "other_operating_expenses", + "type": "float", + "description": "Other operating expenses", + "default": null, + "optional": true + }, + { + "name": "depreciation_expense", + "type": "float", + "description": "Depreciation expense", + "default": null, + "optional": true + }, + { + "name": "amortization_expense", + "type": "float", + "description": "Amortization expense", + "default": null, + "optional": true + }, + { + "name": "amortization_of_deferred_policy_acquisition_costs", + "type": "float", + "description": "Amortization of deferred policy acquisition costs", + "default": null, + "optional": true + }, + { + "name": "exploration_expense", + "type": "float", + "description": "Exploration expense", + "default": null, + "optional": true + }, + { + "name": "depletion_expense", + "type": "float", + "description": "Depletion expense", + "default": null, + "optional": true + }, + { + "name": "total_operating_expenses", + "type": "float", + "description": "Total operating expenses", + "default": null, + "optional": true + }, + { + "name": "total_operating_income", + "type": "float", + "description": "Total operating income", + "default": null, + "optional": true + }, + { + "name": "deposits_and_money_market_investments_interest_income", + "type": "float", + "description": "Deposits and money market investments interest income", + "default": null, + "optional": true + }, + { + "name": "federal_funds_sold_and_securities_borrowed_interest_income", + "type": "float", + "description": "Federal funds sold and securities borrowed interest income", + "default": null, + "optional": true + }, + { + "name": "investment_securities_interest_income", + "type": "float", + "description": "Investment securities interest income", + "default": null, + "optional": true + }, + { + "name": "loans_and_leases_interest_income", + "type": "float", + "description": "Loans and leases interest income", + "default": null, + "optional": true + }, + { + "name": "trading_account_interest_income", + "type": "float", + "description": "Trading account interest income", + "default": null, + "optional": true + }, + { + "name": "other_interest_income", + "type": "float", + "description": "Other interest income", + "default": null, + "optional": true + }, + { + "name": "total_non_interest_income", + "type": "float", + "description": "Total non-interest income", + "default": null, + "optional": true + }, + { + "name": "interest_and_investment_income", + "type": "float", + "description": "Interest and investment income", + "default": null, + "optional": true + }, + { + "name": "short_term_borrowings_interest_expense", + "type": "float", + "description": "Short-term borrowings interest expense", + "default": null, + "optional": true + }, + { + "name": "long_term_debt_interest_expense", + "type": "float", + "description": "Long-term debt interest expense", + "default": null, + "optional": true + }, + { + "name": "capitalized_lease_obligations_interest_expense", + "type": "float", + "description": "Capitalized lease obligations interest expense", + "default": null, + "optional": true + }, + { + "name": "deposits_interest_expense", + "type": "float", + "description": "Deposits interest expense", + "default": null, + "optional": true + }, + { + "name": "federal_funds_purchased_and_securities_sold_interest_expense", + "type": "float", + "description": "Federal funds purchased and securities sold interest expense", + "default": null, + "optional": true + }, + { + "name": "other_interest_expense", + "type": "float", + "description": "Other interest expense", + "default": null, + "optional": true + }, + { + "name": "total_interest_expense", + "type": "float", + "description": "Total interest expense", + "default": null, + "optional": true + }, + { + "name": "net_interest_income", + "type": "float", + "description": "Net interest income", + "default": null, + "optional": true + }, + { + "name": "other_non_interest_income", + "type": "float", + "description": "Other non-interest income", + "default": null, + "optional": true + }, + { + "name": "investment_banking_income", + "type": "float", + "description": "Investment banking income", + "default": null, + "optional": true + }, + { + "name": "trust_fees_by_commissions", + "type": "float", + "description": "Trust fees by commissions", + "default": null, + "optional": true + }, + { + "name": "premiums_earned", + "type": "float", + "description": "Premiums earned", + "default": null, + "optional": true + }, + { + "name": "insurance_policy_acquisition_costs", + "type": "float", + "description": "Insurance policy acquisition costs", + "default": null, + "optional": true + }, + { + "name": "current_and_future_benefits", + "type": "float", + "description": "Current and future benefits", + "default": null, + "optional": true + }, + { + "name": "property_and_liability_insurance_claims", + "type": "float", + "description": "Property and liability insurance claims", + "default": null, + "optional": true + }, + { + "name": "total_non_interest_expense", + "type": "float", + "description": "Total non-interest expense", + "default": null, + "optional": true + }, + { + "name": "net_realized_and_unrealized_capital_gains_on_investments", + "type": "float", + "description": "Net realized and unrealized capital gains on investments", + "default": null, + "optional": true + }, + { + "name": "other_gains", + "type": "float", + "description": "Other gains", + "default": null, + "optional": true + }, + { + "name": "non_operating_income", + "type": "float", + "description": "Non-operating income", + "default": null, + "optional": true + }, + { + "name": "other_income", + "type": "float", + "description": "Other income", + "default": null, + "optional": true + }, + { + "name": "other_revenue", + "type": "float", + "description": "Other revenue", + "default": null, + "optional": true + }, + { + "name": "extraordinary_income", + "type": "float", + "description": "Extraordinary income", + "default": null, + "optional": true + }, + { + "name": "total_other_income", + "type": "float", + "description": "Total other income", + "default": null, + "optional": true + }, + { + "name": "ebitda", + "type": "float", + "description": "Earnings Before Interest, Taxes, Depreciation and Amortization.", + "default": null, + "optional": true + }, + { + "name": "ebitda_margin", + "type": "float", + "description": "Margin on Earnings Before Interest, Taxes, Depreciation and Amortization.", + "default": null, + "optional": true + }, + { + "name": "total_pre_tax_income", + "type": "float", + "description": "Total pre-tax income", + "default": null, + "optional": true + }, + { + "name": "ebit", + "type": "float", + "description": "Earnings Before Interest and Taxes.", + "default": null, + "optional": true + }, + { + "name": "pre_tax_income_margin", + "type": "float", + "description": "Pre-Tax Income Margin.", + "default": null, + "optional": true + }, + { + "name": "income_tax_expense", + "type": "float", + "description": "Income tax expense", + "default": null, + "optional": true + }, + { + "name": "impairment_charge", + "type": "float", + "description": "Impairment charge", + "default": null, + "optional": true + }, + { + "name": "restructuring_charge", + "type": "float", + "description": "Restructuring charge", + "default": null, + "optional": true + }, + { + "name": "service_charges_on_deposit_accounts", + "type": "float", + "description": "Service charges on deposit accounts", + "default": null, + "optional": true + }, + { + "name": "other_service_charges", + "type": "float", + "description": "Other service charges", + "default": null, + "optional": true + }, + { + "name": "other_special_charges", + "type": "float", + "description": "Other special charges", + "default": null, + "optional": true + }, + { + "name": "other_cost_of_revenue", + "type": "float", + "description": "Other cost of revenue", + "default": null, + "optional": true + }, + { + "name": "net_income_continuing_operations", + "type": "float", + "description": "Net income (continuing operations)", + "default": null, + "optional": true + }, + { + "name": "net_income_discontinued_operations", + "type": "float", + "description": "Net income (discontinued operations)", + "default": null, + "optional": true + }, + { + "name": "consolidated_net_income", + "type": "float", + "description": "Consolidated net income", + "default": null, + "optional": true + }, + { + "name": "other_adjustments_to_consolidated_net_income", + "type": "float", + "description": "Other adjustments to consolidated net income", + "default": null, + "optional": true + }, + { + "name": "other_adjustment_to_net_income_attributable_to_common_shareholders", + "type": "float", + "description": "Other adjustment to net income attributable to common shareholders", + "default": null, + "optional": true + }, + { + "name": "net_income_attributable_to_noncontrolling_interest", + "type": "float", + "description": "Net income attributable to noncontrolling interest", + "default": null, + "optional": true + }, + { + "name": "net_income_attributable_to_common_shareholders", + "type": "float", + "description": "Net income attributable to common shareholders", + "default": null, + "optional": true + }, + { + "name": "basic_earnings_per_share", + "type": "float", + "description": "Basic earnings per share", + "default": null, + "optional": true + }, + { + "name": "diluted_earnings_per_share", + "type": "float", + "description": "Diluted earnings per share", + "default": null, + "optional": true + }, + { + "name": "basic_and_diluted_earnings_per_share", + "type": "float", + "description": "Basic and diluted earnings per share", + "default": null, + "optional": true + }, + { + "name": "cash_dividends_to_common_per_share", + "type": "float", + "description": "Cash dividends to common per share", + "default": null, + "optional": true + }, + { + "name": "preferred_stock_dividends_declared", + "type": "float", + "description": "Preferred stock dividends declared", + "default": null, + "optional": true + }, + { + "name": "weighted_average_basic_shares_outstanding", + "type": "float", + "description": "Weighted average basic shares outstanding", + "default": null, + "optional": true + }, + { + "name": "weighted_average_diluted_shares_outstanding", + "type": "float", + "description": "Weighted average diluted shares outstanding", + "default": null, + "optional": true + }, + { + "name": "weighted_average_basic_and_diluted_shares_outstanding", + "type": "float", + "description": "Weighted average basic and diluted shares outstanding", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "revenue", + "type": "float", + "description": "Total Revenue", + "default": null, + "optional": true + }, + { + "name": "cost_of_revenue_goods", + "type": "float", + "description": "Cost of Revenue - Goods", + "default": null, + "optional": true + }, + { + "name": "cost_of_revenue_services", + "type": "float", + "description": "Cost of Revenue - Services", + "default": null, + "optional": true + }, + { + "name": "cost_of_revenue", + "type": "float", + "description": "Cost of Revenue", + "default": null, + "optional": true + }, + { + "name": "gross_profit", + "type": "float", + "description": "Gross Profit", + "default": null, + "optional": true + }, + { + "name": "provisions_for_loan_lease_and_other_losses", + "type": "float", + "description": "Provisions for loan lease and other losses", + "default": null, + "optional": true + }, + { + "name": "depreciation_and_amortization", + "type": "float", + "description": "Depreciation and Amortization", + "default": null, + "optional": true + }, + { + "name": "income_tax_expense_benefit_current", + "type": "float", + "description": "Income tax expense benefit current", + "default": null, + "optional": true + }, + { + "name": "deferred_tax_benefit", + "type": "float", + "description": "Deferred tax benefit", + "default": null, + "optional": true + }, + { + "name": "benefits_costs_expenses", + "type": "float", + "description": "Benefits, costs and expenses", + "default": null, + "optional": true + }, + { + "name": "selling_general_and_administrative_expense", + "type": "float", + "description": "Selling, general and administrative expense", + "default": null, + "optional": true + }, + { + "name": "research_and_development", + "type": "float", + "description": "Research and development", + "default": null, + "optional": true + }, + { + "name": "costs_and_expenses", + "type": "float", + "description": "Costs and expenses", + "default": null, + "optional": true + }, + { + "name": "other_operating_expenses", + "type": "float", + "description": "Other Operating Expenses", + "default": null, + "optional": true + }, + { + "name": "operating_expenses", + "type": "float", + "description": "Operating expenses", + "default": null, + "optional": true + }, + { + "name": "operating_income", + "type": "float", + "description": "Operating Income/Loss", + "default": null, + "optional": true + }, + { + "name": "non_operating_income", + "type": "float", + "description": "Non Operating Income/Loss", + "default": null, + "optional": true + }, + { + "name": "interest_and_dividend_income", + "type": "float", + "description": "Interest and Dividend Income", + "default": null, + "optional": true + }, + { + "name": "total_interest_expense", + "type": "float", + "description": "Interest Expense", + "default": null, + "optional": true + }, + { + "name": "interest_and_debt_expense", + "type": "float", + "description": "Interest and Debt Expense", + "default": null, + "optional": true + }, + { + "name": "net_interest_income", + "type": "float", + "description": "Interest Income Net", + "default": null, + "optional": true + }, + { + "name": "interest_income_after_provision_for_losses", + "type": "float", + "description": "Interest Income After Provision for Losses", + "default": null, + "optional": true + }, + { + "name": "non_interest_expense", + "type": "float", + "description": "Non-Interest Expense", + "default": null, + "optional": true + }, + { + "name": "non_interest_income", + "type": "float", + "description": "Non-Interest Income", + "default": null, + "optional": true + }, + { + "name": "income_from_discontinued_operations_net_of_tax_on_disposal", + "type": "float", + "description": "Income From Discontinued Operations Net of Tax on Disposal", + "default": null, + "optional": true + }, + { + "name": "income_from_discontinued_operations_net_of_tax", + "type": "float", + "description": "Income From Discontinued Operations Net of Tax", + "default": null, + "optional": true + }, + { + "name": "income_before_equity_method_investments", + "type": "float", + "description": "Income Before Equity Method Investments", + "default": null, + "optional": true + }, + { + "name": "income_from_equity_method_investments", + "type": "float", + "description": "Income From Equity Method Investments", + "default": null, + "optional": true + }, + { + "name": "total_pre_tax_income", + "type": "float", + "description": "Income Before Tax", + "default": null, + "optional": true + }, + { + "name": "income_tax_expense", + "type": "float", + "description": "Income Tax Expense", + "default": null, + "optional": true + }, + { + "name": "income_after_tax", + "type": "float", + "description": "Income After Tax", + "default": null, + "optional": true + }, + { + "name": "consolidated_net_income", + "type": "float", + "description": "Net Income/Loss", + "default": null, + "optional": true + }, + { + "name": "net_income_attributable_noncontrolling_interest", + "type": "float", + "description": "Net income (loss) attributable to noncontrolling interest", + "default": null, + "optional": true + }, + { + "name": "net_income_attributable_to_parent", + "type": "float", + "description": "Net income (loss) attributable to parent", + "default": null, + "optional": true + }, + { + "name": "net_income_attributable_to_common_shareholders", + "type": "float", + "description": "Net Income/Loss Available To Common Stockholders Basic", + "default": null, + "optional": true + }, + { + "name": "participating_securities_earnings", + "type": "float", + "description": "Participating Securities Distributed And Undistributed Earnings Loss Basic", + "default": null, + "optional": true + }, + { + "name": "undistributed_earnings_allocated_to_participating_securities", + "type": "float", + "description": "Undistributed Earnings Allocated To Participating Securities", + "default": null, + "optional": true + }, + { + "name": "common_stock_dividends", + "type": "float", + "description": "Common Stock Dividends", + "default": null, + "optional": true + }, + { + "name": "preferred_stock_dividends_and_other_adjustments", + "type": "float", + "description": "Preferred stock dividends and other adjustments", + "default": null, + "optional": true + }, + { + "name": "basic_earnings_per_share", + "type": "float", + "description": "Earnings Per Share", + "default": null, + "optional": true + }, + { + "name": "diluted_earnings_per_share", + "type": "float", + "description": "Diluted Earnings Per Share", + "default": null, + "optional": true + }, + { + "name": "weighted_average_basic_shares_outstanding", + "type": "float", + "description": "Basic Average Shares", + "default": null, + "optional": true + }, + { + "name": "weighted_average_diluted_shares_outstanding", + "type": "float", + "description": "Diluted Average Shares", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "IncomeStatement" + }, + "/equity/fundamental/income_growth": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the growth of a company's income statement items over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.income_growth(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.income_growth(symbol='AAPL', limit=10, period='annual', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 10, + "optional": true + }, + { + "name": "period", + "type": "Literal['annual', 'quarter']", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[IncomeStatementGrowth]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Period the statement is returned for.", + "default": "", + "optional": false + }, + { + "name": "growth_revenue", + "type": "float", + "description": "Growth rate of total revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_cost_of_revenue", + "type": "float", + "description": "Growth rate of cost of goods sold.", + "default": "", + "optional": false + }, + { + "name": "growth_gross_profit", + "type": "float", + "description": "Growth rate of gross profit.", + "default": "", + "optional": false + }, + { + "name": "growth_gross_profit_ratio", + "type": "float", + "description": "Growth rate of gross profit as a percentage of revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_research_and_development_expenses", + "type": "float", + "description": "Growth rate of expenses on research and development.", + "default": "", + "optional": false + }, + { + "name": "growth_general_and_administrative_expenses", + "type": "float", + "description": "Growth rate of general and administrative expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_selling_and_marketing_expenses", + "type": "float", + "description": "Growth rate of expenses on selling and marketing activities.", + "default": "", + "optional": false + }, + { + "name": "growth_other_expenses", + "type": "float", + "description": "Growth rate of other operating expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_operating_expenses", + "type": "float", + "description": "Growth rate of total operating expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_cost_and_expenses", + "type": "float", + "description": "Growth rate of total costs and expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_interest_expense", + "type": "float", + "description": "Growth rate of interest expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_depreciation_and_amortization", + "type": "float", + "description": "Growth rate of depreciation and amortization expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_ebitda", + "type": "float", + "description": "Growth rate of Earnings Before Interest, Taxes, Depreciation, and Amortization.", + "default": "", + "optional": false + }, + { + "name": "growth_ebitda_ratio", + "type": "float", + "description": "Growth rate of EBITDA as a percentage of revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_operating_income", + "type": "float", + "description": "Growth rate of operating income.", + "default": "", + "optional": false + }, + { + "name": "growth_operating_income_ratio", + "type": "float", + "description": "Growth rate of operating income as a percentage of revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_total_other_income_expenses_net", + "type": "float", + "description": "Growth rate of net total other income and expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_income_before_tax", + "type": "float", + "description": "Growth rate of income before taxes.", + "default": "", + "optional": false + }, + { + "name": "growth_income_before_tax_ratio", + "type": "float", + "description": "Growth rate of income before taxes as a percentage of revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_income_tax_expense", + "type": "float", + "description": "Growth rate of income tax expenses.", + "default": "", + "optional": false + }, + { + "name": "growth_net_income", + "type": "float", + "description": "Growth rate of net income.", + "default": "", + "optional": false + }, + { + "name": "growth_net_income_ratio", + "type": "float", + "description": "Growth rate of net income as a percentage of revenue.", + "default": "", + "optional": false + }, + { + "name": "growth_eps", + "type": "float", + "description": "Growth rate of Earnings Per Share (EPS).", + "default": "", + "optional": false + }, + { + "name": "growth_eps_diluted", + "type": "float", + "description": "Growth rate of diluted Earnings Per Share (EPS).", + "default": "", + "optional": false + }, + { + "name": "growth_weighted_average_shs_out", + "type": "float", + "description": "Growth rate of weighted average shares outstanding.", + "default": "", + "optional": false + }, + { + "name": "growth_weighted_average_shs_out_dil", + "type": "float", + "description": "Growth rate of diluted weighted average shares outstanding.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "IncomeStatementGrowth" + }, + "/equity/fundamental/metrics": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get fundamental metrics for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.metrics(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.metrics(symbol='AAPL', period='annual', limit=100, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, yfinance.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "Literal['annual', 'quarter']", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 100, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "with_ttm", + "type": "bool", + "description": "Include trailing twelve months (TTM) data.", + "default": false, + "optional": true + } + ], + "intrinio": [], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[KeyMetrics]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "market_cap", + "type": "float", + "description": "Market capitalization", + "default": null, + "optional": true + }, + { + "name": "pe_ratio", + "type": "float", + "description": "Price-to-earnings ratio (P/E ratio)", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Period of the data.", + "default": "", + "optional": false + }, + { + "name": "calendar_year", + "type": "int", + "description": "Calendar year.", + "default": null, + "optional": true + }, + { + "name": "revenue_per_share", + "type": "float", + "description": "Revenue per share", + "default": null, + "optional": true + }, + { + "name": "net_income_per_share", + "type": "float", + "description": "Net income per share", + "default": null, + "optional": true + }, + { + "name": "operating_cash_flow_per_share", + "type": "float", + "description": "Operating cash flow per share", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_per_share", + "type": "float", + "description": "Free cash flow per share", + "default": null, + "optional": true + }, + { + "name": "cash_per_share", + "type": "float", + "description": "Cash per share", + "default": null, + "optional": true + }, + { + "name": "book_value_per_share", + "type": "float", + "description": "Book value per share", + "default": null, + "optional": true + }, + { + "name": "tangible_book_value_per_share", + "type": "float", + "description": "Tangible book value per share", + "default": null, + "optional": true + }, + { + "name": "shareholders_equity_per_share", + "type": "float", + "description": "Shareholders equity per share", + "default": null, + "optional": true + }, + { + "name": "interest_debt_per_share", + "type": "float", + "description": "Interest debt per share", + "default": null, + "optional": true + }, + { + "name": "enterprise_value", + "type": "float", + "description": "Enterprise value", + "default": null, + "optional": true + }, + { + "name": "price_to_sales_ratio", + "type": "float", + "description": "Price-to-sales ratio", + "default": null, + "optional": true + }, + { + "name": "pocf_ratio", + "type": "float", + "description": "Price-to-operating cash flow ratio", + "default": null, + "optional": true + }, + { + "name": "pfcf_ratio", + "type": "float", + "description": "Price-to-free cash flow ratio", + "default": null, + "optional": true + }, + { + "name": "pb_ratio", + "type": "float", + "description": "Price-to-book ratio", + "default": null, + "optional": true + }, + { + "name": "ptb_ratio", + "type": "float", + "description": "Price-to-tangible book ratio", + "default": null, + "optional": true + }, + { + "name": "ev_to_sales", + "type": "float", + "description": "Enterprise value-to-sales ratio", + "default": null, + "optional": true + }, + { + "name": "enterprise_value_over_ebitda", + "type": "float", + "description": "Enterprise value-to-EBITDA ratio", + "default": null, + "optional": true + }, + { + "name": "ev_to_operating_cash_flow", + "type": "float", + "description": "Enterprise value-to-operating cash flow ratio", + "default": null, + "optional": true + }, + { + "name": "ev_to_free_cash_flow", + "type": "float", + "description": "Enterprise value-to-free cash flow ratio", + "default": null, + "optional": true + }, + { + "name": "earnings_yield", + "type": "float", + "description": "Earnings yield", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_yield", + "type": "float", + "description": "Free cash flow yield", + "default": null, + "optional": true + }, + { + "name": "debt_to_equity", + "type": "float", + "description": "Debt-to-equity ratio", + "default": null, + "optional": true + }, + { + "name": "debt_to_assets", + "type": "float", + "description": "Debt-to-assets ratio", + "default": null, + "optional": true + }, + { + "name": "net_debt_to_ebitda", + "type": "float", + "description": "Net debt-to-EBITDA ratio", + "default": null, + "optional": true + }, + { + "name": "current_ratio", + "type": "float", + "description": "Current ratio", + "default": null, + "optional": true + }, + { + "name": "interest_coverage", + "type": "float", + "description": "Interest coverage", + "default": null, + "optional": true + }, + { + "name": "income_quality", + "type": "float", + "description": "Income quality", + "default": null, + "optional": true + }, + { + "name": "dividend_yield", + "type": "float", + "description": "Dividend yield, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "payout_ratio", + "type": "float", + "description": "Payout ratio", + "default": null, + "optional": true + }, + { + "name": "sales_general_and_administrative_to_revenue", + "type": "float", + "description": "Sales general and administrative expenses-to-revenue ratio", + "default": null, + "optional": true + }, + { + "name": "research_and_development_to_revenue", + "type": "float", + "description": "Research and development expenses-to-revenue ratio", + "default": null, + "optional": true + }, + { + "name": "intangibles_to_total_assets", + "type": "float", + "description": "Intangibles-to-total assets ratio", + "default": null, + "optional": true + }, + { + "name": "capex_to_operating_cash_flow", + "type": "float", + "description": "Capital expenditures-to-operating cash flow ratio", + "default": null, + "optional": true + }, + { + "name": "capex_to_revenue", + "type": "float", + "description": "Capital expenditures-to-revenue ratio", + "default": null, + "optional": true + }, + { + "name": "capex_to_depreciation", + "type": "float", + "description": "Capital expenditures-to-depreciation ratio", + "default": null, + "optional": true + }, + { + "name": "stock_based_compensation_to_revenue", + "type": "float", + "description": "Stock-based compensation-to-revenue ratio", + "default": null, + "optional": true + }, + { + "name": "graham_number", + "type": "float", + "description": "Graham number", + "default": null, + "optional": true + }, + { + "name": "roic", + "type": "float", + "description": "Return on invested capital", + "default": null, + "optional": true + }, + { + "name": "return_on_tangible_assets", + "type": "float", + "description": "Return on tangible assets", + "default": null, + "optional": true + }, + { + "name": "graham_net_net", + "type": "float", + "description": "Graham net-net working capital", + "default": null, + "optional": true + }, + { + "name": "working_capital", + "type": "float", + "description": "Working capital", + "default": null, + "optional": true + }, + { + "name": "tangible_asset_value", + "type": "float", + "description": "Tangible asset value", + "default": null, + "optional": true + }, + { + "name": "net_current_asset_value", + "type": "float", + "description": "Net current asset value", + "default": null, + "optional": true + }, + { + "name": "invested_capital", + "type": "float", + "description": "Invested capital", + "default": null, + "optional": true + }, + { + "name": "average_receivables", + "type": "float", + "description": "Average receivables", + "default": null, + "optional": true + }, + { + "name": "average_payables", + "type": "float", + "description": "Average payables", + "default": null, + "optional": true + }, + { + "name": "average_inventory", + "type": "float", + "description": "Average inventory", + "default": null, + "optional": true + }, + { + "name": "days_sales_outstanding", + "type": "float", + "description": "Days sales outstanding", + "default": null, + "optional": true + }, + { + "name": "days_payables_outstanding", + "type": "float", + "description": "Days payables outstanding", + "default": null, + "optional": true + }, + { + "name": "days_of_inventory_on_hand", + "type": "float", + "description": "Days of inventory on hand", + "default": null, + "optional": true + }, + { + "name": "receivables_turnover", + "type": "float", + "description": "Receivables turnover", + "default": null, + "optional": true + }, + { + "name": "payables_turnover", + "type": "float", + "description": "Payables turnover", + "default": null, + "optional": true + }, + { + "name": "inventory_turnover", + "type": "float", + "description": "Inventory turnover", + "default": null, + "optional": true + }, + { + "name": "roe", + "type": "float", + "description": "Return on equity", + "default": null, + "optional": true + }, + { + "name": "capex_per_share", + "type": "float", + "description": "Capital expenditures per share", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "price_to_book", + "type": "float", + "description": "Price to book ratio.", + "default": null, + "optional": true + }, + { + "name": "price_to_tangible_book", + "type": "float", + "description": "Price to tangible book ratio.", + "default": null, + "optional": true + }, + { + "name": "price_to_revenue", + "type": "float", + "description": "Price to revenue ratio.", + "default": null, + "optional": true + }, + { + "name": "quick_ratio", + "type": "float", + "description": "Quick ratio.", + "default": null, + "optional": true + }, + { + "name": "gross_margin", + "type": "float", + "description": "Gross margin, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "ebit_margin", + "type": "float", + "description": "EBIT margin, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "profit_margin", + "type": "float", + "description": "Profit margin, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "eps", + "type": "float", + "description": "Basic earnings per share.", + "default": null, + "optional": true + }, + { + "name": "eps_growth", + "type": "float", + "description": "EPS growth, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "revenue_growth", + "type": "float", + "description": "Revenue growth, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "ebitda_growth", + "type": "float", + "description": "EBITDA growth, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "ebit_growth", + "type": "float", + "description": "EBIT growth, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "net_income_growth", + "type": "float", + "description": "Net income growth, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_to_firm_growth", + "type": "float", + "description": "Free cash flow to firm growth, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "invested_capital_growth", + "type": "float", + "description": "Invested capital growth, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "return_on_assets", + "type": "float", + "description": "Return on assets, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "return_on_equity", + "type": "float", + "description": "Return on equity, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "return_on_invested_capital", + "type": "float", + "description": "Return on invested capital, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "ebitda", + "type": "int", + "description": "Earnings before interest, taxes, depreciation, and amortization.", + "default": null, + "optional": true + }, + { + "name": "ebit", + "type": "int", + "description": "Earnings before interest and taxes.", + "default": null, + "optional": true + }, + { + "name": "long_term_debt", + "type": "int", + "description": "Long-term debt.", + "default": null, + "optional": true + }, + { + "name": "total_debt", + "type": "int", + "description": "Total debt.", + "default": null, + "optional": true + }, + { + "name": "total_capital", + "type": "int", + "description": "The sum of long-term debt and total shareholder equity.", + "default": null, + "optional": true + }, + { + "name": "enterprise_value", + "type": "int", + "description": "Enterprise value.", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_to_firm", + "type": "int", + "description": "Free cash flow to firm.", + "default": null, + "optional": true + }, + { + "name": "altman_z_score", + "type": "float", + "description": "Altman Z-score.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "Beta relative to the broad market (rolling three-year).", + "default": null, + "optional": true + }, + { + "name": "dividend_yield", + "type": "float", + "description": "Dividend yield, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "earnings_yield", + "type": "float", + "description": "Earnings yield, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "last_price", + "type": "float", + "description": "Last price of the stock.", + "default": null, + "optional": true + }, + { + "name": "year_high", + "type": "float", + "description": "52 week high", + "default": null, + "optional": true + }, + { + "name": "year_low", + "type": "float", + "description": "52 week low", + "default": null, + "optional": true + }, + { + "name": "volume_avg", + "type": "int", + "description": "Average daily volume.", + "default": null, + "optional": true + }, + { + "name": "short_interest", + "type": "int", + "description": "Number of shares reported as sold short.", + "default": null, + "optional": true + }, + { + "name": "shares_outstanding", + "type": "int", + "description": "Weighted average shares outstanding (TTM).", + "default": null, + "optional": true + }, + { + "name": "days_to_cover", + "type": "float", + "description": "Days to cover short interest, based on average daily volume.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "forward_pe", + "type": "float", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true + }, + { + "name": "peg_ratio", + "type": "float", + "description": "PEG ratio (5-year expected).", + "default": null, + "optional": true + }, + { + "name": "peg_ratio_ttm", + "type": "float", + "description": "PEG ratio (TTM).", + "default": null, + "optional": true + }, + { + "name": "eps_ttm", + "type": "float", + "description": "Earnings per share (TTM).", + "default": null, + "optional": true + }, + { + "name": "eps_forward", + "type": "float", + "description": "Forward earnings per share.", + "default": null, + "optional": true + }, + { + "name": "enterprise_to_ebitda", + "type": "float", + "description": "Enterprise value to EBITDA ratio.", + "default": null, + "optional": true + }, + { + "name": "earnings_growth", + "type": "float", + "description": "Earnings growth (Year Over Year), as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "earnings_growth_quarterly", + "type": "float", + "description": "Quarterly earnings growth (Year Over Year), as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "revenue_per_share", + "type": "float", + "description": "Revenue per share (TTM).", + "default": null, + "optional": true + }, + { + "name": "revenue_growth", + "type": "float", + "description": "Revenue growth (Year Over Year), as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "enterprise_to_revenue", + "type": "float", + "description": "Enterprise value to revenue ratio.", + "default": null, + "optional": true + }, + { + "name": "cash_per_share", + "type": "float", + "description": "Cash per share.", + "default": null, + "optional": true + }, + { + "name": "quick_ratio", + "type": "float", + "description": "Quick ratio.", + "default": null, + "optional": true + }, + { + "name": "current_ratio", + "type": "float", + "description": "Current ratio.", + "default": null, + "optional": true + }, + { + "name": "debt_to_equity", + "type": "float", + "description": "Debt-to-equity ratio.", + "default": null, + "optional": true + }, + { + "name": "gross_margin", + "type": "float", + "description": "Gross margin, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "operating_margin", + "type": "float", + "description": "Operating margin, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "ebitda_margin", + "type": "float", + "description": "EBITDA margin, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "profit_margin", + "type": "float", + "description": "Profit margin, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "return_on_assets", + "type": "float", + "description": "Return on assets, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "return_on_equity", + "type": "float", + "description": "Return on equity, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield", + "type": "float", + "description": "Dividend yield, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield_5y_avg", + "type": "float", + "description": "5-year average dividend yield, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "payout_ratio", + "type": "float", + "description": "Payout ratio.", + "default": null, + "optional": true + }, + { + "name": "book_value", + "type": "float", + "description": "Book value per share.", + "default": null, + "optional": true + }, + { + "name": "price_to_book", + "type": "float", + "description": "Price-to-book ratio.", + "default": null, + "optional": true + }, + { + "name": "enterprise_value", + "type": "int", + "description": "Enterprise value.", + "default": null, + "optional": true + }, + { + "name": "overall_risk", + "type": "float", + "description": "Overall risk score.", + "default": null, + "optional": true + }, + { + "name": "audit_risk", + "type": "float", + "description": "Audit risk score.", + "default": null, + "optional": true + }, + { + "name": "board_risk", + "type": "float", + "description": "Board risk score.", + "default": null, + "optional": true + }, + { + "name": "compensation_risk", + "type": "float", + "description": "Compensation risk score.", + "default": null, + "optional": true + }, + { + "name": "shareholder_rights_risk", + "type": "float", + "description": "Shareholder rights risk score.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "Beta relative to the broad market (5-year monthly).", + "default": null, + "optional": true + }, + { + "name": "price_return_1y", + "type": "float", + "description": "One-year price return, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency in which the data is presented.", + "default": null, + "optional": true + } + ] + }, + "model": "KeyMetrics" + }, + "/equity/fundamental/management": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get executive management team data for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.management(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[KeyExecutives]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "title", + "type": "str", + "description": "Designation of the key executive.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the key executive.", + "default": "", + "optional": false + }, + { + "name": "pay", + "type": "int", + "description": "Pay of the key executive.", + "default": null, + "optional": true + }, + { + "name": "currency_pay", + "type": "str", + "description": "Currency of the pay.", + "default": null, + "optional": true + }, + { + "name": "gender", + "type": "str", + "description": "Gender of the key executive.", + "default": null, + "optional": true + }, + { + "name": "year_born", + "type": "int", + "description": "Birth year of the key executive.", + "default": null, + "optional": true + }, + { + "name": "title_since", + "type": "int", + "description": "Date the tile was held since.", + "default": null, + "optional": true + } + ], + "fmp": [], + "yfinance": [ + { + "name": "exercised_value", + "type": "int", + "description": "Value of shares exercised.", + "default": null, + "optional": true + }, + { + "name": "unexercised_value", + "type": "int", + "description": "Value of shares not exercised.", + "default": null, + "optional": true + } + ] + }, + "model": "KeyExecutives" + }, + "/equity/fundamental/management_compensation": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get executive management team compensation for a given company over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.management_compensation(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "year", + "type": "int", + "description": "Year of the compensation.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ExecutiveCompensation]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "cik", + "type": "str", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true + }, + { + "name": "company_name", + "type": "str", + "description": "The name of the company.", + "default": null, + "optional": true + }, + { + "name": "industry", + "type": "str", + "description": "The industry of the company.", + "default": null, + "optional": true + }, + { + "name": "year", + "type": "int", + "description": "Year of the compensation.", + "default": null, + "optional": true + }, + { + "name": "name_and_position", + "type": "str", + "description": "Name and position.", + "default": null, + "optional": true + }, + { + "name": "salary", + "type": "Annotated[float, Ge(ge=0)]", + "description": "Salary.", + "default": null, + "optional": true + }, + { + "name": "bonus", + "type": "Annotated[float, Ge(ge=0)]", + "description": "Bonus payments.", + "default": null, + "optional": true + }, + { + "name": "stock_award", + "type": "Annotated[float, Ge(ge=0)]", + "description": "Stock awards.", + "default": null, + "optional": true + }, + { + "name": "incentive_plan_compensation", + "type": "Annotated[float, Ge(ge=0)]", + "description": "Incentive plan compensation.", + "default": null, + "optional": true + }, + { + "name": "all_other_compensation", + "type": "Annotated[float, Ge(ge=0)]", + "description": "All other compensation.", + "default": null, + "optional": true + }, + { + "name": "total", + "type": "Annotated[float, Ge(ge=0)]", + "description": "Total compensation.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "filing_date", + "type": "date", + "description": "Date of the filing.", + "default": null, + "optional": true + }, + { + "name": "accepted_date", + "type": "datetime", + "description": "Date the filing was accepted.", + "default": null, + "optional": true + }, + { + "name": "url", + "type": "str", + "description": "URL to the filing data.", + "default": null, + "optional": true + } + ] + }, + "model": "ExecutiveCompensation" + }, + "/equity/fundamental/overview": { + "deprecated": { + "flag": true, + "message": "This endpoint is deprecated; use `/equity/profile` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.3." + }, + "description": "Get company general business and stock data for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.overview(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CompanyOverview]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "price", + "type": "float", + "description": "Price of the company.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "Beta of the company.", + "default": null, + "optional": true + }, + { + "name": "vol_avg", + "type": "int", + "description": "Volume average of the company.", + "default": null, + "optional": true + }, + { + "name": "mkt_cap", + "type": "int", + "description": "Market capitalization of the company.", + "default": null, + "optional": true + }, + { + "name": "last_div", + "type": "float", + "description": "Last dividend of the company.", + "default": null, + "optional": true + }, + { + "name": "range", + "type": "str", + "description": "Range of the company.", + "default": null, + "optional": true + }, + { + "name": "changes", + "type": "float", + "description": "Changes of the company.", + "default": null, + "optional": true + }, + { + "name": "company_name", + "type": "str", + "description": "Company name of the company.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency of the company.", + "default": null, + "optional": true + }, + { + "name": "cik", + "type": "str", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "ISIN of the company.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "CUSIP of the company.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "Exchange of the company.", + "default": null, + "optional": true + }, + { + "name": "exchange_short_name", + "type": "str", + "description": "Exchange short name of the company.", + "default": null, + "optional": true + }, + { + "name": "industry", + "type": "str", + "description": "Industry of the company.", + "default": null, + "optional": true + }, + { + "name": "website", + "type": "str", + "description": "Website of the company.", + "default": null, + "optional": true + }, + { + "name": "description", + "type": "str", + "description": "Description of the company.", + "default": null, + "optional": true + }, + { + "name": "ceo", + "type": "str", + "description": "CEO of the company.", + "default": null, + "optional": true + }, + { + "name": "sector", + "type": "str", + "description": "Sector of the company.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "Country of the company.", + "default": null, + "optional": true + }, + { + "name": "full_time_employees", + "type": "str", + "description": "Full time employees of the company.", + "default": null, + "optional": true + }, + { + "name": "phone", + "type": "str", + "description": "Phone of the company.", + "default": null, + "optional": true + }, + { + "name": "address", + "type": "str", + "description": "Address of the company.", + "default": null, + "optional": true + }, + { + "name": "city", + "type": "str", + "description": "City of the company.", + "default": null, + "optional": true + }, + { + "name": "state", + "type": "str", + "description": "State of the company.", + "default": null, + "optional": true + }, + { + "name": "zip", + "type": "str", + "description": "Zip of the company.", + "default": null, + "optional": true + }, + { + "name": "dcf_diff", + "type": "float", + "description": "Discounted cash flow difference of the company.", + "default": null, + "optional": true + }, + { + "name": "dcf", + "type": "float", + "description": "Discounted cash flow of the company.", + "default": null, + "optional": true + }, + { + "name": "image", + "type": "str", + "description": "Image of the company.", + "default": null, + "optional": true + }, + { + "name": "ipo_date", + "type": "date", + "description": "IPO date of the company.", + "default": null, + "optional": true + }, + { + "name": "default_image", + "type": "bool", + "description": "If the image is the default image.", + "default": "", + "optional": false + }, + { + "name": "is_etf", + "type": "bool", + "description": "If the company is an ETF.", + "default": "", + "optional": false + }, + { + "name": "is_actively_trading", + "type": "bool", + "description": "If the company is actively trading.", + "default": "", + "optional": false + }, + { + "name": "is_adr", + "type": "bool", + "description": "If the company is an ADR.", + "default": "", + "optional": false + }, + { + "name": "is_fund", + "type": "bool", + "description": "If the company is a fund.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "CompanyOverview" + }, + "/equity/fundamental/ratios": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get an extensive set of financial and accounting ratios for a given company over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.ratios(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.ratios(symbol='AAPL', period='annual', limit=12, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "str", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 12, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "fiscal_year", + "type": "int", + "description": "The specific fiscal year. Reports do not go beyond 2008.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[FinancialRatios]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "str", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "fiscal_period", + "type": "str", + "description": "Period of the financial ratios.", + "default": "", + "optional": false + }, + { + "name": "fiscal_year", + "type": "int", + "description": "Fiscal year.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "current_ratio", + "type": "float", + "description": "Current ratio.", + "default": null, + "optional": true + }, + { + "name": "quick_ratio", + "type": "float", + "description": "Quick ratio.", + "default": null, + "optional": true + }, + { + "name": "cash_ratio", + "type": "float", + "description": "Cash ratio.", + "default": null, + "optional": true + }, + { + "name": "days_of_sales_outstanding", + "type": "float", + "description": "Days of sales outstanding.", + "default": null, + "optional": true + }, + { + "name": "days_of_inventory_outstanding", + "type": "float", + "description": "Days of inventory outstanding.", + "default": null, + "optional": true + }, + { + "name": "operating_cycle", + "type": "float", + "description": "Operating cycle.", + "default": null, + "optional": true + }, + { + "name": "days_of_payables_outstanding", + "type": "float", + "description": "Days of payables outstanding.", + "default": null, + "optional": true + }, + { + "name": "cash_conversion_cycle", + "type": "float", + "description": "Cash conversion cycle.", + "default": null, + "optional": true + }, + { + "name": "gross_profit_margin", + "type": "float", + "description": "Gross profit margin.", + "default": null, + "optional": true + }, + { + "name": "operating_profit_margin", + "type": "float", + "description": "Operating profit margin.", + "default": null, + "optional": true + }, + { + "name": "pretax_profit_margin", + "type": "float", + "description": "Pretax profit margin.", + "default": null, + "optional": true + }, + { + "name": "net_profit_margin", + "type": "float", + "description": "Net profit margin.", + "default": null, + "optional": true + }, + { + "name": "effective_tax_rate", + "type": "float", + "description": "Effective tax rate.", + "default": null, + "optional": true + }, + { + "name": "return_on_assets", + "type": "float", + "description": "Return on assets.", + "default": null, + "optional": true + }, + { + "name": "return_on_equity", + "type": "float", + "description": "Return on equity.", + "default": null, + "optional": true + }, + { + "name": "return_on_capital_employed", + "type": "float", + "description": "Return on capital employed.", + "default": null, + "optional": true + }, + { + "name": "net_income_per_ebt", + "type": "float", + "description": "Net income per EBT.", + "default": null, + "optional": true + }, + { + "name": "ebt_per_ebit", + "type": "float", + "description": "EBT per EBIT.", + "default": null, + "optional": true + }, + { + "name": "ebit_per_revenue", + "type": "float", + "description": "EBIT per revenue.", + "default": null, + "optional": true + }, + { + "name": "debt_ratio", + "type": "float", + "description": "Debt ratio.", + "default": null, + "optional": true + }, + { + "name": "debt_equity_ratio", + "type": "float", + "description": "Debt equity ratio.", + "default": null, + "optional": true + }, + { + "name": "long_term_debt_to_capitalization", + "type": "float", + "description": "Long term debt to capitalization.", + "default": null, + "optional": true + }, + { + "name": "total_debt_to_capitalization", + "type": "float", + "description": "Total debt to capitalization.", + "default": null, + "optional": true + }, + { + "name": "interest_coverage", + "type": "float", + "description": "Interest coverage.", + "default": null, + "optional": true + }, + { + "name": "cash_flow_to_debt_ratio", + "type": "float", + "description": "Cash flow to debt ratio.", + "default": null, + "optional": true + }, + { + "name": "company_equity_multiplier", + "type": "float", + "description": "Company equity multiplier.", + "default": null, + "optional": true + }, + { + "name": "receivables_turnover", + "type": "float", + "description": "Receivables turnover.", + "default": null, + "optional": true + }, + { + "name": "payables_turnover", + "type": "float", + "description": "Payables turnover.", + "default": null, + "optional": true + }, + { + "name": "inventory_turnover", + "type": "float", + "description": "Inventory turnover.", + "default": null, + "optional": true + }, + { + "name": "fixed_asset_turnover", + "type": "float", + "description": "Fixed asset turnover.", + "default": null, + "optional": true + }, + { + "name": "asset_turnover", + "type": "float", + "description": "Asset turnover.", + "default": null, + "optional": true + }, + { + "name": "operating_cash_flow_per_share", + "type": "float", + "description": "Operating cash flow per share.", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_per_share", + "type": "float", + "description": "Free cash flow per share.", + "default": null, + "optional": true + }, + { + "name": "cash_per_share", + "type": "float", + "description": "Cash per share.", + "default": null, + "optional": true + }, + { + "name": "payout_ratio", + "type": "float", + "description": "Payout ratio.", + "default": null, + "optional": true + }, + { + "name": "operating_cash_flow_sales_ratio", + "type": "float", + "description": "Operating cash flow sales ratio.", + "default": null, + "optional": true + }, + { + "name": "free_cash_flow_operating_cash_flow_ratio", + "type": "float", + "description": "Free cash flow operating cash flow ratio.", + "default": null, + "optional": true + }, + { + "name": "cash_flow_coverage_ratios", + "type": "float", + "description": "Cash flow coverage ratios.", + "default": null, + "optional": true + }, + { + "name": "short_term_coverage_ratios", + "type": "float", + "description": "Short term coverage ratios.", + "default": null, + "optional": true + }, + { + "name": "capital_expenditure_coverage_ratio", + "type": "float", + "description": "Capital expenditure coverage ratio.", + "default": null, + "optional": true + }, + { + "name": "dividend_paid_and_capex_coverage_ratio", + "type": "float", + "description": "Dividend paid and capex coverage ratio.", + "default": null, + "optional": true + }, + { + "name": "dividend_payout_ratio", + "type": "float", + "description": "Dividend payout ratio.", + "default": null, + "optional": true + }, + { + "name": "price_book_value_ratio", + "type": "float", + "description": "Price book value ratio.", + "default": null, + "optional": true + }, + { + "name": "price_to_book_ratio", + "type": "float", + "description": "Price to book ratio.", + "default": null, + "optional": true + }, + { + "name": "price_to_sales_ratio", + "type": "float", + "description": "Price to sales ratio.", + "default": null, + "optional": true + }, + { + "name": "price_earnings_ratio", + "type": "float", + "description": "Price earnings ratio.", + "default": null, + "optional": true + }, + { + "name": "price_to_free_cash_flows_ratio", + "type": "float", + "description": "Price to free cash flows ratio.", + "default": null, + "optional": true + }, + { + "name": "price_to_operating_cash_flows_ratio", + "type": "float", + "description": "Price to operating cash flows ratio.", + "default": null, + "optional": true + }, + { + "name": "price_cash_flow_ratio", + "type": "float", + "description": "Price cash flow ratio.", + "default": null, + "optional": true + }, + { + "name": "price_earnings_to_growth_ratio", + "type": "float", + "description": "Price earnings to growth ratio.", + "default": null, + "optional": true + }, + { + "name": "price_sales_ratio", + "type": "float", + "description": "Price sales ratio.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield", + "type": "float", + "description": "Dividend yield.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield_percentage", + "type": "float", + "description": "Dividend yield percentage.", + "default": null, + "optional": true + }, + { + "name": "dividend_per_share", + "type": "float", + "description": "Dividend per share.", + "default": null, + "optional": true + }, + { + "name": "enterprise_value_multiple", + "type": "float", + "description": "Enterprise value multiple.", + "default": null, + "optional": true + }, + { + "name": "price_fair_value", + "type": "float", + "description": "Price fair value.", + "default": null, + "optional": true + } + ], + "intrinio": [] + }, + "model": "FinancialRatios" + }, + "/equity/fundamental/revenue_per_geography": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the revenue geographic breakdown for a given company over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.revenue_per_geography(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.revenue_per_geography(symbol='AAPL', period='annual', structure='flat', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "Literal['quarter', 'annual']", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "structure", + "type": "Literal['hierarchical', 'flat']", + "description": "Structure of the returned data.", + "default": "flat", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[RevenueGeographic]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": "", + "optional": false + }, + { + "name": "fiscal_period", + "type": "str", + "description": "The fiscal period of the reporting period.", + "default": null, + "optional": true + }, + { + "name": "fiscal_year", + "type": "int", + "description": "The fiscal year of the reporting period.", + "default": null, + "optional": true + }, + { + "name": "filing_date", + "type": "date", + "description": "The filing date of the report.", + "default": null, + "optional": true + }, + { + "name": "geographic_segment", + "type": "int", + "description": "Dictionary of the revenue by geographic segment.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "RevenueGeographic" + }, + "/equity/fundamental/revenue_per_segment": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the revenue breakdown by business segment for a given company over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.revenue_per_segment(symbol='AAPL', provider='fmp')\nobb.equity.fundamental.revenue_per_segment(symbol='AAPL', period='annual', structure='flat', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "period", + "type": "Literal['quarter', 'annual']", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true + }, + { + "name": "structure", + "type": "Literal['hierarchical', 'flat']", + "description": "Structure of the returned data.", + "default": "flat", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[RevenueBusinessLine]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": "", + "optional": false + }, + { + "name": "fiscal_period", + "type": "str", + "description": "The fiscal period of the reporting period.", + "default": null, + "optional": true + }, + { + "name": "fiscal_year", + "type": "int", + "description": "The fiscal year of the reporting period.", + "default": null, + "optional": true + }, + { + "name": "filing_date", + "type": "date", + "description": "The filing date of the report.", + "default": null, + "optional": true + }, + { + "name": "business_line", + "type": "int", + "description": "Dictionary containing the revenue of the business line.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "RevenueBusinessLine" + }, + "/equity/fundamental/filings": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more. SEC\nfilings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114,\nForeign Investment Disclosures and others. The annual 10-K report is required to be\nfiled annually and includes the company's financial statements, management discussion and analysis,\nand audited financial statements.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.filings(provider='fmp')\nobb.equity.fundamental.filings(limit=100, provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": null, + "optional": true + }, + { + "name": "form_type", + "type": "str", + "description": "Filter by form type. Check the data provider for available types.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 100, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "thea_enabled", + "type": "bool", + "description": "Return filings that have been read by Intrinio's Thea NLP.", + "default": null, + "optional": true + } + ], + "sec": [ + { + "name": "cik", + "type": "Union[int, str]", + "description": "Lookup filings by Central Index Key (CIK) instead of by symbol.", + "default": null, + "optional": true + }, + { + "name": "type", + "type": "Literal['1', '1-A', '1-A POS', '1-A-W', '1-E', '1-E AD', '1-K', '1-SA', '1-U', '1-Z', '1-Z-W', '10-12B', '10-12G', '10-D', '10-K', '10-KT', '10-Q', '10-QT', '11-K', '11-KT', '13F-HR', '13F-NT', '13FCONP', '144', '15-12B', '15-12G', '15-15D', '15F-12B', '15F-12G', '15F-15D', '18-12B', '18-K', '19B-4E', '2-A', '2-AF', '2-E', '20-F', '20FR12B', '20FR12G', '24F-2NT', '25', '25-NSE', '253G1', '253G2', '253G3', '253G4', '3', '305B2', '34-12H', '4', '40-17F1', '40-17F2', '40-17G', '40-17GCS', '40-202A', '40-203A', '40-206A', '40-24B2', '40-33', '40-6B', '40-8B25', '40-8F-2', '40-APP', '40-F', '40-OIP', '40FR12B', '40FR12G', '424A', '424B1', '424B2', '424B3', '424B4', '424B5', '424B7', '424B8', '424H', '425', '485APOS', '485BPOS', '485BXT', '486APOS', '486BPOS', '486BXT', '487', '497', '497AD', '497H2', '497J', '497K', '497VPI', '497VPU', '5', '6-K', '6B NTC', '6B ORDR', '8-A12B', '8-A12G', '8-K', '8-K12B', '8-K12G3', '8-K15D5', '8-M', '8F-2 NTC', '8F-2 ORDR', '9-M', 'ABS-15G', 'ABS-EE', 'ADN-MTL', 'ADV-E', 'ADV-H-C', 'ADV-H-T', 'ADV-NR', 'ANNLRPT', 'APP NTC', 'APP ORDR', 'APP WD', 'APP WDG', 'ARS', 'ATS-N', 'ATS-N-C', 'ATS-N/UA', 'AW', 'AW WD', 'C', 'C-AR', 'C-AR-W', 'C-TR', 'C-TR-W', 'C-U', 'C-U-W', 'C-W', 'CB', 'CERT', 'CERTARCA', 'CERTBATS', 'CERTCBO', 'CERTNAS', 'CERTNYS', 'CERTPAC', 'CFPORTAL', 'CFPORTAL-W', 'CORRESP', 'CT ORDER', 'D', 'DEF 14A', 'DEF 14C', 'DEFA14A', 'DEFA14C', 'DEFC14A', 'DEFC14C', 'DEFM14A', 'DEFM14C', 'DEFN14A', 'DEFR14A', 'DEFR14C', 'DEL AM', 'DFAN14A', 'DFRN14A', 'DOS', 'DOSLTR', 'DRS', 'DRSLTR', 'DSTRBRPT', 'EFFECT', 'F-1', 'F-10', 'F-10EF', 'F-10POS', 'F-1MEF', 'F-3', 'F-3ASR', 'F-3D', 'F-3DPOS', 'F-3MEF', 'F-4', 'F-4 POS', 'F-4MEF', 'F-6', 'F-6 POS', 'F-6EF', 'F-7', 'F-7 POS', 'F-8', 'F-8 POS', 'F-80', 'F-80POS', 'F-9', 'F-9 POS', 'F-N', 'F-X', 'FOCUSN', 'FWP', 'G-405', 'G-405N', 'G-FIN', 'G-FINW', 'IRANNOTICE', 'MA', 'MA-A', 'MA-I', 'MA-W', 'MSD', 'MSDCO', 'MSDW', 'N-1', 'N-14', 'N-14 8C', 'N-14MEF', 'N-18F1', 'N-1A', 'N-2', 'N-2 POSASR', 'N-23C-2', 'N-23C3A', 'N-23C3B', 'N-23C3C', 'N-2ASR', 'N-2MEF', 'N-30B-2', 'N-30D', 'N-4', 'N-5', 'N-54A', 'N-54C', 'N-6', 'N-6F', 'N-8A', 'N-8B-2', 'N-8F', 'N-8F NTC', 'N-8F ORDR', 'N-CEN', 'N-CR', 'N-CSR', 'N-CSRS', 'N-MFP', 'N-MFP1', 'N-MFP2', 'N-PX', 'N-Q', 'N-VP', 'N-VPFS', 'NO ACT', 'NPORT-EX', 'NPORT-NP', 'NPORT-P', 'NRSRO-CE', 'NRSRO-UPD', 'NSAR-A', 'NSAR-AT', 'NSAR-B', 'NSAR-BT', 'NSAR-U', 'NT 10-D', 'NT 10-K', 'NT 10-Q', 'NT 11-K', 'NT 20-F', 'NT N-CEN', 'NT N-MFP', 'NT N-MFP1', 'NT N-MFP2', 'NT NPORT-EX', 'NT NPORT-P', 'NT-NCEN', 'NT-NCSR', 'NT-NSAR', 'NTFNCEN', 'NTFNCSR', 'NTFNSAR', 'NTN 10D', 'NTN 10K', 'NTN 10Q', 'NTN 20F', 'OIP NTC', 'OIP ORDR', 'POS 8C', 'POS AM', 'POS AMI', 'POS EX', 'POS462B', 'POS462C', 'POSASR', 'PRE 14A', 'PRE 14C', 'PREC14A', 'PREC14C', 'PREM14A', 'PREM14C', 'PREN14A', 'PRER14A', 'PRER14C', 'PRRN14A', 'PX14A6G', 'PX14A6N', 'QRTLYRPT', 'QUALIF', 'REG-NR', 'REVOKED', 'RW', 'RW WD', 'S-1', 'S-11', 'S-11MEF', 'S-1MEF', 'S-20', 'S-3', 'S-3ASR', 'S-3D', 'S-3DPOS', 'S-3MEF', 'S-4', 'S-4 POS', 'S-4EF', 'S-4MEF', 'S-6', 'S-8', 'S-8 POS', 'S-B', 'S-BMEF', 'SBSE', 'SBSE-A', 'SBSE-BD', 'SBSE-C', 'SBSE-W', 'SC 13D', 'SC 13E1', 'SC 13E3', 'SC 13G', 'SC 14D9', 'SC 14F1', 'SC 14N', 'SC TO-C', 'SC TO-I', 'SC TO-T', 'SC13E4F', 'SC14D1F', 'SC14D9C', 'SC14D9F', 'SD', 'SDR', 'SE', 'SEC ACTION', 'SEC STAFF ACTION', 'SEC STAFF LETTER', 'SF-1', 'SF-3', 'SL', 'SP 15D2', 'STOP ORDER', 'SUPPL', 'T-3', 'TA-1', 'TA-2', 'TA-W', 'TACO', 'TH', 'TTW', 'UNDER', 'UPLOAD', 'WDL-REQ', 'X-17A-5']", + "description": "Type of the SEC filing form.", + "default": null, + "optional": true + }, + { + "name": "use_cache", + "type": "bool", + "description": "Whether or not to use cache. If True, cache will store for one day.", + "default": true, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CompanyFilings]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "filing_date", + "type": "date", + "description": "The date of the filing.", + "default": "", + "optional": false + }, + { + "name": "accepted_date", + "type": "datetime", + "description": "Accepted date of the filing.", + "default": null, + "optional": true + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "cik", + "type": "str", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true + }, + { + "name": "report_type", + "type": "str", + "description": "Type of filing.", + "default": null, + "optional": true + }, + { + "name": "filing_url", + "type": "str", + "description": "URL to the filing page.", + "default": null, + "optional": true + }, + { + "name": "report_url", + "type": "str", + "description": "URL to the actual report.", + "default": "", + "optional": false + } + ], + "fmp": [], + "intrinio": [ + { + "name": "id", + "type": "str", + "description": "Intrinio ID of the filing.", + "default": "", + "optional": false + }, + { + "name": "period_end_date", + "type": "date", + "description": "Ending date of the fiscal period for the filing.", + "default": null, + "optional": true + }, + { + "name": "sec_unique_id", + "type": "str", + "description": "SEC unique ID of the filing.", + "default": "", + "optional": false + }, + { + "name": "instance_url", + "type": "str", + "description": "URL for the XBRL filing for the report.", + "default": null, + "optional": true + }, + { + "name": "industry_group", + "type": "str", + "description": "Industry group of the company.", + "default": "", + "optional": false + }, + { + "name": "industry_category", + "type": "str", + "description": "Industry category of the company.", + "default": "", + "optional": false + } + ], + "sec": [ + { + "name": "report_date", + "type": "date", + "description": "The date of the filing.", + "default": null, + "optional": true + }, + { + "name": "act", + "type": "Union[int, str]", + "description": "The SEC Act number.", + "default": null, + "optional": true + }, + { + "name": "items", + "type": "Union[str, float]", + "description": "The SEC Item numbers.", + "default": null, + "optional": true + }, + { + "name": "primary_doc_description", + "type": "str", + "description": "The description of the primary document.", + "default": null, + "optional": true + }, + { + "name": "primary_doc", + "type": "str", + "description": "The filename of the primary document.", + "default": null, + "optional": true + }, + { + "name": "accession_number", + "type": "Union[int, str]", + "description": "The accession number.", + "default": null, + "optional": true + }, + { + "name": "file_number", + "type": "Union[int, str]", + "description": "The file number.", + "default": null, + "optional": true + }, + { + "name": "film_number", + "type": "Union[int, str]", + "description": "The film number.", + "default": null, + "optional": true + }, + { + "name": "is_inline_xbrl", + "type": "Union[int, str]", + "description": "Whether the filing is an inline XBRL filing.", + "default": null, + "optional": true + }, + { + "name": "is_xbrl", + "type": "Union[int, str]", + "description": "Whether the filing is an XBRL filing.", + "default": null, + "optional": true + }, + { + "name": "size", + "type": "Union[int, str]", + "description": "The size of the filing.", + "default": null, + "optional": true + }, + { + "name": "complete_submission_url", + "type": "str", + "description": "The URL to the complete filing submission.", + "default": null, + "optional": true + }, + { + "name": "filing_detail_url", + "type": "str", + "description": "The URL to the filing details.", + "default": null, + "optional": true + } + ] + }, + "model": "CompanyFilings" + }, + "/equity/fundamental/historical_splits": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical stock splits for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.historical_splits(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[HistoricalSplits]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "numerator", + "type": "float", + "description": "Numerator of the split.", + "default": null, + "optional": true + }, + { + "name": "denominator", + "type": "float", + "description": "Denominator of the split.", + "default": null, + "optional": true + }, + { + "name": "split_ratio", + "type": "str", + "description": "Split ratio.", + "default": null, + "optional": true + } + ], + "fmp": [] + }, + "model": "HistoricalSplits" + }, + "/equity/fundamental/transcript": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get earnings call transcripts for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.transcript(symbol='AAPL', year=2020, provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "year", + "type": "int", + "description": "Year of the earnings call transcript.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EarningsCallTranscript]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "quarter", + "type": "int", + "description": "Quarter of the earnings call transcript.", + "default": "", + "optional": false + }, + { + "name": "year", + "type": "int", + "description": "Year of the earnings call transcript.", + "default": "", + "optional": false + }, + { + "name": "date", + "type": "datetime", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "content", + "type": "str", + "description": "Content of the earnings call transcript.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "EarningsCallTranscript" + }, + "/equity/fundamental/trailing_dividend_yield": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the 1 year trailing dividend yield for a given company over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.trailing_dividend_yield(symbol='AAPL', provider='tiingo')\nobb.equity.fundamental.trailing_dividend_yield(symbol='AAPL', limit=252, provider='tiingo')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return. Default is 252, the number of trading days in a year.", + "default": 252, + "optional": true + }, + { + "name": "provider", + "type": "Literal['tiingo']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'tiingo' if there is no default.", + "default": "tiingo", + "optional": true + } + ], + "tiingo": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[TrailingDividendYield]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['tiingo']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "trailing_dividend_yield", + "type": "float", + "description": "Trailing dividend yield.", + "default": "", + "optional": false + } + ], + "tiingo": [] + }, + "model": "TrailingDividendYield" + }, + "/equity/ownership/major_holders": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get data about major holders for a given company over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.major_holders(symbol='AAPL', provider='fmp')\nobb.equity.ownership.major_holders(symbol='AAPL', page=0, provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + }, + { + "name": "page", + "type": "int", + "description": "Page number of the data to fetch.", + "default": 0, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityOwnership]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "cik", + "type": "int", + "description": "Central Index Key (CIK) for the requested entity.", + "default": "", + "optional": false + }, + { + "name": "filing_date", + "type": "date", + "description": "Filing date of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "investor_name", + "type": "str", + "description": "Investor name of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "security_name", + "type": "str", + "description": "Security name of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "type_of_security", + "type": "str", + "description": "Type of security of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "security_cusip", + "type": "str", + "description": "Security cusip of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "shares_type", + "type": "str", + "description": "Shares type of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "put_call_share", + "type": "str", + "description": "Put call share of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "investment_discretion", + "type": "str", + "description": "Investment discretion of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "industry_title", + "type": "str", + "description": "Industry title of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "weight", + "type": "float", + "description": "Weight of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "last_weight", + "type": "float", + "description": "Last weight of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "change_in_weight", + "type": "float", + "description": "Change in weight of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "change_in_weight_percentage", + "type": "float", + "description": "Change in weight percentage of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "market_value", + "type": "int", + "description": "Market value of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "last_market_value", + "type": "int", + "description": "Last market value of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "change_in_market_value", + "type": "int", + "description": "Change in market value of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "change_in_market_value_percentage", + "type": "float", + "description": "Change in market value percentage of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "shares_number", + "type": "int", + "description": "Shares number of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "last_shares_number", + "type": "int", + "description": "Last shares number of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "change_in_shares_number", + "type": "float", + "description": "Change in shares number of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "change_in_shares_number_percentage", + "type": "float", + "description": "Change in shares number percentage of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "quarter_end_price", + "type": "float", + "description": "Quarter end price of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "avg_price_paid", + "type": "float", + "description": "Average price paid of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "is_new", + "type": "bool", + "description": "Is the stock ownership new.", + "default": "", + "optional": false + }, + { + "name": "is_sold_out", + "type": "bool", + "description": "Is the stock ownership sold out.", + "default": "", + "optional": false + }, + { + "name": "ownership", + "type": "float", + "description": "How much is the ownership.", + "default": "", + "optional": false + }, + { + "name": "last_ownership", + "type": "float", + "description": "Last ownership amount.", + "default": "", + "optional": false + }, + { + "name": "change_in_ownership", + "type": "float", + "description": "Change in ownership amount.", + "default": "", + "optional": false + }, + { + "name": "change_in_ownership_percentage", + "type": "float", + "description": "Change in ownership percentage.", + "default": "", + "optional": false + }, + { + "name": "holding_period", + "type": "int", + "description": "Holding period of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "first_added", + "type": "date", + "description": "First added date of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "performance", + "type": "float", + "description": "Performance of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "performance_percentage", + "type": "float", + "description": "Performance percentage of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "last_performance", + "type": "float", + "description": "Last performance of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "change_in_performance", + "type": "float", + "description": "Change in performance of the stock ownership.", + "default": "", + "optional": false + }, + { + "name": "is_counted_for_performance", + "type": "bool", + "description": "Is the stock ownership counted for performance.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "EquityOwnership" + }, + "/equity/ownership/institutional": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get data about institutional ownership for a given company over time.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.institutional(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "include_current_quarter", + "type": "bool", + "description": "Include current quarter data.", + "default": false, + "optional": true + }, + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[InstitutionalOwnership]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "cik", + "type": "str", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + } + ], + "fmp": [ + { + "name": "investors_holding", + "type": "int", + "description": "Number of investors holding the stock.", + "default": "", + "optional": false + }, + { + "name": "last_investors_holding", + "type": "int", + "description": "Number of investors holding the stock in the last quarter.", + "default": "", + "optional": false + }, + { + "name": "investors_holding_change", + "type": "int", + "description": "Change in the number of investors holding the stock.", + "default": "", + "optional": false + }, + { + "name": "number_of_13f_shares", + "type": "int", + "description": "Number of 13F shares.", + "default": null, + "optional": true + }, + { + "name": "last_number_of_13f_shares", + "type": "int", + "description": "Number of 13F shares in the last quarter.", + "default": null, + "optional": true + }, + { + "name": "number_of_13f_shares_change", + "type": "int", + "description": "Change in the number of 13F shares.", + "default": null, + "optional": true + }, + { + "name": "total_invested", + "type": "float", + "description": "Total amount invested.", + "default": "", + "optional": false + }, + { + "name": "last_total_invested", + "type": "float", + "description": "Total amount invested in the last quarter.", + "default": "", + "optional": false + }, + { + "name": "total_invested_change", + "type": "float", + "description": "Change in the total amount invested.", + "default": "", + "optional": false + }, + { + "name": "ownership_percent", + "type": "float", + "description": "Ownership percent.", + "default": "", + "optional": false + }, + { + "name": "last_ownership_percent", + "type": "float", + "description": "Ownership percent in the last quarter.", + "default": "", + "optional": false + }, + { + "name": "ownership_percent_change", + "type": "float", + "description": "Change in the ownership percent.", + "default": "", + "optional": false + }, + { + "name": "new_positions", + "type": "int", + "description": "Number of new positions.", + "default": "", + "optional": false + }, + { + "name": "last_new_positions", + "type": "int", + "description": "Number of new positions in the last quarter.", + "default": "", + "optional": false + }, + { + "name": "new_positions_change", + "type": "int", + "description": "Change in the number of new positions.", + "default": "", + "optional": false + }, + { + "name": "increased_positions", + "type": "int", + "description": "Number of increased positions.", + "default": "", + "optional": false + }, + { + "name": "last_increased_positions", + "type": "int", + "description": "Number of increased positions in the last quarter.", + "default": "", + "optional": false + }, + { + "name": "increased_positions_change", + "type": "int", + "description": "Change in the number of increased positions.", + "default": "", + "optional": false + }, + { + "name": "closed_positions", + "type": "int", + "description": "Number of closed positions.", + "default": "", + "optional": false + }, + { + "name": "last_closed_positions", + "type": "int", + "description": "Number of closed positions in the last quarter.", + "default": "", + "optional": false + }, + { + "name": "closed_positions_change", + "type": "int", + "description": "Change in the number of closed positions.", + "default": "", + "optional": false + }, + { + "name": "reduced_positions", + "type": "int", + "description": "Number of reduced positions.", + "default": "", + "optional": false + }, + { + "name": "last_reduced_positions", + "type": "int", + "description": "Number of reduced positions in the last quarter.", + "default": "", + "optional": false + }, + { + "name": "reduced_positions_change", + "type": "int", + "description": "Change in the number of reduced positions.", + "default": "", + "optional": false + }, + { + "name": "total_calls", + "type": "int", + "description": "Total number of call options contracts traded for Apple Inc. on the specified date.", + "default": "", + "optional": false + }, + { + "name": "last_total_calls", + "type": "int", + "description": "Total number of call options contracts traded for Apple Inc. on the previous reporting date.", + "default": "", + "optional": false + }, + { + "name": "total_calls_change", + "type": "int", + "description": "Change in the total number of call options contracts traded between the current and previous reporting dates.", + "default": "", + "optional": false + }, + { + "name": "total_puts", + "type": "int", + "description": "Total number of put options contracts traded for Apple Inc. on the specified date.", + "default": "", + "optional": false + }, + { + "name": "last_total_puts", + "type": "int", + "description": "Total number of put options contracts traded for Apple Inc. on the previous reporting date.", + "default": "", + "optional": false + }, + { + "name": "total_puts_change", + "type": "int", + "description": "Change in the total number of put options contracts traded between the current and previous reporting dates.", + "default": "", + "optional": false + }, + { + "name": "put_call_ratio", + "type": "float", + "description": "Put-call ratio, which is the ratio of the total number of put options to call options traded on the specified date.", + "default": "", + "optional": false + }, + { + "name": "last_put_call_ratio", + "type": "float", + "description": "Put-call ratio on the previous reporting date.", + "default": "", + "optional": false + }, + { + "name": "put_call_ratio_change", + "type": "float", + "description": "Change in the put-call ratio between the current and previous reporting dates.", + "default": "", + "optional": false + } + ] + }, + "model": "InstitutionalOwnership" + }, + "/equity/ownership/insider_trading": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get data about trading by a company's management team and board of directors.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.insider_trading(symbol='AAPL', provider='fmp')\nobb.equity.ownership.insider_trading(symbol='AAPL', limit=500, provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 500, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "transaction_type", + "type": "Literal[None, 'award', 'conversion', 'return', 'expire_short', 'in_kind', 'gift', 'expire_long', 'discretionary', 'other', 'small', 'exempt', 'otm', 'purchase', 'sale', 'tender', 'will', 'itm', 'trust']", + "description": "Type of the transaction.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": "", + "optional": false + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": "", + "optional": false + }, + { + "name": "ownership_type", + "type": "Literal['D', 'I']", + "description": "Type of ownership.", + "default": null, + "optional": true + }, + { + "name": "sort_by", + "type": "Literal['filing_date', 'updated_on']", + "description": "Field to sort by.", + "default": "updated_on", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[InsiderTrading]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "company_cik", + "type": "Union[int, str]", + "description": "CIK number of the company.", + "default": null, + "optional": true + }, + { + "name": "filing_date", + "type": "Union[date, datetime]", + "description": "Filing date of the trade.", + "default": null, + "optional": true + }, + { + "name": "transaction_date", + "type": "date", + "description": "Date of the transaction.", + "default": null, + "optional": true + }, + { + "name": "owner_cik", + "type": "Union[int, str]", + "description": "Reporting individual's CIK.", + "default": null, + "optional": true + }, + { + "name": "owner_name", + "type": "str", + "description": "Name of the reporting individual.", + "default": null, + "optional": true + }, + { + "name": "owner_title", + "type": "str", + "description": "The title held by the reporting individual.", + "default": null, + "optional": true + }, + { + "name": "transaction_type", + "type": "str", + "description": "Type of transaction being reported.", + "default": null, + "optional": true + }, + { + "name": "acquisition_or_disposition", + "type": "str", + "description": "Acquisition or disposition of the shares.", + "default": null, + "optional": true + }, + { + "name": "security_type", + "type": "str", + "description": "The type of security transacted.", + "default": null, + "optional": true + }, + { + "name": "securities_owned", + "type": "float", + "description": "Number of securities owned by the reporting individual.", + "default": null, + "optional": true + }, + { + "name": "securities_transacted", + "type": "float", + "description": "Number of securities transacted by the reporting individual.", + "default": null, + "optional": true + }, + { + "name": "transaction_price", + "type": "float", + "description": "The price of the transaction.", + "default": null, + "optional": true + }, + { + "name": "filing_url", + "type": "str", + "description": "Link to the filing.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "form_type", + "type": "str", + "description": "Form type of the insider trading.", + "default": "", + "optional": false + } + ], + "intrinio": [ + { + "name": "company_name", + "type": "str", + "description": "Name of the company.", + "default": "", + "optional": false + }, + { + "name": "conversion_exercise_price", + "type": "float", + "description": "Conversion/Exercise price of the shares.", + "default": null, + "optional": true + }, + { + "name": "deemed_execution_date", + "type": "date", + "description": "Deemed execution date of the trade.", + "default": null, + "optional": true + }, + { + "name": "exercise_date", + "type": "date", + "description": "Exercise date of the trade.", + "default": null, + "optional": true + }, + { + "name": "expiration_date", + "type": "date", + "description": "Expiration date of the derivative.", + "default": null, + "optional": true + }, + { + "name": "underlying_security_title", + "type": "str", + "description": "Name of the underlying non-derivative security related to this derivative transaction.", + "default": null, + "optional": true + }, + { + "name": "underlying_shares", + "type": "Union[float, int]", + "description": "Number of underlying shares related to this derivative transaction.", + "default": null, + "optional": true + }, + { + "name": "nature_of_ownership", + "type": "str", + "description": "Nature of ownership of the insider trading.", + "default": null, + "optional": true + }, + { + "name": "director", + "type": "bool", + "description": "Whether the owner is a director.", + "default": null, + "optional": true + }, + { + "name": "officer", + "type": "bool", + "description": "Whether the owner is an officer.", + "default": null, + "optional": true + }, + { + "name": "ten_percent_owner", + "type": "bool", + "description": "Whether the owner is a 10% owner.", + "default": null, + "optional": true + }, + { + "name": "other_relation", + "type": "bool", + "description": "Whether the owner is having another relation.", + "default": null, + "optional": true + }, + { + "name": "derivative_transaction", + "type": "bool", + "description": "Whether the owner is having a derivative transaction.", + "default": null, + "optional": true + }, + { + "name": "report_line_number", + "type": "int", + "description": "Report line number of the insider trading.", + "default": null, + "optional": true + } + ] + }, + "model": "InsiderTrading" + }, + "/equity/ownership/share_statistics": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get data about share float for a given company.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.share_statistics(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ShareStatistics]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + }, + { + "name": "free_float", + "type": "float", + "description": "Percentage of unrestricted shares of a publicly-traded company.", + "default": null, + "optional": true + }, + { + "name": "float_shares", + "type": "float", + "description": "Number of shares available for trading by the general public.", + "default": null, + "optional": true + }, + { + "name": "outstanding_shares", + "type": "float", + "description": "Total number of shares of a publicly-traded company.", + "default": null, + "optional": true + }, + { + "name": "source", + "type": "str", + "description": "Source of the received data.", + "default": null, + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "adjusted_outstanding_shares", + "type": "float", + "description": "Total number of shares of a publicly-traded company, adjusted for splits.", + "default": null, + "optional": true + }, + { + "name": "public_float", + "type": "float", + "description": "Aggregate market value of the shares of a publicly-traded company.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "implied_shares_outstanding", + "type": "int", + "description": "Implied Shares Outstanding of common equity, assuming the conversion of all convertible subsidiary equity into common.", + "default": null, + "optional": true + }, + { + "name": "short_interest", + "type": "int", + "description": "Number of shares that are reported short.", + "default": null, + "optional": true + }, + { + "name": "short_percent_of_float", + "type": "float", + "description": "Percentage of shares that are reported short, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "days_to_cover", + "type": "float", + "description": "Number of days to repurchase the shares as a ratio of average daily volume", + "default": null, + "optional": true + }, + { + "name": "short_interest_prev_month", + "type": "int", + "description": "Number of shares that were reported short in the previous month.", + "default": null, + "optional": true + }, + { + "name": "short_interest_prev_date", + "type": "date", + "description": "Date of the previous month's report.", + "default": null, + "optional": true + }, + { + "name": "insider_ownership", + "type": "float", + "description": "Percentage of shares held by insiders, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "institution_ownership", + "type": "float", + "description": "Percentage of shares held by institutions, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "institution_float_ownership", + "type": "float", + "description": "Percentage of float held by institutions, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "institutions_count", + "type": "int", + "description": "Number of institutions holding shares.", + "default": null, + "optional": true + } + ] + }, + "model": "ShareStatistics" + }, + "/equity/ownership/form_13f": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the form 13F.\n\nThe Securities and Exchange Commission's (SEC) Form 13F is a quarterly report\nthat is required to be filed by all institutional investment managers with at least\n$100 million in assets under management.\nManagers are required to file Form 13F within 45 days after the last day of the calendar quarter.\nMost funds wait until the end of this period in order to conceal\ntheir investment strategy from competitors and the public.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.ownership.form_13f(symbol='NVDA', provider='sec')\n# Enter a date (calendar quarter ending) for a specific report.\nobb.equity.ownership.form_13f(symbol='BRK-A', date='2016-09-30', provider='sec')\n# Example finding Michael Burry's filings.\ncik = obb.regulators.sec.institutions_search(\"Scion Asset Management\").results[0].cik\n# Use the `limit` parameter to return N number of reports from the most recent.\nobb.equity.ownership.form_13f(cik, limit=2).to_df()\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for. A CIK or Symbol can be used.", + "default": "", + "optional": false + }, + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for. The date represents the end of the reporting period. All form 13F-HR filings are based on the calendar year and are reported quarterly. If a date is not supplied, the most recent filing is returned. Submissions beginning 2013-06-30 are supported.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return. The number of previous filings to return. The date parameter takes priority over this parameter.", + "default": 1, + "optional": true + }, + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[Form13FHR]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end-of-quarter date of the filing.", + "default": "", + "optional": false + }, + { + "name": "issuer", + "type": "str", + "description": "The name of the issuer.", + "default": "", + "optional": false + }, + { + "name": "cusip", + "type": "str", + "description": "The CUSIP of the security.", + "default": "", + "optional": false + }, + { + "name": "asset_class", + "type": "str", + "description": "The title of the asset class for the security.", + "default": "", + "optional": false + }, + { + "name": "security_type", + "type": "Literal['SH', 'PRN']", + "description": "The total number of shares of the class of security or the principal amount of such class. 'SH' for shares. 'PRN' for principal amount. Convertible debt securities are reported as 'PRN'.", + "default": null, + "optional": true + }, + { + "name": "option_type", + "type": "Literal['call', 'put']", + "description": "Defined when the holdings being reported are put or call options. Only long positions are reported.", + "default": null, + "optional": true + }, + { + "name": "voting_authority_sole", + "type": "int", + "description": "The number of shares for which the Manager exercises sole voting authority (none).", + "default": null, + "optional": true + }, + { + "name": "voting_authority_shared", + "type": "int", + "description": "The number of shares for which the Manager exercises a defined shared voting authority (none).", + "default": null, + "optional": true + }, + { + "name": "voting_authority_other", + "type": "int", + "description": "The number of shares for which the Manager exercises other shared voting authority (none).", + "default": null, + "optional": true + }, + { + "name": "principal_amount", + "type": "int", + "description": "The total number of shares of the class of security or the principal amount of such class. Only long positions are reported", + "default": "", + "optional": false + }, + { + "name": "value", + "type": "int", + "description": "The fair market value of the holding of the particular class of security. The value reported for options is the fair market value of the underlying security with respect to the number of shares controlled. Values are rounded to the nearest US dollar and use the closing price of the last trading day of the calendar year or quarter.", + "default": "", + "optional": false + } + ], + "sec": [ + { + "name": "weight", + "type": "float", + "description": "The weight of the security relative to the market value of all securities in the filing , as a normalized percent.", + "default": "", + "optional": false + } + ] + }, + "model": "Form13FHR" + }, + "/equity/price/quote": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the latest quote for a given stock. Quote includes price, volume, and other data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.quote(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, yfinance.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "source", + "type": "Literal['iex', 'bats', 'bats_delayed', 'utp_delayed', 'cta_a_delayed', 'cta_b_delayed', 'intrinio_mx', 'intrinio_mx_plus', 'delayed_sip']", + "description": "Source of the data.", + "default": "iex", + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityQuote]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "asset_type", + "type": "str", + "description": "Type of asset - i.e, stock, ETF, etc.", + "default": null, + "optional": true + }, + { + "name": "name", + "type": "str", + "description": "Name of the company or asset.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The name or symbol of the venue where the data is from.", + "default": null, + "optional": true + }, + { + "name": "bid", + "type": "float", + "description": "Price of the top bid order.", + "default": null, + "optional": true + }, + { + "name": "bid_size", + "type": "int", + "description": "This represents the number of round lot orders at the given price. The normal round lot size is 100 shares. A size of 2 means there are 200 shares available at the given price.", + "default": null, + "optional": true + }, + { + "name": "bid_exchange", + "type": "str", + "description": "The specific trading venue where the purchase order was placed.", + "default": null, + "optional": true + }, + { + "name": "ask", + "type": "float", + "description": "Price of the top ask order.", + "default": null, + "optional": true + }, + { + "name": "ask_size", + "type": "int", + "description": "This represents the number of round lot orders at the given price. The normal round lot size is 100 shares. A size of 2 means there are 200 shares available at the given price.", + "default": null, + "optional": true + }, + { + "name": "ask_exchange", + "type": "str", + "description": "The specific trading venue where the sale order was placed.", + "default": null, + "optional": true + }, + { + "name": "quote_conditions", + "type": "Union[str, int, List[str], List[int]]", + "description": "Conditions or condition codes applicable to the quote.", + "default": null, + "optional": true + }, + { + "name": "quote_indicators", + "type": "Union[str, int, List[str], List[int]]", + "description": "Indicators or indicator codes applicable to the participant quote related to the price bands for the issue, or the affect the quote has on the NBBO.", + "default": null, + "optional": true + }, + { + "name": "sales_conditions", + "type": "Union[str, int, List[str], List[int]]", + "description": "Conditions or condition codes applicable to the sale.", + "default": null, + "optional": true + }, + { + "name": "sequence_number", + "type": "int", + "description": "The sequence number represents the sequence in which message events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11).", + "default": null, + "optional": true + }, + { + "name": "market_center", + "type": "str", + "description": "The ID of the UTP participant that originated the message.", + "default": null, + "optional": true + }, + { + "name": "participant_timestamp", + "type": "datetime", + "description": "Timestamp for when the quote was generated by the exchange.", + "default": null, + "optional": true + }, + { + "name": "trf_timestamp", + "type": "datetime", + "description": "Timestamp for when the TRF (Trade Reporting Facility) received the message.", + "default": null, + "optional": true + }, + { + "name": "sip_timestamp", + "type": "datetime", + "description": "Timestamp for when the SIP (Security Information Processor) received the message from the exchange.", + "default": null, + "optional": true + }, + { + "name": "last_price", + "type": "float", + "description": "Price of the last trade.", + "default": null, + "optional": true + }, + { + "name": "last_tick", + "type": "str", + "description": "Whether the last sale was an up or down tick.", + "default": null, + "optional": true + }, + { + "name": "last_size", + "type": "int", + "description": "Size of the last trade.", + "default": null, + "optional": true + }, + { + "name": "last_timestamp", + "type": "datetime", + "description": "Date and Time when the last price was recorded.", + "default": null, + "optional": true + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": null, + "optional": true + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": null, + "optional": true + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": null, + "optional": true + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "Union[float, int]", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "exchange_volume", + "type": "Union[float, int]", + "description": "Volume of shares exchanged during the trading day on the specific exchange.", + "default": null, + "optional": true + }, + { + "name": "prev_close", + "type": "float", + "description": "The previous close price.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in price from previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change in price as a normalized percentage.", + "default": null, + "optional": true + }, + { + "name": "year_high", + "type": "float", + "description": "The one year high (52W High).", + "default": null, + "optional": true + }, + { + "name": "year_low", + "type": "float", + "description": "The one year low (52W Low).", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "price_avg50", + "type": "float", + "description": "50 day moving average price.", + "default": null, + "optional": true + }, + { + "name": "price_avg200", + "type": "float", + "description": "200 day moving average price.", + "default": null, + "optional": true + }, + { + "name": "avg_volume", + "type": "int", + "description": "Average volume over the last 10 trading days.", + "default": null, + "optional": true + }, + { + "name": "market_cap", + "type": "float", + "description": "Market cap of the company.", + "default": null, + "optional": true + }, + { + "name": "shares_outstanding", + "type": "int", + "description": "Number of shares outstanding.", + "default": null, + "optional": true + }, + { + "name": "eps", + "type": "float", + "description": "Earnings per share.", + "default": null, + "optional": true + }, + { + "name": "pe", + "type": "float", + "description": "Price earnings ratio.", + "default": null, + "optional": true + }, + { + "name": "earnings_announcement", + "type": "datetime", + "description": "Upcoming earnings announcement date.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "is_darkpool", + "type": "bool", + "description": "Whether or not the current trade is from a darkpool.", + "default": null, + "optional": true + }, + { + "name": "source", + "type": "str", + "description": "Source of the Intrinio data.", + "default": null, + "optional": true + }, + { + "name": "updated_on", + "type": "datetime", + "description": "Date and Time when the data was last updated.", + "default": "", + "optional": false + }, + { + "name": "security", + "type": "IntrinioSecurity", + "description": "Security details related to the quote.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "ma_50d", + "type": "float", + "description": "50-day moving average price.", + "default": null, + "optional": true + }, + { + "name": "ma_200d", + "type": "float", + "description": "200-day moving average price.", + "default": null, + "optional": true + }, + { + "name": "volume_average", + "type": "float", + "description": "Average daily trading volume.", + "default": null, + "optional": true + }, + { + "name": "volume_average_10d", + "type": "float", + "description": "Average daily trading volume in the last 10 days.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency of the price.", + "default": null, + "optional": true + } + ] + }, + "model": "EquityQuote" + }, + "/equity/price/nbbo": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the National Best Bid and Offer for a given stock.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.nbbo(symbol='AAPL', provider='polygon')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['polygon']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'polygon' if there is no default.", + "default": "polygon", + "optional": true + } + ], + "polygon": [ + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return. Up to ten million records will be returned. Pagination occurs in groups of 50,000. Remaining limit values will always return 50,000 more records unless it is the last page. High volume tickers will require multiple max requests for a single day's NBBO records. Expect stocks, like SPY, to approach 1GB in size, per day, as a raw CSV. Splitting large requests into chunks is recommended for full-day requests of high-volume symbols.", + "default": 50000, + "optional": true + }, + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for. Use bracketed the timestamp parameters to specify exact time ranges.", + "default": null, + "optional": true + }, + { + "name": "timestamp_lt", + "type": "Union[datetime, str]", + "description": "Query by datetime, less than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", + "default": null, + "optional": true + }, + { + "name": "timestamp_gt", + "type": "Union[datetime, str]", + "description": "Query by datetime, greater than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", + "default": null, + "optional": true + }, + { + "name": "timestamp_lte", + "type": "Union[datetime, str]", + "description": "Query by datetime, less than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", + "default": null, + "optional": true + }, + { + "name": "timestamp_gte", + "type": "Union[datetime, str]", + "description": "Query by datetime, greater than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityNBBO]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['polygon']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "ask_exchange", + "type": "str", + "description": "The exchange ID for the ask.", + "default": "", + "optional": false + }, + { + "name": "ask", + "type": "float", + "description": "The last ask price.", + "default": "", + "optional": false + }, + { + "name": "ask_size", + "type": "int", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "default": "", + "optional": false + }, + { + "name": "bid_size", + "type": "int", + "description": "The bid size in round lots.", + "default": "", + "optional": false + }, + { + "name": "bid", + "type": "float", + "description": "The last bid price.", + "default": "", + "optional": false + }, + { + "name": "bid_exchange", + "type": "str", + "description": "The exchange ID for the bid.", + "default": "", + "optional": false + } + ], + "polygon": [ + { + "name": "tape", + "type": "str", + "description": "The exchange tape.", + "default": null, + "optional": true + }, + { + "name": "conditions", + "type": "Union[str, List[int], List[str]]", + "description": "A list of condition codes.", + "default": null, + "optional": true + }, + { + "name": "indicators", + "type": "List[int]", + "description": "A list of indicator codes.", + "default": null, + "optional": true + }, + { + "name": "sequence_num", + "type": "int", + "description": "The sequence number represents the sequence in which message events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11)", + "default": null, + "optional": true + }, + { + "name": "participant_timestamp", + "type": "datetime", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "default": null, + "optional": true + }, + { + "name": "sip_timestamp", + "type": "datetime", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this quote from the exchange which produced it.", + "default": null, + "optional": true + }, + { + "name": "trf_timestamp", + "type": "datetime", + "description": "The nanosecond accuracy TRF (Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this quote.", + "default": null, + "optional": true + } + ] + }, + "model": "EquityNBBO" + }, + "/equity/price/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical price data for a given stock. This includes open, high, low, close, and volume.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.historical(symbol='AAPL', provider='fmp')\nobb.equity.price.historical(symbol='AAPL', interval='1d', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", + "default": "", + "optional": false + }, + { + "name": "interval", + "type": "str", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "start_time", + "type": "datetime.time", + "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'.", + "default": null, + "optional": true + }, + { + "name": "end_time", + "type": "datetime.time", + "description": "Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'.", + "default": null, + "optional": true + }, + { + "name": "timezone", + "type": "str", + "description": "Timezone of the data, in the IANA format (Continent/City).", + "default": "America/New_York", + "optional": true + }, + { + "name": "source", + "type": "Literal['realtime', 'delayed', 'nasdaq_basic']", + "description": "The source of the data.", + "default": "realtime", + "optional": true + } + ], + "polygon": [ + { + "name": "adjustment", + "type": "Literal['splits_only', 'unadjusted']", + "description": "The adjustment factor to apply. Default is splits only.", + "default": "splits_only", + "optional": true + }, + { + "name": "extended_hours", + "type": "bool", + "description": "Include Pre and Post market data.", + "default": false, + "optional": true + }, + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", + "default": "asc", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 49999, + "optional": true + } + ], + "tiingo": [], + "yfinance": [ + { + "name": "extended_hours", + "type": "bool", + "description": "Include Pre and Post market data.", + "default": false, + "optional": true + }, + { + "name": "include_actions", + "type": "bool", + "description": "Include dividends and stock splits in results.", + "default": true, + "optional": true + }, + { + "name": "adjustment", + "type": "Literal['splits_only', 'splits_and_dividends']", + "description": "The adjustment factor to apply. Default is splits only.", + "default": "splits_only", + "optional": true + }, + { + "name": "adjusted", + "type": "bool", + "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'adjustment' set as 'splits_and_dividends' instead.", + "default": false, + "optional": true + }, + { + "name": "prepost", + "type": "bool", + "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'extended_hours' as True instead.", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityHistorical]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "Union[date, datetime]", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": "", + "optional": false + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": "", + "optional": false + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": "", + "optional": false + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "Union[float, int]", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "vwap", + "type": "float", + "description": "Volume Weighted Average Price over the period.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "unadjusted_volume", + "type": "float", + "description": "Unadjusted volume of the symbol.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change in the price from the previous close, as a normalized percent.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "average", + "type": "float", + "description": "Average trade price of an individual equity during the interval.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price of the symbol from the previous day.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Percent change in the price of the symbol from the previous day.", + "default": null, + "optional": true + }, + { + "name": "adj_open", + "type": "float", + "description": "The adjusted open price.", + "default": null, + "optional": true + }, + { + "name": "adj_high", + "type": "float", + "description": "The adjusted high price.", + "default": null, + "optional": true + }, + { + "name": "adj_low", + "type": "float", + "description": "The adjusted low price.", + "default": null, + "optional": true + }, + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "adj_volume", + "type": "float", + "description": "The adjusted volume.", + "default": null, + "optional": true + }, + { + "name": "fifty_two_week_high", + "type": "float", + "description": "52 week high price for the symbol.", + "default": null, + "optional": true + }, + { + "name": "fifty_two_week_low", + "type": "float", + "description": "52 week low price for the symbol.", + "default": null, + "optional": true + }, + { + "name": "factor", + "type": "float", + "description": "factor by which to multiply equity prices before this date, in order to calculate historically-adjusted equity prices.", + "default": null, + "optional": true + }, + { + "name": "split_ratio", + "type": "float", + "description": "Ratio of the equity split, if a split occurred.", + "default": null, + "optional": true + }, + { + "name": "dividend", + "type": "float", + "description": "Dividend amount, if a dividend was paid.", + "default": null, + "optional": true + }, + { + "name": "close_time", + "type": "datetime", + "description": "The timestamp that represents the end of the interval span.", + "default": null, + "optional": true + }, + { + "name": "interval", + "type": "str", + "description": "The data time frequency.", + "default": null, + "optional": true + }, + { + "name": "intra_period", + "type": "bool", + "description": "If true, the equity price represents an unfinished period (be it day, week, quarter, month, or year), meaning that the close price is the latest price available, not the official close price for the period", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "transactions", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Number of transactions for the symbol in the time period.", + "default": null, + "optional": true + } + ], + "tiingo": [ + { + "name": "adj_open", + "type": "float", + "description": "The adjusted open price.", + "default": null, + "optional": true + }, + { + "name": "adj_high", + "type": "float", + "description": "The adjusted high price.", + "default": null, + "optional": true + }, + { + "name": "adj_low", + "type": "float", + "description": "The adjusted low price.", + "default": null, + "optional": true + }, + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "adj_volume", + "type": "float", + "description": "The adjusted volume.", + "default": null, + "optional": true + }, + { + "name": "split_ratio", + "type": "float", + "description": "Ratio of the equity split, if a split occurred.", + "default": null, + "optional": true + }, + { + "name": "dividend", + "type": "float", + "description": "Dividend amount, if a dividend was paid.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "split_ratio", + "type": "float", + "description": "Ratio of the equity split, if a split occurred.", + "default": null, + "optional": true + }, + { + "name": "dividend", + "type": "float", + "description": "Dividend amount (split-adjusted), if a dividend was paid.", + "default": null, + "optional": true + } + ] + }, + "model": "EquityHistorical" + }, + "/equity/price/performance": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get price performance data for a given stock. This includes price changes for different time periods.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.price.performance(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[PricePerformance]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "one_day", + "type": "float", + "description": "One-day return.", + "default": null, + "optional": true + }, + { + "name": "wtd", + "type": "float", + "description": "Week to date return.", + "default": null, + "optional": true + }, + { + "name": "one_week", + "type": "float", + "description": "One-week return.", + "default": null, + "optional": true + }, + { + "name": "mtd", + "type": "float", + "description": "Month to date return.", + "default": null, + "optional": true + }, + { + "name": "one_month", + "type": "float", + "description": "One-month return.", + "default": null, + "optional": true + }, + { + "name": "qtd", + "type": "float", + "description": "Quarter to date return.", + "default": null, + "optional": true + }, + { + "name": "three_month", + "type": "float", + "description": "Three-month return.", + "default": null, + "optional": true + }, + { + "name": "six_month", + "type": "float", + "description": "Six-month return.", + "default": null, + "optional": true + }, + { + "name": "ytd", + "type": "float", + "description": "Year to date return.", + "default": null, + "optional": true + }, + { + "name": "one_year", + "type": "float", + "description": "One-year return.", + "default": null, + "optional": true + }, + { + "name": "two_year", + "type": "float", + "description": "Two-year return.", + "default": null, + "optional": true + }, + { + "name": "three_year", + "type": "float", + "description": "Three-year return.", + "default": null, + "optional": true + }, + { + "name": "four_year", + "type": "float", + "description": "Four-year", + "default": null, + "optional": true + }, + { + "name": "five_year", + "type": "float", + "description": "Five-year return.", + "default": null, + "optional": true + }, + { + "name": "ten_year", + "type": "float", + "description": "Ten-year return.", + "default": null, + "optional": true + }, + { + "name": "max", + "type": "float", + "description": "Return from the beginning of the time series.", + "default": null, + "optional": true + } + ], + "fmp": [] + }, + "model": "PricePerformance" + }, + "/equity/shorts/fails_to_deliver": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get reported Fail-to-deliver (FTD) data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.shorts.fails_to_deliver(symbol='AAPL', provider='sec')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [ + { + "name": "limit", + "type": "int", + "description": "Limit the number of reports to parse, from most recent. Approximately 24 reports per year, going back to 2009.", + "default": 24, + "optional": true + }, + { + "name": "skip_reports", + "type": "int", + "description": "Skip N number of reports from current. A value of 1 will skip the most recent report.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityFTD]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "settlement_date", + "type": "date", + "description": "The settlement date of the fail.", + "default": null, + "optional": true + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "CUSIP of the Security.", + "default": null, + "optional": true + }, + { + "name": "quantity", + "type": "int", + "description": "The number of fails on that settlement date.", + "default": null, + "optional": true + }, + { + "name": "price", + "type": "float", + "description": "The price at the previous closing price from the settlement date.", + "default": null, + "optional": true + }, + { + "name": "description", + "type": "str", + "description": "The description of the Security.", + "default": null, + "optional": true + } + ], + "sec": [] + }, + "model": "EquityFTD" + }, + "/equity/search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search for stock symbol, CIK, LEI, or company name.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.search(provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Search query.", + "default": "", + "optional": true + }, + { + "name": "is_symbol", + "type": "bool", + "description": "Whether to search by ticker symbol.", + "default": false, + "optional": true + }, + { + "name": "use_cache", + "type": "bool", + "description": "Whether to use the cache or not.", + "default": true, + "optional": true + }, + { + "name": "provider", + "type": "Literal['intrinio', 'sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'intrinio' if there is no default.", + "default": "intrinio", + "optional": true + } + ], + "intrinio": [ + { + "name": "active", + "type": "bool", + "description": "When true, return companies that are actively traded (having stock prices within the past 14 days). When false, return companies that are not actively traded or never have been traded.", + "default": true, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 10000, + "optional": true + } + ], + "sec": [ + { + "name": "is_fund", + "type": "bool", + "description": "Whether to direct the search to the list of mutual funds and ETFs.", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquitySearch]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['intrinio', 'sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "name", + "type": "str", + "description": "Name of the company.", + "default": "", + "optional": false + } + ], + "intrinio": [ + { + "name": "cik", + "type": "str", + "description": "", + "default": "", + "optional": false + }, + { + "name": "lei", + "type": "str", + "description": "The Legal Entity Identifier (LEI) of the company.", + "default": "", + "optional": false + }, + { + "name": "intrinio_id", + "type": "str", + "description": "The Intrinio ID of the company.", + "default": "", + "optional": false + } + ], + "sec": [ + { + "name": "cik", + "type": "str", + "description": "Central Index Key", + "default": "", + "optional": false + } + ] + }, + "model": "EquitySearch" + }, + "/equity/screener": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Screen for companies meeting various criteria.\n\nThese criteria include market cap, price, beta, volume, and dividend yield.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.screener(provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "mktcap_min", + "type": "int", + "description": "Filter by market cap greater than this value.", + "default": null, + "optional": true + }, + { + "name": "mktcap_max", + "type": "int", + "description": "Filter by market cap less than this value.", + "default": null, + "optional": true + }, + { + "name": "price_min", + "type": "float", + "description": "Filter by price greater than this value.", + "default": null, + "optional": true + }, + { + "name": "price_max", + "type": "float", + "description": "Filter by price less than this value.", + "default": null, + "optional": true + }, + { + "name": "beta_min", + "type": "float", + "description": "Filter by a beta greater than this value.", + "default": null, + "optional": true + }, + { + "name": "beta_max", + "type": "float", + "description": "Filter by a beta less than this value.", + "default": null, + "optional": true + }, + { + "name": "volume_min", + "type": "int", + "description": "Filter by volume greater than this value.", + "default": null, + "optional": true + }, + { + "name": "volume_max", + "type": "int", + "description": "Filter by volume less than this value.", + "default": null, + "optional": true + }, + { + "name": "dividend_min", + "type": "float", + "description": "Filter by dividend amount greater than this value.", + "default": null, + "optional": true + }, + { + "name": "dividend_max", + "type": "float", + "description": "Filter by dividend amount less than this value.", + "default": null, + "optional": true + }, + { + "name": "is_etf", + "type": "bool", + "description": "If true, returns only ETFs.", + "default": false, + "optional": true + }, + { + "name": "is_active", + "type": "bool", + "description": "If false, returns only inactive tickers.", + "default": true, + "optional": true + }, + { + "name": "sector", + "type": "Literal['Consumer Cyclical', 'Energy', 'Technology', 'Industrials', 'Financial Services', 'Basic Materials', 'Communication Services', 'Consumer Defensive', 'Healthcare', 'Real Estate', 'Utilities', 'Industrial Goods', 'Financial', 'Services', 'Conglomerates']", + "description": "Filter by sector.", + "default": null, + "optional": true + }, + { + "name": "industry", + "type": "str", + "description": "Filter by industry.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "Filter by country, as a two-letter country code.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "Literal['amex', 'ams', 'ase', 'asx', 'ath', 'bme', 'bru', 'bud', 'bue', 'cai', 'cnq', 'cph', 'dfm', 'doh', 'etf', 'euronext', 'hel', 'hkse', 'ice', 'iob', 'ist', 'jkt', 'jnb', 'jpx', 'kls', 'koe', 'ksc', 'kuw', 'lse', 'mex', 'mutual_fund', 'nasdaq', 'neo', 'nse', 'nyse', 'nze', 'osl', 'otc', 'pnk', 'pra', 'ris', 'sao', 'sau', 'set', 'sgo', 'shh', 'shz', 'six', 'sto', 'tai', 'tlv', 'tsx', 'two', 'vie', 'wse', 'xetra']", + "description": "Filter by exchange.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "Limit the number of results to return.", + "default": 50000, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityScreener]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the company.", + "default": "", + "optional": false + } + ], + "fmp": [ + { + "name": "market_cap", + "type": "int", + "description": "The market cap of ticker.", + "default": null, + "optional": true + }, + { + "name": "sector", + "type": "str", + "description": "The sector the ticker belongs to.", + "default": null, + "optional": true + }, + { + "name": "industry", + "type": "str", + "description": "The industry ticker belongs to.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "The beta of the ETF.", + "default": null, + "optional": true + }, + { + "name": "price", + "type": "float", + "description": "The current price.", + "default": null, + "optional": true + }, + { + "name": "last_annual_dividend", + "type": "float", + "description": "The last annual amount dividend paid.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The current trading volume.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The exchange code the asset trades on.", + "default": null, + "optional": true + }, + { + "name": "exchange_name", + "type": "str", + "description": "The full name of the primary exchange.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "The two-letter country abbreviation where the head office is located.", + "default": null, + "optional": true + }, + { + "name": "is_etf", + "type": "Literal[True, False]", + "description": "Whether the ticker is an ETF.", + "default": null, + "optional": true + }, + { + "name": "actively_trading", + "type": "Literal[True, False]", + "description": "Whether the ETF is actively trading.", + "default": null, + "optional": true + } + ] + }, + "model": "EquityScreener" + }, + "/equity/profile": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get general information about a company. This includes company name, industry, sector and price data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.profile(symbol='AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, yfinance.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EquityInfo]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Common name of the company.", + "default": null, + "optional": true + }, + { + "name": "cik", + "type": "str", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "CUSIP identifier for the company.", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "International Securities Identification Number.", + "default": null, + "optional": true + }, + { + "name": "lei", + "type": "str", + "description": "Legal Entity Identifier assigned to the company.", + "default": null, + "optional": true + }, + { + "name": "legal_name", + "type": "str", + "description": "Official legal name of the company.", + "default": null, + "optional": true + }, + { + "name": "stock_exchange", + "type": "str", + "description": "Stock exchange where the company is traded.", + "default": null, + "optional": true + }, + { + "name": "sic", + "type": "int", + "description": "Standard Industrial Classification code for the company.", + "default": null, + "optional": true + }, + { + "name": "short_description", + "type": "str", + "description": "Short description of the company.", + "default": null, + "optional": true + }, + { + "name": "long_description", + "type": "str", + "description": "Long description of the company.", + "default": null, + "optional": true + }, + { + "name": "ceo", + "type": "str", + "description": "Chief Executive Officer of the company.", + "default": null, + "optional": true + }, + { + "name": "company_url", + "type": "str", + "description": "URL of the company's website.", + "default": null, + "optional": true + }, + { + "name": "business_address", + "type": "str", + "description": "Address of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "mailing_address", + "type": "str", + "description": "Mailing address of the company.", + "default": null, + "optional": true + }, + { + "name": "business_phone_no", + "type": "str", + "description": "Phone number of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "hq_address1", + "type": "str", + "description": "Address of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "hq_address2", + "type": "str", + "description": "Address of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "hq_address_city", + "type": "str", + "description": "City of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "hq_address_postal_code", + "type": "str", + "description": "Zip code of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "hq_state", + "type": "str", + "description": "State of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "hq_country", + "type": "str", + "description": "Country of the company's headquarters.", + "default": null, + "optional": true + }, + { + "name": "inc_state", + "type": "str", + "description": "State in which the company is incorporated.", + "default": null, + "optional": true + }, + { + "name": "inc_country", + "type": "str", + "description": "Country in which the company is incorporated.", + "default": null, + "optional": true + }, + { + "name": "employees", + "type": "int", + "description": "Number of employees working for the company.", + "default": null, + "optional": true + }, + { + "name": "entity_legal_form", + "type": "str", + "description": "Legal form of the company.", + "default": null, + "optional": true + }, + { + "name": "entity_status", + "type": "str", + "description": "Status of the company.", + "default": null, + "optional": true + }, + { + "name": "latest_filing_date", + "type": "date", + "description": "Date of the company's latest filing.", + "default": null, + "optional": true + }, + { + "name": "irs_number", + "type": "str", + "description": "IRS number assigned to the company.", + "default": null, + "optional": true + }, + { + "name": "sector", + "type": "str", + "description": "Sector in which the company operates.", + "default": null, + "optional": true + }, + { + "name": "industry_category", + "type": "str", + "description": "Category of industry in which the company operates.", + "default": null, + "optional": true + }, + { + "name": "industry_group", + "type": "str", + "description": "Group of industry in which the company operates.", + "default": null, + "optional": true + }, + { + "name": "template", + "type": "str", + "description": "Template used to standardize the company's financial statements.", + "default": null, + "optional": true + }, + { + "name": "standardized_active", + "type": "bool", + "description": "Whether the company is active or not.", + "default": null, + "optional": true + }, + { + "name": "first_fundamental_date", + "type": "date", + "description": "Date of the company's first fundamental.", + "default": null, + "optional": true + }, + { + "name": "last_fundamental_date", + "type": "date", + "description": "Date of the company's last fundamental.", + "default": null, + "optional": true + }, + { + "name": "first_stock_price_date", + "type": "date", + "description": "Date of the company's first stock price.", + "default": null, + "optional": true + }, + { + "name": "last_stock_price_date", + "type": "date", + "description": "Date of the company's last stock price.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "is_etf", + "type": "bool", + "description": "If the symbol is an ETF.", + "default": "", + "optional": false + }, + { + "name": "is_actively_trading", + "type": "bool", + "description": "If the company is actively trading.", + "default": "", + "optional": false + }, + { + "name": "is_adr", + "type": "bool", + "description": "If the stock is an ADR.", + "default": "", + "optional": false + }, + { + "name": "is_fund", + "type": "bool", + "description": "If the company is a fund.", + "default": "", + "optional": false + }, + { + "name": "image", + "type": "str", + "description": "Image of the company.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency in which the stock is traded.", + "default": null, + "optional": true + }, + { + "name": "market_cap", + "type": "int", + "description": "Market capitalization of the company.", + "default": null, + "optional": true + }, + { + "name": "last_price", + "type": "float", + "description": "The last traded price.", + "default": null, + "optional": true + }, + { + "name": "year_high", + "type": "float", + "description": "The one-year high of the price.", + "default": null, + "optional": true + }, + { + "name": "year_low", + "type": "float", + "description": "The one-year low of the price.", + "default": null, + "optional": true + }, + { + "name": "volume_avg", + "type": "int", + "description": "Average daily trading volume.", + "default": null, + "optional": true + }, + { + "name": "annualized_dividend_amount", + "type": "float", + "description": "The annualized dividend payment based on the most recent regular dividend payment.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "Beta of the stock relative to the market.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "id", + "type": "str", + "description": "Intrinio ID for the company.", + "default": null, + "optional": true + }, + { + "name": "thea_enabled", + "type": "bool", + "description": "Whether the company has been enabled for Thea.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "exchange_timezone", + "type": "str", + "description": "The timezone of the exchange.", + "default": null, + "optional": true + }, + { + "name": "issue_type", + "type": "str", + "description": "The issuance type of the asset.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "The currency in which the asset is traded.", + "default": null, + "optional": true + }, + { + "name": "market_cap", + "type": "int", + "description": "The market capitalization of the asset.", + "default": null, + "optional": true + }, + { + "name": "shares_outstanding", + "type": "int", + "description": "The number of listed shares outstanding.", + "default": null, + "optional": true + }, + { + "name": "shares_float", + "type": "int", + "description": "The number of shares in the public float.", + "default": null, + "optional": true + }, + { + "name": "shares_implied_outstanding", + "type": "int", + "description": "Implied shares outstanding of common equityassuming the conversion of all convertible subsidiary equity into common.", + "default": null, + "optional": true + }, + { + "name": "shares_short", + "type": "int", + "description": "The reported number of shares short.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield", + "type": "float", + "description": "The dividend yield of the asset, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "The beta of the asset relative to the broad market.", + "default": null, + "optional": true + } + ] + }, + "model": "EquityInfo" + }, + "/equity/market_snapshots": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get an updated equity market snapshot. This includes price data for thousands of stocks.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.market_snapshots(provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "market", + "type": "Literal['amex', 'ams', 'ase', 'asx', 'ath', 'bme', 'bru', 'bud', 'bue', 'cai', 'cnq', 'cph', 'dfm', 'doh', 'etf', 'euronext', 'hel', 'hkse', 'ice', 'iob', 'ist', 'jkt', 'jnb', 'jpx', 'kls', 'koe', 'ksc', 'kuw', 'lse', 'mex', 'mutual_fund', 'nasdaq', 'neo', 'nse', 'nyse', 'nze', 'osl', 'otc', 'pnk', 'pra', 'ris', 'sao', 'sau', 'set', 'sgo', 'shh', 'shz', 'six', 'sto', 'tai', 'tlv', 'tsx', 'two', 'vie', 'wse', 'xetra']", + "description": "The market to fetch data for.", + "default": "nasdaq", + "optional": true + } + ], + "intrinio": [ + { + "name": "date", + "type": "Union[Union[date, datetime, str], str]", + "description": "The date of the data. Can be a datetime or an ISO datetime string. Historical data appears to go back to mid-June 2022. Example: '2024-03-08T12:15:00+0400'", + "default": null, + "optional": true + } + ], + "polygon": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[MarketSnapshots]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": null, + "optional": true + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": null, + "optional": true + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": null, + "optional": true + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "prev_close", + "type": "float", + "description": "The previous close price.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "The change in price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "The change in price from the previous close, as a normalized percent.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "last_price", + "type": "float", + "description": "The last price of the stock.", + "default": null, + "optional": true + }, + { + "name": "last_price_timestamp", + "type": "Union[date, datetime]", + "description": "The timestamp of the last price.", + "default": null, + "optional": true + }, + { + "name": "ma50", + "type": "float", + "description": "The 50-day moving average.", + "default": null, + "optional": true + }, + { + "name": "ma200", + "type": "float", + "description": "The 200-day moving average.", + "default": null, + "optional": true + }, + { + "name": "year_high", + "type": "float", + "description": "The 52-week high.", + "default": null, + "optional": true + }, + { + "name": "year_low", + "type": "float", + "description": "The 52-week low.", + "default": null, + "optional": true + }, + { + "name": "volume_avg", + "type": "int", + "description": "Average daily trading volume.", + "default": null, + "optional": true + }, + { + "name": "market_cap", + "type": "int", + "description": "Market cap of the stock.", + "default": null, + "optional": true + }, + { + "name": "eps", + "type": "float", + "description": "Earnings per share.", + "default": null, + "optional": true + }, + { + "name": "pe", + "type": "float", + "description": "Price to earnings ratio.", + "default": null, + "optional": true + }, + { + "name": "shares_outstanding", + "type": "int", + "description": "Number of shares outstanding.", + "default": null, + "optional": true + }, + { + "name": "name", + "type": "str", + "description": "The company name associated with the symbol.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The exchange of the stock.", + "default": null, + "optional": true + }, + { + "name": "earnings_date", + "type": "Union[date, datetime]", + "description": "The upcoming earnings announcement date.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "last_price", + "type": "float", + "description": "The last trade price.", + "default": null, + "optional": true + }, + { + "name": "last_size", + "type": "int", + "description": "The last trade size.", + "default": null, + "optional": true + }, + { + "name": "last_volume", + "type": "int", + "description": "The last trade volume.", + "default": null, + "optional": true + }, + { + "name": "last_trade_timestamp", + "type": "datetime", + "description": "The timestamp of the last trade.", + "default": null, + "optional": true + }, + { + "name": "bid_size", + "type": "int", + "description": "The size of the last bid price. Bid price and size is not always available.", + "default": null, + "optional": true + }, + { + "name": "bid_price", + "type": "float", + "description": "The last bid price. Bid price and size is not always available.", + "default": null, + "optional": true + }, + { + "name": "ask_price", + "type": "float", + "description": "The last ask price. Ask price and size is not always available.", + "default": null, + "optional": true + }, + { + "name": "ask_size", + "type": "int", + "description": "The size of the last ask price. Ask price and size is not always available.", + "default": null, + "optional": true + }, + { + "name": "last_bid_timestamp", + "type": "datetime", + "description": "The timestamp of the last bid price. Bid price and size is not always available.", + "default": null, + "optional": true + }, + { + "name": "last_ask_timestamp", + "type": "datetime", + "description": "The timestamp of the last ask price. Ask price and size is not always available.", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "vwap", + "type": "float", + "description": "The volume weighted average price of the stock on the current trading day.", + "default": null, + "optional": true + }, + { + "name": "prev_open", + "type": "float", + "description": "The previous trading session opening price.", + "default": null, + "optional": true + }, + { + "name": "prev_high", + "type": "float", + "description": "The previous trading session high price.", + "default": null, + "optional": true + }, + { + "name": "prev_low", + "type": "float", + "description": "The previous trading session low price.", + "default": null, + "optional": true + }, + { + "name": "prev_volume", + "type": "float", + "description": "The previous trading session volume.", + "default": null, + "optional": true + }, + { + "name": "prev_vwap", + "type": "float", + "description": "The previous trading session VWAP.", + "default": null, + "optional": true + }, + { + "name": "last_updated", + "type": "datetime", + "description": "The last time the data was updated.", + "default": "", + "optional": false + }, + { + "name": "bid", + "type": "float", + "description": "The current bid price.", + "default": null, + "optional": true + }, + { + "name": "bid_size", + "type": "int", + "description": "The current bid size.", + "default": null, + "optional": true + }, + { + "name": "ask_size", + "type": "int", + "description": "The current ask size.", + "default": null, + "optional": true + }, + { + "name": "ask", + "type": "float", + "description": "The current ask price.", + "default": null, + "optional": true + }, + { + "name": "quote_timestamp", + "type": "datetime", + "description": "The timestamp of the last quote.", + "default": null, + "optional": true + }, + { + "name": "last_trade_price", + "type": "float", + "description": "The last trade price.", + "default": null, + "optional": true + }, + { + "name": "last_trade_size", + "type": "int", + "description": "The last trade size.", + "default": null, + "optional": true + }, + { + "name": "last_trade_conditions", + "type": "List[int]", + "description": "The last trade condition codes.", + "default": null, + "optional": true + }, + { + "name": "last_trade_exchange", + "type": "int", + "description": "The last trade exchange ID code.", + "default": null, + "optional": true + }, + { + "name": "last_trade_timestamp", + "type": "datetime", + "description": "The last trade timestamp.", + "default": null, + "optional": true + } + ] + }, + "model": "MarketSnapshots" + }, + "/etf/search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search for ETFs.\n\nAn empty query returns the full list of ETFs from the provider.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\n# An empty query returns the full list of ETFs from the provider.\nobb.etf.search(provider='fmp')\n# The query will return results from text-based fields containing the term.\nobb.etf.search(query='commercial real estate', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Search query.", + "default": "", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "exchange", + "type": "Literal['AMEX', 'NYSE', 'NASDAQ', 'ETF', 'TSX', 'EURONEXT']", + "description": "The exchange code the ETF trades on.", + "default": null, + "optional": true + }, + { + "name": "is_active", + "type": "Literal[True, False]", + "description": "Whether the ETF is actively trading.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "exchange", + "type": "Literal['xnas', 'arcx', 'bats', 'xnys', 'bvmf', 'xshg', 'xshe', 'xhkg', 'xbom', 'xnse', 'xidx', 'tase', 'xkrx', 'xkls', 'xmex', 'xses', 'roco', 'xtai', 'xbkk', 'xist']", + "description": "Target a specific exchange by providing the MIC code.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfSearch]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.(ETF)", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the ETF.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "market_cap", + "type": "float", + "description": "The market cap of the ETF.", + "default": null, + "optional": true + }, + { + "name": "sector", + "type": "str", + "description": "The sector of the ETF.", + "default": null, + "optional": true + }, + { + "name": "industry", + "type": "str", + "description": "The industry of the ETF.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "The beta of the ETF.", + "default": null, + "optional": true + }, + { + "name": "price", + "type": "float", + "description": "The current price of the ETF.", + "default": null, + "optional": true + }, + { + "name": "last_annual_dividend", + "type": "float", + "description": "The last annual dividend paid.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "float", + "description": "The current trading volume of the ETF.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The exchange code the ETF trades on.", + "default": null, + "optional": true + }, + { + "name": "exchange_name", + "type": "str", + "description": "The full name of the exchange the ETF trades on.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "The country the ETF is registered in.", + "default": null, + "optional": true + }, + { + "name": "actively_trading", + "type": "Literal[True, False]", + "description": "Whether the ETF is actively trading.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "exchange", + "type": "str", + "description": "The exchange MIC code.", + "default": null, + "optional": true + }, + { + "name": "figi_ticker", + "type": "str", + "description": "The OpenFIGI ticker.", + "default": null, + "optional": true + }, + { + "name": "ric", + "type": "str", + "description": "The Reuters Instrument Code.", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "The International Securities Identification Number.", + "default": null, + "optional": true + }, + { + "name": "sedol", + "type": "str", + "description": "The Stock Exchange Daily Official List.", + "default": null, + "optional": true + }, + { + "name": "intrinio_id", + "type": "str", + "description": "The unique Intrinio ID for the security.", + "default": null, + "optional": true + } + ] + }, + "model": "EtfSearch" + }, + "/etf/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "ETF Historical Market Price.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.historical(symbol='SPY', provider='fmp')\nobb.etf.historical(symbol='SPY', provider='yfinance')\n# This function accepts multiple tickers.\nobb.etf.historical(symbol='SPY,IWM,QQQ,DJIA', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, polygon, tiingo, yfinance.", + "default": "", + "optional": false + }, + { + "name": "interval", + "type": "str", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "start_time", + "type": "datetime.time", + "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'.", + "default": null, + "optional": true + }, + { + "name": "end_time", + "type": "datetime.time", + "description": "Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'.", + "default": null, + "optional": true + }, + { + "name": "timezone", + "type": "str", + "description": "Timezone of the data, in the IANA format (Continent/City).", + "default": "America/New_York", + "optional": true + }, + { + "name": "source", + "type": "Literal['realtime', 'delayed', 'nasdaq_basic']", + "description": "The source of the data.", + "default": "realtime", + "optional": true + } + ], + "polygon": [ + { + "name": "adjustment", + "type": "Literal['splits_only', 'unadjusted']", + "description": "The adjustment factor to apply. Default is splits only.", + "default": "splits_only", + "optional": true + }, + { + "name": "extended_hours", + "type": "bool", + "description": "Include Pre and Post market data.", + "default": false, + "optional": true + }, + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", + "default": "asc", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 49999, + "optional": true + } + ], + "tiingo": [], + "yfinance": [ + { + "name": "extended_hours", + "type": "bool", + "description": "Include Pre and Post market data.", + "default": false, + "optional": true + }, + { + "name": "include_actions", + "type": "bool", + "description": "Include dividends and stock splits in results.", + "default": true, + "optional": true + }, + { + "name": "adjustment", + "type": "Literal['splits_only', 'splits_and_dividends']", + "description": "The adjustment factor to apply. Default is splits only.", + "default": "splits_only", + "optional": true + }, + { + "name": "adjusted", + "type": "bool", + "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'adjustment' set as 'splits_and_dividends' instead.", + "default": false, + "optional": true + }, + { + "name": "prepost", + "type": "bool", + "description": "This field is deprecated (4.1.5) and will be removed in a future version. Use 'extended_hours' as True instead.", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfHistorical]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "Union[date, datetime]", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": "", + "optional": false + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": "", + "optional": false + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": "", + "optional": false + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": "", + "optional": false + }, + { + "name": "volume", + "type": "Union[float, int]", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "vwap", + "type": "float", + "description": "Volume Weighted Average Price over the period.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "unadjusted_volume", + "type": "float", + "description": "Unadjusted volume of the symbol.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change in the price from the previous close, as a normalized percent.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "average", + "type": "float", + "description": "Average trade price of an individual equity during the interval.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price of the symbol from the previous day.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Percent change in the price of the symbol from the previous day.", + "default": null, + "optional": true + }, + { + "name": "adj_open", + "type": "float", + "description": "The adjusted open price.", + "default": null, + "optional": true + }, + { + "name": "adj_high", + "type": "float", + "description": "The adjusted high price.", + "default": null, + "optional": true + }, + { + "name": "adj_low", + "type": "float", + "description": "The adjusted low price.", + "default": null, + "optional": true + }, + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "adj_volume", + "type": "float", + "description": "The adjusted volume.", + "default": null, + "optional": true + }, + { + "name": "fifty_two_week_high", + "type": "float", + "description": "52 week high price for the symbol.", + "default": null, + "optional": true + }, + { + "name": "fifty_two_week_low", + "type": "float", + "description": "52 week low price for the symbol.", + "default": null, + "optional": true + }, + { + "name": "factor", + "type": "float", + "description": "factor by which to multiply equity prices before this date, in order to calculate historically-adjusted equity prices.", + "default": null, + "optional": true + }, + { + "name": "split_ratio", + "type": "float", + "description": "Ratio of the equity split, if a split occurred.", + "default": null, + "optional": true + }, + { + "name": "dividend", + "type": "float", + "description": "Dividend amount, if a dividend was paid.", + "default": null, + "optional": true + }, + { + "name": "close_time", + "type": "datetime", + "description": "The timestamp that represents the end of the interval span.", + "default": null, + "optional": true + }, + { + "name": "interval", + "type": "str", + "description": "The data time frequency.", + "default": null, + "optional": true + }, + { + "name": "intra_period", + "type": "bool", + "description": "If true, the equity price represents an unfinished period (be it day, week, quarter, month, or year), meaning that the close price is the latest price available, not the official close price for the period", + "default": null, + "optional": true + } + ], + "polygon": [ + { + "name": "transactions", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Number of transactions for the symbol in the time period.", + "default": null, + "optional": true + } + ], + "tiingo": [ + { + "name": "adj_open", + "type": "float", + "description": "The adjusted open price.", + "default": null, + "optional": true + }, + { + "name": "adj_high", + "type": "float", + "description": "The adjusted high price.", + "default": null, + "optional": true + }, + { + "name": "adj_low", + "type": "float", + "description": "The adjusted low price.", + "default": null, + "optional": true + }, + { + "name": "adj_close", + "type": "float", + "description": "The adjusted close price.", + "default": null, + "optional": true + }, + { + "name": "adj_volume", + "type": "float", + "description": "The adjusted volume.", + "default": null, + "optional": true + }, + { + "name": "split_ratio", + "type": "float", + "description": "Ratio of the equity split, if a split occurred.", + "default": null, + "optional": true + }, + { + "name": "dividend", + "type": "float", + "description": "Dividend amount, if a dividend was paid.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "split_ratio", + "type": "float", + "description": "Ratio of the equity split, if a split occurred.", + "default": null, + "optional": true + }, + { + "name": "dividend", + "type": "float", + "description": "Dividend amount (split-adjusted), if a dividend was paid.", + "default": null, + "optional": true + } + ] + }, + "model": "EtfHistorical" + }, + "/etf/info": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "ETF Information Overview.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.info(symbol='SPY', provider='fmp')\n# This function accepts multiple tickers.\nobb.etf.info(symbol='SPY,IWM,QQQ,DJIA', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp, intrinio, yfinance.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfInfo]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data. (ETF)", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the ETF.", + "default": "", + "optional": false + }, + { + "name": "description", + "type": "str", + "description": "Description of the fund.", + "default": null, + "optional": true + }, + { + "name": "inception_date", + "type": "str", + "description": "Inception date of the ETF.", + "default": "", + "optional": false + } + ], + "fmp": [ + { + "name": "issuer", + "type": "str", + "description": "Company of the ETF.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "CUSIP of the ETF.", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "ISIN of the ETF.", + "default": null, + "optional": true + }, + { + "name": "domicile", + "type": "str", + "description": "Domicile of the ETF.", + "default": null, + "optional": true + }, + { + "name": "asset_class", + "type": "str", + "description": "Asset class of the ETF.", + "default": null, + "optional": true + }, + { + "name": "aum", + "type": "float", + "description": "Assets under management.", + "default": null, + "optional": true + }, + { + "name": "nav", + "type": "float", + "description": "Net asset value of the ETF.", + "default": null, + "optional": true + }, + { + "name": "nav_currency", + "type": "str", + "description": "Currency of the ETF's net asset value.", + "default": null, + "optional": true + }, + { + "name": "expense_ratio", + "type": "float", + "description": "The expense ratio, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "holdings_count", + "type": "int", + "description": "Number of holdings.", + "default": null, + "optional": true + }, + { + "name": "avg_volume", + "type": "float", + "description": "Average daily trading volume.", + "default": null, + "optional": true + }, + { + "name": "website", + "type": "str", + "description": "Website of the issuer.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "fund_listing_date", + "type": "date", + "description": "The date on which the Exchange Traded Product (ETP) or share class of the ETP is listed on a specific exchange.", + "default": null, + "optional": true + }, + { + "name": "data_change_date", + "type": "date", + "description": "The last date on which there was a change in a classifications data field for this ETF.", + "default": null, + "optional": true + }, + { + "name": "etn_maturity_date", + "type": "date", + "description": "If the product is an ETN, this field identifies the maturity date for the ETN.", + "default": null, + "optional": true + }, + { + "name": "is_listed", + "type": "bool", + "description": "If true, the ETF is still listed on an exchange.", + "default": null, + "optional": true + }, + { + "name": "close_date", + "type": "date", + "description": "The date on which the ETF was de-listed if it is no longer listed.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The exchange Market Identifier Code (MIC).", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "International Securities Identification Number (ISIN).", + "default": null, + "optional": true + }, + { + "name": "ric", + "type": "str", + "description": "Reuters Instrument Code (RIC).", + "default": null, + "optional": true + }, + { + "name": "sedol", + "type": "str", + "description": "Stock Exchange Daily Official List (SEDOL).", + "default": null, + "optional": true + }, + { + "name": "figi_symbol", + "type": "str", + "description": "Financial Instrument Global Identifier (FIGI) symbol.", + "default": null, + "optional": true + }, + { + "name": "share_class_figi", + "type": "str", + "description": "Financial Instrument Global Identifier (FIGI).", + "default": null, + "optional": true + }, + { + "name": "firstbridge_id", + "type": "str", + "description": "The FirstBridge unique identifier for the Exchange Traded Fund (ETF).", + "default": null, + "optional": true + }, + { + "name": "firstbridge_parent_id", + "type": "str", + "description": "The FirstBridge unique identifier for the parent Exchange Traded Fund (ETF), if applicable.", + "default": null, + "optional": true + }, + { + "name": "intrinio_id", + "type": "str", + "description": "Intrinio unique identifier for the security.", + "default": null, + "optional": true + }, + { + "name": "intraday_nav_symbol", + "type": "str", + "description": "Intraday Net Asset Value (NAV) symbol.", + "default": null, + "optional": true + }, + { + "name": "primary_symbol", + "type": "str", + "description": "The primary ticker field is used for Exchange Traded Products (ETPs) that have multiple listings and share classes. If an ETP has multiple listings or share classes, the same primary ticker is assigned to all the listings and share classes.", + "default": null, + "optional": true + }, + { + "name": "etp_structure_type", + "type": "str", + "description": "Classifies Exchange Traded Products (ETPs) into very broad categories based on its legal structure.", + "default": null, + "optional": true + }, + { + "name": "legal_structure", + "type": "str", + "description": "Legal structure of the fund.", + "default": null, + "optional": true + }, + { + "name": "issuer", + "type": "str", + "description": "Issuer of the ETF.", + "default": null, + "optional": true + }, + { + "name": "etn_issuing_bank", + "type": "str", + "description": "If the product is an Exchange Traded Note (ETN), this field identifies the issuing bank.", + "default": null, + "optional": true + }, + { + "name": "fund_family", + "type": "str", + "description": "This field identifies the fund family to which the ETF belongs, as categorized by the ETF Sponsor.", + "default": null, + "optional": true + }, + { + "name": "investment_style", + "type": "str", + "description": "Investment style of the ETF.", + "default": null, + "optional": true + }, + { + "name": "derivatives_based", + "type": "str", + "description": "This field is populated if the ETF holds either listed or over-the-counter derivatives in its portfolio.", + "default": null, + "optional": true + }, + { + "name": "income_category", + "type": "str", + "description": "Identifies if an Exchange Traded Fund (ETF) falls into a category that is specifically designed to provide a high yield or income", + "default": null, + "optional": true + }, + { + "name": "asset_class", + "type": "str", + "description": "Captures the underlying nature of the securities in the Exchanged Traded Product (ETP).", + "default": null, + "optional": true + }, + { + "name": "other_asset_types", + "type": "str", + "description": "If 'asset_class' field is classified as 'Other Asset Types' this field captures the specific category of the underlying assets.", + "default": null, + "optional": true + }, + { + "name": "single_category_designation", + "type": "str", + "description": "This categorization is created for those users who want every ETF to be 'forced' into a single bucket, so that the assets for all categories will always sum to the total market.", + "default": null, + "optional": true + }, + { + "name": "beta_type", + "type": "str", + "description": "This field identifies whether an ETF provides 'Traditional' beta exposure or 'Smart' beta exposure. ETFs that are active (i.e. non-indexed), leveraged / inverse or have a proprietary quant model (i.e. that don't provide indexed exposure to a targeted factor) are classified separately.", + "default": null, + "optional": true + }, + { + "name": "beta_details", + "type": "str", + "description": "This field provides further detail within the traditional and smart beta categories.", + "default": null, + "optional": true + }, + { + "name": "market_cap_range", + "type": "str", + "description": "Equity ETFs are classified as falling into categories based on the description of their investment strategy in the prospectus. Examples ('Mega Cap', 'Large Cap', 'Mid Cap', etc.)", + "default": null, + "optional": true + }, + { + "name": "market_cap_weighting_type", + "type": "str", + "description": "For ETFs that take the value 'Market Cap Weighted' in the 'index_weighting_scheme' field, this field provides detail on the market cap weighting type.", + "default": null, + "optional": true + }, + { + "name": "index_weighting_scheme", + "type": "str", + "description": "For ETFs that track an underlying index, this field provides detail on the index weighting type.", + "default": null, + "optional": true + }, + { + "name": "index_linked", + "type": "str", + "description": "This field identifies whether an ETF is index linked or active.", + "default": null, + "optional": true + }, + { + "name": "index_name", + "type": "str", + "description": "This field identifies the name of the underlying index tracked by the ETF, if applicable.", + "default": null, + "optional": true + }, + { + "name": "index_symbol", + "type": "str", + "description": "This field identifies the OpenFIGI ticker for the Index underlying the ETF.", + "default": null, + "optional": true + }, + { + "name": "parent_index", + "type": "str", + "description": "This field identifies the name of the parent index, which represents the broader universe from which the index underlying the ETF is created, if applicable.", + "default": null, + "optional": true + }, + { + "name": "index_family", + "type": "str", + "description": "This field identifies the index family to which the index underlying the ETF belongs. The index family is represented as categorized by the index provider.", + "default": null, + "optional": true + }, + { + "name": "broader_index_family", + "type": "str", + "description": "This field identifies the broader index family to which the index underlying the ETF belongs. The broader index family is represented as categorized by the index provider.", + "default": null, + "optional": true + }, + { + "name": "index_provider", + "type": "str", + "description": "This field identifies the Index provider for the index underlying the ETF, if applicable.", + "default": null, + "optional": true + }, + { + "name": "index_provider_code", + "type": "str", + "description": "This field provides the First Bridge code for each Index provider, corresponding to the index underlying the ETF if applicable.", + "default": null, + "optional": true + }, + { + "name": "replication_structure", + "type": "str", + "description": "The replication structure of the Exchange Traded Product (ETP).", + "default": null, + "optional": true + }, + { + "name": "growth_value_tilt", + "type": "str", + "description": "Classifies equity ETFs as either 'Growth' or Value' based on the stated style tilt in the ETF prospectus. Equity ETFs that do not have a stated style tilt are classified as 'Core / Blend'.", + "default": null, + "optional": true + }, + { + "name": "growth_type", + "type": "str", + "description": "For ETFs that are classified as 'Growth' in 'growth_value_tilt', this field further identifies those where the stocks in the ETF are both selected and weighted based on their growth (style factor) scores.", + "default": null, + "optional": true + }, + { + "name": "value_type", + "type": "str", + "description": "For ETFs that are classified as 'Value' in 'growth_value_tilt', this field further identifies those where the stocks in the ETF are both selected and weighted based on their value (style factor) scores.", + "default": null, + "optional": true + }, + { + "name": "sector", + "type": "str", + "description": "For equity ETFs that aim to provide targeted exposure to a sector or industry, this field identifies the Sector that it provides the exposure to.", + "default": null, + "optional": true + }, + { + "name": "industry", + "type": "str", + "description": "For equity ETFs that aim to provide targeted exposure to an industry, this field identifies the Industry that it provides the exposure to.", + "default": null, + "optional": true + }, + { + "name": "industry_group", + "type": "str", + "description": "For equity ETFs that aim to provide targeted exposure to a sub-industry, this field identifies the sub-Industry that it provides the exposure to.", + "default": null, + "optional": true + }, + { + "name": "cross_sector_theme", + "type": "str", + "description": "For equity ETFs that aim to provide targeted exposure to a specific investment theme that cuts across GICS sectors, this field identifies the specific cross-sector theme. Examples ('Agri-business', 'Natural Resources', 'Green Investing', etc.)", + "default": null, + "optional": true + }, + { + "name": "natural_resources_type", + "type": "str", + "description": "For ETFs that are classified as 'Natural Resources' in the 'cross_sector_theme' field, this field provides further detail on the type of Natural Resources exposure.", + "default": null, + "optional": true + }, + { + "name": "us_or_excludes_us", + "type": "str", + "description": "Takes the value of 'Domestic' for US exposure, 'International' for non-US exposure and 'Global' for exposure that includes all regions including the US.", + "default": null, + "optional": true + }, + { + "name": "developed_emerging", + "type": "str", + "description": "This field identifies the stage of development of the markets that the ETF provides exposure to.", + "default": null, + "optional": true + }, + { + "name": "specialized_region", + "type": "str", + "description": "This field is populated if the ETF provides targeted exposure to a specific type of geography-based grouping that does not fall into a specific country or continent grouping. Examples ('BRIC', 'Chindia', etc.)", + "default": null, + "optional": true + }, + { + "name": "continent", + "type": "str", + "description": "This field is populated if the ETF provides targeted exposure to a specific continent or country within that Continent.", + "default": null, + "optional": true + }, + { + "name": "latin_america_sub_group", + "type": "str", + "description": "For ETFs that are classified as 'Latin America' in the 'continent' field, this field provides further detail on the type of regional exposure.", + "default": null, + "optional": true + }, + { + "name": "europe_sub_group", + "type": "str", + "description": "For ETFs that are classified as 'Europe' in the 'continent' field, this field provides further detail on the type of regional exposure.", + "default": null, + "optional": true + }, + { + "name": "asia_sub_group", + "type": "str", + "description": "For ETFs that are classified as 'Asia' in the 'continent' field, this field provides further detail on the type of regional exposure.", + "default": null, + "optional": true + }, + { + "name": "specific_country", + "type": "str", + "description": "This field is populated if the ETF provides targeted exposure to a specific country.", + "default": null, + "optional": true + }, + { + "name": "china_listing_location", + "type": "str", + "description": "For ETFs that are classified as 'China' in the 'country' field, this field provides further detail on the type of exposure in the underlying securities.", + "default": null, + "optional": true + }, + { + "name": "us_state", + "type": "str", + "description": "Takes the value of a US state if the ETF provides targeted exposure to the municipal bonds or equities of companies.", + "default": null, + "optional": true + }, + { + "name": "real_estate", + "type": "str", + "description": "For ETFs that provide targeted real estate exposure, this field is populated if the ETF provides targeted exposure to a specific segment of the real estate market.", + "default": null, + "optional": true + }, + { + "name": "fundamental_weighting_type", + "type": "str", + "description": "For ETFs that take the value 'Fundamental Weighted' in the 'index_weighting_scheme' field, this field provides detail on the fundamental weighting methodology.", + "default": null, + "optional": true + }, + { + "name": "dividend_weighting_type", + "type": "str", + "description": "For ETFs that take the value 'Dividend Weighted' in the 'index_weighting_scheme' field, this field provides detail on the dividend weighting methodology.", + "default": null, + "optional": true + }, + { + "name": "bond_type", + "type": "str", + "description": "For ETFs where 'asset_class_type' is 'Bonds', this field provides detail on the type of bonds held in the ETF.", + "default": null, + "optional": true + }, + { + "name": "government_bond_types", + "type": "str", + "description": "For bond ETFs that take the value 'Treasury & Government' in 'bond_type', this field provides detail on the exposure.", + "default": null, + "optional": true + }, + { + "name": "municipal_bond_region", + "type": "str", + "description": "For bond ETFs that take the value 'Municipal' in 'bond_type', this field provides additional detail on the geographic exposure.", + "default": null, + "optional": true + }, + { + "name": "municipal_vrdo", + "type": "bool", + "description": "For bond ETFs that take the value 'Municipal' in 'bond_type', this field identifies those ETFs that specifically provide exposure to Variable Rate Demand Obligations.", + "default": null, + "optional": true + }, + { + "name": "mortgage_bond_types", + "type": "str", + "description": "For bond ETFs that take the value 'Mortgage' in 'bond_type', this field provides additional detail on the type of underlying securities.", + "default": null, + "optional": true + }, + { + "name": "bond_tax_status", + "type": "str", + "description": "For all US bond ETFs, this field provides additional detail on the tax treatment of the underlying securities.", + "default": null, + "optional": true + }, + { + "name": "credit_quality", + "type": "str", + "description": "For all bond ETFs, this field helps to identify if the ETF provides targeted exposure to securities of a specific credit quality range.", + "default": null, + "optional": true + }, + { + "name": "average_maturity", + "type": "str", + "description": "For all bond ETFs, this field helps to identify if the ETF provides targeted exposure to securities of a specific maturity range.", + "default": null, + "optional": true + }, + { + "name": "specific_maturity_year", + "type": "int", + "description": "For all bond ETFs that take the value 'Specific Maturity Year' in the 'average_maturity' field, this field specifies the calendar year.", + "default": null, + "optional": true + }, + { + "name": "commodity_types", + "type": "str", + "description": "For ETFs where 'asset_class_type' is 'Commodities', this field provides detail on the type of commodities held in the ETF.", + "default": null, + "optional": true + }, + { + "name": "energy_type", + "type": "str", + "description": "For ETFs where 'commodity_type' is 'Energy', this field provides detail on the type of energy exposure provided by the ETF.", + "default": null, + "optional": true + }, + { + "name": "agricultural_type", + "type": "str", + "description": "For ETFs where 'commodity_type' is 'Agricultural', this field provides detail on the type of agricultural exposure provided by the ETF.", + "default": null, + "optional": true + }, + { + "name": "livestock_type", + "type": "str", + "description": "For ETFs where 'commodity_type' is 'Livestock', this field provides detail on the type of livestock exposure provided by the ETF.", + "default": null, + "optional": true + }, + { + "name": "metal_type", + "type": "str", + "description": "For ETFs where 'commodity_type' is 'Gold & Metals', this field provides detail on the type of exposure provided by the ETF.", + "default": null, + "optional": true + }, + { + "name": "inverse_leveraged", + "type": "str", + "description": "This field is populated if the ETF provides inverse or leveraged exposure.", + "default": null, + "optional": true + }, + { + "name": "target_date_multi_asset_type", + "type": "str", + "description": "For ETFs where 'asset_class_type' is 'Target Date / MultiAsset', this field provides detail on the type of commodities held in the ETF.", + "default": null, + "optional": true + }, + { + "name": "currency_pair", + "type": "str", + "description": "This field is populated if the ETF's strategy involves providing exposure to the movements of a currency or involves hedging currency exposure.", + "default": null, + "optional": true + }, + { + "name": "social_environmental_type", + "type": "str", + "description": "This field is populated if the ETF's strategy involves providing exposure to a specific social or environmental theme.", + "default": null, + "optional": true + }, + { + "name": "clean_energy_type", + "type": "str", + "description": "This field is populated if the ETF has a value of 'Clean Energy' in the 'social_environmental_type' field.", + "default": null, + "optional": true + }, + { + "name": "dividend_type", + "type": "str", + "description": "This field is populated if the ETF has an intended investment objective of holding dividend-oriented stocks as stated in the prospectus.", + "default": null, + "optional": true + }, + { + "name": "regular_dividend_payor_type", + "type": "str", + "description": "This field is populated if the ETF has a value of'Dividend - Regular Payors' in the 'dividend_type' field.", + "default": null, + "optional": true + }, + { + "name": "quant_strategies_type", + "type": "str", + "description": "This field is populated if the ETF has either an index-linked or active strategy that is based on a proprietary quantitative strategy.", + "default": null, + "optional": true + }, + { + "name": "other_quant_models", + "type": "str", + "description": "For ETFs where 'quant_strategies_type' is 'Other Quant Model', this field provides the name of the specific proprietary quant model used as the underlying strategy for the ETF.", + "default": null, + "optional": true + }, + { + "name": "hedge_fund_type", + "type": "str", + "description": "For ETFs where 'other_asset_types' is 'Hedge Fund Replication', this field provides detail on the type of hedge fund replication strategy.", + "default": null, + "optional": true + }, + { + "name": "excludes_financials", + "type": "bool", + "description": "For equity ETFs, identifies those ETFs where the underlying fund holdings will not hold financials stocks, based on the funds intended objective.", + "default": null, + "optional": true + }, + { + "name": "excludes_technology", + "type": "bool", + "description": "For equity ETFs, identifies those ETFs where the underlying fund holdings will not hold technology stocks, based on the funds intended objective.", + "default": null, + "optional": true + }, + { + "name": "holds_only_nyse_stocks", + "type": "bool", + "description": "If true, the ETF is an equity ETF and holds only stocks listed on NYSE.", + "default": null, + "optional": true + }, + { + "name": "holds_only_nasdaq_stocks", + "type": "bool", + "description": "If true, the ETF is an equity ETF and holds only stocks listed on Nasdaq.", + "default": null, + "optional": true + }, + { + "name": "holds_mlp", + "type": "bool", + "description": "If true, the ETF's investment objective explicitly specifies that it holds MLPs as an intended part of its investment strategy.", + "default": null, + "optional": true + }, + { + "name": "holds_preferred_stock", + "type": "bool", + "description": "If true, the ETF's investment objective explicitly specifies that it holds preferred stock as an intended part of its investment strategy.", + "default": null, + "optional": true + }, + { + "name": "holds_closed_end_funds", + "type": "bool", + "description": "If true, the ETF's investment objective explicitly specifies that it holds closed end funds as an intended part of its investment strategy.", + "default": null, + "optional": true + }, + { + "name": "holds_adr", + "type": "bool", + "description": "If true, he ETF's investment objective explicitly specifies that it holds American Depositary Receipts (ADRs) as an intended part of its investment strategy.", + "default": null, + "optional": true + }, + { + "name": "laddered", + "type": "bool", + "description": "For bond ETFs, this field identifies those ETFs that specifically hold bonds in a laddered structure, where the bonds are scheduled to mature in an annual, sequential structure.", + "default": null, + "optional": true + }, + { + "name": "zero_coupon", + "type": "bool", + "description": "For bond ETFs, this field identifies those ETFs that specifically hold zero coupon Treasury Bills.", + "default": null, + "optional": true + }, + { + "name": "floating_rate", + "type": "bool", + "description": "For bond ETFs, this field identifies those ETFs that specifically hold floating rate bonds.", + "default": null, + "optional": true + }, + { + "name": "build_america_bonds", + "type": "bool", + "description": "For municipal bond ETFs, this field identifies those ETFs that specifically hold Build America Bonds.", + "default": null, + "optional": true + }, + { + "name": "dynamic_futures_roll", + "type": "bool", + "description": "If the product holds futures contracts, this field identifies those products where the roll strategy is dynamic (rather than entirely rules based), so as to minimize roll costs.", + "default": null, + "optional": true + }, + { + "name": "currency_hedged", + "type": "bool", + "description": "This field is populated if the ETF's strategy involves hedging currency exposure.", + "default": null, + "optional": true + }, + { + "name": "includes_short_exposure", + "type": "bool", + "description": "This field is populated if the ETF has short exposure in any of its holdings e.g. in a long/short or inverse ETF.", + "default": null, + "optional": true + }, + { + "name": "ucits", + "type": "bool", + "description": "If true, the Exchange Traded Product (ETP) is Undertakings for the Collective Investment in Transferable Securities (UCITS) compliant", + "default": null, + "optional": true + }, + { + "name": "registered_countries", + "type": "str", + "description": "The list of countries where the ETF is legally registered for sale. This may differ from where the ETF is domiciled or traded, particularly in Europe.", + "default": null, + "optional": true + }, + { + "name": "issuer_country", + "type": "str", + "description": "2 letter ISO country code for the country where the issuer is located.", + "default": null, + "optional": true + }, + { + "name": "domicile", + "type": "str", + "description": "2 letter ISO country code for the country where the ETP is domiciled.", + "default": null, + "optional": true + }, + { + "name": "listing_country", + "type": "str", + "description": "2 letter ISO country code for the country of the primary listing.", + "default": null, + "optional": true + }, + { + "name": "listing_region", + "type": "str", + "description": "Geographic region in the country of the primary listing falls.", + "default": null, + "optional": true + }, + { + "name": "bond_currency_denomination", + "type": "str", + "description": "For all bond ETFs, this field provides additional detail on the currency denomination of the underlying securities.", + "default": null, + "optional": true + }, + { + "name": "base_currency", + "type": "str", + "description": "Base currency in which NAV is reported.", + "default": null, + "optional": true + }, + { + "name": "listing_currency", + "type": "str", + "description": "Listing currency of the Exchange Traded Product (ETP) in which it is traded. Reported using the 3-digit ISO currency code.", + "default": null, + "optional": true + }, + { + "name": "number_of_holdings", + "type": "int", + "description": "The number of holdings in the ETF.", + "default": null, + "optional": true + }, + { + "name": "month_end_assets", + "type": "float", + "description": "Net assets in millions of dollars as of the most recent month end.", + "default": null, + "optional": true + }, + { + "name": "net_expense_ratio", + "type": "float", + "description": "Gross expense net of Fee Waivers, as a percentage of net assets as published by the ETF issuer.", + "default": null, + "optional": true + }, + { + "name": "etf_portfolio_turnover", + "type": "float", + "description": "The percentage of positions turned over in the last 12 months.", + "default": null, + "optional": true + } + ], + "yfinance": [ + { + "name": "fund_type", + "type": "str", + "description": "The legal type of fund.", + "default": null, + "optional": true + }, + { + "name": "fund_family", + "type": "str", + "description": "The fund family.", + "default": null, + "optional": true + }, + { + "name": "category", + "type": "str", + "description": "The fund category.", + "default": null, + "optional": true + }, + { + "name": "exchange", + "type": "str", + "description": "The exchange the fund is listed on.", + "default": null, + "optional": true + }, + { + "name": "exchange_timezone", + "type": "str", + "description": "The timezone of the exchange.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "The currency in which the fund is listed.", + "default": null, + "optional": true + }, + { + "name": "nav_price", + "type": "float", + "description": "The net asset value per unit of the fund.", + "default": null, + "optional": true + }, + { + "name": "total_assets", + "type": "int", + "description": "The total value of assets held by the fund.", + "default": null, + "optional": true + }, + { + "name": "trailing_pe", + "type": "float", + "description": "The trailing twelve month P/E ratio of the fund's assets.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield", + "type": "float", + "description": "The dividend yield of the fund, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "dividend_rate_ttm", + "type": "float", + "description": "The trailing twelve month annual dividend rate of the fund, in currency units.", + "default": null, + "optional": true + }, + { + "name": "dividend_yield_ttm", + "type": "float", + "description": "The trailing twelve month annual dividend yield of the fund, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "year_high", + "type": "float", + "description": "The fifty-two week high price.", + "default": null, + "optional": true + }, + { + "name": "year_low", + "type": "float", + "description": "The fifty-two week low price.", + "default": null, + "optional": true + }, + { + "name": "ma_50d", + "type": "float", + "description": "50-day moving average price.", + "default": null, + "optional": true + }, + { + "name": "ma_200d", + "type": "float", + "description": "200-day moving average price.", + "default": null, + "optional": true + }, + { + "name": "return_ytd", + "type": "float", + "description": "The year-to-date return of the fund, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "return_3y_avg", + "type": "float", + "description": "The three year average return of the fund, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "return_5y_avg", + "type": "float", + "description": "The five year average return of the fund, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "beta_3y_avg", + "type": "float", + "description": "The three year average beta of the fund.", + "default": null, + "optional": true + }, + { + "name": "volume_avg", + "type": "float", + "description": "The average daily trading volume of the fund.", + "default": null, + "optional": true + }, + { + "name": "volume_avg_10d", + "type": "float", + "description": "The average daily trading volume of the fund over the past ten days.", + "default": null, + "optional": true + }, + { + "name": "bid", + "type": "float", + "description": "The current bid price.", + "default": null, + "optional": true + }, + { + "name": "bid_size", + "type": "float", + "description": "The current bid size.", + "default": null, + "optional": true + }, + { + "name": "ask", + "type": "float", + "description": "The current ask price.", + "default": null, + "optional": true + }, + { + "name": "ask_size", + "type": "float", + "description": "The current ask size.", + "default": null, + "optional": true + }, + { + "name": "open", + "type": "float", + "description": "The open price of the most recent trading session.", + "default": null, + "optional": true + }, + { + "name": "high", + "type": "float", + "description": "The highest price of the most recent trading session.", + "default": null, + "optional": true + }, + { + "name": "low", + "type": "float", + "description": "The lowest price of the most recent trading session.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The trading volume of the most recent trading session.", + "default": null, + "optional": true + }, + { + "name": "prev_close", + "type": "float", + "description": "The previous closing price.", + "default": null, + "optional": true + } + ] + }, + "model": "EtfInfo" + }, + "/etf/sectors": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "ETF Sector weighting.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.sectors(symbol='SPY', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for. (ETF)", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfSectors]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "sector", + "type": "str", + "description": "Sector of exposure.", + "default": "", + "optional": false + }, + { + "name": "weight", + "type": "float", + "description": "Exposure of the ETF to the sector in normalized percentage points.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "EtfSectors" + }, + "/etf/countries": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "ETF Country weighting.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.countries(symbol='VT', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfCountries]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "country", + "type": "str", + "description": "The country of the exposure. Corresponding values are normalized percentage points.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "EtfCountries" + }, + "/etf/price_performance": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Price performance as a return, over different periods.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.price_performance(symbol='QQQ', provider='fmp')\nobb.etf.price_performance(symbol='SPY,QQQ,IWM,DJIA', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "return_type", + "type": "Literal['trailing', 'calendar']", + "description": "The type of returns to return, a trailing or calendar window.", + "default": "trailing", + "optional": true + }, + { + "name": "adjustment", + "type": "Literal['splits_only', 'splits_and_dividends']", + "description": "The adjustment factor, 'splits_only' will return pure price performance.", + "default": "splits_and_dividends", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfPricePerformance]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "one_day", + "type": "float", + "description": "One-day return.", + "default": null, + "optional": true + }, + { + "name": "wtd", + "type": "float", + "description": "Week to date return.", + "default": null, + "optional": true + }, + { + "name": "one_week", + "type": "float", + "description": "One-week return.", + "default": null, + "optional": true + }, + { + "name": "mtd", + "type": "float", + "description": "Month to date return.", + "default": null, + "optional": true + }, + { + "name": "one_month", + "type": "float", + "description": "One-month return.", + "default": null, + "optional": true + }, + { + "name": "qtd", + "type": "float", + "description": "Quarter to date return.", + "default": null, + "optional": true + }, + { + "name": "three_month", + "type": "float", + "description": "Three-month return.", + "default": null, + "optional": true + }, + { + "name": "six_month", + "type": "float", + "description": "Six-month return.", + "default": null, + "optional": true + }, + { + "name": "ytd", + "type": "float", + "description": "Year to date return.", + "default": null, + "optional": true + }, + { + "name": "one_year", + "type": "float", + "description": "One-year return.", + "default": null, + "optional": true + }, + { + "name": "two_year", + "type": "float", + "description": "Two-year return.", + "default": null, + "optional": true + }, + { + "name": "three_year", + "type": "float", + "description": "Three-year return.", + "default": null, + "optional": true + }, + { + "name": "four_year", + "type": "float", + "description": "Four-year", + "default": null, + "optional": true + }, + { + "name": "five_year", + "type": "float", + "description": "Five-year return.", + "default": null, + "optional": true + }, + { + "name": "ten_year", + "type": "float", + "description": "Ten-year return.", + "default": null, + "optional": true + }, + { + "name": "max", + "type": "float", + "description": "Return from the beginning of the time series.", + "default": null, + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "max_annualized", + "type": "float", + "description": "Annualized rate of return from inception.", + "default": null, + "optional": true + }, + { + "name": "volatility_one_year", + "type": "float", + "description": "Trailing one-year annualized volatility.", + "default": null, + "optional": true + }, + { + "name": "volatility_three_year", + "type": "float", + "description": "Trailing three-year annualized volatility.", + "default": null, + "optional": true + }, + { + "name": "volatility_five_year", + "type": "float", + "description": "Trailing five-year annualized volatility.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The trading volume.", + "default": null, + "optional": true + }, + { + "name": "volume_avg_30", + "type": "float", + "description": "The one-month average daily volume.", + "default": null, + "optional": true + }, + { + "name": "volume_avg_90", + "type": "float", + "description": "The three-month average daily volume.", + "default": null, + "optional": true + }, + { + "name": "volume_avg_180", + "type": "float", + "description": "The six-month average daily volume.", + "default": null, + "optional": true + }, + { + "name": "beta", + "type": "float", + "description": "Beta compared to the S&P 500.", + "default": null, + "optional": true + }, + { + "name": "nav", + "type": "float", + "description": "Net asset value per share.", + "default": null, + "optional": true + }, + { + "name": "year_high", + "type": "float", + "description": "The 52-week high price.", + "default": null, + "optional": true + }, + { + "name": "year_low", + "type": "float", + "description": "The 52-week low price.", + "default": null, + "optional": true + }, + { + "name": "market_cap", + "type": "float", + "description": "The market capitalization.", + "default": null, + "optional": true + }, + { + "name": "shares_outstanding", + "type": "int", + "description": "The number of shares outstanding.", + "default": null, + "optional": true + }, + { + "name": "updated", + "type": "date", + "description": "The date of the data.", + "default": null, + "optional": true + } + ] + }, + "model": "EtfPricePerformance" + }, + "/etf/holdings": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the holdings for an individual ETF.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.holdings(symbol='XLK', provider='fmp')\n# Including a date (FMP, SEC) will return the holdings as per NPORT-P filings.\nobb.etf.holdings(symbol='XLK', date=2022-03-31, provider='fmp')\n# The same data can be returned from the SEC directly.\nobb.etf.holdings(symbol='XLK', date=2022-03-31, provider='sec')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for. (ETF)", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "date", + "type": "Union[Union[str, date], str]", + "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF.", + "default": null, + "optional": true + }, + { + "name": "cik", + "type": "str", + "description": "The CIK of the filing entity. Overrides symbol.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + } + ], + "sec": [ + { + "name": "date", + "type": "Union[Union[str, date], str]", + "description": "A specific date to get data for. The date represents the period ending. The date entered will return the closest filing.", + "default": null, + "optional": true + }, + { + "name": "use_cache", + "type": "bool", + "description": "Whether or not to use cache for the request.", + "default": true, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfHoldings]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data. (ETF)", + "default": null, + "optional": true + }, + { + "name": "name", + "type": "str", + "description": "Name of the ETF holding.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "lei", + "type": "str", + "description": "The LEI of the holding.", + "default": null, + "optional": true + }, + { + "name": "title", + "type": "str", + "description": "The title of the holding.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "The CUSIP of the holding.", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "The ISIN of the holding.", + "default": null, + "optional": true + }, + { + "name": "balance", + "type": "int", + "description": "The balance of the holding, in shares or units.", + "default": null, + "optional": true + }, + { + "name": "units", + "type": "Union[str, float]", + "description": "The type of units.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "The currency of the holding.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "The value of the holding, in dollars.", + "default": null, + "optional": true + }, + { + "name": "weight", + "type": "float", + "description": "The weight of the holding, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "payoff_profile", + "type": "str", + "description": "The payoff profile of the holding.", + "default": null, + "optional": true + }, + { + "name": "asset_category", + "type": "str", + "description": "The asset category of the holding.", + "default": null, + "optional": true + }, + { + "name": "issuer_category", + "type": "str", + "description": "The issuer category of the holding.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "The country of the holding.", + "default": null, + "optional": true + }, + { + "name": "is_restricted", + "type": "str", + "description": "Whether the holding is restricted.", + "default": null, + "optional": true + }, + { + "name": "fair_value_level", + "type": "int", + "description": "The fair value level of the holding.", + "default": null, + "optional": true + }, + { + "name": "is_cash_collateral", + "type": "str", + "description": "Whether the holding is cash collateral.", + "default": null, + "optional": true + }, + { + "name": "is_non_cash_collateral", + "type": "str", + "description": "Whether the holding is non-cash collateral.", + "default": null, + "optional": true + }, + { + "name": "is_loan_by_fund", + "type": "str", + "description": "Whether the holding is loan by fund.", + "default": null, + "optional": true + }, + { + "name": "cik", + "type": "str", + "description": "The CIK of the filing.", + "default": null, + "optional": true + }, + { + "name": "acceptance_datetime", + "type": "str", + "description": "The acceptance datetime of the filing.", + "default": null, + "optional": true + }, + { + "name": "updated", + "type": "Union[date, datetime]", + "description": "The date the data was updated.", + "default": null, + "optional": true + } + ], + "intrinio": [ + { + "name": "security_type", + "type": "str", + "description": "The type of instrument for this holding. Examples(Bond='BOND', Equity='EQUI')", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "The International Securities Identification Number.", + "default": null, + "optional": true + }, + { + "name": "ric", + "type": "str", + "description": "The Reuters Instrument Code.", + "default": null, + "optional": true + }, + { + "name": "sedol", + "type": "str", + "description": "The Stock Exchange Daily Official List.", + "default": null, + "optional": true + }, + { + "name": "share_class_figi", + "type": "str", + "description": "The OpenFIGI symbol for the holding.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "The country or region of the holding.", + "default": null, + "optional": true + }, + { + "name": "maturity_date", + "type": "date", + "description": "The maturity date for the debt security, if available.", + "default": null, + "optional": true + }, + { + "name": "contract_expiry_date", + "type": "date", + "description": "Expiry date for the futures contract held, if available.", + "default": null, + "optional": true + }, + { + "name": "coupon", + "type": "float", + "description": "The coupon rate of the debt security, if available.", + "default": null, + "optional": true + }, + { + "name": "balance", + "type": "Union[float, int]", + "description": "The number of units of the security held, if available.", + "default": null, + "optional": true + }, + { + "name": "unit", + "type": "str", + "description": "The units of the 'balance' field.", + "default": null, + "optional": true + }, + { + "name": "units_per_share", + "type": "float", + "description": "Number of units of the security held per share outstanding of the ETF, if available.", + "default": null, + "optional": true + }, + { + "name": "face_value", + "type": "float", + "description": "The face value of the debt security, if available.", + "default": null, + "optional": true + }, + { + "name": "derivatives_value", + "type": "float", + "description": "The notional value of derivatives contracts held.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "The market value of the holding, on the 'as_of' date.", + "default": null, + "optional": true + }, + { + "name": "weight", + "type": "float", + "description": "The weight of the holding, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "updated", + "type": "date", + "description": "The 'as_of' date for the holding.", + "default": null, + "optional": true + } + ], + "sec": [ + { + "name": "lei", + "type": "str", + "description": "The LEI of the holding.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "The CUSIP of the holding.", + "default": null, + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "The ISIN of the holding.", + "default": null, + "optional": true + }, + { + "name": "other_id", + "type": "str", + "description": "Internal identifier for the holding.", + "default": null, + "optional": true + }, + { + "name": "balance", + "type": "float", + "description": "The balance of the holding.", + "default": null, + "optional": true + }, + { + "name": "weight", + "type": "float", + "description": "The weight of the holding in ETF in %.", + "default": null, + "optional": true + }, + { + "name": "value", + "type": "float", + "description": "The value of the holding in USD.", + "default": null, + "optional": true + }, + { + "name": "payoff_profile", + "type": "str", + "description": "The payoff profile of the holding.", + "default": null, + "optional": true + }, + { + "name": "units", + "type": "Union[str, float]", + "description": "The units of the holding.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "The currency of the holding.", + "default": null, + "optional": true + }, + { + "name": "asset_category", + "type": "str", + "description": "The asset category of the holding.", + "default": null, + "optional": true + }, + { + "name": "issuer_category", + "type": "str", + "description": "The issuer category of the holding.", + "default": null, + "optional": true + }, + { + "name": "country", + "type": "str", + "description": "The country of the holding.", + "default": null, + "optional": true + }, + { + "name": "is_restricted", + "type": "str", + "description": "Whether the holding is restricted.", + "default": null, + "optional": true + }, + { + "name": "fair_value_level", + "type": "int", + "description": "The fair value level of the holding.", + "default": null, + "optional": true + }, + { + "name": "is_cash_collateral", + "type": "str", + "description": "Whether the holding is cash collateral.", + "default": null, + "optional": true + }, + { + "name": "is_non_cash_collateral", + "type": "str", + "description": "Whether the holding is non-cash collateral.", + "default": null, + "optional": true + }, + { + "name": "is_loan_by_fund", + "type": "str", + "description": "Whether the holding is loan by fund.", + "default": null, + "optional": true + }, + { + "name": "loan_value", + "type": "float", + "description": "The loan value of the holding.", + "default": null, + "optional": true + }, + { + "name": "issuer_conditional", + "type": "str", + "description": "The issuer conditions of the holding.", + "default": null, + "optional": true + }, + { + "name": "asset_conditional", + "type": "str", + "description": "The asset conditions of the holding.", + "default": null, + "optional": true + }, + { + "name": "maturity_date", + "type": "date", + "description": "The maturity date of the debt security.", + "default": null, + "optional": true + }, + { + "name": "coupon_kind", + "type": "str", + "description": "The type of coupon for the debt security.", + "default": null, + "optional": true + }, + { + "name": "rate_type", + "type": "str", + "description": "The type of rate for the debt security, floating or fixed.", + "default": null, + "optional": true + }, + { + "name": "annualized_return", + "type": "float", + "description": "The annualized return on the debt security.", + "default": null, + "optional": true + }, + { + "name": "is_default", + "type": "str", + "description": "If the debt security is defaulted.", + "default": null, + "optional": true + }, + { + "name": "in_arrears", + "type": "str", + "description": "If the debt security is in arrears.", + "default": null, + "optional": true + }, + { + "name": "is_paid_kind", + "type": "str", + "description": "If the debt security payments are paid in kind.", + "default": null, + "optional": true + }, + { + "name": "derivative_category", + "type": "str", + "description": "The derivative category of the holding.", + "default": null, + "optional": true + }, + { + "name": "counterparty", + "type": "str", + "description": "The counterparty of the derivative.", + "default": null, + "optional": true + }, + { + "name": "underlying_name", + "type": "str", + "description": "The name of the underlying asset associated with the derivative.", + "default": null, + "optional": true + }, + { + "name": "option_type", + "type": "str", + "description": "The type of option.", + "default": null, + "optional": true + }, + { + "name": "derivative_payoff", + "type": "str", + "description": "The payoff profile of the derivative.", + "default": null, + "optional": true + }, + { + "name": "expiry_date", + "type": "date", + "description": "The expiry or termination date of the derivative.", + "default": null, + "optional": true + }, + { + "name": "exercise_price", + "type": "float", + "description": "The exercise price of the option.", + "default": null, + "optional": true + }, + { + "name": "exercise_currency", + "type": "str", + "description": "The currency of the option exercise price.", + "default": null, + "optional": true + }, + { + "name": "shares_per_contract", + "type": "float", + "description": "The number of shares per contract.", + "default": null, + "optional": true + }, + { + "name": "delta", + "type": "Union[str, float]", + "description": "The delta of the option.", + "default": null, + "optional": true + }, + { + "name": "rate_type_rec", + "type": "str", + "description": "The type of rate for reveivable portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "receive_currency", + "type": "str", + "description": "The receive currency of the swap.", + "default": null, + "optional": true + }, + { + "name": "upfront_receive", + "type": "float", + "description": "The upfront amount received of the swap.", + "default": null, + "optional": true + }, + { + "name": "floating_rate_index_rec", + "type": "str", + "description": "The floating rate index for reveivable portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "floating_rate_spread_rec", + "type": "float", + "description": "The floating rate spread for reveivable portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "rate_tenor_rec", + "type": "str", + "description": "The rate tenor for reveivable portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "rate_tenor_unit_rec", + "type": "Union[int, str]", + "description": "The rate tenor unit for reveivable portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "reset_date_rec", + "type": "str", + "description": "The reset date for reveivable portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "reset_date_unit_rec", + "type": "Union[int, str]", + "description": "The reset date unit for reveivable portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "rate_type_pmnt", + "type": "str", + "description": "The type of rate for payment portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "payment_currency", + "type": "str", + "description": "The payment currency of the swap.", + "default": null, + "optional": true + }, + { + "name": "upfront_payment", + "type": "float", + "description": "The upfront amount received of the swap.", + "default": null, + "optional": true + }, + { + "name": "floating_rate_index_pmnt", + "type": "str", + "description": "The floating rate index for payment portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "floating_rate_spread_pmnt", + "type": "float", + "description": "The floating rate spread for payment portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "rate_tenor_pmnt", + "type": "str", + "description": "The rate tenor for payment portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "rate_tenor_unit_pmnt", + "type": "Union[int, str]", + "description": "The rate tenor unit for payment portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "reset_date_pmnt", + "type": "str", + "description": "The reset date for payment portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "reset_date_unit_pmnt", + "type": "Union[int, str]", + "description": "The reset date unit for payment portion of the swap.", + "default": null, + "optional": true + }, + { + "name": "repo_type", + "type": "str", + "description": "The type of repo.", + "default": null, + "optional": true + }, + { + "name": "is_cleared", + "type": "str", + "description": "If the repo is cleared.", + "default": null, + "optional": true + }, + { + "name": "is_tri_party", + "type": "str", + "description": "If the repo is tri party.", + "default": null, + "optional": true + }, + { + "name": "principal_amount", + "type": "float", + "description": "The principal amount of the repo.", + "default": null, + "optional": true + }, + { + "name": "principal_currency", + "type": "str", + "description": "The currency of the principal amount.", + "default": null, + "optional": true + }, + { + "name": "collateral_type", + "type": "str", + "description": "The collateral type of the repo.", + "default": null, + "optional": true + }, + { + "name": "collateral_amount", + "type": "float", + "description": "The collateral amount of the repo.", + "default": null, + "optional": true + }, + { + "name": "collateral_currency", + "type": "str", + "description": "The currency of the collateral amount.", + "default": null, + "optional": true + }, + { + "name": "exchange_currency", + "type": "str", + "description": "The currency of the exchange rate.", + "default": null, + "optional": true + }, + { + "name": "exchange_rate", + "type": "float", + "description": "The exchange rate.", + "default": null, + "optional": true + }, + { + "name": "currency_sold", + "type": "str", + "description": "The currency sold in a Forward Derivative.", + "default": null, + "optional": true + }, + { + "name": "currency_amount_sold", + "type": "float", + "description": "The amount of currency sold in a Forward Derivative.", + "default": null, + "optional": true + }, + { + "name": "currency_bought", + "type": "str", + "description": "The currency bought in a Forward Derivative.", + "default": null, + "optional": true + }, + { + "name": "currency_amount_bought", + "type": "float", + "description": "The amount of currency bought in a Forward Derivative.", + "default": null, + "optional": true + }, + { + "name": "notional_amount", + "type": "float", + "description": "The notional amount of the derivative.", + "default": null, + "optional": true + }, + { + "name": "notional_currency", + "type": "str", + "description": "The currency of the derivative's notional amount.", + "default": null, + "optional": true + }, + { + "name": "unrealized_gain", + "type": "float", + "description": "The unrealized gain or loss on the derivative.", + "default": null, + "optional": true + } + ] + }, + "model": "EtfHoldings" + }, + "/etf/holdings_date": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Use this function to get the holdings dates, if available.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.holdings_date(symbol='XLK', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for. (ETF)", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [ + { + "name": "cik", + "type": "str", + "description": "The CIK of the filing entity. Overrides symbol.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfHoldingsDate]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + } + ], + "fmp": [] + }, + "model": "EtfHoldingsDate" + }, + "/etf/holdings_performance": { + "deprecated": { + "flag": true, + "message": "This endpoint is deprecated; pass a list of holdings symbols directly to `/equity/price/performance` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.2." + }, + "description": "Get the recent price performance of each ticker held in the ETF.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.holdings_performance(symbol='XLK', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfHoldingsPerformance]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true + }, + { + "name": "one_day", + "type": "float", + "description": "One-day return.", + "default": null, + "optional": true + }, + { + "name": "wtd", + "type": "float", + "description": "Week to date return.", + "default": null, + "optional": true + }, + { + "name": "one_week", + "type": "float", + "description": "One-week return.", + "default": null, + "optional": true + }, + { + "name": "mtd", + "type": "float", + "description": "Month to date return.", + "default": null, + "optional": true + }, + { + "name": "one_month", + "type": "float", + "description": "One-month return.", + "default": null, + "optional": true + }, + { + "name": "qtd", + "type": "float", + "description": "Quarter to date return.", + "default": null, + "optional": true + }, + { + "name": "three_month", + "type": "float", + "description": "Three-month return.", + "default": null, + "optional": true + }, + { + "name": "six_month", + "type": "float", + "description": "Six-month return.", + "default": null, + "optional": true + }, + { + "name": "ytd", + "type": "float", + "description": "Year to date return.", + "default": null, + "optional": true + }, + { + "name": "one_year", + "type": "float", + "description": "One-year return.", + "default": null, + "optional": true + }, + { + "name": "two_year", + "type": "float", + "description": "Two-year return.", + "default": null, + "optional": true + }, + { + "name": "three_year", + "type": "float", + "description": "Three-year return.", + "default": null, + "optional": true + }, + { + "name": "four_year", + "type": "float", + "description": "Four-year", + "default": null, + "optional": true + }, + { + "name": "five_year", + "type": "float", + "description": "Five-year return.", + "default": null, + "optional": true + }, + { + "name": "ten_year", + "type": "float", + "description": "Ten-year return.", + "default": null, + "optional": true + }, + { + "name": "max", + "type": "float", + "description": "Return from the beginning of the time series.", + "default": null, + "optional": true + } + ], + "fmp": [] + }, + "model": "EtfHoldingsPerformance" + }, + "/etf/equity_exposure": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the exposure to ETFs for a specific stock.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.etf.equity_exposure(symbol='MSFT', provider='fmp')\n# This function accepts multiple tickers.\nobb.etf.equity_exposure(symbol='MSFT,AAPL', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. (Stock) Multiple items allowed for provider(s): fmp.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EtfEquityExposure]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "equity_symbol", + "type": "str", + "description": "The symbol of the equity requested.", + "default": "", + "optional": false + }, + { + "name": "etf_symbol", + "type": "str", + "description": "The symbol of the ETF with exposure to the requested equity.", + "default": "", + "optional": false + }, + { + "name": "shares", + "type": "float", + "description": "The number of shares held in the ETF.", + "default": null, + "optional": true + }, + { + "name": "weight", + "type": "float", + "description": "The weight of the equity in the ETF, as a normalized percent.", + "default": null, + "optional": true + }, + { + "name": "market_value", + "type": "Union[float, int]", + "description": "The market value of the equity position in the ETF.", + "default": null, + "optional": true + } + ], + "fmp": [] + }, + "model": "EtfEquityExposure" + }, + "/fixedincome/rate/ameribor": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Ameribor.\n\nAmeribor (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of\nshort-term interbank borrowing. This rate is based on transactions in overnight unsecured loans conducted on the\nAmerican Financial Exchange (AFX).", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.ameribor(provider='fred')\nobb.fixedincome.rate.ameribor(parameter=30_day_ma, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "parameter", + "type": "Literal['overnight', 'term_30', 'term_90', '1_week_term_structure', '1_month_term_structure', '3_month_term_structure', '6_month_term_structure', '1_year_term_structure', '2_year_term_structure', '30_day_ma', '90_day_ma']", + "description": "Period of AMERIBOR rate.", + "default": "overnight", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[AMERIBOR]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "AMERIBOR rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "AMERIBOR" + }, + "/fixedincome/rate/sonia": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Sterling Overnight Index Average.\n\nSONIA (Sterling Overnight Index Average) is an important interest rate benchmark. SONIA is based on actual\ntransactions and reflects the average of the interest rates that banks pay to borrow sterling overnight from other\nfinancial institutions and other institutional investors.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.sonia(provider='fred')\nobb.fixedincome.rate.sonia(parameter=total_nominal_value, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "parameter", + "type": "Literal['rate', 'index', '10th_percentile', '25th_percentile', '75th_percentile', '90th_percentile', 'total_nominal_value']", + "description": "Period of SONIA rate.", + "default": "rate", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SONIA]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "SONIA rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "SONIA" + }, + "/fixedincome/rate/iorb": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Interest on Reserve Balances.\n\nGet Interest Rate on Reserve Balances data A bank rate is the interest rate a nation's central bank charges to its\ndomestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the\nUnited States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.iorb(provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[IORB]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "IORB rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "IORB" + }, + "/fixedincome/rate/effr": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Fed Funds Rate.\n\nGet Effective Federal Funds Rate data. A bank rate is the interest rate a nation's central bank charges to its\ndomestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the\nUnited States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.effr(provider='fred')\nobb.fixedincome.rate.effr(parameter=daily, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['federal_reserve', 'fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'federal_reserve' if there is no default.", + "default": "federal_reserve", + "optional": true + } + ], + "federal_reserve": [], + "fred": [ + { + "name": "parameter", + "type": "Literal['monthly', 'daily', 'weekly', 'daily_excl_weekend', 'annual', 'biweekly', 'volume']", + "description": "Period of FED rate.", + "default": "weekly", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[FEDFUNDS]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['federal_reserve', 'fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "FED rate.", + "default": "", + "optional": false + } + ], + "federal_reserve": [], + "fred": [] + }, + "model": "FEDFUNDS" + }, + "/fixedincome/rate/effr_forecast": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Fed Funds Rate Projections.\n\nThe projections for the federal funds rate are the value of the midpoint of the\nprojected appropriate target range for the federal funds rate or the projected\nappropriate target level for the federal funds rate at the end of the specified\ncalendar year or over the longer run.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.effr_forecast(provider='fred')\nobb.fixedincome.rate.effr_forecast(long_run=True, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "long_run", + "type": "bool", + "description": "Flag to show long run projections", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[PROJECTIONS]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "range_high", + "type": "float", + "description": "High projection of rates.", + "default": "", + "optional": false + }, + { + "name": "central_tendency_high", + "type": "float", + "description": "Central tendency of high projection of rates.", + "default": "", + "optional": false + }, + { + "name": "median", + "type": "float", + "description": "Median projection of rates.", + "default": "", + "optional": false + }, + { + "name": "range_midpoint", + "type": "float", + "description": "Midpoint projection of rates.", + "default": "", + "optional": false + }, + { + "name": "central_tendency_midpoint", + "type": "float", + "description": "Central tendency of midpoint projection of rates.", + "default": "", + "optional": false + }, + { + "name": "range_low", + "type": "float", + "description": "Low projection of rates.", + "default": "", + "optional": false + }, + { + "name": "central_tendency_low", + "type": "float", + "description": "Central tendency of low projection of rates.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "PROJECTIONS" + }, + "/fixedincome/rate/estr": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Euro Short-Term Rate.\n\nThe euro short-term rate (\u20acSTR) reflects the wholesale euro unsecured overnight borrowing costs of banks located in\nthe euro area. The \u20acSTR is published on each TARGET2 business day based on transactions conducted and settled on\nthe previous TARGET2 business day (the reporting date \u201cT\u201d) with a maturity date of T+1 which are deemed to have been\nexecuted at arm\u2019s length and thus reflect market rates in an unbiased way.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.estr(provider='fred')\nobb.fixedincome.rate.estr(parameter=number_of_active_banks, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "parameter", + "type": "Literal['volume_weighted_trimmed_mean_rate', 'number_of_transactions', 'number_of_active_banks', 'total_volume', 'share_of_volume_of_the_5_largest_active_banks', 'rate_at_75th_percentile_of_volume', 'rate_at_25th_percentile_of_volume']", + "description": "Period of ESTR rate.", + "default": "volume_weighted_trimmed_mean_rate", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ESTR]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "ESTR rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "ESTR" + }, + "/fixedincome/rate/ecb": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "European Central Bank Interest Rates.\n\nThe Governing Council of the ECB sets the key interest rates for the euro area:\n\n- The interest rate on the main refinancing operations (MRO), which provide\nthe bulk of liquidity to the banking system.\n- The rate on the deposit facility, which banks may use to make overnight deposits with the Eurosystem.\n- The rate on the marginal lending facility, which offers overnight credit to banks from the Eurosystem.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.ecb(provider='fred')\nobb.fixedincome.rate.ecb(interest_rate_type='refinancing', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "interest_rate_type", + "type": "Literal['deposit', 'lending', 'refinancing']", + "description": "The type of interest rate.", + "default": "lending", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[EuropeanCentralBankInterestRates]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "European Central Bank Interest Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "EuropeanCentralBankInterestRates" + }, + "/fixedincome/rate/dpcredit": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Discount Window Primary Credit Rate.\n\nA bank rate is the interest rate a nation's central bank charges to its domestic banks to borrow money.\nThe rates central banks charge are set to stabilize the economy.\nIn the United States, the Federal Reserve System's Board of Governors set the bank rate,\nalso known as the discount rate.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.rate.dpcredit(provider='fred')\nobb.fixedincome.rate.dpcredit(start_date='2023-02-01', end_date='2023-05-01', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "parameter", + "type": "Literal['daily_excl_weekend', 'monthly', 'weekly', 'daily', 'annual']", + "description": "FRED series ID of DWPCR data.", + "default": "daily_excl_weekend", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[DiscountWindowPrimaryCreditRate]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "Discount Window Primary Credit Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "DiscountWindowPrimaryCreditRate" + }, + "/fixedincome/spreads/tcm": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Treasury Constant Maturity.\n\nGet data for 10-Year Treasury Constant Maturity Minus Selected Treasury Constant Maturity.\nConstant maturity is the theoretical value of a U.S. Treasury that is based on recent values of auctioned U.S.\nTreasuries. The value is obtained by the U.S. Treasury on a daily basis through interpolation of the Treasury\nyield curve which, in turn, is based on closing bid-yields of actively-traded Treasury securities.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.spreads.tcm(provider='fred')\nobb.fixedincome.spreads.tcm(maturity='2y', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "maturity", + "type": "Literal['3m', '2y']", + "description": "The maturity", + "default": "3m", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[TreasuryConstantMaturity]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "TreasuryConstantMaturity Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "TreasuryConstantMaturity" + }, + "/fixedincome/spreads/tcm_effr": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Select Treasury Constant Maturity.\n\nGet data for Selected Treasury Constant Maturity Minus Federal Funds Rate\nConstant maturity is the theoretical value of a U.S. Treasury that is based on recent values of auctioned U.S.\nTreasuries. The value is obtained by the U.S. Treasury on a daily basis through interpolation of the Treasury\nyield curve which, in turn, is based on closing bid-yields of actively-traded Treasury securities.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.spreads.tcm_effr(provider='fred')\nobb.fixedincome.spreads.tcm_effr(maturity='10y', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "maturity", + "type": "Literal['10y', '5y', '1y', '6m', '3m']", + "description": "The maturity", + "default": "10y", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SelectedTreasuryConstantMaturity]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "Selected Treasury Constant Maturity Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "SelectedTreasuryConstantMaturity" + }, + "/fixedincome/spreads/treasury_effr": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Select Treasury Bill.\n\nGet Selected Treasury Bill Minus Federal Funds Rate.\nConstant maturity is the theoretical value of a U.S. Treasury that is based on recent values of\nauctioned U.S. Treasuries.\nThe value is obtained by the U.S. Treasury on a daily basis through interpolation of the Treasury\nyield curve which, in turn, is based on closing bid-yields of actively-traded Treasury securities.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.spreads.treasury_effr(provider='fred')\nobb.fixedincome.spreads.treasury_effr(maturity='6m', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "maturity", + "type": "Literal['3m', '6m']", + "description": "The maturity", + "default": "3m", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SelectedTreasuryBill]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "SelectedTreasuryBill Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "SelectedTreasuryBill" + }, + "/fixedincome/government/us_yield_curve": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "US Yield Curve. Get United States yield curve.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.government.us_yield_curve(provider='fred')\nobb.fixedincome.government.us_yield_curve(inflation_adjusted=True, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for. Defaults to the most recent FRED entry.", + "default": null, + "optional": true + }, + { + "name": "inflation_adjusted", + "type": "bool", + "description": "Get inflation adjusted rates.", + "default": false, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[USYieldCurve]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "maturity", + "type": "float", + "description": "Maturity of the treasury rate in years.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "Associated rate given in decimal form (0.05 is 5%)", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "USYieldCurve" + }, + "/fixedincome/government/treasury_rates": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Government Treasury Rates.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.government.treasury_rates(provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['federal_reserve', 'fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'federal_reserve' if there is no default.", + "default": "federal_reserve", + "optional": true + } + ], + "federal_reserve": [], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[TreasuryRates]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['federal_reserve', 'fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "week_4", + "type": "float", + "description": "4 week Treasury bills rate (secondary market).", + "default": null, + "optional": true + }, + { + "name": "month_1", + "type": "float", + "description": "1 month Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "month_2", + "type": "float", + "description": "2 month Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "month_3", + "type": "float", + "description": "3 month Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "month_6", + "type": "float", + "description": "6 month Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_1", + "type": "float", + "description": "1 year Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_2", + "type": "float", + "description": "2 year Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_3", + "type": "float", + "description": "3 year Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_5", + "type": "float", + "description": "5 year Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_7", + "type": "float", + "description": "7 year Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_10", + "type": "float", + "description": "10 year Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_20", + "type": "float", + "description": "20 year Treasury rate.", + "default": null, + "optional": true + }, + { + "name": "year_30", + "type": "float", + "description": "30 year Treasury rate.", + "default": null, + "optional": true + } + ], + "federal_reserve": [], + "fmp": [] + }, + "model": "TreasuryRates" + }, + "/fixedincome/corporate/ice_bofa": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "ICE BofA US Corporate Bond Indices.\n\nThe ICE BofA US Corporate Index tracks the performance of US dollar denominated investment grade corporate debt\npublicly issued in the US domestic market. Qualifying securities must have an investment grade rating (based on an\naverage of Moody\u2019s, S&P and Fitch), at least 18 months to final maturity at the time of issuance, at least one year\nremaining term to final maturity as of the rebalance date, a fixed coupon schedule and a minimum amount\noutstanding of $250 million. The ICE BofA US Corporate Index is a component of the US Corporate Master Index.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.ice_bofa(provider='fred')\nobb.fixedincome.corporate.ice_bofa(index_type='yield_to_worst', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "index_type", + "type": "Literal['yield', 'yield_to_worst', 'total_return', 'spread']", + "description": "The type of series.", + "default": "yield", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "category", + "type": "Literal['all', 'duration', 'eur', 'usd']", + "description": "The type of category.", + "default": "all", + "optional": true + }, + { + "name": "area", + "type": "Literal['asia', 'emea', 'eu', 'ex_g10', 'latin_america', 'us']", + "description": "The type of area.", + "default": "us", + "optional": true + }, + { + "name": "grade", + "type": "Literal['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'ccc', 'crossover', 'high_grade', 'high_yield', 'non_financial', 'non_sovereign', 'private_sector', 'public_sector']", + "description": "The type of grade.", + "default": "non_sovereign", + "optional": true + }, + { + "name": "options", + "type": "bool", + "description": "Whether to include options in the results.", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[ICEBofA]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "ICE BofA US Corporate Bond Indices Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "ICEBofA" + }, + "/fixedincome/corporate/moody": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Moody Corporate Bond Index.\n\nMoody's Aaa and Baa are investment bonds that acts as an index of\nthe performance of all bonds given an Aaa or Baa rating by Moody's Investors Service respectively.\nThese corporate bonds often are used in macroeconomics as an alternative to the federal ten-year\nTreasury Bill as an indicator of the interest rate.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.moody(provider='fred')\nobb.fixedincome.corporate.moody(index_type='baa', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "index_type", + "type": "Literal['aaa', 'baa']", + "description": "The type of series.", + "default": "aaa", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "spread", + "type": "Literal['treasury', 'fed_funds']", + "description": "The type of spread.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[MoodyCorporateBondIndex]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "Moody Corporate Bond Index Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "MoodyCorporateBondIndex" + }, + "/fixedincome/corporate/hqm": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "High Quality Market Corporate Bond.\n\nThe HQM yield curve represents the high quality corporate bond market, i.e.,\ncorporate bonds rated AAA, AA, or A. The HQM curve contains two regression terms.\nThese terms are adjustment factors that blend AAA, AA, and A bonds into a single HQM yield curve\nthat is the market-weighted average (MWA) quality of high quality bonds.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.hqm(provider='fred')\nobb.fixedincome.corporate.hqm(yield_curve='par', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + }, + { + "name": "yield_curve", + "type": "Literal['spot', 'par']", + "description": "The yield curve type.", + "default": "spot", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[HighQualityMarketCorporateBond]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "HighQualityMarketCorporateBond Rate.", + "default": "", + "optional": false + }, + { + "name": "maturity", + "type": "str", + "description": "Maturity.", + "default": "", + "optional": false + }, + { + "name": "yield_curve", + "type": "Literal['spot', 'par']", + "description": "The yield curve type.", + "default": "", + "optional": false + } + ], + "fred": [ + { + "name": "series_id", + "type": "str", + "description": "FRED series id.", + "default": "", + "optional": false + } + ] + }, + "model": "HighQualityMarketCorporateBond" + }, + "/fixedincome/corporate/spot_rates": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Spot Rates.\n\nThe spot rates for any maturity is the yield on a bond that provides a single payment at that maturity.\nThis is a zero coupon bond.\nBecause each spot rate pertains to a single cashflow, it is the relevant interest rate\nconcept for discounting a pension liability at the same maturity.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.spot_rates(provider='fred')\nobb.fixedincome.corporate.spot_rates(maturity='10,20,30,50', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "maturity", + "type": "Union[Union[float, str], List[Union[float, str]]]", + "description": "Maturities in years. Multiple items allowed for provider(s): fred.", + "default": 10.0, + "optional": true + }, + { + "name": "category", + "type": "Union[str, List[str]]", + "description": "Rate category. Options: spot_rate, par_yield. Multiple items allowed for provider(s): fred.", + "default": "spot_rate", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SpotRate]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "Spot Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "SpotRate" + }, + "/fixedincome/corporate/commercial_paper": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Commercial Paper.\n\nCommercial paper (CP) consists of short-term, promissory notes issued primarily by corporations.\nMaturities range up to 270 days but average about 30 days.\nMany companies use CP to raise cash needed for current transactions,\nand many find it to be a lower-cost alternative to bank loans.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.corporate.commercial_paper(provider='fred')\nobb.fixedincome.corporate.commercial_paper(maturity='15d', provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "maturity", + "type": "Literal['overnight', '7d', '15d', '30d', '60d', '90d']", + "description": "The maturity.", + "default": "30d", + "optional": true + }, + { + "name": "category", + "type": "Literal['asset_backed', 'financial', 'nonfinancial']", + "description": "The category.", + "default": "financial", + "optional": true + }, + { + "name": "grade", + "type": "Literal['aa', 'a2_p2']", + "description": "The grade.", + "default": "aa", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CommercialPaper]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "Commercial Paper Rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "CommercialPaper" + }, + "/fixedincome/sofr": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Secured Overnight Financing Rate.\n\nThe Secured Overnight Financing Rate (SOFR) is a broad measure of the cost of\nborrowing cash overnight collateralizing by Treasury securities.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.fixedincome.sofr(provider='fred')\nobb.fixedincome.sofr(period=overnight, provider='fred')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['fred']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fred' if there is no default.", + "default": "fred", + "optional": true + } + ], + "fred": [ + { + "name": "period", + "type": "Literal['overnight', '30_day', '90_day', '180_day', 'index']", + "description": "Period of SOFR rate.", + "default": "overnight", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SOFR]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fred']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "rate", + "type": "float", + "description": "SOFR rate.", + "default": "", + "optional": false + } + ], + "fred": [] + }, + "model": "SOFR" + }, + "/index/price/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Historical Index Levels.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.price.historical(symbol='^GSPC', provider='fmp')\n# Not all providers have the same symbols.\nobb.index.price.historical(symbol='SPX', provider='intrinio')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, polygon, yfinance.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "interval", + "type": "str", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 10000, + "optional": true + } + ], + "polygon": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", + "default": "asc", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 49999, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[IndexHistorical]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "Union[date, datetime]", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The open price.", + "default": null, + "optional": true + }, + { + "name": "high", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The high price.", + "default": null, + "optional": true + }, + { + "name": "low", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The low price.", + "default": null, + "optional": true + }, + { + "name": "close", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The close price.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The trading volume.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "vwap", + "type": "float", + "description": "Volume Weighted Average Price over the period.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change in the price from the previous close, as a normalized percent.", + "default": null, + "optional": true + } + ], + "intrinio": [], + "polygon": [ + { + "name": "transactions", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Number of transactions for the symbol in the time period.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "IndexHistorical" + }, + "/index/market": { + "deprecated": { + "flag": true, + "message": "This endpoint is deprecated; use `/index/price/historical` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.3." + }, + "description": "Get Historical Market Indices.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.market(symbol='^IBEX', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio, polygon, yfinance.", + "default": "", + "optional": false + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "interval", + "type": "str", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true + }, + { + "name": "provider", + "type": "Literal['fmp', 'intrinio', 'polygon', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "intrinio": [ + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 10000, + "optional": true + } + ], + "polygon": [ + { + "name": "sort", + "type": "Literal['asc', 'desc']", + "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date.", + "default": "asc", + "optional": true + }, + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return.", + "default": 49999, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[MarketIndices]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'intrinio', 'polygon', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "Union[date, datetime]", + "description": "The date of the data.", + "default": "", + "optional": false + }, + { + "name": "open", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The open price.", + "default": null, + "optional": true + }, + { + "name": "high", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The high price.", + "default": null, + "optional": true + }, + { + "name": "low", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The low price.", + "default": null, + "optional": true + }, + { + "name": "close", + "type": "Annotated[float, Strict(strict=True)]", + "description": "The close price.", + "default": null, + "optional": true + }, + { + "name": "volume", + "type": "int", + "description": "The trading volume.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "vwap", + "type": "float", + "description": "Volume Weighted Average Price over the period.", + "default": null, + "optional": true + }, + { + "name": "change", + "type": "float", + "description": "Change in the price from the previous close.", + "default": null, + "optional": true + }, + { + "name": "change_percent", + "type": "float", + "description": "Change in the price from the previous close, as a normalized percent.", + "default": null, + "optional": true + } + ], + "intrinio": [], + "polygon": [ + { + "name": "transactions", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Number of transactions for the symbol in the time period.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "model": "MarketIndices" + }, + "/index/constituents": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get Index Constituents.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.constituents(symbol='dowjones', provider='fmp')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['fmp']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[IndexConstituents]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + }, + { + "name": "name", + "type": "str", + "description": "Name of the constituent company in the index.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "sector", + "type": "str", + "description": "Sector the constituent company in the index belongs to.", + "default": "", + "optional": false + }, + { + "name": "sub_sector", + "type": "str", + "description": "Sub-sector the constituent company in the index belongs to.", + "default": null, + "optional": true + }, + { + "name": "headquarter", + "type": "str", + "description": "Location of the headquarter of the constituent company in the index.", + "default": null, + "optional": true + }, + { + "name": "date_first_added", + "type": "Union[str, date]", + "description": "Date the constituent company was added to the index.", + "default": null, + "optional": true + }, + { + "name": "cik", + "type": "int", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true + }, + { + "name": "founded", + "type": "Union[str, date]", + "description": "Founding year of the constituent company in the index.", + "default": null, + "optional": true + } + ] + }, + "model": "IndexConstituents" + }, + "/index/available": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "All indices available from a given provider.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.index.available(provider='fmp')\nobb.index.available(provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "provider", + "type": "Literal['fmp', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default.", + "default": "fmp", + "optional": true + } + ], + "fmp": [], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[AvailableIndices]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['fmp', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "name", + "type": "str", + "description": "Name of the index.", + "default": null, + "optional": true + }, + { + "name": "currency", + "type": "str", + "description": "Currency the index is traded in.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "stock_exchange", + "type": "str", + "description": "Stock exchange where the index is listed.", + "default": "", + "optional": false + }, + { + "name": "exchange_short_name", + "type": "str", + "description": "Short name of the stock exchange where the index is listed.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "code", + "type": "str", + "description": "ID code for keying the index in the OpenBB Terminal.", + "default": "", + "optional": false + }, + { + "name": "symbol", + "type": "str", + "description": "Symbol for the index.", + "default": "", + "optional": false + } + ] + }, + "model": "AvailableIndices" + }, + "/news/world": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "World News. Global news data.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.news.world(provider='fmp')\nobb.news.world(limit=100, provider='intrinio')\n# Get news on the specified dates.\nobb.news.world(start_date='2024-02-01', end_date='2024-02-07', provider='intrinio')\n# Display the headlines of the news.\nobb.news.world(display=headline, provider='benzinga')\n# Get news by topics.\nobb.news.world(topics=finance, provider='benzinga')\n# Get news by source using 'tingo' as provider.\nobb.news.world(provider='tiingo', source=bloomberg)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "limit", + "type": "int", + "description": "The number of data entries to return. The number of articles to return.", + "default": 2500, + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "provider", + "type": "Literal['benzinga', 'fmp', 'intrinio', 'tiingo']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", + "default": "benzinga", + "optional": true + } + ], + "benzinga": [ + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + }, + { + "name": "display", + "type": "Literal['headline', 'abstract', 'full']", + "description": "Specify headline only (headline), headline + teaser (abstract), or headline + full body (full).", + "default": "full", + "optional": true + }, + { + "name": "updated_since", + "type": "int", + "description": "Number of seconds since the news was updated.", + "default": null, + "optional": true + }, + { + "name": "published_since", + "type": "int", + "description": "Number of seconds since the news was published.", + "default": null, + "optional": true + }, + { + "name": "sort", + "type": "Literal['id', 'created', 'updated']", + "description": "Key to sort the news by.", + "default": "created", + "optional": true + }, + { + "name": "order", + "type": "Literal['asc', 'desc']", + "description": "Order to sort the news by.", + "default": "desc", + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "The ISIN of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "The CUSIP of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "channels", + "type": "str", + "description": "Channels of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "topics", + "type": "str", + "description": "Topics of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "authors", + "type": "str", + "description": "Authors of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "content_types", + "type": "str", + "description": "Content types of the news to retrieve.", + "default": null, + "optional": true + } + ], + "fmp": [], + "intrinio": [], + "tiingo": [ + { + "name": "offset", + "type": "int", + "description": "Page offset, used in conjunction with limit.", + "default": 0, + "optional": true + }, + { + "name": "source", + "type": "str", + "description": "A comma-separated list of the domains requested.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[WorldNews]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['benzinga', 'fmp', 'intrinio', 'tiingo']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "datetime", + "description": "The date of the data. The published date of the article.", + "default": "", + "optional": false + }, + { + "name": "title", + "type": "str", + "description": "Title of the article.", + "default": "", + "optional": false + }, + { + "name": "images", + "type": "List[Dict[str, str]]", + "description": "Images associated with the article.", + "default": null, + "optional": true + }, + { + "name": "text", + "type": "str", + "description": "Text/body of the article.", + "default": null, + "optional": true + }, + { + "name": "url", + "type": "str", + "description": "URL to the article.", + "default": null, + "optional": true + } + ], + "benzinga": [ + { + "name": "id", + "type": "str", + "description": "Article ID.", + "default": "", + "optional": false + }, + { + "name": "author", + "type": "str", + "description": "Author of the news.", + "default": null, + "optional": true + }, + { + "name": "teaser", + "type": "str", + "description": "Teaser of the news.", + "default": null, + "optional": true + }, + { + "name": "channels", + "type": "str", + "description": "Channels associated with the news.", + "default": null, + "optional": true + }, + { + "name": "stocks", + "type": "str", + "description": "Stocks associated with the news.", + "default": null, + "optional": true + }, + { + "name": "tags", + "type": "str", + "description": "Tags associated with the news.", + "default": null, + "optional": true + }, + { + "name": "updated", + "type": "datetime", + "description": "Updated date of the news.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "site", + "type": "str", + "description": "News source.", + "default": "", + "optional": false + } + ], + "intrinio": [ + { + "name": "id", + "type": "str", + "description": "Article ID.", + "default": "", + "optional": false + }, + { + "name": "company", + "type": "Dict[str, Any]", + "description": "Company details related to the news article.", + "default": "", + "optional": false + } + ], + "tiingo": [ + { + "name": "symbols", + "type": "str", + "description": "Ticker tagged in the fetched news.", + "default": null, + "optional": true + }, + { + "name": "article_id", + "type": "int", + "description": "Unique ID of the news article.", + "default": "", + "optional": false + }, + { + "name": "site", + "type": "str", + "description": "News source.", + "default": "", + "optional": false + }, + { + "name": "tags", + "type": "str", + "description": "Tags associated with the news article.", + "default": null, + "optional": true + }, + { + "name": "crawl_date", + "type": "datetime", + "description": "Date the news article was crawled.", + "default": "", + "optional": false + } + ] + }, + "model": "WorldNews" + }, + "/news/company": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Company News. Get news for one or more companies.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.news.company(provider='benzinga')\nobb.news.company(limit=100, provider='benzinga')\n# Get news on the specified dates.\nobb.news.company(symbol='AAPL', start_date='2024-02-01', end_date='2024-02-07', provider='intrinio')\n# Display the headlines of the news.\nobb.news.company(symbol='AAPL', display=headline, provider='benzinga')\n# Get news for multiple symbols.\nobb.news.company(symbol='aapl,tsla', provider='fmp')\n# Get news company's ISIN.\nobb.news.company(symbol='NVDA', isin=US0378331005, provider='benzinga')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "Union[str, List[str]]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): benzinga, fmp, intrinio, polygon, tiingo, yfinance.", + "default": null, + "optional": true + }, + { + "name": "start_date", + "type": "Union[date, str]", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "Union[date, str]", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true + }, + { + "name": "limit", + "type": "Annotated[int, Ge(ge=0)]", + "description": "The number of data entries to return.", + "default": 2500, + "optional": true + }, + { + "name": "provider", + "type": "Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'benzinga' if there is no default.", + "default": "benzinga", + "optional": true + } + ], + "benzinga": [ + { + "name": "date", + "type": "Union[date, str]", + "description": "A specific date to get data for.", + "default": null, + "optional": true + }, + { + "name": "display", + "type": "Literal['headline', 'abstract', 'full']", + "description": "Specify headline only (headline), headline + teaser (abstract), or headline + full body (full).", + "default": "full", + "optional": true + }, + { + "name": "updated_since", + "type": "int", + "description": "Number of seconds since the news was updated.", + "default": null, + "optional": true + }, + { + "name": "published_since", + "type": "int", + "description": "Number of seconds since the news was published.", + "default": null, + "optional": true + }, + { + "name": "sort", + "type": "Literal['id', 'created', 'updated']", + "description": "Key to sort the news by.", + "default": "created", + "optional": true + }, + { + "name": "order", + "type": "Literal['asc', 'desc']", + "description": "Order to sort the news by.", + "default": "desc", + "optional": true + }, + { + "name": "isin", + "type": "str", + "description": "The company's ISIN.", + "default": null, + "optional": true + }, + { + "name": "cusip", + "type": "str", + "description": "The company's CUSIP.", + "default": null, + "optional": true + }, + { + "name": "channels", + "type": "str", + "description": "Channels of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "topics", + "type": "str", + "description": "Topics of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "authors", + "type": "str", + "description": "Authors of the news to retrieve.", + "default": null, + "optional": true + }, + { + "name": "content_types", + "type": "str", + "description": "Content types of the news to retrieve.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "page", + "type": "int", + "description": "Page number of the results. Use in combination with limit.", + "default": 0, + "optional": true + } + ], + "intrinio": [], + "polygon": [ + { + "name": "order", + "type": "Literal['asc', 'desc']", + "description": "Sort order of the articles.", + "default": "desc", + "optional": true + } + ], + "tiingo": [ + { + "name": "offset", + "type": "int", + "description": "Page offset, used in conjunction with limit.", + "default": 0, + "optional": true + }, + { + "name": "source", + "type": "str", + "description": "A comma-separated list of the domains requested.", + "default": null, + "optional": true + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CompanyNews]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'tiingo', 'yfinance']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "datetime", + "description": "The date of the data. Here it is the published date of the article.", + "default": "", + "optional": false + }, + { + "name": "title", + "type": "str", + "description": "Title of the article.", + "default": "", + "optional": false + }, + { + "name": "text", + "type": "str", + "description": "Text/body of the article.", + "default": null, + "optional": true + }, + { + "name": "images", + "type": "List[Dict[str, str]]", + "description": "Images associated with the article.", + "default": null, + "optional": true + }, + { + "name": "url", + "type": "str", + "description": "URL to the article.", + "default": "", + "optional": false + }, + { + "name": "symbols", + "type": "str", + "description": "Symbols associated with the article.", + "default": null, + "optional": true + } + ], + "benzinga": [ + { + "name": "id", + "type": "str", + "description": "Article ID.", + "default": "", + "optional": false + }, + { + "name": "author", + "type": "str", + "description": "Author of the article.", + "default": null, + "optional": true + }, + { + "name": "teaser", + "type": "str", + "description": "Teaser of the news.", + "default": null, + "optional": true + }, + { + "name": "channels", + "type": "str", + "description": "Channels associated with the news.", + "default": null, + "optional": true + }, + { + "name": "stocks", + "type": "str", + "description": "Stocks associated with the news.", + "default": null, + "optional": true + }, + { + "name": "tags", + "type": "str", + "description": "Tags associated with the news.", + "default": null, + "optional": true + }, + { + "name": "updated", + "type": "datetime", + "description": "Updated date of the news.", + "default": null, + "optional": true + } + ], + "fmp": [ + { + "name": "source", + "type": "str", + "description": "Name of the news source.", + "default": "", + "optional": false + } + ], + "intrinio": [ + { + "name": "id", + "type": "str", + "description": "Article ID.", + "default": "", + "optional": false + } + ], + "polygon": [ + { + "name": "source", + "type": "str", + "description": "Source of the article.", + "default": null, + "optional": true + }, + { + "name": "tags", + "type": "str", + "description": "Keywords/tags in the article", + "default": null, + "optional": true + }, + { + "name": "id", + "type": "str", + "description": "Article ID.", + "default": "", + "optional": false + }, + { + "name": "amp_url", + "type": "str", + "description": "AMP URL.", + "default": null, + "optional": true + }, + { + "name": "publisher", + "type": "PolygonPublisher", + "description": "Publisher of the article.", + "default": "", + "optional": false + } + ], + "tiingo": [ + { + "name": "tags", + "type": "str", + "description": "Tags associated with the news article.", + "default": null, + "optional": true + }, + { + "name": "article_id", + "type": "int", + "description": "Unique ID of the news article.", + "default": "", + "optional": false + }, + { + "name": "source", + "type": "str", + "description": "News source.", + "default": "", + "optional": false + }, + { + "name": "crawl_date", + "type": "datetime", + "description": "Date the news article was crawled.", + "default": "", + "optional": false + } + ], + "yfinance": [ + { + "name": "source", + "type": "str", + "description": "Source of the news article", + "default": "", + "optional": false + } + ] + }, + "model": "CompanyNews" + }, + "/regulators/sec/cik_map": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Map a ticker symbol to a CIK number.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.cik_map(symbol='MSFT', provider='sec')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": "", + "optional": false + }, + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[CikMap]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "cik", + "type": "Union[int, str]", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true + } + ], + "sec": [] + }, + "model": "CikMap" + }, + "/regulators/sec/institutions_search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search SEC-regulated institutions by name and return a list of results with CIK numbers.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.institutions_search(provider='sec')\nobb.regulators.sec.institutions_search(query='blackstone real estate', provider='sec')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Search query.", + "default": "", + "optional": true + }, + { + "name": "use_cache", + "type": "bool", + "description": "Whether or not to use cache. If True, cache will store for seven days.", + "default": true, + "optional": true + }, + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[InstitutionsSearch]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [], + "sec": [ + { + "name": "name", + "type": "str", + "description": "The name of the institution.", + "default": null, + "optional": true + }, + { + "name": "cik", + "type": "Union[int, str]", + "description": "Central Index Key (CIK)", + "default": null, + "optional": true + } + ] + }, + "model": "InstitutionsSearch" + }, + "/regulators/sec/schema_files": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Use tool for navigating the directory of SEC XML schema files by year.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.schema_files(provider='sec')\n# Get a list of schema files.\ndata = obb.regulators.sec.schema_files().results\ndata.files[0]\n'https://xbrl.fasb.org/us-gaap/'\n# The directory structure can be navigated by constructing a URL from the 'results' list.\nurl = data.files[0]+data.files[-1]\n# The URL base will always be the 0 position in the list, feed the URL back in as a parameter.\nobb.regulators.sec.schema_files(url=url).results.files\n['https://xbrl.fasb.org/us-gaap/2024/'\n'USGAAP2024FileList.xml'\n'dis/'\n'dqcrules/'\n'ebp/'\n'elts/'\n'entire/'\n'meta/'\n'stm/'\n'us-gaap-2024.zip']\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Search query.", + "default": "", + "optional": true + }, + { + "name": "use_cache", + "type": "bool", + "description": "Whether or not to use cache. If True, cache will store for seven days.", + "default": true, + "optional": true + }, + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [ + { + "name": "url", + "type": "str", + "description": "Enter an optional URL path to fetch the next level.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SchemaFiles]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [], + "sec": [ + { + "name": "files", + "type": "List[str]", + "description": "Dictionary of URLs to SEC Schema Files", + "default": "", + "optional": false + } + ] + }, + "model": "SchemaFiles" + }, + "/regulators/sec/symbol_map": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Map a CIK number to a ticker symbol, leading 0s can be omitted or included.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.symbol_map(query='0000789019', provider='sec')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Search query.", + "default": "", + "optional": false + }, + { + "name": "use_cache", + "type": "bool", + "description": "Whether or not to use cache. If True, cache will store for seven days.", + "default": true, + "optional": true + }, + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SymbolMap]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [], + "sec": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": "", + "optional": false + } + ] + }, + "model": "SymbolMap" + }, + "/regulators/sec/rss_litigation": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the RSS feed that provides links to litigation releases concerning civil lawsuits brought by the Commission in federal court.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.rss_litigation(provider='sec')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[RssLitigation]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [], + "sec": [ + { + "name": "published", + "type": "datetime", + "description": "The date of publication.", + "default": "", + "optional": false + }, + { + "name": "title", + "type": "str", + "description": "The title of the release.", + "default": "", + "optional": false + }, + { + "name": "summary", + "type": "str", + "description": "Short summary of the release.", + "default": "", + "optional": false + }, + { + "name": "id", + "type": "str", + "description": "The identifier associated with the release.", + "default": "", + "optional": false + }, + { + "name": "link", + "type": "str", + "description": "URL to the release.", + "default": "", + "optional": false + } + ] + }, + "model": "RssLitigation" + }, + "/regulators/sec/sic_search": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Search for Industry Titles, Reporting Office, and SIC Codes. An empty query string returns all results.", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.sic_search(provider='sec')\nobb.regulators.sec.sic_search(query='real estate investment trusts', provider='sec')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "query", + "type": "str", + "description": "Search query.", + "default": "", + "optional": true + }, + { + "name": "use_cache", + "type": "bool", + "description": "Whether or not to use cache. If True, cache will store for seven days.", + "default": true, + "optional": true + }, + { + "name": "provider", + "type": "Literal['sec']", + "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", + "default": "sec", + "optional": true + } + ], + "sec": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "List[SicSearch]", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Optional[Literal['sec']]", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[List[Warning_]]", + "description": "List of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "Dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [], + "sec": [ + { + "name": "sic", + "type": "int", + "description": "Sector Industrial Code (SIC)", + "default": "", + "optional": false + }, + { + "name": "industry", + "type": "str", + "description": "Industry title.", + "default": "", + "optional": false + }, + { + "name": "office", + "type": "str", + "description": "Reporting office within the Corporate Finance Office", + "default": "", + "optional": false + } + ] + }, + "model": "SicSearch" + } }, - "/regulators/sec/symbol_map": { - "deprecated": { - "flag": null, - "message": null + "routers": { + "/crypto": { + "description": "Cryptocurrency market data." }, - "description": "Map a CIK number to a ticker symbol, leading 0s can be omitted or included.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.symbol_map(query='0000789019', provider='sec')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Search query.", - "default": "", - "optional": false - }, - { - "name": "use_cache", - "type": "bool", - "description": "Whether or not to use cache. If True, cache will store for seven days.", - "default": true, - "optional": true - }, - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [] - }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SymbolMap]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] - }, - "data": { - "standard": [], - "sec": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol representing the entity requested in the data.", - "default": "", - "optional": false - } - ] - }, - "model": "SymbolMap" - }, - "/regulators/sec/rss_litigation": { - "deprecated": { - "flag": null, - "message": null + "/currency": { + "description": "Foreign exchange (FX) market data." }, - "description": "The RSS feed provides links to litigation releases concerning civil lawsuits brought by the Commission in federal court.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.rss_litigation(provider='sec')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [] + "/derivatives": { + "description": "Derivatives market data." }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[RssLitigation]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] + "/economy": { + "description": "Economic data." }, - "data": { - "standard": [], - "sec": [ - { - "name": "published", - "type": "datetime", - "description": "The date of publication.", - "default": "", - "optional": false - }, - { - "name": "title", - "type": "str", - "description": "The title of the release.", - "default": "", - "optional": false - }, - { - "name": "summary", - "type": "str", - "description": "Short summary of the release.", - "default": "", - "optional": false - }, - { - "name": "id", - "type": "str", - "description": "The identifier associated with the release.", - "default": "", - "optional": false - }, - { - "name": "link", - "type": "str", - "description": "URL to the release.", - "default": "", - "optional": false - } - ] + "/equity": { + "description": "Equity market data." }, - "model": "RssLitigation" - }, - "/regulators/sec/sic_search": { - "deprecated": { - "flag": null, - "message": null + "/etf": { + "description": "Exchange Traded Funds market data." }, - "description": "Search for Industry Titles, Reporting Office, and SIC Codes. An empty query string returns all results.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.regulators.sec.sic_search(provider='sec')\nobb.regulators.sec.sic_search(query='real estate investment trusts', provider='sec')\n```\n\n", - "parameters": { - "standard": [ - { - "name": "query", - "type": "str", - "description": "Search query.", - "default": "", - "optional": true - }, - { - "name": "use_cache", - "type": "bool", - "description": "Whether or not to use cache. If True, cache will store for seven days.", - "default": true, - "optional": true - }, - { - "name": "provider", - "type": "Literal['sec']", - "description": "The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'sec' if there is no default.", - "default": "sec", - "optional": true - } - ], - "sec": [] + "/fixedincome": { + "description": "Fixed Income market data." }, - "returns": { - "OBBject": [ - { - "name": "results", - "type": "List[SicSearch]", - "description": "Serializable results." - }, - { - "name": "provider", - "type": "Optional[Literal['sec']]", - "description": "Provider name." - }, - { - "name": "warnings", - "type": "Optional[List[Warning_]]", - "description": "List of warnings." - }, - { - "name": "chart", - "type": "Optional[Chart]", - "description": "Chart object." - }, - { - "name": "extra", - "type": "Dict[str, Any]", - "description": "Extra info." - } - ] + "/index": { + "description": "Indices data." }, - "data": { - "standard": [], - "sec": [ - { - "name": "sic", - "type": "int", - "description": "Sector Industrial Code (SIC)", - "default": "", - "optional": false - }, - { - "name": "industry", - "type": "str", - "description": "Industry title.", - "default": "", - "optional": false - }, - { - "name": "office", - "type": "str", - "description": "Reporting office within the Corporate Finance Office", - "default": "", - "optional": false - } - ] + "/news": { + "description": "Financial market news data." }, - "model": "SicSearch" + "/regulators": { + "description": "Financial market regulators data." + } } } \ No newline at end of file diff --git a/openbb_platform/openbb/package/__extensions__.py b/openbb_platform/openbb/package/__extensions__.py index 4bca6a0d00d..a2300745866 100644 --- a/openbb_platform/openbb/package/__extensions__.py +++ b/openbb_platform/openbb/package/__extensions__.py @@ -20,29 +20,29 @@ Routers: /regulators Extensions: - - commodity@1.0.2 - - crypto@1.1.4 - - currency@1.1.4 - - derivatives@1.1.4 - - economy@1.1.4 - - equity@1.1.4 - - etf@1.1.4 - - fixedincome@1.1.4 - - index@1.1.4 - - news@1.1.4 - - regulators@1.1.4 + - commodity@1.0.4 + - crypto@1.1.5 + - currency@1.1.5 + - derivatives@1.1.5 + - economy@1.1.5 + - equity@1.1.5 + - etf@1.1.5 + - fixedincome@1.1.5 + - index@1.1.5 + - news@1.1.5 + - regulators@1.1.5 - - benzinga@1.1.4 - - federal_reserve@1.1.4 - - fmp@1.1.4 - - fred@1.1.4 - - intrinio@1.1.4 - - oecd@1.1.4 - - polygon@1.1.4 - - sec@1.1.4 - - tiingo@1.1.4 - - tradingeconomics@1.1.4 - - yfinance@1.1.4 """ + - benzinga@1.1.5 + - federal_reserve@1.1.5 + - fmp@1.1.5 + - fred@1.1.5 + - intrinio@1.1.5 + - oecd@1.1.5 + - polygon@1.1.5 + - sec@1.1.5 + - tiingo@1.1.5 + - tradingeconomics@1.1.5 + - yfinance@1.1.5 """ # fmt: on def __repr__(self) -> str: diff --git a/openbb_platform/openbb/package/crypto.py b/openbb_platform/openbb/package/crypto.py index 7fe45375b17..246dbc86584 100644 --- a/openbb_platform/openbb/package/crypto.py +++ b/openbb_platform/openbb/package/crypto.py @@ -2,7 +2,7 @@ from typing import Literal, Optional -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -31,11 +31,11 @@ class ROUTER_crypto(Container): def search( self, query: Annotated[ - Optional[str], OpenBBCustomParameter(description="Search query.") + Optional[str], OpenBBField(description="Search query.") ] = None, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/crypto_price.py b/openbb_platform/openbb/package/crypto_price.py index 16cfc3fd056..7c3bedbb362 100644 --- a/openbb_platform/openbb/package/crypto_price.py +++ b/openbb_platform/openbb/package/crypto_price.py @@ -3,7 +3,7 @@ import datetime from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -25,25 +25,21 @@ class ROUTER_crypto_price(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon, tiingo, yfinance." ), ], start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp", "polygon", "tiingo", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/currency.py b/openbb_platform/openbb/package/currency.py index 770dba593b8..e27529d8c14 100644 --- a/openbb_platform/openbb/package/currency.py +++ b/openbb_platform/openbb/package/currency.py @@ -2,7 +2,7 @@ from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -33,7 +33,7 @@ class ROUTER_currency(Container): self, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -153,25 +153,25 @@ class ROUTER_currency(Container): self, base: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="The base currency symbol. Multiple comma separated items allowed for provider(s): fmp." ), ] = "usd", quote_type: Annotated[ Literal["direct", "indirect"], - OpenBBCustomParameter( + OpenBBField( description="Whether the quote is direct or indirect. Selecting 'direct' will return the exchange rate as the amount of domestic currency required to buy one unit of the foreign currency. Selecting 'indirect' (default) will return the exchange rate as the amount of foreign currency required to buy one unit of the domestic currency." ), ] = "indirect", counter_currencies: Annotated[ Union[List[str], str, None], - OpenBBCustomParameter( + OpenBBField( description="An optional list of counter currency symbols to filter for. None returns all." ), ] = None, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/currency_price.py b/openbb_platform/openbb/package/currency_price.py index 5def1fa4952..396977d0443 100644 --- a/openbb_platform/openbb/package/currency_price.py +++ b/openbb_platform/openbb/package/currency_price.py @@ -3,7 +3,7 @@ import datetime from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -25,25 +25,21 @@ class ROUTER_currency_price(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon, tiingo, yfinance." ), ], start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp", "polygon", "tiingo", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/derivatives_options.py b/openbb_platform/openbb/package/derivatives_options.py index 99a5e45a156..4e95763ec5f 100644 --- a/openbb_platform/openbb/package/derivatives_options.py +++ b/openbb_platform/openbb/package/derivatives_options.py @@ -2,7 +2,7 @@ from typing import Literal, Optional -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -23,12 +23,10 @@ class ROUTER_derivatives_options(Container): @validate def chains( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, @@ -183,13 +181,11 @@ class ROUTER_derivatives_options(Container): self, symbol: Annotated[ Optional[str], - OpenBBCustomParameter( - description="Symbol to get data for. (the underlying symbol)" - ), + OpenBBField(description="Symbol to get data for. (the underlying symbol)"), ] = None, provider: Annotated[ Optional[Literal["intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/economy.py b/openbb_platform/openbb/package/economy.py index b7fbc25648a..c687d8a100b 100644 --- a/openbb_platform/openbb/package/economy.py +++ b/openbb_platform/openbb/package/economy.py @@ -3,10 +3,7 @@ import datetime from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import ( - OpenBBCustomChoices, - OpenBBCustomParameter, -) +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -39,19 +36,15 @@ class ROUTER_economy(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp", "tradingeconomics"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -162,26 +155,25 @@ class ROUTER_economy(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["oecd"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'oecd' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """The composite leading indicator (CLI) is designed to provide early signals of turning points + """Use the composite leading indicator (CLI). + + It is designed to provide early signals of turning points in business cycles showing fluctuation of the economic activity around its long term potential level. + CLIs show short-term economic movements in qualitative rather than quantitative terms. @@ -252,10 +244,8 @@ class ROUTER_economy(Container): self, country: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( - description="The country to get data. Multiple comma separated items allowed for provider(s): fred." - ), - OpenBBCustomChoices( + OpenBBField( + description="The country to get data. Multiple comma separated items allowed for provider(s): fred.", choices=[ "australia", "austria", @@ -306,48 +296,44 @@ class ROUTER_economy(Container): "turkey", "united_kingdom", "united_states", - ] + ], ), ], units: Annotated[ Literal["growth_previous", "growth_same", "index_2015"], - OpenBBCustomParameter( + OpenBBField( description="The unit of measurement for the data.\n Options:\n - `growth_previous`: Percent growth from the previous period.\n If monthly data, this is month-over-month, etc\n - `growth_same`: Percent growth from the same period in the previous year.\n If looking at monthly data, this would be year-over-year, etc.\n - `index_2015`: Rescaled index value, such that the value in 2015 is 100." ), ] = "growth_same", frequency: Annotated[ Literal["monthly", "quarter", "annual"], - OpenBBCustomParameter( + OpenBBField( description="The frequency of the data.\n Options: `monthly`, `quarter`, and `annual`." ), ] = "monthly", harmonized: Annotated[ - bool, - OpenBBCustomParameter( - description="Whether you wish to obtain harmonized data." - ), + bool, OpenBBField(description="Whether you wish to obtain harmonized data.") ] = False, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Consumer Price Index (CPI). Returns either the rescaled index value, or a rate of change (inflation). + """Get Consumer Price Index (CPI). + + Returns either the rescaled index value, or a rate of change (inflation). + Parameters ---------- @@ -429,34 +415,29 @@ class ROUTER_economy(Container): @validate def fred_regional( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, limit: Annotated[ Optional[int], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 100000, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: """Query the Geo Fred API for regional economic data by series group. + The series group ID is found by using `fred_search` and the `series_id` parameter. @@ -585,17 +566,18 @@ class ROUTER_economy(Container): def fred_search( self, query: Annotated[ - Optional[str], OpenBBCustomParameter(description="The search word(s).") + Optional[str], OpenBBField(description="The search word(s).") ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: """Search for FRED series or economic releases by ID or string. + This does not return the observation values, only the metadata. Use this function to find series IDs for `fred_series()`. @@ -713,29 +695,25 @@ class ROUTER_economy(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fred." ), ], start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, limit: Annotated[ Optional[int], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 100000, provider: Annotated[ Optional[Literal["fred", "intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -867,25 +845,22 @@ class ROUTER_economy(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["oecd"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'oecd' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Long-term interest rates refer to government bonds maturing in ten years. + """Get Long-term interest rates that refer to government bonds maturing in ten years. + Rates are mainly determined by the price charged by the lender, the risk from the borrower and the fall in the capital value. Long-term interest rates are generally averages of daily rates, measured as a percentage. These interest rates are implied by the prices at which the government bonds are @@ -895,6 +870,7 @@ class ROUTER_economy(Container): Low long-term interest rates encourage investment in new equipment and high interest rates discourage it. Investment is, in turn, a major source of economic growth. + Parameters ---------- start_date : Union[datetime.date, None, str] @@ -964,31 +940,28 @@ class ROUTER_economy(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, adjusted: Annotated[ Optional[bool], - OpenBBCustomParameter( - description="Whether to return seasonally adjusted data." - ), + OpenBBField(description="Whether to return seasonally adjusted data."), ] = True, provider: Annotated[ Optional[Literal["federal_reserve"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'federal_reserve' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Money Measures (M1/M2 and components). The Federal Reserve publishes as part of the H.6 Release. + """Get Money Measures (M1/M2 and components). + + The Federal Reserve publishes as part of the H.6 Release. + Parameters ---------- @@ -1068,13 +1041,13 @@ class ROUTER_economy(Container): self, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Market Risk Premium by country. + """Get Market Risk Premium by country. Parameters ---------- @@ -1135,26 +1108,25 @@ class ROUTER_economy(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["oecd"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'oecd' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Short-term interest rates are the rates at which short-term borrowings are effected between + """Get Short-term interest rates. + + They are the rates at which short-term borrowings are effected between financial institutions or the rate at which short-term government paper is issued or traded in the market. + Short-term interest rates are generally averages of daily rates, measured as a percentage. Short-term interest rates are based on three-month money market rates where available. Typical standardised names are "money market rate" and "treasury bill rate". @@ -1229,25 +1201,21 @@ class ROUTER_economy(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["oecd"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'oecd' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Global unemployment data. + """Get global unemployment data. Parameters ---------- diff --git a/openbb_platform/openbb/package/economy_gdp.py b/openbb_platform/openbb/package/economy_gdp.py index d4a4bb05a85..3f26966bffb 100644 --- a/openbb_platform/openbb/package/economy_gdp.py +++ b/openbb_platform/openbb/package/economy_gdp.py @@ -3,7 +3,7 @@ import datetime from typing import Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -27,37 +27,33 @@ class ROUTER_economy_gdp(Container): self, period: Annotated[ Literal["quarter", "annual"], - OpenBBCustomParameter( + OpenBBField( description="Time period of the data to return. Units for nominal GDP period. Either quarter or annual." ), ] = "annual", start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, type: Annotated[ Literal["nominal", "real"], - OpenBBCustomParameter( + OpenBBField( description="Type of GDP to get forecast of. Either nominal or real." ), ] = "real", provider: Annotated[ Optional[Literal["oecd"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'oecd' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Forecasted GDP Data. + """Get Forecasted GDP Data. Parameters ---------- @@ -130,31 +126,27 @@ class ROUTER_economy_gdp(Container): self, units: Annotated[ Literal["usd", "usd_cap"], - OpenBBCustomParameter( + OpenBBField( description="The unit of measurement for the data. Units to get nominal GDP in. Either usd or usd_cap indicating per capita." ), ] = "usd", start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["oecd"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'oecd' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Nominal GDP Data. + """Get Nominal GDP Data. Parameters ---------- @@ -224,31 +216,27 @@ class ROUTER_economy_gdp(Container): self, units: Annotated[ Literal["idx", "qoq", "yoy"], - OpenBBCustomParameter( + OpenBBField( description="The unit of measurement for the data. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)" ), ] = "yoy", start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["oecd"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'oecd' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Real GDP Data. + """Get Real GDP Data. Parameters ---------- diff --git a/openbb_platform/openbb/package/equity.py b/openbb_platform/openbb/package/equity.py index a984281621c..a044ac60f54 100644 --- a/openbb_platform/openbb/package/equity.py +++ b/openbb_platform/openbb/package/equity.py @@ -2,7 +2,7 @@ from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -78,7 +78,7 @@ class ROUTER_equity(Container): self, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -253,13 +253,13 @@ class ROUTER_equity(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, yfinance." ), ], provider: Annotated[ Optional[Literal["fmp", "intrinio", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -448,14 +448,16 @@ class ROUTER_equity(Container): self, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Screen for companies meeting various criteria. These criteria include - market cap, price, beta, volume, and dividend yield. + """Screen for companies meeting various criteria. + + These criteria include market cap, price, beta, volume, and dividend yield. + Parameters ---------- @@ -568,18 +570,16 @@ class ROUTER_equity(Container): @validate def search( self, - query: Annotated[str, OpenBBCustomParameter(description="Search query.")] = "", + query: Annotated[str, OpenBBField(description="Search query.")] = "", is_symbol: Annotated[ - bool, - OpenBBCustomParameter(description="Whether to search by ticker symbol."), + bool, OpenBBField(description="Whether to search by ticker symbol.") ] = False, use_cache: Annotated[ - Optional[bool], - OpenBBCustomParameter(description="Whether to use the cache or not."), + Optional[bool], OpenBBField(description="Whether to use the cache or not.") ] = True, provider: Annotated[ Optional[Literal["intrinio", "sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/equity_calendar.py b/openbb_platform/openbb/package/equity_calendar.py index 927f6a74e99..891ac9995f0 100644 --- a/openbb_platform/openbb/package/equity_calendar.py +++ b/openbb_platform/openbb/package/equity_calendar.py @@ -3,7 +3,7 @@ import datetime from typing import Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -28,19 +28,15 @@ class ROUTER_equity_calendar(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -124,19 +120,15 @@ class ROUTER_equity_calendar(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -225,27 +217,23 @@ class ROUTER_equity_calendar(Container): def ipo( self, symbol: Annotated[ - Optional[str], OpenBBCustomParameter(description="Symbol to get data for.") + Optional[str], OpenBBField(description="Symbol to get data for.") ] = None, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, limit: Annotated[ Optional[int], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 100, provider: Annotated[ Optional[Literal["intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, @@ -369,19 +357,15 @@ class ROUTER_equity_calendar(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/equity_compare.py b/openbb_platform/openbb/package/equity_compare.py index 704c2328a1e..6daed76b856 100644 --- a/openbb_platform/openbb/package/equity_compare.py +++ b/openbb_platform/openbb/package/equity_compare.py @@ -2,7 +2,7 @@ from typing import Literal, Optional -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -22,12 +22,10 @@ class ROUTER_equity_compare(Container): @validate def peers( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -38,6 +36,7 @@ class ROUTER_equity_compare(Container): Peers consist of companies trading on the same exchange, operating within the same sector and with comparable market capitalizations. + Parameters ---------- symbol : str diff --git a/openbb_platform/openbb/package/equity_discovery.py b/openbb_platform/openbb/package/equity_discovery.py index 12df47ef903..770a2ce6dae 100644 --- a/openbb_platform/openbb/package/equity_discovery.py +++ b/openbb_platform/openbb/package/equity_discovery.py @@ -3,7 +3,7 @@ import datetime from typing import Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -32,13 +32,13 @@ class ROUTER_equity_discovery(Container): self, sort: Annotated[ Literal["asc", "desc"], - OpenBBCustomParameter( + OpenBBField( description="Sort order. Possible values: 'asc', 'desc'. Default: 'desc'." ), ] = "desc", provider: Annotated[ Optional[Literal["yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'yfinance' if there is\n no default." ), ] = None, @@ -120,13 +120,13 @@ class ROUTER_equity_discovery(Container): self, sort: Annotated[ Literal["asc", "desc"], - OpenBBCustomParameter( + OpenBBField( description="Sort order. Possible values: 'asc', 'desc'. Default: 'desc'." ), ] = "desc", provider: Annotated[ Optional[Literal["yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'yfinance' if there is\n no default." ), ] = None, @@ -208,36 +208,32 @@ class ROUTER_equity_discovery(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, form_type: Annotated[ Optional[str], - OpenBBCustomParameter( + OpenBBField( description="Filter by form type. Visit https://www.sec.gov/forms for a list of supported form types." ), ] = None, limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 100, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more. SEC - filings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114, + """Get the URLs to SEC filings reported to EDGAR database, such as 10-K, 10-Q, 8-K, and more. + + SEC filings include Form 10-K, Form 10-Q, Form 8-K, the proxy statement, Forms 3, 4, and 5, Schedule 13, Form 114, Foreign Investment Disclosures and others. The annual 10-K report is required to be filed annually and includes the company's financial statements, management discussion and analysis, and audited financial statements. @@ -323,13 +319,13 @@ class ROUTER_equity_discovery(Container): self, sort: Annotated[ Literal["asc", "desc"], - OpenBBCustomParameter( + OpenBBField( description="Sort order. Possible values: 'asc', 'desc'. Default: 'desc'." ), ] = "desc", provider: Annotated[ Optional[Literal["yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'yfinance' if there is\n no default." ), ] = None, @@ -411,13 +407,13 @@ class ROUTER_equity_discovery(Container): self, sort: Annotated[ Literal["asc", "desc"], - OpenBBCustomParameter( + OpenBBField( description="Sort order. Possible values: 'asc', 'desc'. Default: 'desc'." ), ] = "desc", provider: Annotated[ Optional[Literal["yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'yfinance' if there is\n no default." ), ] = None, @@ -499,13 +495,13 @@ class ROUTER_equity_discovery(Container): self, sort: Annotated[ Literal["asc", "desc"], - OpenBBCustomParameter( + OpenBBField( description="Sort order. Possible values: 'asc', 'desc'. Default: 'desc'." ), ] = "desc", provider: Annotated[ Optional[Literal["yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'yfinance' if there is\n no default." ), ] = None, @@ -587,13 +583,13 @@ class ROUTER_equity_discovery(Container): self, sort: Annotated[ Literal["asc", "desc"], - OpenBBCustomParameter( + OpenBBField( description="Sort order. Possible values: 'asc', 'desc'. Default: 'desc'." ), ] = "desc", provider: Annotated[ Optional[Literal["yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'yfinance' if there is\n no default." ), ] = None, @@ -675,13 +671,13 @@ class ROUTER_equity_discovery(Container): self, sort: Annotated[ Literal["asc", "desc"], - OpenBBCustomParameter( + OpenBBField( description="Sort order. Possible values: 'asc', 'desc'. Default: 'desc'." ), ] = "desc", provider: Annotated[ Optional[Literal["yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'yfinance' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/equity_estimates.py b/openbb_platform/openbb/package/equity_estimates.py index 6a5ef3fa944..36212035e8b 100644 --- a/openbb_platform/openbb/package/equity_estimates.py +++ b/openbb_platform/openbb/package/equity_estimates.py @@ -2,7 +2,7 @@ from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -14,6 +14,8 @@ class ROUTER_equity_estimates(Container): """/equity/estimates analyst_search consensus + forward_eps + forward_sales historical price_target """ @@ -27,19 +29,19 @@ class ROUTER_equity_estimates(Container): self, analyst_name: Annotated[ Union[str, None, List[Optional[str]]], - OpenBBCustomParameter( + OpenBBField( description="Analyst names to return. Omitting will return all available analysts. Multiple comma separated items allowed for provider(s): benzinga." ), ] = None, firm_name: Annotated[ Union[str, None, List[Optional[str]]], - OpenBBCustomParameter( + OpenBBField( description="Firm names to return. Omitting will return all available firms. Multiple comma separated items allowed for provider(s): benzinga." ), ] = None, provider: Annotated[ Optional[Literal["benzinga"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'benzinga' if there is\n no default." ), ] = None, @@ -124,6 +126,10 @@ class ROUTER_equity_estimates(Container): The average percent (normalized) price difference per rating over the last month (provider: benzinga) std_dev_1m : Optional[float] The standard deviation in percent (normalized) price difference in the analyst's ratings over the last month (provider: benzinga) + smart_score_1m : Optional[float] + A weighted average smart score over the last month. (provider: benzinga) + success_rate_1m : Optional[float] + The percentage (normalized) of gain/loss ratings that resulted in a gain over the last month (provider: benzinga) gain_count_3m : Optional[int] The number of ratings that have gained value over the last 3 months (provider: benzinga) loss_count_3m : Optional[int] @@ -132,6 +138,10 @@ class ROUTER_equity_estimates(Container): The average percent (normalized) price difference per rating over the last 3 months (provider: benzinga) std_dev_3m : Optional[float] The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 months (provider: benzinga) + smart_score_3m : Optional[float] + A weighted average smart score over the last 3 months. (provider: benzinga) + success_rate_3m : Optional[float] + The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 3 months (provider: benzinga) gain_count_6m : Optional[int] The number of ratings that have gained value over the last 6 months (provider: benzinga) loss_count_6m : Optional[int] @@ -148,6 +158,10 @@ class ROUTER_equity_estimates(Container): The average percent (normalized) price difference per rating over the last 9 months (provider: benzinga) std_dev_9m : Optional[float] The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 9 months (provider: benzinga) + smart_score_9m : Optional[float] + A weighted average smart score over the last 9 months. (provider: benzinga) + success_rate_9m : Optional[float] + The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 9 months (provider: benzinga) gain_count_1y : Optional[int] The number of ratings that have gained value over the last 1 year (provider: benzinga) loss_count_1y : Optional[int] @@ -156,6 +170,10 @@ class ROUTER_equity_estimates(Container): The average percent (normalized) price difference per rating over the last 1 year (provider: benzinga) std_dev_1y : Optional[float] The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 1 year (provider: benzinga) + smart_score_1y : Optional[float] + A weighted average smart score over the last 1 year. (provider: benzinga) + success_rate_1y : Optional[float] + The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 1 year (provider: benzinga) gain_count_2y : Optional[int] The number of ratings that have gained value over the last 2 years (provider: benzinga) loss_count_2y : Optional[int] @@ -164,6 +182,10 @@ class ROUTER_equity_estimates(Container): The average percent (normalized) price difference per rating over the last 2 years (provider: benzinga) std_dev_2y : Optional[float] The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 2 years (provider: benzinga) + smart_score_2y : Optional[float] + A weighted average smart score over the last 3 years. (provider: benzinga) + success_rate_2y : Optional[float] + The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 2 years (provider: benzinga) gain_count_3y : Optional[int] The number of ratings that have gained value over the last 3 years (provider: benzinga) loss_count_3y : Optional[int] @@ -172,6 +194,10 @@ class ROUTER_equity_estimates(Container): The average percent (normalized) price difference per rating over the last 3 years (provider: benzinga) std_dev_3y : Optional[float] The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 years (provider: benzinga) + smart_score_3y : Optional[float] + A weighted average smart score over the last 3 years. (provider: benzinga) + success_rate_3y : Optional[float] + The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 3 years (provider: benzinga) Examples -------- @@ -210,14 +236,14 @@ class ROUTER_equity_estimates(Container): def consensus( self, symbol: Annotated[ - Union[str, List[str]], - OpenBBCustomParameter( - description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, yfinance." + Union[str, None, List[Optional[str]]], + OpenBBField( + description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, yfinance." ), - ], + ] = None, provider: Annotated[ - Optional[Literal["fmp", "yfinance"]], - OpenBBCustomParameter( + Optional[Literal["fmp", "intrinio", "yfinance"]], + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -227,19 +253,21 @@ class ROUTER_equity_estimates(Container): Parameters ---------- - symbol : Union[str, List[str]] - Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, yfinance. - provider : Optional[Literal['fmp', 'yfinance']] + symbol : Union[str, None, List[Optional[str]]] + Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, yfinance. + provider : Optional[Literal['fmp', 'intrinio', 'yfinance']] The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default. + industry_group_number : Optional[int] + The Zacks industry group number. (provider: intrinio) Returns ------- OBBject results : List[PriceTargetConsensus] Serializable results. - provider : Optional[Literal['fmp', 'yfinance']] + provider : Optional[Literal['fmp', 'intrinio', 'yfinance']] Provider name. warnings : Optional[List[Warning_]] List of warnings. @@ -252,6 +280,8 @@ class ROUTER_equity_estimates(Container): -------------------- symbol : str Symbol representing the entity requested in the data. + name : Optional[str] + The company name target_high : Optional[float] High target of the price target consensus. target_low : Optional[float] @@ -260,6 +290,18 @@ class ROUTER_equity_estimates(Container): Consensus target of the price target consensus. target_median : Optional[float] Median target of the price target consensus. + standard_deviation : Optional[float] + The standard deviation of target price estimates. (provider: intrinio) + total_anaylsts : Optional[int] + The total number of target price estimates in consensus. (provider: intrinio) + raised : Optional[int] + The number of analysts that have raised their target price estimates. (provider: intrinio) + lowered : Optional[int] + The number of analysts that have lowered their target price estimates. (provider: intrinio) + most_recent_date : Optional[date] + The date of the most recent estimate. (provider: intrinio) + industry_group_number : Optional[int] + The Zacks industry group number. (provider: intrinio) recommendation : Optional[str] Recommendation - buy, sell, etc. (provider: yfinance) recommendation_mean : Optional[float] @@ -285,14 +327,260 @@ class ROUTER_equity_estimates(Container): "provider": self._get_provider( provider, "/equity/estimates/consensus", - ("fmp", "yfinance"), + ("fmp", "intrinio", "yfinance"), ) }, standard_params={ "symbol": symbol, }, extra_params=kwargs, - info={"symbol": {"multiple_items_allowed": ["fmp", "yfinance"]}}, + info={ + "symbol": { + "multiple_items_allowed": ["fmp", "intrinio", "yfinance"] + } + }, + ) + ) + + @exception_handler + @validate + def forward_eps( + self, + symbol: Annotated[ + Union[str, None, List[Optional[str]]], + OpenBBField( + description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio." + ), + ] = None, + provider: Annotated[ + Optional[Literal["fmp", "intrinio"]], + OpenBBField( + description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." + ), + ] = None, + **kwargs + ) -> OBBject: + """Get forward EPS estimates. + + Parameters + ---------- + symbol : Union[str, None, List[Optional[str]]] + Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio. + provider : Optional[Literal['fmp', 'intrinio']] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + fiscal_period : Optional[Union[Literal['annual', 'quarter'], Literal['fy', 'q1', 'q2', 'q3', 'q4']]] + The future fiscal period to retrieve estimates for. (provider: fmp, intrinio) + limit : Optional[int] + The number of data entries to return. (provider: fmp) + include_historical : bool + If True, the data will include all past data and the limit will be ignored. (provider: fmp) + fiscal_year : Optional[int] + The future fiscal year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used. (provider: intrinio) + calendar_year : Optional[int] + The future calendar year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used. (provider: intrinio) + calendar_period : Optional[Literal['q1', 'q2', 'q3', 'q4']] + The future calendar period to retrieve estimates for. (provider: intrinio) + + Returns + ------- + OBBject + results : List[ForwardEpsEstimates] + Serializable results. + provider : Optional[Literal['fmp', 'intrinio']] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra : Dict[str, Any] + Extra info. + + ForwardEpsEstimates + ------------------- + symbol : str + Symbol representing the entity requested in the data. + name : Optional[str] + Name of the entity. + date : date + The date of the data. + fiscal_year : Optional[int] + Fiscal year for the estimate. + fiscal_period : Optional[str] + Fiscal quarter for the estimate. + calendar_year : Optional[int] + Calendar year for the estimate. + calendar_period : Optional[str] + Calendar quarter for the estimate. + low_estimate : Optional[float] + Estimated EPS low for the period. + high_estimate : Optional[float] + Estimated EPS high for the period. + mean : Optional[float] + Estimated EPS mean for the period. + median : Optional[float] + Estimated EPS median for the period. + standard_deviation : Optional[float] + Estimated EPS standard deviation for the period. + number_of_analysts : Optional[int] + Number of analysts providing estimates for the period. + revisions_change_percent : Optional[float] + The earnings per share (EPS) percent change in estimate for the period. (provider: intrinio) + mean_1w : Optional[float] + The mean estimate for the period one week ago. (provider: intrinio) + mean_1m : Optional[float] + The mean estimate for the period one month ago. (provider: intrinio) + mean_2m : Optional[float] + The mean estimate for the period two months ago. (provider: intrinio) + mean_3m : Optional[float] + The mean estimate for the period three months ago. (provider: intrinio) + + Examples + -------- + >>> from openbb import obb + >>> obb.equity.estimates.forward_eps(symbol='AAPL', provider='intrinio') + >>> obb.equity.estimates.forward_eps(fiscal_year=2025, fiscal_period='fy', provider='intrinio') + """ # noqa: E501 + + return self._run( + "/equity/estimates/forward_eps", + **filter_inputs( + provider_choices={ + "provider": self._get_provider( + provider, + "/equity/estimates/forward_eps", + ("fmp", "intrinio"), + ) + }, + standard_params={ + "symbol": symbol, + }, + extra_params=kwargs, + info={"symbol": {"multiple_items_allowed": ["fmp", "intrinio"]}}, + ) + ) + + @exception_handler + @validate + def forward_sales( + self, + symbol: Annotated[ + Union[str, None, List[Optional[str]]], + OpenBBField( + description="Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio." + ), + ] = None, + provider: Annotated[ + Optional[Literal["intrinio"]], + OpenBBField( + description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." + ), + ] = None, + **kwargs + ) -> OBBject: + """Get forward sales estimates. + + Parameters + ---------- + symbol : Union[str, None, List[Optional[str]]] + Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio. + provider : Optional[Literal['intrinio']] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'intrinio' if there is + no default. + fiscal_year : Optional[int] + The future fiscal year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used. (provider: intrinio) + fiscal_period : Optional[Literal['fy', 'q1', 'q2', 'q3', 'q4']] + The future fiscal period to retrieve estimates for. (provider: intrinio) + calendar_year : Optional[int] + The future calendar year to retrieve estimates for. When no symbol and year is supplied the current calendar year is used. (provider: intrinio) + calendar_period : Optional[Literal['q1', 'q2', 'q3', 'q4']] + The future calendar period to retrieve estimates for. (provider: intrinio) + + Returns + ------- + OBBject + results : List[ForwardSalesEstimates] + Serializable results. + provider : Optional[Literal['intrinio']] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra : Dict[str, Any] + Extra info. + + ForwardSalesEstimates + --------------------- + symbol : str + Symbol representing the entity requested in the data. + name : Optional[str] + Name of the entity. + date : date + The date of the data. + fiscal_year : Optional[int] + Fiscal year for the estimate. + fiscal_period : Optional[str] + Fiscal quarter for the estimate. + calendar_year : Optional[int] + Calendar year for the estimate. + calendar_period : Optional[str] + Calendar quarter for the estimate. + low_estimate : Optional[int] + The sales estimate low for the period. + high_estimate : Optional[int] + The sales estimate high for the period. + mean : Optional[int] + The sales estimate mean for the period. + median : Optional[int] + The sales estimate median for the period. + standard_deviation : Optional[int] + The sales estimate standard deviation for the period. + number_of_analysts : Optional[int] + Number of analysts providing estimates for the period. + revisions_1w_up : Optional[int] + Number of revisions up in the last week. (provider: intrinio) + revisions_1w_down : Optional[int] + Number of revisions down in the last week. (provider: intrinio) + revisions_1w_change_percent : Optional[float] + The analyst revisions percent change in estimate for the period of 1 week. (provider: intrinio) + revisions_1m_up : Optional[int] + Number of revisions up in the last month. (provider: intrinio) + revisions_1m_down : Optional[int] + Number of revisions down in the last month. (provider: intrinio) + revisions_1m_change_percent : Optional[float] + The analyst revisions percent change in estimate for the period of 1 month. (provider: intrinio) + revisions_3m_up : Optional[int] + Number of revisions up in the last 3 months. (provider: intrinio) + revisions_3m_down : Optional[int] + Number of revisions down in the last 3 months. (provider: intrinio) + revisions_3m_change_percent : Optional[float] + The analyst revisions percent change in estimate for the period of 3 months. (provider: intrinio) + + Examples + -------- + >>> from openbb import obb + >>> obb.equity.estimates.forward_sales(symbol='AAPL', provider='intrinio') + >>> obb.equity.estimates.forward_sales(fiscal_year=2025, fiscal_period='fy', provider='intrinio') + """ # noqa: E501 + + return self._run( + "/equity/estimates/forward_sales", + **filter_inputs( + provider_choices={ + "provider": self._get_provider( + provider, + "/equity/estimates/forward_sales", + ("intrinio",), + ) + }, + standard_params={ + "symbol": symbol, + }, + extra_params=kwargs, + info={"symbol": {"multiple_items_allowed": ["intrinio"]}}, ) ) @@ -302,13 +590,13 @@ class ROUTER_equity_estimates(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." ), ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -420,17 +708,16 @@ class ROUTER_equity_estimates(Container): self, symbol: Annotated[ Union[str, None, List[Optional[str]]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp." ), ] = None, limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 200, provider: Annotated[ Optional[Literal["benzinga", "fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'benzinga' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/equity_fundamental.py b/openbb_platform/openbb/package/equity_fundamental.py index 3cf436980fe..f7adce615f7 100644 --- a/openbb_platform/openbb/package/equity_fundamental.py +++ b/openbb_platform/openbb/package/equity_fundamental.py @@ -6,7 +6,7 @@ from warnings import simplefilter, warn from annotated_types import Ge from openbb_core.app.deprecation import OpenBBDeprecationWarning -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -50,19 +50,17 @@ class ROUTER_equity_fundamental(Container): @validate def balance( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], period: Annotated[ - str, OpenBBCustomParameter(description="Time period of the data to return.") + str, OpenBBField(description="Time period of the data to return.") ] = "annual", limit: Annotated[ Optional[Annotated[int, Ge(ge=0)]], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 5, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -412,16 +410,13 @@ class ROUTER_equity_fundamental(Container): @validate def balance_growth( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 10, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -570,19 +565,17 @@ class ROUTER_equity_fundamental(Container): @validate def cash( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], period: Annotated[ - str, OpenBBCustomParameter(description="Time period of the data to return.") + str, OpenBBField(description="Time period of the data to return.") ] = "annual", limit: Annotated[ Optional[Annotated[int, Ge(ge=0)]], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 5, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -840,16 +833,13 @@ class ROUTER_equity_fundamental(Container): @validate def cash_growth( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 10, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -980,24 +970,18 @@ class ROUTER_equity_fundamental(Container): @validate def dividends( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp", "intrinio", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1086,12 +1070,10 @@ class ROUTER_equity_fundamental(Container): @validate def employee_count( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1171,21 +1153,20 @@ class ROUTER_equity_fundamental(Container): def filings( self, symbol: Annotated[ - Optional[str], OpenBBCustomParameter(description="Symbol to get data for.") + Optional[str], OpenBBField(description="Symbol to get data for.") ] = None, form_type: Annotated[ Optional[str], - OpenBBCustomParameter( + OpenBBField( description="Filter by form type. Check the data provider for available types." ), ] = None, limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 100, provider: Annotated[ Optional[Literal["fmp", "intrinio", "sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1324,47 +1305,41 @@ class ROUTER_equity_fundamental(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio." ), ], tag: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio." ), ], start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, frequency: Annotated[ Optional[Literal["daily", "weekly", "monthly", "quarterly", "yearly"]], - OpenBBCustomParameter(description="The frequency of the data."), + OpenBBField(description="The frequency of the data."), ] = "yearly", limit: Annotated[ Optional[int], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 1000, tag_type: Annotated[ - Optional[str], - OpenBBCustomParameter(description="Filter by type, when applicable."), + Optional[str], OpenBBField(description="Filter by type, when applicable.") ] = None, sort: Annotated[ - Optional[Literal["asc", "desc"]], - OpenBBCustomParameter(description="Sort order."), + Optional[Literal["asc", "desc"]], OpenBBField(description="Sort order.") ] = "desc", provider: Annotated[ Optional[Literal["intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, @@ -1458,12 +1433,10 @@ class ROUTER_equity_fundamental(Container): @validate def historical_eps( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1546,12 +1519,10 @@ class ROUTER_equity_fundamental(Container): @validate def historical_splits( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1620,19 +1591,17 @@ class ROUTER_equity_fundamental(Container): @validate def income( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], period: Annotated[ - str, OpenBBCustomParameter(description="Time period of the data to return.") + str, OpenBBField(description="Time period of the data to return.") ] = "annual", limit: Annotated[ Optional[Annotated[int, Ge(ge=0)]], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 5, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1984,20 +1953,17 @@ class ROUTER_equity_fundamental(Container): @validate def income_growth( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 10, period: Annotated[ Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), + OpenBBField(description="Time period of the data to return."), ] = "annual", provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -2125,19 +2091,19 @@ class ROUTER_equity_fundamental(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio." ), ], tag: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio." ), ], provider: Annotated[ Optional[Literal["intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, @@ -2211,12 +2177,10 @@ class ROUTER_equity_fundamental(Container): @validate def management( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -2297,13 +2261,13 @@ class ROUTER_equity_fundamental(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." ), ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -2399,21 +2363,21 @@ class ROUTER_equity_fundamental(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, yfinance." ), ], period: Annotated[ Optional[Literal["annual", "quarter"]], - OpenBBCustomParameter(description="Time period of the data to return."), + OpenBBField(description="Time period of the data to return."), ] = "annual", limit: Annotated[ Optional[int], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 100, provider: Annotated[ Optional[Literal["fmp", "intrinio", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -2720,13 +2684,13 @@ class ROUTER_equity_fundamental(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." ), ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -2914,12 +2878,10 @@ class ROUTER_equity_fundamental(Container): ) def overview( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -3059,19 +3021,16 @@ class ROUTER_equity_fundamental(Container): @validate def ratios( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], period: Annotated[ - str, OpenBBCustomParameter(description="Time period of the data to return.") + str, OpenBBField(description="Time period of the data to return.") ] = "annual", limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 12, provider: Annotated[ Optional[Literal["fmp", "intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -3259,27 +3218,25 @@ class ROUTER_equity_fundamental(Container): @validate def reported_financials( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], period: Annotated[ - str, OpenBBCustomParameter(description="Time period of the data to return.") + str, OpenBBField(description="Time period of the data to return.") ] = "annual", statement_type: Annotated[ str, - OpenBBCustomParameter( + OpenBBField( description="The type of financial statement - i.e, balance, income, cash." ), ] = "balance", limit: Annotated[ Optional[int], - OpenBBCustomParameter( + OpenBBField( description="The number of data entries to return. Although the response object contains multiple results, because of the variance in the fields, year-to-year and quarter-to-quarter, it is recommended to view results in small chunks." ), ] = 100, provider: Annotated[ Optional[Literal["intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, @@ -3363,20 +3320,18 @@ class ROUTER_equity_fundamental(Container): @validate def revenue_per_geography( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], period: Annotated[ - Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), + Literal["quarter", "annual"], + OpenBBField(description="Time period of the data to return."), ] = "annual", structure: Annotated[ Literal["hierarchical", "flat"], - OpenBBCustomParameter(description="Structure of the returned data."), + OpenBBField(description="Structure of the returned data."), ] = "flat", provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -3388,7 +3343,7 @@ class ROUTER_equity_fundamental(Container): ---------- symbol : str Symbol to get data for. - period : Literal['annual', 'quarter'] + period : Literal['quarter', 'annual'] Time period of the data to return. structure : Literal['hierarchical', 'flat'] Structure of the returned data. @@ -3454,20 +3409,18 @@ class ROUTER_equity_fundamental(Container): @validate def revenue_per_segment( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], period: Annotated[ - Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), + Literal["quarter", "annual"], + OpenBBField(description="Time period of the data to return."), ] = "annual", structure: Annotated[ Literal["hierarchical", "flat"], - OpenBBCustomParameter(description="Structure of the returned data."), + OpenBBField(description="Structure of the returned data."), ] = "flat", provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -3479,7 +3432,7 @@ class ROUTER_equity_fundamental(Container): ---------- symbol : str Symbol to get data for. - period : Literal['annual', 'quarter'] + period : Literal['quarter', 'annual'] Time period of the data to return. structure : Literal['hierarchical', 'flat'] Structure of the returned data. @@ -3545,16 +3498,14 @@ class ROUTER_equity_fundamental(Container): @validate def search_attributes( self, - query: Annotated[ - str, OpenBBCustomParameter(description="Query to search for.") - ], + query: Annotated[str, OpenBBField(description="Query to search for.")], limit: Annotated[ Optional[int], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 1000, provider: Annotated[ Optional[Literal["intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'intrinio' if there is\n no default." ), ] = None, @@ -3640,18 +3591,16 @@ class ROUTER_equity_fundamental(Container): @validate def trailing_dividend_yield( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], limit: Annotated[ Optional[int], - OpenBBCustomParameter( + OpenBBField( description="The number of data entries to return. Default is 252, the number of trading days in a year." ), ] = 252, provider: Annotated[ Optional[Literal["tiingo"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'tiingo' if there is\n no default." ), ] = None, @@ -3720,16 +3669,13 @@ class ROUTER_equity_fundamental(Container): @validate def transcript( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], year: Annotated[ - int, - OpenBBCustomParameter(description="Year of the earnings call transcript."), + int, OpenBBField(description="Year of the earnings call transcript.") ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/equity_ownership.py b/openbb_platform/openbb/package/equity_ownership.py index 1d2778bfb3d..7311c9aa7eb 100644 --- a/openbb_platform/openbb/package/equity_ownership.py +++ b/openbb_platform/openbb/package/equity_ownership.py @@ -3,7 +3,7 @@ import datetime from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -29,31 +29,33 @@ class ROUTER_equity_ownership(Container): self, symbol: Annotated[ str, - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. A CIK or Symbol can be used." ), ], date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( + OpenBBField( description="A specific date to get data for. The date represents the end of the reporting period. All form 13F-HR filings are based on the calendar year and are reported quarterly. If a date is not supplied, the most recent filing is returned. Submissions beginning 2013-06-30 are supported." ), ] = None, limit: Annotated[ Optional[int], - OpenBBCustomParameter( + OpenBBField( description="The number of data entries to return. The number of previous filings to return. The date parameter takes priority over this parameter." ), ] = 1, provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """The Securities and Exchange Commission's (SEC) Form 13F is a quarterly report + """Get the form 13F. + + The Securities and Exchange Commission's (SEC) Form 13F is a quarterly report that is required to be filed by all institutional investment managers with at least $100 million in assets under management. Managers are required to file Form 13F within 45 days after the last day of the calendar quarter. @@ -150,16 +152,13 @@ class ROUTER_equity_ownership(Container): @validate def insider_trading( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], limit: Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), + int, OpenBBField(description="The number of data entries to return.") ] = 500, provider: Annotated[ Optional[Literal["fmp", "intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -292,12 +291,10 @@ class ROUTER_equity_ownership(Container): @validate def institutional( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -434,20 +431,17 @@ class ROUTER_equity_ownership(Container): @validate def major_holders( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter(description="A specific date to get data for."), + OpenBBField(description="A specific date to get data for."), ] = None, page: Annotated[ - Optional[int], - OpenBBCustomParameter(description="Page number of the data to fetch."), + Optional[int], OpenBBField(description="Page number of the data to fetch.") ] = 0, provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -595,13 +589,13 @@ class ROUTER_equity_ownership(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): yfinance." ), ], provider: Annotated[ Optional[Literal["fmp", "intrinio", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/equity_price.py b/openbb_platform/openbb/package/equity_price.py index 667889137d3..369b2c14646 100644 --- a/openbb_platform/openbb/package/equity_price.py +++ b/openbb_platform/openbb/package/equity_price.py @@ -3,7 +3,7 @@ import datetime from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -28,29 +28,25 @@ class ROUTER_equity_price(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon, tiingo, yfinance." ), ], interval: Annotated[ Optional[str], - OpenBBCustomParameter(description="Time interval of the data to return."), + OpenBBField(description="Time interval of the data to return."), ] = "1d", start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon", "tiingo", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -207,12 +203,10 @@ class ROUTER_equity_price(Container): @validate def nbbo( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["polygon"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'polygon' if there is\n no default." ), ] = None, @@ -317,13 +311,13 @@ class ROUTER_equity_price(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." ), ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -421,13 +415,13 @@ class ROUTER_equity_price(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, yfinance." ), ], provider: Annotated[ Optional[Literal["fmp", "intrinio", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/equity_shorts.py b/openbb_platform/openbb/package/equity_shorts.py index 115690a4fab..c8e2c37deb1 100644 --- a/openbb_platform/openbb/package/equity_shorts.py +++ b/openbb_platform/openbb/package/equity_shorts.py @@ -2,7 +2,7 @@ from typing import Literal, Optional -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -22,12 +22,10 @@ class ROUTER_equity_shorts(Container): @validate def fails_to_deliver( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/etf.py b/openbb_platform/openbb/package/etf.py index a48f89d875c..5ac4c7fa0af 100644 --- a/openbb_platform/openbb/package/etf.py +++ b/openbb_platform/openbb/package/etf.py @@ -2,13 +2,15 @@ import datetime from typing import List, Literal, Optional, Union +from warnings import simplefilter, warn -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.deprecation import OpenBBDeprecationWarning +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs -from typing_extensions import Annotated +from typing_extensions import Annotated, deprecated class ROUTER_etf(Container): @@ -34,13 +36,13 @@ class ROUTER_etf(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp." ), ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -106,13 +108,13 @@ class ROUTER_etf(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. (Stock) Multiple comma separated items allowed for provider(s): fmp." ), ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -188,29 +190,25 @@ class ROUTER_etf(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon, tiingo, yfinance." ), ], interval: Annotated[ Optional[str], - OpenBBCustomParameter(description="Time interval of the data to return."), + OpenBBField(description="Time interval of the data to return."), ] = "1d", start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon", "tiingo", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -370,11 +368,11 @@ class ROUTER_etf(Container): def holdings( self, symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for. (ETF)") + str, OpenBBField(description="Symbol to get data for. (ETF)") ], provider: Annotated[ Optional[Literal["fmp", "intrinio", "sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -392,6 +390,7 @@ class ROUTER_etf(Container): no default. date : Optional[Union[str, datetime.date]] A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF. (provider: fmp); + A specific date to get data for. (provider: intrinio); A specific date to get data for. The date represents the period ending. The date entered will return the closest filing. (provider: sec) cik : Optional[str] The CIK of the filing entity. Overrides symbol. (provider: fmp) @@ -630,11 +629,11 @@ class ROUTER_etf(Container): def holdings_date( self, symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for. (ETF)") + str, OpenBBField(description="Symbol to get data for. (ETF)") ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -697,17 +696,21 @@ class ROUTER_etf(Container): @exception_handler @validate + @deprecated( + "This endpoint is deprecated; pass a list of holdings symbols directly to `/equity/price/performance` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.2.", + category=OpenBBDeprecationWarning, + ) def holdings_performance( self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." ), ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -781,6 +784,13 @@ class ROUTER_etf(Container): >>> obb.etf.holdings_performance(symbol='XLK', provider='fmp') """ # noqa: E501 + simplefilter("always", DeprecationWarning) + warn( + "This endpoint is deprecated; pass a list of holdings symbols directly to `/equity/price/performance` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.2.", + category=DeprecationWarning, + stacklevel=2, + ) + return self._run( "/etf/holdings_performance", **filter_inputs( @@ -805,13 +815,13 @@ class ROUTER_etf(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp, intrinio, yfinance." ), ], provider: Annotated[ Optional[Literal["fmp", "intrinio", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1197,13 +1207,13 @@ class ROUTER_etf(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio." ), ], provider: Annotated[ Optional[Literal["fmp", "intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1334,12 +1344,10 @@ class ROUTER_etf(Container): @validate def search( self, - query: Annotated[ - Optional[str], OpenBBCustomParameter(description="Search query.") - ] = "", + query: Annotated[Optional[str], OpenBBField(description="Search query.")] = "", provider: Annotated[ Optional[Literal["fmp", "intrinio"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -1449,11 +1457,11 @@ class ROUTER_etf(Container): def sectors( self, symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for. (ETF)") + str, OpenBBField(description="Symbol to get data for. (ETF)") ], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/fixedincome.py b/openbb_platform/openbb/package/fixedincome.py index 30bfb1f52c8..535ad86b1f8 100644 --- a/openbb_platform/openbb/package/fixedincome.py +++ b/openbb_platform/openbb/package/fixedincome.py @@ -3,7 +3,7 @@ import datetime from typing import Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -56,19 +56,15 @@ class ROUTER_fixedincome(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/fixedincome_corporate.py b/openbb_platform/openbb/package/fixedincome_corporate.py index bc5bcb97b09..7f3a1e19957 100644 --- a/openbb_platform/openbb/package/fixedincome_corporate.py +++ b/openbb_platform/openbb/package/fixedincome_corporate.py @@ -3,10 +3,7 @@ import datetime from typing import List, Literal, Optional, Union -from openbb_core.app.model.custom_parameter import ( - OpenBBCustomChoices, - OpenBBCustomParameter, -) +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -32,30 +29,26 @@ class ROUTER_fixedincome_corporate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, maturity: Annotated[ Literal["overnight", "7d", "15d", "30d", "60d", "90d"], - OpenBBCustomParameter(description="The maturity."), + OpenBBField(description="The maturity."), ] = "30d", category: Annotated[ Literal["asset_backed", "financial", "nonfinancial"], - OpenBBCustomParameter(description="The category."), + OpenBBField(description="The category."), ] = "financial", grade: Annotated[ - Literal["aa", "a2_p2"], OpenBBCustomParameter(description="The grade.") + Literal["aa", "a2_p2"], OpenBBField(description="The grade.") ] = "aa", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -141,15 +134,14 @@ class ROUTER_fixedincome_corporate(Container): self, date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter(description="A specific date to get data for."), + OpenBBField(description="A specific date to get data for."), ] = None, yield_curve: Annotated[ - Literal["spot", "par"], - OpenBBCustomParameter(description="The yield curve type."), + Literal["spot", "par"], OpenBBField(description="The yield curve type.") ] = "spot", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -232,23 +224,19 @@ class ROUTER_fixedincome_corporate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, index_type: Annotated[ Literal["yield", "yield_to_worst", "total_return", "spread"], - OpenBBCustomParameter(description="The type of series."), + OpenBBField(description="The type of series."), ] = "yield", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -337,23 +325,18 @@ class ROUTER_fixedincome_corporate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, index_type: Annotated[ - Literal["aaa", "baa"], - OpenBBCustomParameter(description="The type of series."), + Literal["aaa", "baa"], OpenBBField(description="The type of series.") ] = "aaa", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -435,32 +418,28 @@ class ROUTER_fixedincome_corporate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, maturity: Annotated[ Union[float, str, List[Union[float, str]]], - OpenBBCustomParameter( + OpenBBField( description="Maturities in years. Multiple comma separated items allowed for provider(s): fred." ), ] = 10.0, category: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( - description="Rate category. Options: spot_rate, par_yield. Multiple comma separated items allowed for provider(s): fred." + OpenBBField( + description="Rate category. Options: spot_rate, par_yield. Multiple comma separated items allowed for provider(s): fred.", + choices=["par_yield", "spot_rate"], ), - OpenBBCustomChoices(choices=["par_yield", "spot_rate"]), ] = "spot_rate", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/fixedincome_government.py b/openbb_platform/openbb/package/fixedincome_government.py index 5b0f6169e6c..7bf4e522c83 100644 --- a/openbb_platform/openbb/package/fixedincome_government.py +++ b/openbb_platform/openbb/package/fixedincome_government.py @@ -3,7 +3,7 @@ import datetime from typing import Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -26,19 +26,15 @@ class ROUTER_fixedincome_government(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["federal_reserve", "fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'federal_reserve' if there is\n no default." ), ] = None, @@ -132,17 +128,16 @@ class ROUTER_fixedincome_government(Container): self, date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( + OpenBBField( description="A specific date to get data for. Defaults to the most recent FRED entry." ), ] = None, inflation_adjusted: Annotated[ - Optional[bool], - OpenBBCustomParameter(description="Get inflation adjusted rates."), + Optional[bool], OpenBBField(description="Get inflation adjusted rates.") ] = False, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/fixedincome_rate.py b/openbb_platform/openbb/package/fixedincome_rate.py index 17cb78b99e6..38467c54fc3 100644 --- a/openbb_platform/openbb/package/fixedincome_rate.py +++ b/openbb_platform/openbb/package/fixedincome_rate.py @@ -3,7 +3,7 @@ import datetime from typing import Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -32,19 +32,15 @@ class ROUTER_fixedincome_rate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -122,19 +118,15 @@ class ROUTER_fixedincome_rate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -213,23 +205,19 @@ class ROUTER_fixedincome_rate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, interest_rate_type: Annotated[ Literal["deposit", "lending", "refinancing"], - OpenBBCustomParameter(description="The type of interest rate."), + OpenBBField(description="The type of interest rate."), ] = "lending", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -311,19 +299,15 @@ class ROUTER_fixedincome_rate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["federal_reserve", "fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'federal_reserve' if there is\n no default." ), ] = None, @@ -401,7 +385,7 @@ class ROUTER_fixedincome_rate(Container): self, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -485,19 +469,15 @@ class ROUTER_fixedincome_rate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -576,19 +556,15 @@ class ROUTER_fixedincome_rate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -663,19 +639,15 @@ class ROUTER_fixedincome_rate(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/fixedincome_spreads.py b/openbb_platform/openbb/package/fixedincome_spreads.py index b70c58e9676..fdc1773327e 100644 --- a/openbb_platform/openbb/package/fixedincome_spreads.py +++ b/openbb_platform/openbb/package/fixedincome_spreads.py @@ -3,7 +3,7 @@ import datetime from typing import Literal, Optional, Union -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -27,23 +27,18 @@ class ROUTER_fixedincome_spreads(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, maturity: Annotated[ - Optional[Literal["3m", "2y"]], - OpenBBCustomParameter(description="The maturity"), + Optional[Literal["3m", "2y"]], OpenBBField(description="The maturity") ] = "3m", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -123,23 +118,19 @@ class ROUTER_fixedincome_spreads(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, maturity: Annotated[ Optional[Literal["10y", "5y", "1y", "6m", "3m"]], - OpenBBCustomParameter(description="The maturity"), + OpenBBField(description="The maturity"), ] = "10y", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, @@ -219,23 +210,18 @@ class ROUTER_fixedincome_spreads(Container): self, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, maturity: Annotated[ - Optional[Literal["3m", "6m"]], - OpenBBCustomParameter(description="The maturity"), + Optional[Literal["3m", "6m"]], OpenBBField(description="The maturity") ] = "3m", provider: Annotated[ Optional[Literal["fred"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fred' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/index.py b/openbb_platform/openbb/package/index.py index 618e90a7985..babec4f8c96 100644 --- a/openbb_platform/openbb/package/index.py +++ b/openbb_platform/openbb/package/index.py @@ -5,7 +5,7 @@ from typing import List, Literal, Optional, Union from warnings import simplefilter, warn from openbb_core.app.deprecation import OpenBBDeprecationWarning -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -30,7 +30,7 @@ class ROUTER_index(Container): self, provider: Annotated[ Optional[Literal["fmp", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, @@ -100,18 +100,16 @@ class ROUTER_index(Container): @validate def constituents( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["fmp"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Index Constituents. + """Get Index Constituents. Parameters ---------- @@ -188,35 +186,31 @@ class ROUTER_index(Container): self, symbol: Annotated[ Union[str, List[str]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, polygon, yfinance." ), ], start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, interval: Annotated[ Optional[str], - OpenBBCustomParameter(description="Time interval of the data to return."), + OpenBBField(description="Time interval of the data to return."), ] = "1d", provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon", "yfinance"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'fmp' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """Historical Market Indices. + """Get Historical Market Indices. Parameters ---------- diff --git a/openbb_platform/openbb/package/news.py b/openbb_platform/openbb/package/news.py index 2238b1e79c6..d137098644d 100644 --- a/openbb_platform/openbb/package/news.py +++ b/openbb_platform/openbb/package/news.py @@ -4,7 +4,7 @@ import datetime from typing import List, Literal, Optional, Union from annotated_types import Ge -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -27,31 +27,27 @@ class ROUTER_news(Container): self, symbol: Annotated[ Union[str, None, List[Optional[str]]], - OpenBBCustomParameter( + OpenBBField( description="Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp, intrinio, polygon, tiingo, yfinance." ), ] = None, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, limit: Annotated[ Optional[Annotated[int, Ge(ge=0)]], - OpenBBCustomParameter(description="The number of data entries to return."), + OpenBBField(description="The number of data entries to return."), ] = 2500, provider: Annotated[ Optional[ Literal["benzinga", "fmp", "intrinio", "polygon", "tiingo", "yfinance"] ], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'benzinga' if there is\n no default." ), ] = None, @@ -221,25 +217,21 @@ class ROUTER_news(Container): self, limit: Annotated[ int, - OpenBBCustomParameter( + OpenBBField( description="The number of data entries to return. The number of articles to return." ), ] = 2500, start_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), ] = None, end_date: Annotated[ Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), + OpenBBField(description="End date of the data, in YYYY-MM-DD format."), ] = None, provider: Annotated[ Optional[Literal["benzinga", "fmp", "intrinio", "tiingo"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'benzinga' if there is\n no default." ), ] = None, diff --git a/openbb_platform/openbb/package/regulators_sec.py b/openbb_platform/openbb/package/regulators_sec.py index 4b0ebcf377c..0dc6319c271 100644 --- a/openbb_platform/openbb/package/regulators_sec.py +++ b/openbb_platform/openbb/package/regulators_sec.py @@ -2,7 +2,7 @@ from typing import Literal, Optional -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.field import OpenBBField from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.utils.decorators import exception_handler, validate @@ -27,12 +27,10 @@ class ROUTER_regulators_sec(Container): @validate def cik_map( self, - symbol: Annotated[ - str, OpenBBCustomParameter(description="Symbol to get data for.") - ], + symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")], provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, @@ -95,16 +93,16 @@ class ROUTER_regulators_sec(Container): @validate def institutions_search( self, - query: Annotated[str, OpenBBCustomParameter(description="Search query.")] = "", + query: Annotated[str, OpenBBField(description="Search query.")] = "", use_cache: Annotated[ Optional[bool], - OpenBBCustomParameter( + OpenBBField( description="Whether or not to use cache. If True, cache will store for seven days." ), ] = True, provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, @@ -175,13 +173,13 @@ class ROUTER_regulators_sec(Container): self, provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """The RSS feed provides links to litigation releases concerning civil lawsuits brought by the Commission in federal court. + """Get the RSS feed that provides links to litigation releases concerning civil lawsuits brought by the Commission in federal court. Parameters ---------- @@ -242,22 +240,22 @@ class ROUTER_regulators_sec(Container): @validate def schema_files( self, - query: Annotated[str, OpenBBCustomParameter(description="Search query.")] = "", + query: Annotated[str, OpenBBField(description="Search query.")] = "", use_cache: Annotated[ Optional[bool], - OpenBBCustomParameter( + OpenBBField( description="Whether or not to use cache. If True, cache will store for seven days." ), ] = True, provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, **kwargs ) -> OBBject: - """A tool for navigating the directory of SEC XML schema files by year. + """Use tool for navigating the directory of SEC XML schema files by year. Parameters ---------- @@ -337,16 +335,16 @@ class ROUTER_regulators_sec(Container): @validate def sic_search( self, - query: Annotated[str, OpenBBCustomParameter(description="Search query.")] = "", + query: Annotated[str, OpenBBField(description="Search query.")] = "", use_cache: Annotated[ Optional[bool], - OpenBBCustomParameter( + OpenBBField( description="Whether or not to use cache. If True, cache will store for seven days." ), ] = True, provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, @@ -417,16 +415,16 @@ class ROUTER_regulators_sec(Container): @validate def symbol_map( self, - query: Annotated[str, OpenBBCustomParameter(description="Search query.")], + query: Annotated[str, OpenBBField(description="Search query.")], use_cache: Annotated[ Optional[bool], - OpenBBCustomParameter( + OpenBBField( description="Whether or not to use cache. If True, cache will store for seven days." ), ] = True, provider: Annotated[ Optional[Literal["sec"]], - OpenBBCustomParameter( + OpenBBField( description="The provider to use for the query, by default None.\n If None, the provider specified in defaults is selected or 'sec' if there is\n no default." ), ] = None, diff --git a/openbb_platform/providers/__init__.py b/openbb_platform/providers/__init__.py index e69de29bb2d..e80dd09da70 100644 --- a/openbb_platform/providers/__init__.py +++ b/openbb_platform/providers/__init__.py @@ -0,0 +1 @@ +"""OpenBB Platform Providers.""" diff --git a/openbb_platform/providers/alpha_vantage/__init__.py b/openbb_platform/providers/alpha_vantage/__init__.py index e69de29bb2d..cbf25829548 100644 --- a/openbb_platform/providers/alpha_vantage/__init__.py +++ b/openbb_platform/providers/alpha_vantage/__init__.py @@ -0,0 +1 @@ +"""Alpha Vantage Provider.""" diff --git a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/__init__.py b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/__init__.py index e69de29bb2d..77b12520b31 100644 --- a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/__init__.py +++ b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/__init__.py @@ -0,0 +1 @@ +"""Alpha Vantage models.""" diff --git a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/equity_historical.py b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/equity_historical.py index 0ea55731e12..91e20c2d726 100644 --- a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/equity_historical.py +++ b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/models/equity_historical.py @@ -157,7 +157,7 @@ class AVEquityHistoricalFetcher( results = [] async def callback(response, _): - """Callback function to process the response.""" + """Use callback function to process the response.""" try: result = await response.json() if "Information" in result: @@ -168,7 +168,7 @@ class AVEquityHistoricalFetcher( return await response.read() async def intraday_callback(response, _): - """Callback function to process the intraday response.""" + """Use callback function to process the intraday response.""" symbol = response.url.query.get("symbol", None) data = await response.read() if data: @@ -189,7 +189,6 @@ class AVEquityHistoricalFetcher( async def get_one(symbol, intraday: bool = False): """Get data for one symbol.""" - if intraday is True: adjusted = query.adjustment != "unadjusted" if query.adjustment == "splits_only": @@ -298,7 +297,6 @@ class AVEquityHistoricalFetcher( query: AVEquityHistoricalQueryParams, data: List[Dict], **kwargs: Any ) -> List[AVEquityHistoricalData]: """Transform the data to the standard format.""" - if data == []: return [] if "{" in data[0]: diff --git a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/__init__.py b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/__init__.py index e69de29bb2d..37ed69b5ee1 100644 --- a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/__init__.py +++ b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/__init__.py @@ -0,0 +1 @@ +"""Alpha Vantage utilities.""" diff --git a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/helpers.py b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/helpers.py index 88c6bffda35..f16bd40fa0a 100644 --- a/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/helpers.py +++ b/openbb_platform/providers/alpha_vantage/openbb_alpha_vantage/utils/helpers.py @@ -48,10 +48,10 @@ def filter_by_dates( def calculate_adjusted_prices(df: pd.DataFrame, column: str, dividends: bool = False): - """Calculates the split-adjusted prices, or split and dividend adjusted prices. + """Calculate the split-adjusted prices, or split and dividend adjusted prices. Parameters - ------------ + ---------- df: pd.DataFrame DataFrame with unadjusted OHLCV values + split_factor + dividend column: str @@ -60,11 +60,10 @@ def calculate_adjusted_prices(df: pd.DataFrame, column: str, dividends: bool = F Whether to adjust for both splits and dividends. Default is split-adjusted only. Returns - -------- + ------- pd.DataFrame DataFrame with adjusted prices. """ - df = df.copy() adj_column = "adj_" + column diff --git a/openbb_platform/providers/alpha_vantage/poetry.lock b/openbb_platform/providers/alpha_vantage/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/providers/alpha_vantage/poetry.lock +++ b/openbb_platform/providers/alpha_vantage/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/alpha_vantage/pyproject.toml b/openbb_platform/providers/alpha_vantage/pyproject.toml index d5d25a407f2..852cba82b23 100644 --- a/openbb_platform/providers/alpha_vantage/pyproject.toml +++ b/openbb_platform/providers/alpha_vantage/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-alpha-vantage" -version = "1.1.4" +version = "1.1.5" description = "Alpha Vantage extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_alpha_vantage" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/alpha_vantage/tests/__init__.py b/openbb_platform/providers/alpha_vantage/tests/__init__.py index e69de29bb2d..d12ab5730ed 100644 --- a/openbb_platform/providers/alpha_vantage/tests/__init__.py +++ b/openbb_platform/providers/alpha_vantage/tests/__init__.py @@ -0,0 +1 @@ +"""Alpha Vantage tests.""" diff --git a/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py b/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py index 8cc9fb7ed66..d14c8c47c55 100644 --- a/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py +++ b/openbb_platform/providers/alpha_vantage/tests/test_alpha_vantage_fetchers.py @@ -1,3 +1,5 @@ +"""Test the Alpha Vantage fetchers.""" + from datetime import date import pytest @@ -12,6 +14,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -22,6 +25,7 @@ def vcr_config(): @pytest.mark.record_http def test_av_equity_historical_fetcher(credentials=test_credentials): + """Test the Alpha Vantage Equity Historical fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -36,6 +40,7 @@ def test_av_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_av_historical_eps_fetcher(credentials=test_credentials): + """Test the Alpha Vantage Historical Earnings fetcher.""" params = {"symbol": "AAPL,MSFT", "period": "quarter", "limit": 4} fetcher = AVHistoricalEpsFetcher() diff --git a/openbb_platform/providers/benzinga/__init__.py b/openbb_platform/providers/benzinga/__init__.py index e69de29bb2d..ae824bf16b4 100644 --- a/openbb_platform/providers/benzinga/__init__.py +++ b/openbb_platform/providers/benzinga/__init__.py @@ -0,0 +1 @@ +"""Benzinga Provider.""" diff --git a/openbb_platform/providers/benzinga/openbb_benzinga/models/__init__.py b/openbb_platform/providers/benzinga/openbb_benzinga/models/__init__.py index e69de29bb2d..8b008a32eb4 100644 --- a/openbb_platform/providers/benzinga/openbb_benzinga/models/__init__.py +++ b/openbb_platform/providers/benzinga/openbb_benzinga/models/__init__.py @@ -0,0 +1 @@ +"""Benzinga Provider Models.""" diff --git a/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py b/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py index 90554c4decb..f5cf40a2a5a 100644 --- a/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py +++ b/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py @@ -2,7 +2,10 @@ # pylint: disable=unused-argument -from datetime import datetime +from datetime import ( + date as dateType, + timezone, +) from typing import Any, Dict, List, Optional from openbb_core.provider.abstract.fetcher import Fetcher @@ -11,9 +14,12 @@ from openbb_core.provider.standard_models.analyst_search import ( AnalystSearchQueryParams, ) from openbb_core.provider.utils.errors import EmptyDataError -from openbb_core.provider.utils.helpers import amake_request, get_querystring +from openbb_core.provider.utils.helpers import ( + amake_request, + get_querystring, + safe_fromtimestamp, +) from pydantic import Field, field_validator, model_validator -from pytz import UTC class BenzingaAnalystSearchQueryParams(AnalystSearchQueryParams): @@ -145,6 +151,17 @@ class BenzingaAnalystSearchData(AnalystSearchData): json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, alias="1m_stdev", ) + smart_score_1m: Optional[float] = Field( + default=None, + description="A weighted average smart score over the last month.", + alias="1m_smart_score", + ) + success_rate_1m: Optional[float] = Field( + default=None, + description="The percentage (normalized) of gain/loss ratings that resulted in a gain over the last month", + json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + alias="1m_success_rate", + ) gain_count_3m: Optional[int] = Field( default=None, description="The number of ratings that have gained value over the last 3 months", @@ -169,6 +186,17 @@ class BenzingaAnalystSearchData(AnalystSearchData): json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, alias="3m_stdev", ) + smart_score_3m: Optional[float] = Field( + default=None, + description="A weighted average smart score over the last 3 months.", + alias="3m_smart_score", + ) + success_rate_3m: Optional[float] = Field( + default=None, + description="The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 3 months", + json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + alias="3m_success_rate", + ) gain_count_6m: Optional[int] = Field( default=None, description="The number of ratings that have gained value over the last 6 months", @@ -217,6 +245,17 @@ class BenzingaAnalystSearchData(AnalystSearchData): json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, alias="9m_stdev", ) + smart_score_9m: Optional[float] = Field( + default=None, + description="A weighted average smart score over the last 9 months.", + alias="9m_smart_score", + ) + success_rate_9m: Optional[float] = Field( + default=None, + description="The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 9 months", + json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + alias="9m_success_rate", + ) gain_count_1y: Optional[int] = Field( default=None, description="The number of ratings that have gained value over the last 1 year", @@ -241,6 +280,17 @@ class BenzingaAnalystSearchData(AnalystSearchData): json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, alias="1y_stdev", ) + smart_score_1y: Optional[float] = Field( + default=None, + description="A weighted average smart score over the last 1 year.", + alias="1y_smart_score", + ) + success_rate_1y: Optional[float] = Field( + default=None, + description="The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 1 year", + json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + alias="1y_success_rate", + ) gain_count_2y: Optional[int] = Field( default=None, description="The number of ratings that have gained value over the last 2 years", @@ -265,6 +315,17 @@ class BenzingaAnalystSearchData(AnalystSearchData): json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, alias="2y_stdev", ) + smart_score_2y: Optional[float] = Field( + default=None, + description="A weighted average smart score over the last 3 years.", + alias="2y_smart_score", + ) + success_rate_2y: Optional[float] = Field( + default=None, + description="The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 2 years", + json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + alias="2y_success_rate", + ) gain_count_3y: Optional[int] = Field( default=None, description="The number of ratings that have gained value over the last 3 years", @@ -289,14 +350,26 @@ class BenzingaAnalystSearchData(AnalystSearchData): json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, alias="3y_stdev", ) + smart_score_3y: Optional[float] = Field( + default=None, + description="A weighted average smart score over the last 3 years.", + alias="3y_smart_score", + ) + success_rate_3y: Optional[float] = Field( + default=None, + description="The percentage (normalized) of gain/loss ratings that resulted in a gain over the last 3 years", + json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + alias="3y_success_rate", + ) @field_validator("last_updated", mode="before", check_fields=False) @classmethod - def validate_date(cls, v): + def validate_date(cls, v: float) -> Optional[dateType]: + """Validate last_updated.""" if v: - dt = datetime.fromtimestamp(v, UTC) + dt = safe_fromtimestamp(v, tz=timezone.utc) return dt.date() if dt.time() == dt.min.time() else dt - return v + return None @model_validator(mode="before") @classmethod @@ -340,7 +413,6 @@ class BenzingaAnalystSearchFetcher( **kwargs: Any, ) -> List[Dict]: """Extract the raw data.""" - token = credentials.get("benzinga_api_key") if credentials else "" querystring = get_querystring(query.model_dump(), []) url = f"https://api.benzinga.com/api/v2.1/calendar/ratings/analysts?{querystring}&token={token}" diff --git a/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py b/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py index 561cb9862fa..d799e3410d8 100644 --- a/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py +++ b/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py @@ -17,9 +17,12 @@ from openbb_core.provider.standard_models.price_target import ( ) from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS from openbb_core.provider.utils.errors import EmptyDataError -from openbb_core.provider.utils.helpers import amake_requests, get_querystring +from openbb_core.provider.utils.helpers import ( + amake_requests, + get_querystring, + safe_fromtimestamp, +) from pydantic import Field, field_validator, model_validator -from pytz import UTC COVERAGE_DICT = { "downgrades": "Downgrades", @@ -221,12 +224,12 @@ class BenzingaPriceTargetData(PriceTargetData): @field_validator("last_updated", mode="before", check_fields=False) @classmethod - def validate_date(cls, v): + def validate_date(cls, v: float) -> Optional[dateType]: """Convert the Unix timestamp to a datetime object.""" if v: - dt = datetime.fromtimestamp(v, UTC) + dt = safe_fromtimestamp(v, tz=timezone.utc) return dt.date() if dt.time() == dt.min.time() else dt - return v + return None @model_validator(mode="before") @classmethod diff --git a/openbb_platform/providers/benzinga/openbb_benzinga/utils/__init__.py b/openbb_platform/providers/benzinga/openbb_benzinga/utils/__init__.py index e69de29bb2d..0209502ea38 100644 --- a/openbb_platform/providers/benzinga/openbb_benzinga/utils/__init__.py +++ b/openbb_platform/providers/benzinga/openbb_benzinga/utils/__init__.py @@ -0,0 +1 @@ +"""Benzinga Provider Utils.""" diff --git a/openbb_platform/providers/benzinga/poetry.lock b/openbb_platform/providers/benzinga/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/providers/benzinga/poetry.lock +++ b/openbb_platform/providers/benzinga/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/benzinga/pyproject.toml b/openbb_platform/providers/benzinga/pyproject.toml index 84cd848b457..f8dc506a3cc 100644 --- a/openbb_platform/providers/benzinga/pyproject.toml +++ b/openbb_platform/providers/benzinga/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-benzinga" -version = "1.1.4" +version = "1.1.5" description = "Benzinga extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_benzinga" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/benzinga/tests/__init__.py b/openbb_platform/providers/benzinga/tests/__init__.py index e69de29bb2d..e423bb41245 100644 --- a/openbb_platform/providers/benzinga/tests/__init__.py +++ b/openbb_platform/providers/benzinga/tests/__init__.py @@ -0,0 +1 @@ +"""Test Benzinga fetchers.""" diff --git a/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py b/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py index e33454139ca..2902f09847c 100644 --- a/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py +++ b/openbb_platform/providers/benzinga/tests/test_benzinga_fetchers.py @@ -1,3 +1,5 @@ +"""Test the Benzinga fetchers.""" + import pytest from openbb_benzinga.models.analyst_search import BenzingaAnalystSearchFetcher from openbb_benzinga.models.company_news import BenzingaCompanyNewsFetcher @@ -12,6 +14,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -22,6 +25,7 @@ def vcr_config(): @pytest.mark.record_http def test_benzinga_world_news_fetcher(credentials=test_credentials): + """Test the world news fetcher.""" params = {"limit": 20} fetcher = BenzingaWorldNewsFetcher() @@ -31,6 +35,7 @@ def test_benzinga_world_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_benzinga_company_news_fetcher(credentials=test_credentials): + """Test the company news fetcher.""" params = {"symbol": "AAPL,MSFT", "limit": 20} fetcher = BenzingaCompanyNewsFetcher() @@ -40,6 +45,7 @@ def test_benzinga_company_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_benzinga_price_target_fetcher(credentials=test_credentials): + """Test the price target fetcher.""" params = {"symbol": "AAPL"} fetcher = BenzingaPriceTargetFetcher() @@ -49,6 +55,7 @@ def test_benzinga_price_target_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_benzinga_analyst_search_fetcher(credentials=test_credentials): + """Test the analyst search fetcher.""" params = {"firm_name": "Barclays"} fetcher = BenzingaAnalystSearchFetcher() diff --git a/openbb_platform/providers/biztoc/__init__.py b/openbb_platform/providers/biztoc/__init__.py index e69de29bb2d..02876107827 100644 --- a/openbb_platform/providers/biztoc/__init__.py +++ b/openbb_platform/providers/biztoc/__init__.py @@ -0,0 +1 @@ +"""Biztoc provider.""" diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/models/__init__.py b/openbb_platform/providers/biztoc/openbb_biztoc/models/__init__.py index e69de29bb2d..e716998b06a 100644 --- a/openbb_platform/providers/biztoc/openbb_biztoc/models/__init__.py +++ b/openbb_platform/providers/biztoc/openbb_biztoc/models/__init__.py @@ -0,0 +1 @@ +"""Biztoc Provider models.""" diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/utils/__init__.py b/openbb_platform/providers/biztoc/openbb_biztoc/utils/__init__.py index e69de29bb2d..e46fb65077d 100644 --- a/openbb_platform/providers/biztoc/openbb_biztoc/utils/__init__.py +++ b/openbb_platform/providers/biztoc/openbb_biztoc/utils/__init__.py @@ -0,0 +1 @@ +"""Biztoc utils.""" diff --git a/openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py b/openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py index d8d7ea8003f..061271c8a5d 100644 --- a/openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py +++ b/openbb_platform/providers/biztoc/openbb_biztoc/utils/helpers.py @@ -1,4 +1,4 @@ -"""Biztoc Helpers""" +"""Biztoc Helpers.""" from datetime import timedelta from typing import Dict, List, Literal @@ -7,6 +7,8 @@ import requests import requests_cache from openbb_core.app.utils import get_user_cache_directory +# pylint: disable=C0325 + cache_dir = get_user_cache_directory() biztoc_session_tags = requests_cache.CachedSession( @@ -18,8 +20,7 @@ biztoc_session_sources = requests_cache.CachedSession( def get_sources(api_key: str) -> List[Dict]: - """Valid sources for Biztoc queries.""" - + """Get valid sources for Biztoc queries.""" headers = { "X-RapidAPI-Key": f"{api_key}", "X-RapidAPI-Host": "biztoc.p.rapidapi.com", @@ -34,8 +35,7 @@ def get_sources(api_key: str) -> List[Dict]: def get_pages(api_key: str) -> List[str]: - """Valid pages for Biztoc queries.""" - + """Get valid pages for Biztoc queries.""" headers = { "X-RapidAPI-Key": f"{api_key}", "X-RapidAPI-Host": "biztoc.p.rapidapi.com", @@ -50,8 +50,7 @@ def get_pages(api_key: str) -> List[str]: def get_tags_by_page(page_id: str, api_key: str) -> List[str]: - """Valid tags required for Biztoc queries.""" - + """Get valid tags required for Biztoc queries.""" headers = { "X-RapidAPI-Key": f"{api_key}", "X-RapidAPI-Host": "biztoc.p.rapidapi.com", @@ -66,12 +65,13 @@ def get_tags_by_page(page_id: str, api_key: str) -> List[str]: def get_all_tags(api_key) -> Dict[str, List[str]]: + """Get all tags for all pages.""" tags: Dict[str, List[str]] = {} pages = get_pages(api_key) for page in pages: page_tags = get_tags_by_page(page, api_key) - tags.update({page: [x["tag"] for x in page_tags]}) + tags.update({page: [x["tag"] for x in page_tags]}) # type: ignore return tags @@ -85,8 +85,7 @@ def get_news( tag: str = "", term: str = "", ) -> List[Dict]: - """Calls the BizToc API and returns the data.""" - + """Call the BizToc API and returns the data.""" results = [] term = term.replace(" ", "%20") if term else "" _tags = get_all_tags(api_key) diff --git a/openbb_platform/providers/biztoc/poetry.lock b/openbb_platform/providers/biztoc/poetry.lock index ec7eb06cfd3..5273eb5c3f2 100644 --- a/openbb_platform/providers/biztoc/poetry.lock +++ b/openbb_platform/providers/biztoc/poetry.lock @@ -696,13 +696,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1474,4 +1474,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "5e1871be66c01fed2ac9442effc275be6755eab8999aa1e176385660744c6e39" +content-hash = "568175cf150aaadfd77c05974f135022a7fd5556d70643ac2b57f36bcf39c731" diff --git a/openbb_platform/providers/biztoc/pyproject.toml b/openbb_platform/providers/biztoc/pyproject.toml index b80fd0974f3..e66604f0558 100644 --- a/openbb_platform/providers/biztoc/pyproject.toml +++ b/openbb_platform/providers/biztoc/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-biztoc" -version = "1.1.4" +version = "1.1.5" description = "" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_biztoc" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" requests-cache = "^1.1.0" [build-system] diff --git a/openbb_platform/providers/biztoc/tests/__init__.py b/openbb_platform/providers/biztoc/tests/__init__.py index e69de29bb2d..f9f64a7d750 100644 --- a/openbb_platform/providers/biztoc/tests/__init__.py +++ b/openbb_platform/providers/biztoc/tests/__init__.py @@ -0,0 +1 @@ +"""Biztoc Provider tests.""" diff --git a/openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py b/openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py index b56da94a9a8..e2a3c579573 100644 --- a/openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py +++ b/openbb_platform/providers/biztoc/tests/test_biztoc_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for the Biztoc fetchers.""" + import pytest from openbb_biztoc.models.world_news import BiztocWorldNewsFetcher from openbb_core.app.service.user_service import UserService @@ -7,6 +9,7 @@ test_credentials = UserService().default_user_settings.credentials.dict() @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None), ("X-RapidAPI-Key", "MOCK_API_KEY")], "filter_query_parameters": [ @@ -17,6 +20,7 @@ def vcr_config(): @pytest.mark.record_http def test_biztoc_world_news_fetcher(credentials=test_credentials): + """Test the Biztoc World News fetcher.""" params = {"term": "earnings"} fetcher = BiztocWorldNewsFetcher() diff --git a/openbb_platform/providers/cboe/__init__.py b/openbb_platform/providers/cboe/__init__.py index e69de29bb2d..635774cce04 100644 --- a/openbb_platform/providers/cboe/__init__.py +++ b/openbb_platform/providers/cboe/__init__.py @@ -0,0 +1 @@ +"""CBOE provider.""" diff --git a/openbb_platform/providers/cboe/openbb_cboe/models/futures_curve.py b/openbb_platform/providers/cboe/openbb_cboe/models/futures_curve.py index 44970f62b89..fee62fb339a 100644 --- a/openbb_platform/providers/cboe/openbb_cboe/models/futures_curve.py +++ b/openbb_platform/providers/cboe/openbb_cboe/models/futures_curve.py @@ -36,6 +36,7 @@ class CboeFuturesCurveFetcher( @staticmethod def transform_query(params: Dict[str, Any]) -> CboeFuturesCurveQueryParams: + """Transform the query.""" return CboeFuturesCurveQueryParams(**params) @staticmethod @@ -45,7 +46,6 @@ class CboeFuturesCurveFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the CBOE endpoint.""" - symbol = query.symbol.upper().split(",")[0] FUTURES = await get_settlement_prices(**kwargs) if len(FUTURES) == 0: @@ -68,4 +68,5 @@ class CboeFuturesCurveFetcher( data: List[Dict], **kwargs: Any, ) -> List[CboeFuturesCurveData]: + """Transform data.""" return [CboeFuturesCurveData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/cboe/openbb_cboe/utils/helpers.py b/openbb_platform/providers/cboe/openbb_cboe/utils/helpers.py index 74b7ca608cf..e49361b1549 100644 --- a/openbb_platform/providers/cboe/openbb_cboe/utils/helpers.py +++ b/openbb_platform/providers/cboe/openbb_cboe/utils/helpers.py @@ -1,4 +1,4 @@ -"""Cboe Helpers""" +"""Cboe Helpers.""" # pylint: disable=expression-not-assigned, unused-argument @@ -81,7 +81,7 @@ backend = SQLiteBackend(f"{cache_dir}/http/cboe_directories", expire_after=3600 async def response_callback(response: ClientResponse, _: Any): - """Callback for HTTP Client Response.""" + """Use callback for HTTP Client Response.""" content_type = response.headers.get("Content-Type", "") if "application/json" in content_type: return await response.json() @@ -91,7 +91,7 @@ async def response_callback(response: ClientResponse, _: Any): async def get_cboe_data(url, use_cache: bool = True, **kwargs) -> Any: - """Generic Cboe HTTP request.""" + """Use the generic Cboe HTTP request.""" if use_cache is True: async with CachedSession(cache=backend) as cached_session: try: @@ -106,15 +106,14 @@ async def get_cboe_data(url, use_cache: bool = True, **kwargs) -> Any: async def get_company_directory(use_cache: bool = True, **kwargs) -> DataFrame: - """ - Get the US Company Directory for Cboe options. If use_cache is True, - the data will be cached for 24 hours. + """Get the US Company Directory for Cboe options. + + If use_cache is True, the data will be cached for 24 hours. Returns ------- DataFrame: Pandas DataFrame of the Cboe listings directory """ - url = "https://www.cboe.com/us/options/symboldir/equity_index_options/?download=csv" results = await get_cboe_data(url, use_cache) @@ -136,15 +135,14 @@ async def get_company_directory(use_cache: bool = True, **kwargs) -> DataFrame: async def get_index_directory(use_cache: bool = True, **kwargs) -> DataFrame: - """ - Get the Cboe Index Directory. If use_cache is True, - the data will be cached for 24 hours. + """Get the Cboe Index Directory. + + If use_cache is True, the data will be cached for 24 hours. Returns - -------- + ------- List[Dict]: A list of dictionaries containing the index information. """ - url = "https://cdn.cboe.com/api/global/us_indices/definitions/all_indices.json" results = await get_cboe_data(url, use_cache=use_cache) @@ -162,11 +160,10 @@ async def list_futures(**kwargs) -> List[dict]: """List of CBOE futures and their underlying symbols. Returns - -------- + ------- pd.DataFrame Pandas DataFrame with results. """ - r = await get_cboe_data( "https://cdn.cboe.com/api/global/delayed_quotes/symbol_book/futures-roots.json" ) @@ -183,10 +180,10 @@ async def get_settlement_prices( final_settlement: bool = False, **kwargs, ) -> DataFrame: - """Gets the settlement prices of CBOE futures. + """Get the settlement prices of CBOE futures. Parameters - ----------- + ---------- settlement_date: Optional[date] The settlement date. Only valid for active contracts. [YYYY-MM-DD] options: bool diff --git a/openbb_platform/providers/cboe/poetry.lock b/openbb_platform/providers/cboe/poetry.lock index a3aa5003401..bd3089b5849 100644 --- a/openbb_platform/providers/cboe/poetry.lock +++ b/openbb_platform/providers/cboe/poetry.lock @@ -751,13 +751,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1484,4 +1484,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "6a3d58e3422d1ba3b69823fe40edbda25545ab4c7b96b678dc2f47430833a15b" +content-hash = "7fd94b8732cf94829c9edccbce65681547ff7ea9b6ec050748d703e6aff09de0" diff --git a/openbb_platform/providers/cboe/pyproject.toml b/openbb_platform/providers/cboe/pyproject.toml index b06c69163ab..0e6aaaaaf3b 100644 --- a/openbb_platform/providers/cboe/pyproject.toml +++ b/openbb_platform/providers/cboe/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-cboe" -version = "1.1.4" +version = "1.1.5" description = "CBOE extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -10,7 +10,7 @@ packages = [{ include = "openbb_cboe" }] python = "^3.8" aiohttp-client-cache = "^0.10.0" aiosqlite = "^0.19.0" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/cboe/tests/__init__.py b/openbb_platform/providers/cboe/tests/__init__.py index e69de29bb2d..41685dac0a5 100644 --- a/openbb_platform/providers/cboe/tests/__init__.py +++ b/openbb_platform/providers/cboe/tests/__init__.py @@ -0,0 +1 @@ +"""CBOE tests.""" diff --git a/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py b/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py index 9f380286c00..1545a87a00d 100644 --- a/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py +++ b/openbb_platform/providers/cboe/tests/test_cboe_fetchers.py @@ -34,6 +34,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -44,6 +45,7 @@ def vcr_config(): @pytest.mark.record_http def test_cboe_index_historical_fetcher(credentials=test_credentials): + """Test Cboe index historical fetcher.""" params = {"symbol": "AAVE10RP", "use_cache": False} fetcher = CboeIndexHistoricalFetcher() @@ -53,6 +55,7 @@ def test_cboe_index_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_index_constituents_fetcher(credentials=test_credentials): + """Test Cboe index constituents fetcher.""" params = {"symbol": "BUK100P"} fetcher = CboeIndexConstituentsFetcher() @@ -62,6 +65,7 @@ def test_cboe_index_constituents_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_index_search_fetcher(credentials=test_credentials): + """Test Cboe index search fetcher.""" params = {"query": "uk", "use_cache": False} fetcher = CboeIndexSearchFetcher() @@ -71,6 +75,7 @@ def test_cboe_index_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_equity_historical_fetcher(credentials=test_credentials): + """Test Cboe equity historical fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -86,6 +91,7 @@ def test_cboe_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_available_indices_fetcher(credentials=test_credentials): + """Test Cboe available indices fetcher.""" params = {"use_cache": False} fetcher = CboeAvailableIndicesFetcher() @@ -95,6 +101,7 @@ def test_cboe_available_indices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_options_chains_fetcher(credentials=test_credentials): + """Test Cboe options chains fetcher.""" params = {"symbol": "AAPL", "use_cache": False} fetcher = CboeOptionsChainsFetcher() @@ -104,6 +111,7 @@ def test_cboe_options_chains_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_equity_search_fetcher(credentials=test_credentials): + """Test Cboe equity search fetcher.""" params = {"query": "ETF", "use_cache": False} fetcher = CboeEquitySearchFetcher() @@ -113,6 +121,7 @@ def test_cboe_equity_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_equity_quote_fetcher(credentials=test_credentials): + """Test Cboe equity quote fetcher.""" params = {"symbol": "AAPL", "use_cache": False} fetcher = CboeEquityQuoteFetcher() @@ -122,6 +131,7 @@ def test_cboe_equity_quote_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_futures_curve_fetcher(credentials=test_credentials): + """Test Cboe futures curve fetcher.""" params = {"symbol": "VX"} fetcher = CboeFuturesCurveFetcher() @@ -131,6 +141,7 @@ def test_cboe_futures_curve_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_cboe_index_snapshots_fetcher(credentials=test_credentials): + """Test Cboe index snapshots fetcher.""" params = {"region": "eu"} fetcher = CboeIndexSnapshotsFetcher() diff --git a/openbb_platform/providers/ecb/openbb_ecb/models/__init__.py b/openbb_platform/providers/ecb/openbb_ecb/models/__init__.py index e69de29bb2d..de03eacd4a6 100644 --- a/openbb_platform/providers/ecb/openbb_ecb/models/__init__.py +++ b/openbb_platform/providers/ecb/openbb_ecb/models/__init__.py @@ -0,0 +1 @@ +"""ECB Provider Models.""" diff --git a/openbb_platform/providers/ecb/openbb_ecb/utils/__init__.py b/openbb_platform/providers/ecb/openbb_ecb/utils/__init__.py index e69de29bb2d..c703f4399bd 100644 --- a/openbb_platform/providers/ecb/openbb_ecb/utils/__init__.py +++ b/openbb_platform/providers/ecb/openbb_ecb/utils/__init__.py @@ -0,0 +1 @@ +"""ECB utils module.""" diff --git a/openbb_platform/providers/ecb/poetry.lock b/openbb_platform/providers/ecb/poetry.lock index b259691dd84..33e2587fd3b 100644 --- a/openbb_platform/providers/ecb/poetry.lock +++ b/openbb_platform/providers/ecb/poetry.lock @@ -682,13 +682,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1412,4 +1412,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "fdc72f89649382aa5641fc6e4a55b171a9231eeaf613723bc2e3205d78e09c5e" +content-hash = "a5b4bc77391f8d797fb64b16333d066842efe91e979e99994c63ecaf79d920fc" diff --git a/openbb_platform/providers/ecb/pyproject.toml b/openbb_platform/providers/ecb/pyproject.toml index 9cca1fbed4d..59ecace1729 100644 --- a/openbb_platform/providers/ecb/pyproject.toml +++ b/openbb_platform/providers/ecb/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-ecb" -version = "1.1.4" +version = "1.1.5" description = "ECB extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_ecb" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" xmltodict = "^0.13.0" [build-system] diff --git a/openbb_platform/providers/federal_reserve/__init__.py b/openbb_platform/providers/federal_reserve/__init__.py index e69de29bb2d..e06814d7031 100644 --- a/openbb_platform/providers/federal_reserve/__init__.py +++ b/openbb_platform/providers/federal_reserve/__init__.py @@ -0,0 +1 @@ +"""Federal Reserve provider for OpenBB Platform.""" diff --git a/openbb_platform/providers/federal_reserve/poetry.lock b/openbb_platform/providers/federal_reserve/poetry.lock index b1a428337f0..d8ec9345f79 100644 --- a/openbb_platform/providers/federal_reserve/poetry.lock +++ b/openbb_platform/providers/federal_reserve/poetry.lock @@ -682,13 +682,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1401,4 +1401,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/federal_reserve/pyproject.toml b/openbb_platform/providers/federal_reserve/pyproject.toml index 6d6ba143e31..eaa919ada36 100644 --- a/openbb_platform/providers/federal_reserve/pyproject.toml +++ b/openbb_platform/providers/federal_reserve/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-federal-reserve" -version = "1.1.4" +version = "1.1.5" description = "US Federal Reserve Data Extension for OpenBB" authors = ["OpenBB "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_federal_reserve" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/federal_reserve/tests/test_federal_reserve_fetchers.py b/openbb_platform/providers/federal_reserve/tests/test_federal_reserve_fetchers.py index 97e9fe5ac73..40e5bab1f15 100644 --- a/openbb_platform/providers/federal_reserve/tests/test_federal_reserve_fetchers.py +++ b/openbb_platform/providers/federal_reserve/tests/test_federal_reserve_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for the Federal Reserve fetchers.""" + from datetime import date import pytest @@ -17,6 +19,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.mark.record_http def test_federal_reserve_treasury_rates_fetcher(credentials=test_credentials): + """Test the Federal Reserve Treasury Rates fetcher.""" params = {"start_date": date(2023, 1, 1), "end_date": date(2023, 5, 10)} fetcher = FederalReserveTreasuryRatesFetcher() @@ -26,6 +29,7 @@ def test_federal_reserve_treasury_rates_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_federal_reserve_money_measures_fetcher(credentials=test_credentials): + """Test the Federal Reserve Money Measures fetcher.""" params = {"start_date": date(2023, 1, 1), "end_date": date(2023, 5, 10)} fetcher = FederalReserveMoneyMeasuresFetcher() @@ -35,6 +39,7 @@ def test_federal_reserve_money_measures_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_federal_reserve_fed_fetcher(credentials=test_credentials): + """Test the Federal Reserve FED fetcher.""" params = {"start_date": date(2023, 1, 1), "end_date": date(2023, 6, 6)} fetcher = FederalReserveFEDFetcher() diff --git a/openbb_platform/providers/finra/__init__.py b/openbb_platform/providers/finra/__init__.py index e69de29bb2d..35f7b384ac0 100644 --- a/openbb_platform/providers/finra/__init__.py +++ b/openbb_platform/providers/finra/__init__.py @@ -0,0 +1 @@ +"""FINRA provider for OpenBB Platform.""" diff --git a/openbb_platform/providers/finra/openbb_finra/utils/helpers.py b/openbb_platform/providers/finra/openbb_finra/utils/helpers.py index 4468004ebd0..364f3fde743 100644 --- a/openbb_platform/providers/finra/openbb_finra/utils/helpers.py +++ b/openbb_platform/providers/finra/openbb_finra/utils/helpers.py @@ -1,12 +1,15 @@ -# Helper functions for FINRA API +"""Helper functions for FINRA API.""" + import datetime from typing import List import requests +# pylint: disable=W0621 + def get_finra_weeks(tier: str = "T1", is_ats: bool = True): - """Fetches the available weeks from FINRA that can be used.""" + """Fetch the available weeks from FINRA that can be used.""" request_header = {"Accept": "application/json", "Content-Type": "application/json"} request_data = { @@ -40,6 +43,7 @@ def get_finra_weeks(tier: str = "T1", is_ats: bool = True): def get_finra_data(symbol, week_start, tier: str = "T1", is_ats: bool = True): + """Get the data for a symbol from FINRA.""" req_hdr = { "Accept": "application/json", "Content-Type": "application/json", @@ -93,6 +97,7 @@ def get_finra_data(symbol, week_start, tier: str = "T1", is_ats: bool = True): def get_full_data(symbol, tier: str = "T1", is_ats: bool = True): + """Get the full data for a symbol from FINRA.""" weeks = [week["weekStartDate"] for week in get_finra_weeks(tier, is_ats)] data = [] @@ -106,6 +111,7 @@ def get_full_data(symbol, tier: str = "T1", is_ats: bool = True): def get_adjusted_date(year, month, day): + """Find the closest date if the date falls on a weekend.""" # Get the date date = datetime.date(year, month, day) @@ -120,13 +126,14 @@ def get_adjusted_date(year, month, day): def get_short_interest_dates() -> List[str]: - """ - Get a list of dates for which the short interest data is available. It is reported on the 15th and the - last day of each month,but if the date falls on a weekend, the date is adjusted to the closest friday. + """Get a list of dates for which the short interest data is available. + + It is reported on the 15th and the last day of each month,but if the date falls on a weekend, + the date is adjusted to the closest friday. """ def get_adjusted_date(year, month, day): - """If the date falls on a weekend, find the closest date""" + """Find the closest date if the date falls on a weekend.""" # Get the date date = datetime.date(year, month, day) diff --git a/openbb_platform/providers/finra/poetry.lock b/openbb_platform/providers/finra/poetry.lock index fc6d85d4845..16e2a4aa4cb 100644 --- a/openbb_platform/providers/finra/poetry.lock +++ b/openbb_platform/providers/finra/poetry.lock @@ -671,13 +671,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1390,4 +1390,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/finra/pyproject.toml b/openbb_platform/providers/finra/pyproject.toml index d5d3f94ca27..20525def1fd 100644 --- a/openbb_platform/providers/finra/pyproject.toml +++ b/openbb_platform/providers/finra/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-finra" -version = "1.1.4" +version = "1.1.5" description = "FINRA extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_finra" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/finra/tests/test_finra_fetchers.py b/openbb_platform/providers/finra/tests/test_finra_fetchers.py index 212fb4317c0..19f8f292963 100644 --- a/openbb_platform/providers/finra/tests/test_finra_fetchers.py +++ b/openbb_platform/providers/finra/tests/test_finra_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for the Finra fetchers.""" + import pytest from openbb_core.app.service.user_service import UserService from openbb_finra.models.equity_short_interest import FinraShortInterestFetcher @@ -10,6 +12,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -20,6 +23,7 @@ def vcr_config(): @pytest.mark.record_http def test_finra_otc_aggregate_fetcher(credentials=test_credentials): + """Test the Finra OTC Aggregate fetcher.""" params = {"symbol": "AAPL", "tier": "T1", "is_ats": True} fetcher = FinraOTCAggregateFetcher() @@ -30,6 +34,7 @@ def test_finra_otc_aggregate_fetcher(credentials=test_credentials): @pytest.mark.freeze_time("2021-10-21") @pytest.mark.record_http def test_finra_short_interest_fetcher(credentials=test_credentials): + """Test the Finra Short Interest fetcher.""" params = {"symbol": "AAPL"} fetcher = FinraShortInterestFetcher() diff --git a/openbb_platform/providers/finviz/__init__.py b/openbb_platform/providers/finviz/__init__.py index e69de29bb2d..c89b671ab79 100644 --- a/openbb_platform/providers/finviz/__init__.py +++ b/openbb_platform/providers/finviz/__init__.py @@ -0,0 +1 @@ +"""Finviz provider.""" diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/__init__.py b/openbb_platform/providers/finviz/openbb_finviz/models/__init__.py index e69de29bb2d..3370d9d3dc3 100644 --- a/openbb_platform/providers/finviz/openbb_finviz/models/__init__.py +++ b/openbb_platform/providers/finviz/openbb_finviz/models/__init__.py @@ -0,0 +1 @@ +"""Finviz Provider models.""" diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/compare_groups.py b/openbb_platform/providers/finviz/openbb_finviz/models/compare_groups.py index a360a412647..4c53fde9cf2 100644 --- a/openbb_platform/providers/finviz/openbb_finviz/models/compare_groups.py +++ b/openbb_platform/providers/finviz/openbb_finviz/models/compare_groups.py @@ -191,7 +191,7 @@ class FinvizCompareGroupsData(CompareGroupsData): @field_validator("market_cap", "volume", mode="before", check_fields=False) @classmethod def validate_abbreviated_numbers(cls, v): - """Checks for abbreviated string values.""" + """Check for abbreviated string values.""" if v is not None and isinstance(v, str): v = ( v.replace("M", "e+6") diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/__init__.py b/openbb_platform/providers/finviz/openbb_finviz/utils/__init__.py index e69de29bb2d..e5a38b98d21 100644 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/__init__.py +++ b/openbb_platform/providers/finviz/openbb_finviz/utils/__init__.py @@ -0,0 +1 @@ +"""Finviz provider utils.""" diff --git a/openbb_platform/providers/finviz/poetry.lock b/openbb_platform/providers/finviz/poetry.lock index 9fd2f04e188..63b6484b547 100644 --- a/openbb_platform/providers/finviz/poetry.lock +++ b/openbb_platform/providers/finviz/poetry.lock @@ -860,13 +860,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1659,4 +1659,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "306b01fa966bc45551da0f17a2f1e5fa1968887aa1c3053f2f7e3d1205e0499b" +content-hash = "bc7b5321316f41e8aef2c0faa24ca338dffdf77dfafc5672d4d8066cf6c17501" diff --git a/openbb_platform/providers/finviz/pyproject.toml b/openbb_platform/providers/finviz/pyproject.toml index efe3856b34b..9e4f7c54d13 100644 --- a/openbb_platform/providers/finviz/pyproject.toml +++ b/openbb_platform/providers/finviz/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-finviz" -version = "1.0.3" +version = "1.0.4" description = "Finviz extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_finviz" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" finvizfinance = "0.14.7" diff --git a/openbb_platform/providers/finviz/tests/__init__.py b/openbb_platform/providers/finviz/tests/__init__.py index e69de29bb2d..05531f1aa14 100644 --- a/openbb_platform/providers/finviz/tests/__init__.py +++ b/openbb_platform/providers/finviz/tests/__init__.py @@ -0,0 +1 @@ +"""Finviz provider tests.""" diff --git a/openbb_platform/providers/finviz/tests/test_finviz_fetchers.py b/openbb_platform/providers/finviz/tests/test_finviz_fetchers.py index 70c33e716a1..02b935c9c3a 100644 --- a/openbb_platform/providers/finviz/tests/test_finviz_fetchers.py +++ b/openbb_platform/providers/finviz/tests/test_finviz_fetchers.py @@ -15,6 +15,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [ ("User-Agent", None), @@ -30,6 +31,7 @@ def vcr_config(): @pytest.mark.record_http def test_finviz_price_target_fetcher(credentials=test_credentials): + """Test Finviz Price Target Fetcher.""" params = {"symbol": "AAPL"} fetcher = FinvizPriceTargetFetcher() @@ -39,6 +41,7 @@ def test_finviz_price_target_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_finviz_price_performance_fetcher(credentials=test_credentials): + """Test Finviz Price Performance Fetcher.""" params = {"symbol": "AAPL"} fetcher = FinvizPricePerformanceFetcher() @@ -48,6 +51,7 @@ def test_finviz_price_performance_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_finviz_key_metrics_fetcher(credentials=test_credentials): + """Test Finviz Key Metrics Fetcher.""" params = {"symbol": "AAPL"} fetcher = FinvizKeyMetricsFetcher() @@ -57,6 +61,7 @@ def test_finviz_key_metrics_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_finviz_equity_profile_fetcher(credentials=test_credentials): + """Test Finviz Equity Profile Fetcher.""" params = {"symbol": "AAPL"} fetcher = FinvizEquityProfileFetcher() @@ -66,6 +71,7 @@ def test_finviz_equity_profile_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_finviz_compare_groups_fetcher(credentials=test_credentials): + """Test Finviz Compare Groups Fetcher.""" params = {"group": "country", "metric": "performance"} fetcher = FinvizCompareGroupsFetcher() diff --git a/openbb_platform/providers/fmp/__init__.py b/openbb_platform/providers/fmp/__init__.py index e69de29bb2d..a49b8af8321 100644 --- a/openbb_platform/providers/fmp/__init__.py +++ b/openbb_platform/providers/fmp/__init__.py @@ -0,0 +1 @@ +"""FMP Provider.""" diff --git a/openbb_platform/providers/fmp/openbb_fmp/__init__.py b/openbb_platform/providers/fmp/openbb_fmp/__init__.py index e8602091d5e..d822dcbee4f 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/__init__.py +++ b/openbb_platform/providers/fmp/openbb_fmp/__init__.py @@ -40,6 +40,7 @@ from openbb_fmp.models.etf_search import FMPEtfSearchFetcher from openbb_fmp.models.etf_sectors import FMPEtfSectorsFetcher from openbb_fmp.models.executive_compensation import FMPExecutiveCompensationFetcher from openbb_fmp.models.financial_ratios import FMPFinancialRatiosFetcher +from openbb_fmp.models.forward_eps_estimates import FMPForwardEpsEstimatesFetcher from openbb_fmp.models.historical_dividends import FMPHistoricalDividendsFetcher from openbb_fmp.models.historical_employees import FMPHistoricalEmployeesFetcher from openbb_fmp.models.historical_eps import FMPHistoricalEpsFetcher @@ -108,6 +109,7 @@ fmp_provider = Provider( "EtfSectors": FMPEtfSectorsFetcher, "ExecutiveCompensation": FMPExecutiveCompensationFetcher, "FinancialRatios": FMPFinancialRatiosFetcher, + "ForwardEpsEstimates": FMPForwardEpsEstimatesFetcher, "HistoricalDividends": FMPHistoricalDividendsFetcher, "HistoricalEmployees": FMPHistoricalEmployeesFetcher, "HistoricalEps": FMPHistoricalEpsFetcher, diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/currency_snapshots.py b/openbb_platform/providers/fmp/openbb_fmp/models/currency_snapshots.py index 97ea456eb4b..6276e23ed73 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/currency_snapshots.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/currency_snapshots.py @@ -2,7 +2,10 @@ # pylint: disable=unused-argument -from datetime import datetime +from datetime import ( + datetime, + timezone, +) from typing import Any, Dict, List, Optional from openbb_core.provider.abstract.fetcher import Fetcher @@ -11,7 +14,7 @@ from openbb_core.provider.standard_models.currency_snapshots import ( CurrencySnapshotsQueryParams, ) from openbb_core.provider.utils.errors import EmptyDataError -from openbb_core.provider.utils.helpers import amake_request +from openbb_core.provider.utils.helpers import amake_request, safe_fromtimestamp from pandas import DataFrame, concat from pydantic import Field, field_validator @@ -85,7 +88,6 @@ class FMPCurrencySnapshotsFetcher( **kwargs: Any, ) -> List[Dict]: """Extract the data from the FMP endpoint.""" - api_key = credentials.get("fmp_api_key") if credentials else "" url = f"https://financialmodelingprep.com/api/v3/quotes/forex?apikey={api_key}" @@ -99,7 +101,6 @@ class FMPCurrencySnapshotsFetcher( **kwargs: Any, ) -> List[FMPCurrencySnapshotsData]: """Filter by the query parameters and validate the model.""" - if not data: raise EmptyDataError("No data was returned from the FMP endpoint.") @@ -143,7 +144,7 @@ class FMPCurrencySnapshotsFetcher( if len(temp) > 0: # Convert the Unix timestamp to a datetime. temp.timestamp = temp.timestamp.apply( - lambda x: datetime.fromtimestamp(x) + lambda x: safe_fromtimestamp(x, tz=timezone.utc) ) new_df = concat([new_df, temp]) if len(new_df) == 0: diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/equity_quote.py b/openbb_platform/providers/fmp/openbb_fmp/models/equity_quote.py index b5511730755..3830466770a 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/equity_quote.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/equity_quote.py @@ -1,8 +1,14 @@ """FMP Equity Quote Model.""" +# pylint: disable=unused-argument + import asyncio -from datetime import datetime, timezone -from typing import Any, Dict, List, Optional +from datetime import ( + date as dateType, + datetime, + timezone, +) +from typing import Any, Dict, List, Optional, Union from warnings import warn from openbb_core.provider.abstract.data import ForceInt @@ -12,7 +18,7 @@ from openbb_core.provider.standard_models.equity_quote import ( EquityQuoteQueryParams, ) from openbb_core.provider.utils.errors import EmptyDataError -from openbb_core.provider.utils.helpers import amake_request +from openbb_core.provider.utils.helpers import amake_request, safe_fromtimestamp from openbb_fmp.utils.helpers import get_querystring, response_callback from pydantic import Field, field_validator @@ -63,22 +69,22 @@ class FMPEquityQuoteData(EquityQuoteData): @field_validator("last_timestamp", mode="before", check_fields=False) @classmethod - def validate_last_timestamp(cls, v): # pylint: disable=E0213 + def validate_last_timestamp(cls, v: Union[str, int]) -> Optional[dateType]: """Return the date as a datetime object.""" if v: v = int(v) if isinstance(v, str) else v - return datetime.fromtimestamp(int(v), tz=timezone.utc) + return safe_fromtimestamp(v, tz=timezone.utc) return None @field_validator("earnings_announcement", mode="before", check_fields=False) @classmethod - def timestamp_validate(cls, v): # pylint: disable=E0213 + def timestamp_validate(cls, v: str) -> Optional[dateType]: """Return the datetime string as a datetime object.""" if v: dt = datetime.strptime(v, "%Y-%m-%dT%H:%M:%S.%f%z") dt = dt.replace(microsecond=0) timestamp = dt.timestamp() - return datetime.fromtimestamp(timestamp, tz=timezone.utc) + return safe_fromtimestamp(timestamp, tz=timezone.utc) return None @field_validator("change_percent", mode="after", check_fields=False) @@ -115,7 +121,7 @@ class FMPEquityQuoteFetcher( symbols = query.symbol.split(",") - results = [] + results: list = [] async def get_one(symbol): """Get data for one symbol.""" diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py b/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py index f2dd9a40662..6c6566828de 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py @@ -137,7 +137,7 @@ class FMPEtfHoldingsData(EtfHoldingsData): def replace_empty(cls, v): """Replace empty strings and 0s with None.""" if isinstance(v, str): - return v if v not in ("", "0") else None + return v if v not in ("", "0", "-") else None if isinstance(v, (float, int)): return v if v and v not in (0.0, 0) else None return v if v else None diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings_performance.py b/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings_performance.py index ef7411940c4..0a6f18b8339 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings_performance.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings_performance.py @@ -54,7 +54,7 @@ class FMPEtfHoldingsPerformanceFetcher( # Split into chunks of 500 chunks = [holdings_list[i : i + 500] for i in range(0, len(holdings_list), 500)] # Get price performance for the holdings - holdings_performance: list = [] + holdings_performance: List[Dict] = [] for holding_chunk in chunks: holdings_str = ( ",".join(holding_chunk) if len(holding_chunk) > 1 else holding_chunk[0] diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/forward_eps_estimates.py b/openbb_platform/providers/fmp/openbb_fmp/models/forward_eps_estimates.py new file mode 100644 index 00000000000..f0e2c5cdf60 --- /dev/null +++ b/openbb_platform/providers/fmp/openbb_fmp/models/forward_eps_estimates.py @@ -0,0 +1,153 @@ +"""FMP Forward EPS Model.""" + +# pylint: disable=unused-argument + +import asyncio +from datetime import datetime +from typing import Any, Dict, List, Literal, Optional +from warnings import warn + +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.forward_eps_estimates import ( + ForwardEpsEstimatesData, + ForwardEpsEstimatesQueryParams, +) +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_core.provider.utils.helpers import amake_request +from openbb_fmp.utils.helpers import create_url, response_callback +from pydantic import Field, field_validator + + +class FMPForwardEpsEstimatesQueryParams(ForwardEpsEstimatesQueryParams): + """FMP Forward EPS Query. + + Source: https://site.financialmodelingprep.com/developer/docs/analyst-estimates-api/ + """ + + __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + + __alias_dict__ = {"fiscal_period": "period"} + + fiscal_period: Literal["annual", "quarter"] = Field( + default="annual", + description="The future fiscal period to retrieve estimates for.", + ) + limit: Optional[int] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("limit", "") + ) + include_historical: bool = Field( + default=False, + description="If True, the data will include all past data and the limit will be ignored.", + ) + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def check_symbol(cls, value): + """Check the symbol.""" + if not value: + raise RuntimeError("Error: Symbol is a required field for FMP.") + return value + + +class FMPForwardEpsEstimatesData(ForwardEpsEstimatesData): + """FMP Forward EPS Data.""" + + __alias_dict__ = { + "number_of_analysts": "numberAnalystsEstimatedEps", + "high_estimate": "estimatedEpsHigh", + "low_estimate": "estimatedEpsLow", + "mean": "estimatedEpsAvg", + } + + +class FMPForwardEpsEstimatesFetcher( + Fetcher[ + FMPForwardEpsEstimatesQueryParams, + List[FMPForwardEpsEstimatesData], + ] +): + """Transform the query, extract and transform the data from the FMP endpoints.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> FMPForwardEpsEstimatesQueryParams: + """Transform the query params.""" + return FMPForwardEpsEstimatesQueryParams(**params) + + @staticmethod + async def aextract_data( + query: FMPForwardEpsEstimatesQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Return the raw data from the FMP endpoint.""" + api_key = credentials.get("fmp_api_key") if credentials else "" + + symbols = query.symbol.split(",") # type: ignore + + results: List[Dict] = [] + + async def get_one(symbol): + """Get data for one symbol.""" + url = create_url( + 3, f"analyst-estimates/{symbol}", api_key, query, ["symbol"] + ) + result = await amake_request( + url, response_callback=response_callback, **kwargs + ) + if not result or len(result) == 0: + warn(f"Symbol Error: No data found for {symbol}") + if result: + results.extend(result) + + await asyncio.gather(*[get_one(symbol) for symbol in symbols]) + + if not results: + raise EmptyDataError("No data returned for the given symbols.") + + return results + + @staticmethod + def transform_data( + query: FMPForwardEpsEstimatesQueryParams, data: List[Dict], **kwargs: Any + ) -> List[FMPForwardEpsEstimatesData]: + """Return the transformed data.""" + + symbols = query.symbol.split(",") if query.symbol else [] + cols = [ + "symbol", + "date", + "estimatedEpsAvg", + "estimatedEpsHigh", + "estimatedEpsLow", + "numberAnalystsEstimatedEps", + ] + year = datetime.now().year + results: List[FMPForwardEpsEstimatesData] = [] + for item in sorted( + data, + key=lambda item: ( # type: ignore + ( + symbols.index(item.get("symbol")) if item.get("symbol") in symbols else len(symbols), # type: ignore + item.get("date"), + ) + if symbols + else item.get("date") + ), + ): + temp: Dict[str, Any] = {} + for col in cols: + temp[col] = item.get(col) + + if ( + query.include_historical is False + and datetime.strptime(temp["date"], "%Y-%m-%d").year < year + ): + continue + results.append(FMPForwardEpsEstimatesData.model_validate(temp)) + + return ( + results[: query.limit] + if query.limit and query.include_historical is False + else results + ) diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/key_executives.py b/openbb_platform/providers/fmp/openbb_fmp/models/key_executives.py index 2329c7a7603..ab0f11d3283 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/key_executives.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/key_executives.py @@ -1,13 +1,18 @@ """FMP Key Executives Model.""" -from datetime import datetime -from typing import Any, Dict, List, Optional +# pylint: disable=unused-argument + +from datetime import ( + date as dateType, +) +from typing import Any, Dict, List, Optional, Union from openbb_core.provider.abstract.fetcher import Fetcher from openbb_core.provider.standard_models.key_executives import ( KeyExecutivesData, KeyExecutivesQueryParams, ) +from openbb_core.provider.utils.helpers import safe_fromtimestamp from openbb_fmp.utils.helpers import get_data_many from pydantic import field_validator @@ -24,9 +29,12 @@ class FMPKeyExecutivesData(KeyExecutivesData): @field_validator("titleSince", mode="before", check_fields=False) @classmethod - def time_validate(cls, v): # pylint: disable=E0213 + def time_validate(cls, v: Union[float, int]) -> Optional[dateType]: """Return the date as a datetime object.""" - return datetime.fromtimestamp(v / 1000) + if v: + v = v / 1000 + return safe_fromtimestamp(v) + return v # type: ignore class FMPKeyExecutivesFetcher( diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/market_indices.py b/openbb_platform/providers/fmp/openbb_fmp/models/market_indices.py index 7d860c4955d..15e4bb6719c 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/market_indices.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/market_indices.py @@ -1,5 +1,7 @@ """FMP Market Indices Model.""" +# pylint: disable=unused-argument + from datetime import datetime from typing import Any, Dict, List, Literal, Optional diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/market_snapshots.py b/openbb_platform/providers/fmp/openbb_fmp/models/market_snapshots.py index 89bdff1f42e..a1a00e372e4 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/market_snapshots.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/market_snapshots.py @@ -1,8 +1,11 @@ """FMP Market Snapshots Model.""" +# pylint: disable=unused-argument + from datetime import ( date as dateType, datetime, + timezone, ) from typing import Any, Dict, List, Optional, Union @@ -13,6 +16,7 @@ from openbb_core.provider.standard_models.market_snapshots import ( MarketSnapshotsData, MarketSnapshotsQueryParams, ) +from openbb_core.provider.utils.helpers import safe_fromtimestamp from openbb_fmp.utils.definitions import EXCHANGES from openbb_fmp.utils.helpers import get_data from pydantic import Field, field_validator @@ -87,14 +91,20 @@ class FMPMarketSnapshotsData(MarketSnapshotsData): @field_validator("last_price_timestamp", mode="before", check_fields=False) @classmethod - def validate_timestamp(cls, v): + def validate_timestamp(cls, v: Union[str, int, float]) -> Optional[dateType]: """Validate the timestamp.""" + if isinstance(v, str): + try: + v = float(v) + except ValueError: + return None + if isinstance(v, (int, float)) and v != 0: try: - v = datetime.fromtimestamp(v) - if v.hour == 0 and v.minute == 0 and v.second == 0: - v = v.date() - return v + v = safe_fromtimestamp(v, tz=timezone.utc) # type: ignore + if v.hour == 0 and v.minute == 0 and v.second == 0: # type: ignore + v = v.date() # type: ignore + return v # type: ignore except ValueError: return None return None diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/price_performance.py b/openbb_platform/providers/fmp/openbb_fmp/models/price_performance.py index 9a90bd7c7ea..aee89b084fb 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/price_performance.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/price_performance.py @@ -9,7 +9,7 @@ from openbb_core.provider.standard_models.recent_performance import ( RecentPerformanceData, RecentPerformanceQueryParams, ) -from openbb_fmp.utils.helpers import create_url, get_data_many +from openbb_fmp.utils.helpers import create_url, get_data_urls from pydantic import Field, model_validator @@ -71,14 +71,23 @@ class FMPPricePerformanceFetcher( ) -> List[Dict]: """Return the raw data from the FMP endpoint.""" api_key = credentials.get("fmp_api_key") if credentials else "" - - url = create_url( - version=3, - endpoint=f"stock-price-change/{query.symbol}", - api_key=api_key, - exclude=["symbol"], - ) - return await get_data_many(url, **kwargs) + symbols = query.symbol.upper().split(",") + symbols = list(dict.fromkeys(symbols)) + chunk_size = 200 + chunks = [ + symbols[i : i + chunk_size] for i in range(0, len(symbols), chunk_size) + ] + urls = [ + create_url( + version=3, + endpoint=f"stock-price-change/{','.join(chunk)}", + api_key=api_key, + exclude=["symbol"], + ) + for chunk in chunks + ] + data = await get_data_urls(urls, **kwargs) + return data @staticmethod def transform_data( @@ -88,7 +97,8 @@ class FMPPricePerformanceFetcher( ) -> List[FMPPricePerformanceData]: """Return the transformed data.""" - symbols = query.symbol.split(",") + symbols = query.symbol.upper().split(",") + symbols = list(dict.fromkeys(symbols)) if len(data) != len(symbols): data_symbols = [d["symbol"] for d in data] missing_symbols = [ diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/price_target_consensus.py b/openbb_platform/providers/fmp/openbb_fmp/models/price_target_consensus.py index a2b58c79fcc..c087bed700f 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/price_target_consensus.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/price_target_consensus.py @@ -1,5 +1,7 @@ """FMP Price Target Consensus Model.""" +# pylint: disable=unused-argument + import asyncio from typing import Any, Dict, List, Optional from warnings import warn @@ -12,6 +14,7 @@ from openbb_core.provider.standard_models.price_target_consensus import ( from openbb_core.provider.utils.errors import EmptyDataError from openbb_core.provider.utils.helpers import amake_request from openbb_fmp.utils.helpers import create_url, response_callback +from pydantic import field_validator class FMPPriceTargetConsensusQueryParams(PriceTargetConsensusQueryParams): @@ -22,6 +25,14 @@ class FMPPriceTargetConsensusQueryParams(PriceTargetConsensusQueryParams): __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def check_symbol(cls, value): + """Check the symbol.""" + if not value: + raise RuntimeError("Error: Symbol is a required field for FMP.") + return value + class FMPPriceTargetConsensusData(PriceTargetConsensusData): """FMP Price Target Consensus Data.""" @@ -49,8 +60,8 @@ class FMPPriceTargetConsensusFetcher( """Return the raw data from the FMP endpoint.""" api_key = credentials.get("fmp_api_key") if credentials else "" - symbols = query.symbol.split(",") - results = [] + symbols = query.symbol.split(",") # type: ignore + results: List[Dict] = [] async def get_one(symbol): """Get data for one symbol.""" diff --git a/openbb_platform/providers/fmp/openbb_fmp/utils/__init__.py b/openbb_platform/providers/fmp/openbb_fmp/utils/__init__.py index e69de29bb2d..9d4fc004b59 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/utils/__init__.py +++ b/openbb_platform/providers/fmp/openbb_fmp/utils/__init__.py @@ -0,0 +1 @@ +"""FMP utils.""" diff --git a/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py b/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py index 26d59ac562c..c37c5718cdc 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py +++ b/openbb_platform/providers/fmp/openbb_fmp/utils/helpers.py @@ -17,8 +17,7 @@ from pydantic import BaseModel async def response_callback( response: ClientResponse, _: ClientSession ) -> Union[Dict, List[Dict]]: - """Callback for make_request.""" - + """Use callback for make_request.""" data = await response.json() if isinstance(data, dict) and "Error Message" in data: raise RuntimeError(f"FMP Error Message -> {data['Error Message']}") diff --git a/openbb_platform/providers/fmp/poetry.lock b/openbb_platform/providers/fmp/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/providers/fmp/poetry.lock +++ b/openbb_platform/providers/fmp/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/fmp/pyproject.toml b/openbb_platform/providers/fmp/pyproject.toml index e9ac8ffb1b1..bed4c2ffe21 100644 --- a/openbb_platform/providers/fmp/pyproject.toml +++ b/openbb_platform/providers/fmp/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-fmp" -version = "1.1.4" +version = "1.1.5" description = "FMP extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_fmp" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/fmp/tests/__init__.py b/openbb_platform/providers/fmp/tests/__init__.py index e69de29bb2d..78e9c51c609 100644 --- a/openbb_platform/providers/fmp/tests/__init__.py +++ b/openbb_platform/providers/fmp/tests/__init__.py @@ -0,0 +1 @@ +"""FMP tests.""" diff --git a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_forward_eps_fetcher.yaml b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_forward_eps_fetcher.yaml new file mode 100644 index 00000000000..560c0de0adc --- /dev/null +++ b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_forward_eps_fetcher.yaml @@ -0,0 +1,269 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://financialmodelingprep.com/api/v3/analyst-estimates/AAPL?apikey=MOCK_API_KEY&include_historical=False&period=annual + response: + body: + string: !!binary | + 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 + BOPvFJr14/Oa2dMDwuyRPc6v/vIfzlxfWN1UAAA= + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - X-Requested-With, content-type, auth-token, Authorization, stripe-signature, + APPS, publicauthkey, privateauthkey + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '3600' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 30 Mar 2024 22:46:13 GMT + Etag: + - W/"54dd-RwVP7Yt3i1Q5RjCW+0M4GjjHSss" + Server: + - nginx/1.18.0 (Ubuntu) + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Frame-Options: + - SAMEORIGIN + X-Powered-By: + - Express + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://financialmodelingprep.com/api/v3/analyst-estimates/MSFT?apikey=MOCK_API_KEY&include_historical=False&period=annual + response: + body: + string: !!binary | + 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 + 9jvbnL/6t/8Fvv2Rcv5kAAA= + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - X-Requested-With, content-type, auth-token, Authorization, stripe-signature, + APPS, publicauthkey, privateauthkey + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '3600' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 30 Mar 2024 22:46:13 GMT + Etag: + - W/"64fe-nzsUq//kV6VdcUG7pCMU7V7pWvE" + Server: + - nginx/1.18.0 (Ubuntu) + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Frame-Options: + - SAMEORIGIN + X-Powered-By: + - Express + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_holdings_performance_fetcher.yaml b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_holdings_performance_fetcher.yaml index 5b3be161508..5f2bdcb6659 100644 --- a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_holdings_performance_fetcher.yaml +++ b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_etf_holdings_performance_fetcher.yaml @@ -9,58 +9,95 @@ interactions: Connection: - keep-alive method: GET - uri: https://financialmodelingprep.com/api/v3/etf-holder/SILJ?apikey=MOCK_API_KEY + uri: https://financialmodelingprep.com/api/v3/etf-holder/QQQ?apikey=MOCK_API_KEY response: body: string: !!binary | - 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 - C6m1LzmtZOhNpt/+8X8LG5B3LzUAAA== + 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 headers: Access-Control-Allow-Credentials: - 'true' @@ -80,9 +117,9 @@ interactions: Content-Type: - application/json; charset=utf-8 Date: - - Wed, 14 Feb 2024 22:54:36 GMT + - Wed, 17 Apr 2024 16:43:17 GMT Etag: - - W/"352f-DpJzehE7HALHT2ijZ/TGcQU1YpQ" + - W/"5e32-2V5eXB4F7xydvsbJCpdYbUQZt7g" Server: - nginx/1.18.0 (Ubuntu) Transfer-Encoding: @@ -106,31 +143,143 @@ interactions: Connection: - keep-alive method: GET - uri: https://financialmodelingprep.com/api/v3/stock-price-change/PAAS.SZN,HMY,AG,CS.SZN,BVN,HL,AYA.SZN,ELD.SZN,SIL.SZN,MAG.SZN,FIL.SZN,HBM.SZN,SSRM.SZN,GATO,DPM.SZN,SVM.SZN,OLA.SZN,IE,CDE,FVI.SZN,EXK,SEA.SZN,NGD.SZN,HOC.L,NEXA,GGD.SZN,VZLA.SZN,ARIS.SZN,ADT1.L,MUX,DSV.SZN,CASH&OTHER,DV.SZN,KCN.AX,ABRA.SZN,APM.SZN,SCZ.SZV,AOT.SZN,MTA.SZN,NUAG.SZN,USA.SZN,FISH.SZN,ASM.SZN,GSVR.SZN,MND.SZN,MKO.SZN,LGD.SZN,FWZ.SZN,SMT.SZN,TAU.SZN,KTN.SZN,SSVR.SZN,BCM.SZN,MGG.SZN,GORO,MRZ.SZN,BLSN9G6,284380Z.SZN,TV.SZN?apikey=MOCK_API_KEY + uri: https://financialmodelingprep.com/api/v3/stock-price-change/MSFT,AAPL,NVDA,AMZN,META,AVGO,GOOGL,GOOG,COST,TSLA,NFLX,AMD,PEP,LIN,ADBE,CSCO,TMUS,QCOM,INTU,AMAT,CMCSA,INTC,TXN,AMGN,MU,ISRG,HON,LRCX,BKNG,VRTX,ADP,REGN,SBUX,ADI,KLAC,MDLZ,PANW,GILD,SNPS,ASML,CDNS,PDD,MAR,MELI,CSX,ABNB,CRWD,PYPL,CTAS,ORLY,PCAR,NXPI,CEG,MRVL,ROP,MNST,WDAY,CPRT,DXCM,DASH,FTNT,ADSK,ODFL,MCHP,ROST,PAYX,KHC,AEP,KDP,IDXX,LULU,AZN,FAST,MRNA,GEHC,DDOG,CHTR,FANG,EXC,TTD,CSGP,CTSH,EA,BKR,CDW,VRSK,CCEP,TEAM,XEL,ANSS,BIIB,ON,DLTR,GFS,ZS,MDB,TTWO,WBD,ILMN,WBA,SIRI?apikey=MOCK_API_KEY response: body: string: !!binary | - H4sIAAAAAAAAA31Wu24dNxDt/RWCai/BeXBIplMkQQ5sSUDgBDIMFwlSxkiRFDGC/HsOl0veO7Rv - JKjQYHfJ85gz8/HV1dU/+Lu6uv7zy+df//j9+rur6zePH65f9yLdoRBD0pKOSmqVLYdYNdXx1GOr - WZAorEdNWo2CmczHrJWUA1EpdtS+/PVbe7eGJFXz+N4H1CwFskSjJq0mNbDGROMurUaFA0pcxsux - VTMHJcnj6M+//N0ejfjv39ffwnzz4CBTqDHyArlKrePoDpklSOUJZse8kYZMlOUc9SYRN5dxnQM1 - l8AWi4O9aQy1RnG4t5yC1pod8I0rVIinK+3AN9NQYuZx+Y58yzlQiSVdJOD7n58cA5BJZGBI3QZQ - PJKJk11Ai04IOwPZAp+5Yyeg4rkmnSNAA1O2+bldzWhBZ2kHn3BwJRokd+w5cMx5fK5DpxK0KI1i - R45Dg7afi8jfvFuA48NeeqicY/ZuZ3hbY5w37dKXUCzX8XaXnnNzvI3GGNpbsMQ6Eeyo4G+iFGcP - dUNIKIXTKO74BVeSkz6H9BGna0oiwxKH+CUGfDXKRQoebt4/OxI2CqLTWZ0FwudZZkN2GkrIghY/ - Z4E4jP93AqT1p9LozwM/mgQfmwDa/RulTDbY6+iNgL7yjJ+9SLieyaT0gL9UD/CjehH8D/ceuiB3 - dLptLyHaTE9uG21Oil9nAGitVMXh3xIIIamDuGEAQfPXMru3a10RoupDr/U5mdkopm8VDwqW6kHB - qF6k4PbOcyBIfN/8GwfGzWbIHuJbicmlH8GYhtY8J8BCpZgW+JRDIfb2Z0ZP5Tg/2Ds9tlOis/+m - JRAbL/5H8ODa5kN/qyVEMyoX0d+/vF3mHQ706DGLuPAS/hQ4m89+MJ1Ypqhdf4iqpSzZ18DCFdGl - 35ZAH01YBwEtJu10oZ4UEkyY59sHARAuk45HDwIM2Rv5/xLw+Ta8WyhQXUKwTbVSvQFaBnJ0I7/1 - hajTX5F0dV516C/Qqoqzv2BwSE3jjA4/pcDn+8fQXzgtkw/pif0jr+hzs59elv/p/uXGJwDiUotH - z0ghKjNw+kwHguLAw9SYaHNA9viDnTjSsvC4d3fw2LJqjqTVqy+Y/BptmfyGyW+6qI+oZFNZmn9U - L+K/uXtPYZ2BvEYgNiI9bTqdgNxiwgUgYY8r881u/xqqlTToHPKnNtTE9z9Q8SlQ95HQZid+ztFj - lYAPxYu/FDv2UbwI/fGnlzX7v9r7Ktapah54aTtKWnyP6EckOec3mGxlNvQADzdlYt/6EeZFdKpP - v9TKPFuiy4/VOBVLa/PXfRXz6w/Fyzvv29uncPMVAZznNpeObigaEaunYf3YxcKGwE59xPdpmz32 - 3vY9W3u/mWkG2pH95Daarj7izCI79a35GfvxEGnMftwyluJnPzoxpFTK5d5/eP7RLz4IvnPwOAvi - +9DDrXIsHnk7P0qa5x+DH2MjYSHz6AUBaTSXxA4f+3ktq/iV4DOeOnfxqyIQbNG+IiWIZIk+jE4F - +Q39q0//AVuAvzfrDQAA + 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 headers: Access-Control-Allow-Credentials: - 'true' @@ -150,9 +299,9 @@ interactions: Content-Type: - application/json; charset=utf-8 Date: - - Wed, 14 Feb 2024 22:54:36 GMT + - Wed, 17 Apr 2024 16:43:18 GMT Etag: - - W/"deb-ohIc7f5uvZzz1koNd5fmMzuDvvU" + - W/"648e-k76Hijq+oGLG6HSSxeTTBMtZTLg" Server: - nginx/1.18.0 (Ubuntu) Transfer-Encoding: diff --git a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_price_performance_fetcher.yaml b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_price_performance_fetcher.yaml index a5ed39c5832..8c7e1a8cf33 100644 --- a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_price_performance_fetcher.yaml +++ b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_price_performance_fetcher.yaml @@ -3,7 +3,7 @@ interactions: body: null headers: Accept: - - '*/*' + - application/json Accept-Encoding: - gzip, deflate Connection: @@ -13,23 +13,22 @@ interactions: response: body: string: !!binary | - H4sIAAAAAAAAA3WUvW5UMRCF+zzFautkNP/20K2ESENIVqEJEQWIkogCCiLEuzO+vr6JV2yxzZHv - er5zzvjxYrf7k7/dbv/z+enrj+/7N7v94XD3fn/ZVXqbCgEL2qpYU64QUD3MncfBmy6bFDEqscqy - yCQg5FJW0ZuIIBaGyLqqz7++pSwOZFbGbfTQ7idAkzo+l6aZg1kUGlM1jWmZNLaZsKmVGBiLjZGe - vvxu/ylsxYGLVUr97+X/nLi/ezgxgpL5xAhGNyxSJyMYSiUdg3QXApjqkHz1CysVVRtyNyGABOW1 - BQUcC4+rFwfYoDriuHdxwATMJYYr3QBKT5W4DP+6AVXze2ItZ+mPx+MpPftUgxyfOUjLGGzAW8Y9 - hujwFaK6j3MLfQW2GgNzjZ8BhX2MSiuoi9L2f4sWIMoxxU+YBzl0BN3phQlKIM70VgUCieMs/c39 - u48TfraojK6O7EOrhtg2bsNyqFxpWgBM/6XUoS30AaVEDKnTK+aozFt/2/wZkxBuvVno3aEQT8kz - ZZwoL0n07ltmURXH1x1e1Kum+0x+Fv9w8+nDhC9QYzNx4aeMnxQ3uxuVgkQ56X1CsTllhK/5W32N - tlS7AaYZddmqQ2vUtmW64F/lnrv59nLY6gmG0bz7WQegXPGZn8RUpL0zLmcNuL69vT6pf6BOBchn - iavM3U8Adt2eqkUzMA6euk/5zEWGcBo/1bAp/lyIqlKnzW8uFX15kfuSt9XnzeO1/DWgFtJxtPNn - ZbFxX3z+BxdaXH0ABgAA + H4sIAAAAAAAAA3WUP29VMQzF936KpzcXy/G/xGyVEF0obVWWghhAjFQMMFAhvjtO7nVKHnS4y1Gu + 45/PcT6cHQ6/4jscjt8fHz5/+3p8eTheXNy8OZ5vankVygsEI227pENiEGw1T111iUC8IO0aD61C + M6yyazY0AW8iWe7xx5cuOjB58yx4H1qBVrHMel0igUYunK0MjQuIOWbBgl2tXqGiWbb48OlnL8kF + JY5HmyX03+f/47+7uT/Fr1QWeoJWeGobfgGXWvO+ga/QRD0JBn0RMEXLiWz0CtU0oQY7xZ1mtMIj + sFvLXwd8pU5ZdWEv1oAQ58U7O3IFi5HWZ8lvb29X8gJkJU1J4xWRs4mJjjwDMtAFlLEl04auYKiW + vU50xlmtd8/9BppzHOT9z9pmAgckVRBhmmMb6OwMDTWd2chrlDQx82fBr+5ev/vHc5mWpOkewzg1 + vTTOAe2eh5VtSTwxOCGviS8IrmTp0UCXWKFGNut1TR2QbcZvS3yNguyr604t9uBpShu7xHpIbCGJ + Pu/7xdX7t6fGc8M18zFDL7asfEg6t2DQF4dIX8nOBn50q0XIFvwIs/ZV/hu/KvR858GBX4EYy7Lw + 3WKvMjvZMh8vBWhMPq/eQx8LyL1spWfpL6+vLxd6BBLOLnSfhyPW1Aa8g7viEnqPRJ6GPmwuOse2 + e0+AMbhZbnhv8X4YLvDcHxBss5UBqj2H+PT4DHxpGjFRzXlu9FZUYYCfffwDDUGZzesFAAA= headers: Access-Control-Allow-Credentials: - 'true' Access-Control-Allow-Headers: - X-Requested-With, content-type, auth-token, Authorization, stripe-signature, - APPS + APPS, publicauthkey, privateauthkey Access-Control-Allow-Methods: - GET, POST, OPTIONS Access-Control-Allow-Origin: @@ -43,9 +42,9 @@ interactions: Content-Type: - application/json; charset=utf-8 Date: - - Tue, 31 Oct 2023 12:26:07 GMT - ETag: - - W/"600-x3+R/EIjLOnwqmRci/IeiPVQcrY" + - Wed, 17 Apr 2024 16:43:17 GMT + Etag: + - W/"5eb-Y1janTBJnrcROzV/drQMXgAsvnA" Server: - nginx/1.18.0 (Ubuntu) Transfer-Encoding: diff --git a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py index e1b25d3bebb..f64d4287579 100644 --- a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py +++ b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py @@ -44,6 +44,7 @@ from openbb_fmp.models.etf_search import FMPEtfSearchFetcher from openbb_fmp.models.etf_sectors import FMPEtfSectorsFetcher from openbb_fmp.models.executive_compensation import FMPExecutiveCompensationFetcher from openbb_fmp.models.financial_ratios import FMPFinancialRatiosFetcher +from openbb_fmp.models.forward_eps_estimates import FMPForwardEpsEstimatesFetcher from openbb_fmp.models.historical_dividends import FMPHistoricalDividendsFetcher from openbb_fmp.models.historical_employees import FMPHistoricalEmployeesFetcher from openbb_fmp.models.historical_eps import FMPHistoricalEpsFetcher @@ -76,6 +77,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( def response_filter(response): + """Filter the response.""" if "Location" in response["headers"]: response["headers"]["Location"] = [ re.sub(r"apikey=[^&]+", "apikey=MOCK_API_KEY", x) @@ -86,6 +88,7 @@ def response_filter(response): @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -97,6 +100,7 @@ def vcr_config(): @pytest.mark.record_http def test_fmp_company_filings_fetcher(credentials=test_credentials): + """Test FMP company filings fetcher.""" params = {"symbol": "AAPL", "form_type": "10-K", "limit": 100} fetcher = FMPCompanyFilingsFetcher() @@ -106,6 +110,7 @@ def test_fmp_company_filings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_crypto_historical_fetcher(credentials=test_credentials): + """Test FMP crypto historical fetcher.""" params = { "symbol": "BTCUSD", "start_date": date(2023, 1, 1), @@ -119,6 +124,7 @@ def test_fmp_crypto_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_currency_historical_fetcher(credentials=test_credentials): + """Test FMP currency historical fetcher.""" params = { "symbol": "EURUSD", "start_date": date(2023, 1, 1), @@ -132,6 +138,7 @@ def test_fmp_currency_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_market_indices_fetcher(credentials=test_credentials): + """Test FMP market indices fetcher.""" params = { "symbol": "^DJI", "start_date": date(2023, 1, 1), @@ -145,6 +152,7 @@ def test_fmp_market_indices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_index_historical_fetcher(credentials=test_credentials): + """Test FMP index historical fetcher.""" params = { "symbol": "^DJI", "start_date": date(2023, 1, 1), @@ -158,6 +166,7 @@ def test_fmp_index_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_historical_fetcher(credentials=test_credentials): + """Test FMP equity historical fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -172,6 +181,7 @@ def test_fmp_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_company_news_fetcher(credentials=test_credentials): + """Test FMP company news fetcher.""" params = {"symbol": "AAPL,MSFT"} fetcher = FMPCompanyNewsFetcher() @@ -181,6 +191,7 @@ def test_fmp_company_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_balance_sheet_fetcher(credentials=test_credentials): + """Test FMP balance sheet fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPBalanceSheetFetcher() @@ -190,6 +201,7 @@ def test_fmp_balance_sheet_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_cash_flow_statement_fetcher(credentials=test_credentials): + """Test FMP cash flow statement fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPCashFlowStatementFetcher() @@ -199,6 +211,7 @@ def test_fmp_cash_flow_statement_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_income_statement_fetcher(credentials=test_credentials): + """Test FMP income statement fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPIncomeStatementFetcher() @@ -208,6 +221,7 @@ def test_fmp_income_statement_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_available_indices_fetcher(credentials=test_credentials): + """Test FMP available indices fetcher.""" params = {} fetcher = FMPAvailableIndicesFetcher() @@ -217,6 +231,7 @@ def test_fmp_available_indices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_key_executives_fetcher(credentials=test_credentials): + """Test FMP key executives fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPKeyExecutivesFetcher() @@ -226,6 +241,7 @@ def test_fmp_key_executives_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_world_news_fetcher(credentials=test_credentials): + """Test FMP world news fetcher.""" params = {} fetcher = FMPWorldNewsFetcher() @@ -235,6 +251,7 @@ def test_fmp_world_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_income_statement_growth_fetcher(credentials=test_credentials): + """Test FMP income statement growth fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPIncomeStatementGrowthFetcher() @@ -244,6 +261,7 @@ def test_fmp_income_statement_growth_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_balance_sheet_growth_fetcher(credentials=test_credentials): + """Test FMP balance sheet growth fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPBalanceSheetGrowthFetcher() @@ -253,6 +271,7 @@ def test_fmp_balance_sheet_growth_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_cash_flow_statement_growth_fetcher(credentials=test_credentials): + """Test FMP cash flow statement growth fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPCashFlowStatementGrowthFetcher() @@ -262,6 +281,7 @@ def test_fmp_cash_flow_statement_growth_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_share_statistics_fetcher(credentials=test_credentials): + """Test FMP share statistics fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPShareStatisticsFetcher() @@ -271,6 +291,7 @@ def test_fmp_share_statistics_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_revenue_geographic_fetcher(credentials=test_credentials): + """Test FMP revenue geographic fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPRevenueGeographicFetcher() @@ -280,6 +301,7 @@ def test_fmp_revenue_geographic_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_revenue_business_line_fetcher(credentials=test_credentials): + """Test FMP revenue business line fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPRevenueBusinessLineFetcher() @@ -289,6 +311,7 @@ def test_fmp_revenue_business_line_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_institutional_ownership_fetcher(credentials=test_credentials): + """Test FMP institutional ownership fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPInstitutionalOwnershipFetcher() @@ -298,6 +321,7 @@ def test_fmp_institutional_ownership_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_company_overview_fetcher(credentials=test_credentials): + """Test FMP company overview fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPCompanyOverviewFetcher() @@ -307,6 +331,7 @@ def test_fmp_company_overview_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_insider_trading_fetcher(credentials=test_credentials): + """Test FMP insider trading fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPInsiderTradingFetcher() @@ -316,6 +341,7 @@ def test_fmp_insider_trading_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_ownership_fetcher(credentials=test_credentials): + """Test FMP equity ownership fetcher.""" params = {"symbol": "AAPL", "date": date(2022, 12, 31)} fetcher = FMPEquityOwnershipFetcher() @@ -325,6 +351,7 @@ def test_fmp_equity_ownership_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_price_target_consensus_fetcher(credentials=test_credentials): + """Test FMP price target consensus fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPPriceTargetConsensusFetcher() @@ -334,6 +361,7 @@ def test_fmp_price_target_consensus_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_price_target_fetcher(credentials=test_credentials): + """Test FMP price target fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPPriceTargetFetcher() @@ -343,6 +371,7 @@ def test_fmp_price_target_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_analyst_estimates_fetcher(credentials=test_credentials): + """Test FMP analyst estimates fetcher.""" params = {"symbol": "AAPL", "limit": 30} fetcher = FMPAnalystEstimatesFetcher() @@ -352,6 +381,7 @@ def test_fmp_analyst_estimates_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_historical_eps_fetcher(credentials=test_credentials): + """Test FMP historical EPS fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPHistoricalEpsFetcher() @@ -361,6 +391,7 @@ def test_fmp_historical_eps_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_earnings_call_transcript_fetcher(credentials=test_credentials): + """Test FMP earnings call transcript fetcher.""" params = {"symbol": "AAPL", "year": 2020} fetcher = FMPEarningsCallTranscriptFetcher() @@ -370,6 +401,7 @@ def test_fmp_earnings_call_transcript_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_historical_splits_fetcher(credentials=test_credentials): + """Test FMP historical splits fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPHistoricalSplitsFetcher() @@ -379,6 +411,7 @@ def test_fmp_historical_splits_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_calendar_splits_fetcher(credentials=test_credentials): + """Test FMP calendar splits fetcher.""" params = {"start_date": date(2023, 1, 1), "end_date": date(2023, 1, 10)} fetcher = FMPCalendarSplitsFetcher() @@ -388,6 +421,7 @@ def test_fmp_calendar_splits_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_historical_dividends_fetcher(credentials=test_credentials): + """Test FMP historical dividends fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPHistoricalDividendsFetcher() @@ -397,6 +431,7 @@ def test_fmp_historical_dividends_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_key_metrics_fetcher(credentials=test_credentials): + """Test FMP key metrics fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPKeyMetricsFetcher() @@ -406,6 +441,7 @@ def test_fmp_key_metrics_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_treasury_rates_fetcher(credentials=test_credentials): + """Test FMP treasury rates fetcher.""" params = {"start_date": date(2023, 1, 1), "end_date": date(2023, 5, 10)} fetcher = FMPTreasuryRatesFetcher() @@ -415,6 +451,7 @@ def test_fmp_treasury_rates_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_executive_compensation_fetcher(credentials=test_credentials): + """Test FMP executive compensation fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPExecutiveCompensationFetcher() @@ -424,6 +461,7 @@ def test_fmp_executive_compensation_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_currency_pairs_fetcher(credentials=test_credentials): + """Test FMP currency pairs fetcher.""" params = {} fetcher = FMPCurrencyPairsFetcher() @@ -433,6 +471,7 @@ def test_fmp_currency_pairs_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_peers_fetcher(credentials=test_credentials): + """Test FMP equity peers fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPEquityPeersFetcher() @@ -442,6 +481,7 @@ def test_fmp_equity_peers_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_valuation_multiples_fetcher(credentials=test_credentials): + """Test FMP equity valuation multiples fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPEquityValuationMultiplesFetcher() @@ -451,6 +491,7 @@ def test_fmp_equity_valuation_multiples_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_historical_employees_fetcher(credentials=test_credentials): + """Test FMP historical employees fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPHistoricalEmployeesFetcher() @@ -460,6 +501,7 @@ def test_fmp_historical_employees_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_risk_premium_fetcher(credentials=test_credentials): + """Test FMP risk premium fetcher.""" params = {} fetcher = FMPRiskPremiumFetcher() @@ -469,6 +511,7 @@ def test_fmp_risk_premium_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_index_constituents_fetcher(credentials=test_credentials): + """Test FMP index constituents fetcher.""" params = {} fetcher = FMPIndexConstituentsFetcher() @@ -478,6 +521,7 @@ def test_fmp_index_constituents_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_calendar_dividend_fetcher(credentials=test_credentials): + """Test FMP calendar dividend fetcher.""" params = {"start_date": date(2023, 11, 6), "end_date": date(2023, 11, 10)} fetcher = FMPCalendarDividendFetcher() @@ -487,6 +531,7 @@ def test_fmp_calendar_dividend_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_quote_fetcher(credentials=test_credentials): + """Test FMP equity quote fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPEquityQuoteFetcher() @@ -496,6 +541,7 @@ def test_fmp_equity_quote_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_screener_fetcher(credentials=test_credentials): + """Test FMP equity screener fetcher.""" params = {"query": "midstream", "sector": "Energy", "beta_max": 0.5} fetcher = FMPEquityScreenerFetcher() @@ -505,6 +551,7 @@ def test_fmp_equity_screener_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_financial_ratios_fetcher(credentials=test_credentials): + """Test FMP financial ratios fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPFinancialRatiosFetcher() @@ -514,6 +561,7 @@ def test_fmp_financial_ratios_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_economic_calendar_fetcher(credentials=test_credentials): + """Test FMP economic calendar fetcher.""" params = {} fetcher = FMPEconomicCalendarFetcher() @@ -523,6 +571,7 @@ def test_fmp_economic_calendar_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_market_snapshots_fetcher(credentials=test_credentials): + """Test FMP market snapshots fetcher.""" params = {"market": "lse"} fetcher = FMPMarketSnapshotsFetcher() @@ -532,6 +581,7 @@ def test_fmp_market_snapshots_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_search_fetcher(credentials=test_credentials): + """Test FMP ETF search fetcher.""" params = {"query": "India"} fetcher = FMPEtfSearchFetcher() @@ -541,6 +591,7 @@ def test_fmp_etf_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_info_fetcher(credentials=test_credentials): + """Test FMP ETF info fetcher.""" params = {"symbol": "IOO"} fetcher = FMPEtfInfoFetcher() @@ -550,6 +601,7 @@ def test_fmp_etf_info_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_sectors_fetcher(credentials=test_credentials): + """Test FMP ETF sectors fetcher.""" params = {"symbol": "IOO"} fetcher = FMPEtfSectorsFetcher() @@ -559,6 +611,7 @@ def test_fmp_etf_sectors_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_holdings_fetcher(credentials=test_credentials): + """Test FMP ETF holdings fetcher.""" params = {"symbol": "IOO", "date": date(2022, 12, 31)} fetcher = FMPEtfHoldingsFetcher() @@ -568,6 +621,7 @@ def test_fmp_etf_holdings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_holdings_date_fetcher(credentials=test_credentials): + """Test FMP ETF holdings date fetcher.""" params = {"symbol": "IOO"} fetcher = FMPEtfHoldingsDateFetcher() @@ -577,6 +631,7 @@ def test_fmp_etf_holdings_date_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_price_performance_fetcher(credentials=test_credentials): + """Test FMP price performance fetcher.""" params = {"symbol": "AAPL,SPY,QQQ,MSFT,AMZN,GOOG"} fetcher = FMPPricePerformanceFetcher() @@ -586,6 +641,7 @@ def test_fmp_price_performance_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_countries_fetcher(credentials=test_credentials): + """Test FMP ETF countries fetcher.""" params = {"symbol": "VTI,QQQ,VOO,IWM"} fetcher = FMPEtfCountriesFetcher() @@ -595,7 +651,8 @@ def test_fmp_etf_countries_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_holdings_performance_fetcher(credentials=test_credentials): - params = {"symbol": "SILJ"} + """Test FMP ETF holdings performance fetcher.""" + params = {"symbol": "QQQ"} fetcher = FMPEtfHoldingsPerformanceFetcher() result = fetcher.test(params, credentials) @@ -604,6 +661,7 @@ def test_fmp_etf_holdings_performance_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_discovery_filings_fetcher(credentials=test_credentials): + """Test FMP discovery filings fetcher.""" params = { "start_date": None, "end_date": None, @@ -619,6 +677,7 @@ def test_fmp_discovery_filings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_crypto_search_fetcher(credentials=test_credentials): + """Test FMP crypto search fetcher.""" params = {"query": "asd"} fetcher = FMPCryptoSearchFetcher() @@ -628,6 +687,7 @@ def test_fmp_crypto_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_calendar_earnings_fetcher(credentials=test_credentials): + """Test FMP calendar earnings fetcher.""" params = {"symbol": "AAPL"} params = { @@ -641,6 +701,7 @@ def test_fmp_calendar_earnings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_profile_fetcher(credentials=test_credentials): + """Test FMP equity profile fetcher.""" params = {"symbol": "AAPL"} fetcher = FMPEquityProfileFetcher() @@ -650,6 +711,7 @@ def test_fmp_equity_profile_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_etf_equity_exposure_fetcher(credentials=test_credentials): + """Test FMP ETF equity exposure fetcher.""" params = {"symbol": "AAPL,MSFT"} fetcher = FMPEtfEquityExposureFetcher() @@ -659,6 +721,7 @@ def test_fmp_etf_equity_exposure_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_currency_snapshots_fetcher(credentials=test_credentials): + """Test FMP currency snapshots fetcher.""" params = { "base": "XAU", "quote_type": "indirect", @@ -668,3 +731,18 @@ def test_fmp_currency_snapshots_fetcher(credentials=test_credentials): fetcher = FMPCurrencySnapshotsFetcher() result = fetcher.test(params, credentials) assert result is None + + +@pytest.mark.record_http +def test_fmp_equity_forward_eps_fetcher(credentials=test_credentials): + """Test FMP forward EPS estimates fetcher.""" + params = { + "symbol": "MSFT,AAPL", + "fiscal_period": "annual", + "include_historical": False, + "limit": None, + } + + fetcher = FMPForwardEpsEstimatesFetcher() + result = fetcher.test(params, credentials) + assert result is None diff --git a/openbb_platform/providers/fred/openbb_fred/models/series.py b/openbb_platform/providers/fred/openbb_fred/models/series.py index 35db3d0a2a5..7c1108e73f3 100644 --- a/openbb_platform/providers/fred/openbb_fred/models/series.py +++ b/openbb_platform/providers/fred/openbb_fred/models/series.py @@ -1,10 +1,9 @@ """FRED Series Model.""" -import json -import warnings from typing import Any, Dict, List, Literal, Optional import pandas as pd +from openbb_core.provider.abstract.annotated_result import AnnotatedResult from openbb_core.provider.abstract.fetcher import Fetcher from openbb_core.provider.standard_models.fred_series import ( SeriesData, @@ -19,8 +18,6 @@ from openbb_core.provider.utils.helpers import ( ) from pydantic import Field -_warn = warnings.warn - class FredSeriesQueryParams(SeriesQueryParams): """FRED Series Query Params.""" @@ -145,9 +142,18 @@ class FredSeriesFetcher( f"{metadata_url}?series_id={series_id}&file_type=json&api_key={api_key}", timeout=5, ) - _metadata = metadata_response.get("seriess", [{}])[0] - observations = observations_response.get("observations") + # seriess is not a typo, it's the actual key in the response + _metadata = ( + metadata_response.get("seriess", [{}])[0] + if isinstance(metadata_response, dict) + else {} + ) or {} + observations = ( + observations_response.get("observations") + if isinstance(observations_response, dict) + else [] + ) or [] try: for d in observations: d.pop("realtime_start") @@ -177,24 +183,18 @@ class FredSeriesFetcher( results = await amake_requests(urls, callback, timeout=5, **kwargs) - metadata, data = {}, {} - for item in results: - for series_id, result in item.items(): - data[series_id] = result.pop("data") - metadata[series_id] = result - - _warn(json.dumps(metadata)) - - return data + return results # pylint: disable=unused-argument @staticmethod def transform_data( - query: FredSeriesQueryParams, data: Dict, **kwargs: Any - ) -> List[FredSeriesData]: + query: FredSeriesQueryParams, data: List[Dict[str, Any]], **kwargs: Any + ) -> AnnotatedResult[List[FredSeriesData]]: """Transform data.""" - results = ( - pd.DataFrame(data) + series = {_id: s.pop("data", {}) for d in data for _id, s in d.items()} + metadata = {_id: m for d in data for _id, m in d.items()} + records = ( + pd.DataFrame(series) .filter(items=query.symbol.split(","), axis=1) .reset_index() .rename(columns={"index": "date"}) @@ -202,4 +202,5 @@ class FredSeriesFetcher( .replace("N/A", None) .to_dict("records") ) - return [FredSeriesData.model_validate(d) for d in results] + validated = [FredSeriesData.model_validate(r) for r in records] + return AnnotatedResult(result=validated, metadata=metadata) diff --git a/openbb_platform/providers/fred/poetry.lock b/openbb_platform/providers/fred/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/providers/fred/poetry.lock +++ b/openbb_platform/providers/fred/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/fred/pyproject.toml b/openbb_platform/providers/fred/pyproject.toml index 7ef38fef193..9c40534c1e6 100644 --- a/openbb_platform/providers/fred/pyproject.toml +++ b/openbb_platform/providers/fred/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-fred" -version = "1.1.4" +version = "1.1.5" description = "FRED extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_fred" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/government_us/__init__.py b/openbb_platform/providers/government_us/__init__.py index e69de29bb2d..da089bdfadf 100644 --- a/openbb_platform/providers/government_us/__init__.py +++ b/openbb_platform/providers/government_us/__init__.py @@ -0,0 +1 @@ +"""Government US provider.""" diff --git a/openbb_platform/providers/government_us/openbb_government_us/models/treasury_prices.py b/openbb_platform/providers/government_us/openbb_government_us/models/treasury_prices.py index 15e7e1bb0d0..a4fcc6efcca 100644 --- a/openbb_platform/providers/government_us/openbb_government_us/models/treasury_prices.py +++ b/openbb_platform/providers/government_us/openbb_government_us/models/treasury_prices.py @@ -1,4 +1,4 @@ -"""US Government Treasury Prices""" +"""US Government Treasury Prices.""" # pylint: disable=unused-argument import asyncio @@ -38,12 +38,13 @@ class GovernmentUSTreasuryPricesFetcher( List[GovernmentUSTreasuryPricesData], ] ): + """US Government Treasury Prices Fetcher.""" + @staticmethod def transform_query( params: Dict[str, Any] ) -> GovernmentUSTreasuryPricesQueryParams: """Transform query params.""" - if params.get("date") is None: _date = datetime.now().date() else: @@ -66,7 +67,6 @@ class GovernmentUSTreasuryPricesFetcher( **kwargs: Any, ) -> str: """Extract the raw data from US Treasury website.""" - url = "https://treasurydirect.gov/GA-FI/FedInvest/securityPriceDetail" HEADERS = { @@ -110,7 +110,6 @@ class GovernmentUSTreasuryPricesFetcher( **kwargs: Any, ) -> List[GovernmentUSTreasuryPricesData]: """Transform the data.""" - try: if not data: raise EmptyDataError("Data not found") diff --git a/openbb_platform/providers/government_us/openbb_government_us/utils/__init__.py b/openbb_platform/providers/government_us/openbb_government_us/utils/__init__.py index e69de29bb2d..7267bae0ade 100644 --- a/openbb_platform/providers/government_us/openbb_government_us/utils/__init__.py +++ b/openbb_platform/providers/government_us/openbb_government_us/utils/__init__.py @@ -0,0 +1 @@ +"""OpenBB Government US utils.""" diff --git a/openbb_platform/providers/government_us/poetry.lock b/openbb_platform/providers/government_us/poetry.lock index 28867b4b6fa..66b30afa37e 100644 --- a/openbb_platform/providers/government_us/poetry.lock +++ b/openbb_platform/providers/government_us/poetry.lock @@ -682,13 +682,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1412,4 +1412,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8f3447e01cd72ffec4124073365a6c63ca7e506cfd52f41229898de66b659e74" +content-hash = "359d61fc578ab8392f652c695d09f81e572886b70973b986dac03b5a24e5b654" diff --git a/openbb_platform/providers/government_us/pyproject.toml b/openbb_platform/providers/government_us/pyproject.toml index f7cf8a79133..ba618f38b98 100644 --- a/openbb_platform/providers/government_us/pyproject.toml +++ b/openbb_platform/providers/government_us/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-government-us" -version = "1.1.4" +version = "1.1.5" description = "US Government Data Extension for OpenBB" authors = ["OpenBB "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_government_us" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" random-user-agent = "^1.0.1" [build-system] diff --git a/openbb_platform/providers/government_us/tests/__init__.py b/openbb_platform/providers/government_us/tests/__init__.py index e69de29bb2d..6af19936d32 100644 --- a/openbb_platform/providers/government_us/tests/__init__.py +++ b/openbb_platform/providers/government_us/tests/__init__.py @@ -0,0 +1 @@ +"""Government US tests.""" diff --git a/openbb_platform/providers/intrinio/__init__.py b/openbb_platform/providers/intrinio/__init__.py index e69de29bb2d..a87030559a5 100644 --- a/openbb_platform/providers/intrinio/__init__.py +++ b/openbb_platform/providers/intrinio/__init__.py @@ -0,0 +1 @@ +"""Intrinio provider.""" diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/__init__.py b/openbb_platform/providers/intrinio/openbb_intrinio/__init__.py index 49af00c352b..389dc782cb6 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/__init__.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/__init__.py @@ -18,6 +18,12 @@ from openbb_intrinio.models.etf_price_performance import ( ) from openbb_intrinio.models.etf_search import IntrinioEtfSearchFetcher from openbb_intrinio.models.financial_ratios import IntrinioFinancialRatiosFetcher +from openbb_intrinio.models.forward_eps_estimates import ( + IntrinioForwardEpsEstimatesFetcher, +) +from openbb_intrinio.models.forward_sales_estimates import ( + IntrinioForwardSalesEstimatesFetcher, +) from openbb_intrinio.models.fred_series import IntrinioFredSeriesFetcher from openbb_intrinio.models.historical_attributes import ( IntrinioHistoricalAttributesFetcher, @@ -37,6 +43,9 @@ from openbb_intrinio.models.latest_attributes import IntrinioLatestAttributesFet from openbb_intrinio.models.market_snapshots import IntrinioMarketSnapshotsFetcher from openbb_intrinio.models.options_chains import IntrinioOptionsChainsFetcher from openbb_intrinio.models.options_unusual import IntrinioOptionsUnusualFetcher +from openbb_intrinio.models.price_target_consensus import ( + IntrinioPriceTargetConsensusFetcher, +) from openbb_intrinio.models.reported_financials import IntrinioReportedFinancialsFetcher from openbb_intrinio.models.search_attributes import ( IntrinioSearchAttributesFetcher, @@ -67,6 +76,8 @@ intrinio_provider = Provider( "EtfPricePerformance": IntrinioEtfPricePerformanceFetcher, "EtfSearch": IntrinioEtfSearchFetcher, "FinancialRatios": IntrinioFinancialRatiosFetcher, + "ForwardEpsEstimates": IntrinioForwardEpsEstimatesFetcher, + "ForwardSalesEstimates": IntrinioForwardSalesEstimatesFetcher, "FredSeries": IntrinioFredSeriesFetcher, "HistoricalAttributes": IntrinioHistoricalAttributesFetcher, "HistoricalDividends": IntrinioHistoricalDividendsFetcher, @@ -80,6 +91,7 @@ intrinio_provider = Provider( "MarketSnapshots": IntrinioMarketSnapshotsFetcher, "OptionsChains": IntrinioOptionsChainsFetcher, "OptionsUnusual": IntrinioOptionsUnusualFetcher, + "PriceTargetConsensus": IntrinioPriceTargetConsensusFetcher, "ReportedFinancials": IntrinioReportedFinancialsFetcher, "SearchAttributes": IntrinioSearchAttributesFetcher, "ShareStatistics": IntrinioShareStatisticsFetcher, diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/equity_info.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/equity_info.py index 6488dbd7025..21c8d7d44af 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/equity_info.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/equity_info.py @@ -74,5 +74,5 @@ class IntrinioEquityInfoFetcher( data: List[Dict], **kwargs: Any, ) -> List[IntrinioEquityInfoData]: - """Transforms the data.""" + """Transform the data.""" return [IntrinioEquityInfoData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/etf_holdings.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/etf_holdings.py index 52d546bf002..6843380c2f8 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/etf_holdings.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/etf_holdings.py @@ -10,6 +10,7 @@ from openbb_core.provider.standard_models.etf_holdings import ( EtfHoldingsData, EtfHoldingsQueryParams, ) +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS from openbb_core.provider.utils.helpers import ( ClientResponse, ClientSession, @@ -25,6 +26,12 @@ class IntrinioEtfHoldingsQueryParams(EtfHoldingsQueryParams): Source: https://docs.intrinio.com/documentation/web_api/get_etf_holdings_v2 """ + __alias_dict__ = {"date": "as_of_date"} + + date: Optional[dateType] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("date", "") + ) + class IntrinioEtfHoldingsData(EtfHoldingsData): """Intrinio ETF Holdings Data.""" @@ -145,14 +152,12 @@ class IntrinioEtfHoldingsFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the Intrinio endpoint.""" - api_key = credentials.get("intrinio_api_key") if credentials else "" - symbol = query.symbol + ":US" if ":" not in query.symbol else query.symbol - URL = f"https://api-v2.intrinio.com/etfs/{symbol}/holdings?page_size=10000&api_key={api_key}" - - data = [] + if query.date: + URL += f"&as_of_date={query.date}" + data: List = [] async def response_callback(response: ClientResponse, session: ClientSession): """Async response callback.""" diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/forward_eps_estimates.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/forward_eps_estimates.py new file mode 100644 index 00000000000..294428c3055 --- /dev/null +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/forward_eps_estimates.py @@ -0,0 +1,229 @@ +"""Intrinio Forward EPS Estimates Model.""" + +# pylint: disable=unused-argument + +import asyncio +from datetime import datetime +from typing import Any, Dict, List, Literal, Optional, Union +from warnings import warn + +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.forward_eps_estimates import ( + ForwardEpsEstimatesData, + ForwardEpsEstimatesQueryParams, +) +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_core.provider.utils.helpers import ( + amake_request, + get_querystring, +) +from openbb_intrinio.utils.helpers import response_callback +from pydantic import Field, field_validator, model_validator + + +class IntrinioForwardEpsEstimatesQueryParams(ForwardEpsEstimatesQueryParams): + """Intrinio Forward EPS Estimates Query. + + https://docs.intrinio.com/documentation/web_api/get_zacks_sales_estimates_v2 + """ + + __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + + fiscal_year: Optional[int] = Field( + default=None, + description="The future fiscal year to retrieve estimates for." + + " When no symbol and year is supplied the current calendar year is used.", + ) + fiscal_period: Union[Literal["fy", "q1", "q2", "q3", "q4"], None] = Field( + default=None, + description="The future fiscal period to retrieve estimates for.", + ) + calendar_year: Optional[int] = Field( + default=None, + description="The future calendar year to retrieve estimates for." + + " When no symbol and year is supplied the current calendar year is used.", + ) + calendar_period: Union[Literal["q1", "q2", "q3", "q4"], None] = Field( + default=None, + description="The future calendar period to retrieve estimates for.", + ) + + @model_validator(mode="after") + @classmethod + def validate_choices(cls, values): + """Validate the model and set a safe default state.""" + if values.symbol is None and ( + values.calendar_year is None and values.fiscal_year is None + ): + values.calendar_year = datetime.now().year + return values + + +class IntrinioForwardEpsEstimatesData(ForwardEpsEstimatesData): + """Intrinio Forward EPS Estimates Data.""" + + __alias_dict__ = { + "high_estimate": "high", + "low_estimate": "low", + "number_of_analysts": "count", + "mean": "estimated_sales_mean", + "revisions_change_percent": "percent_change", + "mean_1w": "mean_7_days_ago", + "mean_1m": "mean_30_days_ago", + "mean_2m": "mean_60_days_ago", + "mean_3m": "mean_90_days_ago", + } + + revisions_change_percent: Optional[float] = Field( + default=None, + description="The earnings per share (EPS) percent change in estimate for the period.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) + mean_1w: Optional[float] = Field( + default=None, + description="The mean estimate for the period one week ago.", + ) + mean_1m: Optional[float] = Field( + default=None, + description="The mean estimate for the period one month ago.", + ) + mean_2m: Optional[float] = Field( + default=None, + description="The mean estimate for the period two months ago.", + ) + mean_3m: Optional[float] = Field( + default=None, + description="The mean estimate for the period three months ago.", + ) + + @field_validator( + "revisions_change_percent", + mode="before", + check_fields=False, + ) + @classmethod + def normalize_percent( + cls, v: Optional[Union[int, float]] + ) -> Optional[Union[int, float]]: + """Normalize percent values.""" + return v / 100 if v else None + + +class IntrinioForwardEpsEstimatesFetcher( + Fetcher[ + IntrinioForwardEpsEstimatesQueryParams, List[IntrinioForwardEpsEstimatesData] + ] +): + """Intrinio Forward EPS Estimates Fetcher.""" + + @staticmethod + def transform_query( + params: Dict[str, Any] + ) -> IntrinioForwardEpsEstimatesQueryParams: + """Transform the query params.""" + return IntrinioForwardEpsEstimatesQueryParams(**params) + + @staticmethod + async def aextract_data( + query: IntrinioForwardEpsEstimatesQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Return the raw data from the Intrinio endpoint.""" + api_key = credentials.get("intrinio_api_key") if credentials else "" + + BASE_URL = "https://api-v2.intrinio.com/zacks/eps_estimates?page_size=10000" + + symbols = query.symbol.split(",") if query.symbol else None + + query_str = get_querystring( + query.model_dump(by_alias=True), + ["symbol", "calendar_period", "fiscal_period", "limit"], + ) + + results: List[Dict] = [] + + async def get_one(symbol): + """Get the data for one symbol.""" + url = f"{BASE_URL}&identifier={symbol}&{query_str}&api_key={api_key}" + new_data: List[Dict] = [] + data = await amake_request( + url, response_callback=response_callback, **kwargs + ) + if not data or not isinstance(data, dict) or not data.get("estimates"): + warn(f"Symbol Error: No data found for {symbol}") + if isinstance(data, dict) and data.get("estimates"): + new_data = data.get("estimates") # type: ignore + if new_data: + results.extend(new_data) + + if symbols: + await asyncio.gather(*[get_one(symbol) for symbol in symbols]) + return results + + async def fetch_callback(response, session): + """Use callback for pagination.""" + data = await response.json() + messages = data.get("messages", None) + if messages: + raise RuntimeError(str(messages)) + if data.get("estimates") and len(data.get("estimates")) > 0: # type: ignore + results.extend(data.get("estimates")) # type: ignore + while data.get("next_page"): # type: ignore + next_page = data["next_page"] # type: ignore + next_url = f"{url}&next_page={next_page}" + data = await amake_request(next_url, session=session, **kwargs) + if ( + "estimates" in data + and len(data.get("estimates")) > 0 # type: ignore + ): + results.extend(data.get("estimates")) # type: ignore + return results + + url = f"{BASE_URL}&{query_str}&api_key={api_key}" + + results = await amake_request(url, response_callback=fetch_callback, **kwargs) # type: ignore + + if not results: + raise EmptyDataError("The request was successful but was returned empty.") + + return results + + @staticmethod + def transform_data( + query: IntrinioForwardEpsEstimatesQueryParams, + data: List[Dict], + **kwargs: Any, + ) -> List[IntrinioForwardEpsEstimatesData]: + """Transform the raw data into the standard format.""" + symbols = query.symbol.split(",") if query.symbol else [] + results: List[IntrinioForwardEpsEstimatesData] = [] + for item in sorted( + data, + key=lambda item: ( # type: ignore + ( + symbols.index(item.get("symbol")) if item.get("symbol") in symbols else len(symbols), # type: ignore + item.get("date"), + ) + if symbols + else item.get("date") + ), + ): + temp: Dict[str, Any] = {} + company = item.pop("company") + if company.get("ticker") is None: + continue + temp["symbol"] = company.get("ticker") + temp["name"] = company.get("name") + if query.fiscal_period and query.fiscal_period.upper() != item.get( + "fiscal_period" + ): + continue + if query.calendar_period and query.calendar_period.upper() != item.get( + "calendar_period" + ): + continue + temp.update(item) + results.append(IntrinioForwardEpsEstimatesData.model_validate(temp)) + + return results diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/forward_sales_estimates.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/forward_sales_estimates.py new file mode 100644 index 00000000000..c57ad52cfcb --- /dev/null +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/forward_sales_estimates.py @@ -0,0 +1,248 @@ +"""Intrinio Forward Sales Estimates Model.""" + +# pylint: disable=unused-argument + +import asyncio +from datetime import datetime +from typing import Any, Dict, List, Literal, Optional, Union +from warnings import warn + +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.forward_sales_estimates import ( + ForwardSalesEstimatesData, + ForwardSalesEstimatesQueryParams, +) +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_core.provider.utils.helpers import ( + amake_request, + get_querystring, +) +from openbb_intrinio.utils.helpers import response_callback +from pydantic import Field, field_validator, model_validator + + +class IntrinioForwardSalesEstimatesQueryParams(ForwardSalesEstimatesQueryParams): + """Intrinio Forward Sales Estimates Query. + + https://docs.intrinio.com/documentation/web_api/get_zacks_sales_estimates_v2 + """ + + __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + + fiscal_year: Optional[int] = Field( + default=None, + description="The future fiscal year to retrieve estimates for." + + " When no symbol and year is supplied the current calendar year is used.", + ) + fiscal_period: Union[Literal["fy", "q1", "q2", "q3", "q4"], None] = Field( + default=None, + description="The future fiscal period to retrieve estimates for.", + ) + calendar_year: Optional[int] = Field( + default=None, + description="The future calendar year to retrieve estimates for." + + " When no symbol and year is supplied the current calendar year is used.", + ) + calendar_period: Union[Literal["q1", "q2", "q3", "q4"], None] = Field( + default=None, + description="The future calendar period to retrieve estimates for.", + ) + + @model_validator(mode="after") + @classmethod + def validate_choices(cls, values): + """Validate the model and set a safe default state.""" + if values.symbol is None and ( + values.calendar_year is None and values.fiscal_year is None + ): + values.calendar_year = datetime.now().year + return values + + +class IntrinioForwardSalesEstimatesData(ForwardSalesEstimatesData): + """Intrinio Forward Sales Estimates Data.""" + + __alias_dict__ = { + "low_estimate": "low", + "high_estimate": "high", + "number_of_analysts": "count", + "mean": "estimated_sales_mean", + "revisions_1w_up": "analyst_revisions_up_1w", + "revisions_1w_down": "analyst_revisions_down_1w", + "revisions_1w_change_percent": "analyst_revisions_percent_change_1w", + "revisions_1m_up": "analyst_revisions_up_1m", + "revisions_1m_down": "analyst_revisions_down_1m", + "revisions_1m_change_percent": "analyst_revisions_percent_change_1m", + "revisions_3m_up": "analyst_revisions_up_3m", + "revisions_3m_down": "analyst_revisions_down_3m", + "revisions_3m_change_percent": "analyst_revisions_percent_change_3m", + } + + revisions_1w_up: Optional[int] = Field( + default=None, description="Number of revisions up in the last week." + ) + revisions_1w_down: Optional[int] = Field( + default=None, description="Number of revisions down in the last week." + ) + revisions_1w_change_percent: Optional[float] = Field( + default=None, + description="The analyst revisions percent change in estimate for the period of 1 week.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) + revisions_1m_up: Optional[int] = Field( + default=None, description="Number of revisions up in the last month." + ) + revisions_1m_down: Optional[int] = Field( + default=None, description="Number of revisions down in the last month." + ) + revisions_1m_change_percent: Optional[float] = Field( + default=None, + description="The analyst revisions percent change in estimate for the period of 1 month.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) + revisions_3m_up: Optional[int] = Field( + default=None, description="Number of revisions up in the last 3 months." + ) + revisions_3m_down: Optional[int] = Field( + default=None, description="Number of revisions down in the last 3 months." + ) + revisions_3m_change_percent: Optional[float] = Field( + default=None, + description="The analyst revisions percent change in estimate for the period of 3 months.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) + + @field_validator( + "revisions_1w_change_percent", + "revisions_1m_change_percent", + "revisions_3m_change_percent", + mode="before", + check_fields=False, + ) + @classmethod + def normalize_percent( + cls, v: Optional[Union[int, float]] + ) -> Optional[Union[int, float]]: + """Normalize percent values.""" + return v / 100 if v else None + + +class IntrinioForwardSalesEstimatesFetcher( + Fetcher[ + IntrinioForwardSalesEstimatesQueryParams, + List[IntrinioForwardSalesEstimatesData], + ] +): + """Intrinio Forward Sales Estimates Fetcher.""" + + @staticmethod + def transform_query( + params: Dict[str, Any] + ) -> IntrinioForwardSalesEstimatesQueryParams: + """Transform the query params.""" + return IntrinioForwardSalesEstimatesQueryParams(**params) + + @staticmethod + async def aextract_data( + query: IntrinioForwardSalesEstimatesQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Return the raw data from the Intrinio endpoint.""" + api_key = credentials.get("intrinio_api_key") if credentials else "" + + BASE_URL = "https://api-v2.intrinio.com/zacks/sales_estimates?page_size=10000" + + symbols = query.symbol.split(",") if query.symbol else None + + query_str = get_querystring( + query.model_dump(by_alias=True), + ["symbol", "calendar_period", "fiscal_period", "limit"], + ) + + results: List[Dict] = [] + + async def get_one(symbol): + """Get the data for one symbol.""" + url = f"{BASE_URL}&identifier={symbol}&{query_str}&api_key={api_key}" + new_data: List[Dict] = [] + data = await amake_request( + url, response_callback=response_callback, **kwargs + ) + if not data or not isinstance(data, dict) or not data.get("estimates"): + warn(f"Symbol Error: No data found for {symbol}") + if isinstance(data, dict) and data.get("estimates"): + new_data = data.get("estimates") # type: ignore + if new_data: + results.extend(new_data) + + if symbols: + await asyncio.gather(*[get_one(symbol) for symbol in symbols]) + return results + + async def fetch_callback(response, session): + """Use callback for pagination.""" + data = await response.json() + messages = data.get("messages") + if messages: + raise RuntimeError(str(messages)) + if data.get("estimates") and len(data.get("estimates")) > 0: # type: ignore + results.extend(data.get("estimates")) # type: ignore + while data.get("next_page"): # type: ignore + next_page = data["next_page"] # type: ignore + next_url = f"{url}&next_page={next_page}" + data = await amake_request(next_url, session=session, **kwargs) + if ( + "estimates" in data + and len(data.get("estimates")) > 0 # type: ignore + ): + results.extend(data.get("estimates")) # type: ignore + return results + + url = f"{BASE_URL}&{query_str}&api_key={api_key}" + + results = await amake_request(url, response_callback=fetch_callback, **kwargs) # type: ignore + + if not results: + raise EmptyDataError("The request was successful but was returned empty.") + + return results + + @staticmethod + def transform_data( + query: IntrinioForwardSalesEstimatesQueryParams, + data: List[Dict], + **kwargs: Any, + ) -> List[IntrinioForwardSalesEstimatesData]: + """Transform the raw data into the standard format.""" + symbols = query.symbol.split(",") if query.symbol else [] + results: List[IntrinioForwardSalesEstimatesData] = [] + for item in sorted( + data, + key=lambda item: ( # type: ignore + ( + symbols.index(item.get("symbol")) if item.get("symbol") in symbols else len(symbols), # type: ignore + item.get("date"), + ) + if symbols + else item.get("date") + ), + ): + temp: Dict[str, Any] = {} + company = item.pop("company") + if company.get("ticker") is None: + continue + temp["symbol"] = company.get("ticker") + temp["name"] = company.get("name") + if query.fiscal_period and query.fiscal_period.upper() != item.get( + "fiscal_period" + ): + continue + if query.calendar_period and query.calendar_period.upper() != item.get( + "calendar_period" + ): + continue + temp.update(item) + results.append(IntrinioForwardSalesEstimatesData.model_validate(temp)) + + return results diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/historical_attributes.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/historical_attributes.py index 47ce6983108..7c83c3b8d99 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/historical_attributes.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/historical_attributes.py @@ -1,5 +1,7 @@ """Intrinio Historical Attributes Model.""" +# pylint: disable = unused-argument + import warnings from datetime import datetime from typing import Any, Dict, List, Optional @@ -62,7 +64,7 @@ class IntrinioHistoricalAttributesFetcher( @staticmethod async def aextract_data( - query: IntrinioHistoricalAttributesQueryParams, # pylint: disable=unused-argument + query: IntrinioHistoricalAttributesQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any, ) -> List[Dict]: @@ -73,7 +75,7 @@ class IntrinioHistoricalAttributesFetcher( query_str = get_querystring(query.model_dump(by_alias=True), ["symbol", "tag"]) def generate_url(symbol: str, tag: str) -> str: - """Returns the url for the given symbol and tag.""" + """Return the url for the given symbol and tag.""" url_params = f"{symbol}/{tag}?{query_str}&api_key={api_key}" url = f"{base_url}/historical_data/{url_params}" return url @@ -84,37 +86,43 @@ class IntrinioHistoricalAttributesFetcher( """Return the response.""" init_response = await response.json() - if message := init_response.get("error") or init_response.get("message"): - warnings.warn(message=message, category=OpenBBWarning) + if message := init_response.get( # type: ignore + "error" + ) or init_response.get( # type: ignore + "message" + ): + warnings.warn(message=str(message), category=OpenBBWarning) return [] - symbol = response.url.parts[-2] - tag = response.url.parts[-1] + symbol = response.url.parts[-2] # type: ignore + tag = response.url.parts[-1] # type: ignore - all_data: list = init_response.get("historical_data", []) + all_data: List = init_response.get("historical_data", []) # type: ignore all_data = [{**item, "symbol": symbol, "tag": tag} for item in all_data] - next_page = init_response.get("next_page", None) + next_page = init_response.get("next_page", None) # type: ignore while next_page: - url = response.url.update_query(next_page=next_page).human_repr() + url = response.url.update_query( # type: ignore + next_page=next_page + ).human_repr() response_data = await session.get_json(url) - if message := response_data.get("error") or response_data.get( + if message := response_data.get("error") or response_data.get( # type: ignore "message" ): warnings.warn(message=message, category=OpenBBWarning) return [] - symbol = response.url.parts[-2] - tag = response_data.url.parts[-1] + symbol = response.url.parts[-2] # type: ignore + tag = response_data.url.parts[-1] # type: ignore - response_data = response_data.get("historical_data", []) + response_data = response_data.get("historical_data", []) # type: ignore response_data = [ {**item, "symbol": symbol, "tag": tag} for item in response_data ] all_data.extend(response_data) - next_page = response_data.get("next_page", None) + next_page = response_data.get("next_page", None) # type: ignore return all_data @@ -128,7 +136,7 @@ class IntrinioHistoricalAttributesFetcher( @staticmethod def transform_data( - query: IntrinioHistoricalAttributesQueryParams, # pylint: disable=unused-argument + query: IntrinioHistoricalAttributesQueryParams, data: List[Dict], **kwargs: Any, ) -> List[IntrinioHistoricalAttributesData]: diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/latest_attributes.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/latest_attributes.py index ca635744259..55cf7bc685d 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/latest_attributes.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/latest_attributes.py @@ -57,7 +57,7 @@ class IntrinioLatestAttributesFetcher( base_url = "https://api-v2.intrinio.com/companies" def generate_url(symbol: str, tag: str) -> str: - """Returns the url for the given symbol and tag.""" + """Return the url for the given symbol and tag.""" return f"{base_url}/{symbol}/data_point/{tag}?api_key={api_key}" async def callback(response: ClientResponse, _: Any) -> Dict: @@ -68,7 +68,8 @@ class IntrinioLatestAttributesFetcher( "error" in response_data or "message" in response_data ): warnings.warn( - message=response_data.get("error") or response_data.get("message"), + message=str(response_data.get("error")) + or str(response_data.get("message")), category=OpenBBWarning, ) return {} diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/market_snapshots.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/market_snapshots.py index 2cb54996683..3e8f24879f5 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/market_snapshots.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/market_snapshots.py @@ -7,6 +7,7 @@ import gzip from datetime import ( date as dateType, datetime, + timezone as datetime_timezone, ) from io import BytesIO from typing import Any, Dict, List, Optional, Union @@ -16,7 +17,7 @@ from openbb_core.provider.standard_models.market_snapshots import ( MarketSnapshotsData, MarketSnapshotsQueryParams, ) -from openbb_core.provider.utils.helpers import amake_request +from openbb_core.provider.utils.helpers import amake_request, safe_fromtimestamp from pandas import DataFrame, notna, read_csv, to_datetime from pydantic import Field from pytz import timezone @@ -105,7 +106,7 @@ class IntrinioMarketSnapshotsFetcher( dt = transformed_params["date"] dt = dt.astimezone(tz=timezone("America/New_York")) if isinstance(transformed_params["date"], dateType): - dt = transformed_params["date"] + dt = transformed_params["date"] # type: ignore if isinstance(dt, dateType): dt = datetime( dt.year, @@ -143,7 +144,6 @@ class IntrinioMarketSnapshotsFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the Intrinio endpoint.""" - api_key = credentials.get("intrinio_api_key") if credentials else "" # This gets the URL to the actual file. @@ -216,7 +216,7 @@ class IntrinioMarketSnapshotsFetcher( to_datetime( df[col].apply( lambda x: ( - datetime.fromtimestamp(x, tz=timezone("UTC")) + safe_fromtimestamp(x, tz=datetime_timezone.utc) if notna(x) else x ) diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/price_target_consensus.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/price_target_consensus.py new file mode 100644 index 00000000000..fcf1a99c4a4 --- /dev/null +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/price_target_consensus.py @@ -0,0 +1,182 @@ +"""Intrinio Price Target Consensus Model.""" + +# pylint: disable=unused-argument + +import asyncio +from datetime import date as dateType +from typing import Any, Dict, List, Optional +from warnings import warn + +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.price_target_consensus import ( + PriceTargetConsensusData, + PriceTargetConsensusQueryParams, +) +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_core.provider.utils.helpers import ( + amake_request, + get_querystring, +) +from openbb_intrinio.utils.helpers import response_callback +from pydantic import Field + + +class IntrinioPriceTargetConsensusQueryParams(PriceTargetConsensusQueryParams): + """Intrinio Price Target Consensus Query. + + https://docs.intrinio.com/documentation/web_api/get_zacks_sales__v2 + """ + + __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + + industry_group_number: Optional[int] = Field( + default=None, + description="The Zacks industry group number.", + ) + + +class IntrinioPriceTargetConsensusData(PriceTargetConsensusData): + """Intrinio Price Target Consensus Data.""" + + __alias_dict__ = { + "symbol": "ticker", + "name": "company_name", + "target_high": "high", + "target_low": "low", + "target_consensus": "mean", + "target_median": "median", + } + standard_deviation: Optional[float] = Field( + default=None, + description="The standard deviation of target price estimates.", + ) + total_anaylsts: Optional[int] = Field( + default=None, + description="The total number of target price estimates in consensus.", + ) + raised: Optional[int] = Field( + default=None, + description="The number of analysts that have raised their target price estimates.", + ) + lowered: Optional[int] = Field( + default=None, + description="The number of analysts that have lowered their target price estimates.", + ) + most_recent_date: Optional[dateType] = Field( + default=None, + description="The date of the most recent estimate.", + ) + industry_group_number: Optional[int] = Field( + default=None, + description="The Zacks industry group number.", + ) + + +class IntrinioPriceTargetConsensusFetcher( + Fetcher[ + IntrinioPriceTargetConsensusQueryParams, List[IntrinioPriceTargetConsensusData] + ] +): + """Intrinio Price Target Consensus Fetcher.""" + + @staticmethod + def transform_query( + params: Dict[str, Any] + ) -> IntrinioPriceTargetConsensusQueryParams: + """Transform the query params.""" + return IntrinioPriceTargetConsensusQueryParams(**params) + + @staticmethod + async def aextract_data( + query: IntrinioPriceTargetConsensusQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Return the raw data from the Intrinio endpoint.""" + api_key = credentials.get("intrinio_api_key") if credentials else "" + + BASE_URL = ( + "https://api-v2.intrinio.com/zacks/target_price_consensuses?page_size=10000" + ) + + symbols = query.symbol.split(",") if query.symbol else None + + query_str = get_querystring(query.model_dump(by_alias=True), ["symbol"]) + + results: List[Dict] = [] + + async def get_one(symbol): + """Get the data for one symbol.""" + url = f"{BASE_URL}&identifier={symbol}&{query_str}&api_key={api_key}" + new_data: List[Dict] = [] + data = await amake_request( + url, response_callback=response_callback, **kwargs + ) + if ( + not data + or not isinstance(data, dict) + or not data.get("target_price_consensuses") + ): + warn(f"Symbol Error: No data found for {symbol}") + if isinstance(data, dict) and data.get("target_price_consensuses"): + new_data = data.get("target_price_consensuses") # type: ignore + if new_data: + results.extend(new_data) + + if symbols: + await asyncio.gather(*[get_one(symbol) for symbol in symbols]) + return results + + async def fetch_callback(response, session): + """Use callback for pagination.""" + data = await response.json() + messages = data.get("messages") + if messages: + raise RuntimeError(str(messages)) + _data = data.get("target_price_consensuses") + if _data and len(_data) > 0: + results.extend(_data) # type: ignore + while data.get("next_page"): # type: ignore + next_page = data["next_page"] # type: ignore + next_url = f"{url}&next_page={next_page}" + data = await amake_request(next_url, session=session, **kwargs) + if ( + "" in data + and len(data.get("target_price_consensuses")) > 0 # type: ignore + ): + results.extend(data.get("target_price_consensuses")) # type: ignore + return results + + url = f"{BASE_URL}&{query_str}&api_key={api_key}" + results = await amake_request(url, response_callback=fetch_callback, **kwargs) # type: ignore + + if not results: + raise EmptyDataError("The request was successful but was returned empty.") + + return results + + @staticmethod + def transform_data( + query: IntrinioPriceTargetConsensusQueryParams, + data: List[Dict], + **kwargs: Any, + ) -> List[IntrinioPriceTargetConsensusData]: + """Transform the raw data into the standard format.""" + symbols = query.symbol.split(",") if query.symbol else [] + results: List[IntrinioPriceTargetConsensusData] = [] + for item in sorted( # type: ignore + sorted( # type: ignore + data, + key=lambda item: item.get("most_recent_date"), # type: ignore + reverse=True, + ), + key=lambda item: ( + symbols.index(item.get("symbol")) # type: ignore + if item.get("symbol") in symbols + else len(symbols) + ), + ): + _ = item.pop("company") + results.append(IntrinioPriceTargetConsensusData.model_validate(item)) + + return results diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/world_news.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/world_news.py index 3e82104b2c0..f08161e6f61 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/world_news.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/world_news.py @@ -28,7 +28,7 @@ class IntrinioWorldNewsData(WorldNewsData): __alias_dict__ = {"date": "publication_date", "text": "summary"} id: str = Field(description="Article ID.") - company: Dict[str, Any] = Field( + company: Optional[Dict[str, Any]] = Field( description="Company details related to the news article." ) diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/utils/helpers.py b/openbb_platform/providers/intrinio/openbb_intrinio/utils/helpers.py index 83126a65809..572a0ce6393 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/utils/helpers.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/utils/helpers.py @@ -59,7 +59,7 @@ def request(url: str) -> BasicResponse: async def response_callback( response: ClientResponse, _: ClientSession ) -> Union[dict, List[dict]]: - """Callback for async_request.""" + """Use callback for async_request.""" data = await response.json() if isinstance(data, dict) and response.status != 200: diff --git a/openbb_platform/providers/intrinio/poetry.lock b/openbb_platform/providers/intrinio/poetry.lock index e75a154073c..b74f5ba7b11 100644 --- a/openbb_platform/providers/intrinio/poetry.lock +++ b/openbb_platform/providers/intrinio/poetry.lock @@ -722,13 +722,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1500,4 +1500,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "5e1871be66c01fed2ac9442effc275be6755eab8999aa1e176385660744c6e39" +content-hash = "568175cf150aaadfd77c05974f135022a7fd5556d70643ac2b57f36bcf39c731" diff --git a/openbb_platform/providers/intrinio/pyproject.toml b/openbb_platform/providers/intrinio/pyproject.toml index 591ccb04140..f40f325c206 100644 --- a/openbb_platform/providers/intrinio/pyproject.toml +++ b/openbb_platform/providers/intrinio/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-intrinio" -version = "1.1.4" +version = "1.1.5" description = "Intrinio extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -9,7 +9,7 @@ packages = [{ include = "openbb_intrinio" }] [tool.poetry.dependencies] python = "^3.8" requests-cache = "^1.1.0" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/intrinio/tests/__init__.py b/openbb_platform/providers/intrinio/tests/__init__.py index e69de29bb2d..36c3ae93b8f 100644 --- a/openbb_platform/providers/intrinio/tests/__init__.py +++ b/openbb_platform/providers/intrinio/tests/__init__.py @@ -0,0 +1 @@ +"""Intrinio tests.""" diff --git a/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_eps_estimates_fetcher.yaml b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_eps_estimates_fetcher.yaml new file mode 100644 index 00000000000..74c3c4f22db --- /dev/null +++ b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_eps_estimates_fetcher.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://api-v2.intrinio.com/zacks/eps_estimates?api_key=MOCK_API_KEY&identifier=AAPL&page_size=10000 + response: + body: + string: !!binary | + H4sIAKuXCGYAA+yYXU/bMBSG/8qU6zby8WfcO3YBm/YBTENjmqYoajOIaNOKhm0M9b9jpyR22uOl + XIEoXMVvQgx99NpPfRfly6qYZVW+jEY/7qLxfLbIyttodBcVk2hkx+nnc3n07zgaRFUxvsqvTXpw + cPLRjMtsltvRYjHN37wvx7HJpnlhonffzk4+fCGfTo7PksOj87dfmebm5ri4MjeJ+WGUgGbRahBN + zNwmpISqIdFDRsxzv4rlOJumt3lmZrN32miRXxdz+4cdfrfvy6Z5OcmuO0+2YfvsKbPPzm/KKhrB + IJrlWRmNVKwTez0p3OiyuLhsrqfzP83lssrsCyfpJP9dZFUxN79Q3kyng8hMMc7LKh1fZuWF+Td4 + zMV6glSlk+x2mWYX8+bhOmYEz2Ug15v5avC0lGSQktymdMpRSrKPEm0oQZxIR2k9WlOCWMMDJRMD + TonERBG1zcn7gF85hdvUy4m7Nknut0kS4epkoT3UiesQKBD2DZugVLwHfZK794k9ghNF+ySF8AtV + D5tGKd02StAgKE30vjaKDRnsSIo+ghSgpCwNB8qOGk5Ji0kFtiez8AGHvcQkhkB3xwQoJoFi4ggm + GjNHqR6sIdGYqwdKNAYWokQ5QVa9vaAU2p7EzhqBU/K2J+mViTDWqRP11r2E7rLuQZK8oupDFTCJ + XlRAnEqAVTbnEsCdSohmh5KxUsFSKYU4XxILzCXM+wEj5eVyI08wUiZ/BqACKoF1ClcJHBRFO8UV + KL9TPHGVErKtFAvvUUrubaUCKoGRwlUCJwUoKUm70sccKOk5nwyC4oCASowLvnBQPCgTGChcJnif + TCgnE1RT3fEJ8IRCtKR0+GsU12yblHCL1sslFdql+M5CgZPydqnEVUrQbqcE8YRCuqMJHi6V3Y+2 + T5DoK6l+n+glBe1Bn4wFV577mXFbKmMRvBUKFhQKYFYLN1HJ+thpC5V0ntFB5eVyI0eFwuTyGaAK + GAVWKtwocFQULRWDTqfqYdMp3laKBh2dCIp86eU12i1Q5v0UA+XlciMXGCibPwNQAaHAQOFCgYPy + hMI5ul3uaEf9tEdKOFT8P+cTCSLpQ8B3KojRTkHdZQyV0DgqoZ8aFQsqBYYKVwrWpxTSKQXRwjcK + TyhAtCcUJHhCQThH1r6Ao9vZME4mTzBOXq43crX6aT76/G+VLrJmxtU9AAAA//8DAEWpGNevGgAA + headers: + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Sat, 30 Mar 2024 22:52:27 GMT + Transfer-Encoding: + - chunked + Vary: + - Origin,Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_sales_estimates_fetcher.yaml b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_sales_estimates_fetcher.yaml new file mode 100644 index 00000000000..5118ace74c8 --- /dev/null +++ b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_forward_sales_estimates_fetcher.yaml @@ -0,0 +1,52 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://api-v2.intrinio.com/zacks/sales_estimates?api_key=MOCK_API_KEY&identifier=AAPL&page_size=10000 + response: + body: + string: !!binary | + H4sIAKuXCGYAA+SaTW/bRhCG/0rBs0XszOzOzvqWHpIW/YhTNGiKohAIibWJ6AuWXNc1/N8ztB3a + Wi4pRRdboG6cXXEWwoN35p3VbVauN9W82JTr7PSv22yynK+KxU12eptV0+y0fh7/+onf/f8+O8k2 + 1eRzeanRN2/OftbnRTEv66fValZ+9+NikmtsVlYa+uGPj2c//WZ+OXv/Ud6++/T97xSsLk6qz7po + 9ENoIFB2d5JNNbcG0aAfmTAio/v+qdaTYja+KQvNVq80oVV5WS3rg739s35fMSsX0+Jya2cTbPZ+ + oHrv8mqxyU7hJJuXxSI7tcbrEcz9Jzd1dFql4hfV+UU7Oltet4PrTVEnno6n5b9VsamW+rr7hWJR + zG7Wm/GlxtcaXtdnm5SLzXhyUSzOyzFcd+68Wj2sptamy+tF92qcY96bY96bo2s1ykG9Oag3x/3q + 3cnLMsidDHKbwQ82ySDvYhC/MhiCQ2e9ixCMwg8EggEiiggM3oMPrg9AdI4R+XHHoEgccc6EB8MI + RwVjhyDuhNE2gogEwDa0BBEsChkXCSI7ZBLG5zhSECbuF0QMYJVIGCSQLg8WDgYSXwGQvL860jcA + iSl1BPTecUsdt8MPOAZrXCDZEkcRG5zvFUcKZE3zrWGxaHMX5KjFkUYEe7KI38AipFj0JFawxeJ2 + +JHFWhWt3y7UDDaA9LEI3nrbYD0sFn3OTMfLohsB7s8iJFl0SRZtgkXQbk47xJZzieOPfSOy4wdl + fMIRUEswc2+hZkZvhimNmEsIx4xjV9/o9jYxaRyf9Y3cSKNY8IAxjcEbtrGNBuMBXGxiNJ24Xhad + 12bT+EHCSDnw4T2jPSoYO0zMThjlaaqjPR8bDq2pjoojxThaArSMTrZNjDEeqZdH0KKvOYbpqinX + H+1gIN0rALLDxKTUMW1i0kBiQh1F1U1sq1ZLEAIX4RjQAUfiKGSd0tZrYixhwDBQFsHYoxbHDhOT + YjFtYtIsQqpSs9EzOIhYVJP8vP4240axxm/DGIxShr3KSIIW7DDbRpcTH+6oXxxG2+liUjCmXYzd + 5WL8k4uxVoKR2FJrXGzr/gUw1HPD2MVoBfb940Zib56mlMPiEfLAh4vjixdq29k52r1tTJrHZ51j + aMQRnaXEhEdfAm0bY9hLXKkVsx13MaS4BhhmpcbcuT5PnbQ4DYz+qGDssDH7w0jiHIjhuFSTEJKP + caQgX031MxujLAL1iyMbp93pMK9iMDfm8BmPvAIeO1xMShzTLibNIyZ4FCJ03tjYxRDalqkW9uBj + bTQYdhRqROFwD+wQWQxy3Cx2uJgUi2kXk2YRUoXakBjvfMSiVlXhmMWgx4/HjSJuF4tg63mjDJJF + p4768OnOi7NInSYmxWLaxNAuE9OwCOC59jESwahxSpgYPS1yfBUD7PwOHgMADfNm0OTIvofG5L97 + Ghrp7m8FrPxvM14V5wrI4mo2u/sCAAD//wMA/IR93/MoAAA= + headers: + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Sat, 30 Mar 2024 22:52:27 GMT + Transfer-Encoding: + - chunked + Vary: + - Origin,Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_price_target_consensus_fetcher.yaml b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_price_target_consensus_fetcher.yaml new file mode 100644 index 00000000000..c566eb27922 --- /dev/null +++ b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_price_target_consensus_fetcher.yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://api-v2.intrinio.com/zacks/target_price_consensuses?api_key=MOCK_API_KEY&identifier=AAPL&page_size=10000 + response: + body: + string: !!binary | + H4sIAKuXCGYAA1yQYU/CMBCG/wq5z2PpOgZs39AoEhEWI5HEmKaul9GwdUvbqUj4795AY2I/9d6n + 9/beO4KXtkQvWqsLFEVjHBrXOXSQvRzB62KPFjKYzfIlBFA0dSvNQRhZY6/m+fJmsFhdE9JGdc7b + gyht07XCdPXbuTNKU6I7Xe4g4wkLWQBV8wFZlEz7e43SEGCTcJJMAnBeGiWtEgrftfS6IRilYcID + 8I2XFT0dU1PjvLBYoPFCSd+PwhkfDVk85Bx6U6UvtjxMArBSO1SQma6qzr+j/St/IkF2BE1iX4vV + djz/WpPR//y/udu2wsHCFCFpFWqS7p43+f0je8jXm+ntfHv1FKejfmF6T5DRiTmL0hhOp1eywU/a + uCzxMsTpGwAA//8DAKUTUfuGAQAA + headers: + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Sat, 30 Mar 2024 22:52:27 GMT + Transfer-Encoding: + - chunked + Vary: + - Origin,Accept-Encoding + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py b/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py index 634948f47c1..8ec7382d867 100644 --- a/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py +++ b/openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py @@ -1,3 +1,5 @@ +"""Test Intrinio fetchers.""" + from datetime import date from unittest import mock @@ -20,6 +22,12 @@ from openbb_intrinio.models.etf_price_performance import ( ) from openbb_intrinio.models.etf_search import IntrinioEtfSearchFetcher from openbb_intrinio.models.financial_ratios import IntrinioFinancialRatiosFetcher +from openbb_intrinio.models.forward_eps_estimates import ( + IntrinioForwardEpsEstimatesFetcher, +) +from openbb_intrinio.models.forward_sales_estimates import ( + IntrinioForwardSalesEstimatesFetcher, +) from openbb_intrinio.models.fred_series import IntrinioFredSeriesFetcher from openbb_intrinio.models.historical_attributes import ( IntrinioHistoricalAttributesFetcher, @@ -40,6 +48,9 @@ from openbb_intrinio.models.market_indices import IntrinioMarketIndicesFetcher from openbb_intrinio.models.market_snapshots import IntrinioMarketSnapshotsFetcher from openbb_intrinio.models.options_chains import IntrinioOptionsChainsFetcher from openbb_intrinio.models.options_unusual import IntrinioOptionsUnusualFetcher +from openbb_intrinio.models.price_target_consensus import ( + IntrinioPriceTargetConsensusFetcher, +) from openbb_intrinio.models.reported_financials import IntrinioReportedFinancialsFetcher from openbb_intrinio.models.search_attributes import ( IntrinioSearchAttributesFetcher, @@ -54,6 +65,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -70,6 +82,7 @@ def vcr_config(): @pytest.fixture(autouse=True, scope="module") def mock_cpu_count(): + """Mock the cpu_count function so recording works.""" with mock.patch( "os.cpu_count" ) as mock_cpu_count: # pylint: disable=redefined-outer-name @@ -79,6 +92,7 @@ def mock_cpu_count(): @pytest.mark.record_http def test_intrinio_equity_historical_fetcher(credentials=test_credentials): + """Test equity historical fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -93,6 +107,7 @@ def test_intrinio_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_currency_pairs_fetcher(credentials=test_credentials): + """Test currency pairs fetcher.""" params = {} fetcher = IntrinioCurrencyPairsFetcher() @@ -102,6 +117,7 @@ def test_intrinio_currency_pairs_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_company_news_fetcher(credentials=test_credentials): + """Test company news fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioCompanyNewsFetcher() @@ -111,6 +127,7 @@ def test_intrinio_company_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_world_news_fetcher(credentials=test_credentials): + """Test world news fetcher.""" params = {} fetcher = IntrinioWorldNewsFetcher() @@ -120,6 +137,7 @@ def test_intrinio_world_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_equity_quote_fetcher(credentials=test_credentials): + """Test equity quote fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioEquityQuoteFetcher() @@ -129,6 +147,7 @@ def test_intrinio_equity_quote_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_options_chains_fetcher(credentials=test_credentials): + """Test options chains fetcher.""" params = {"symbol": "AAPL", "date": date(2023, 9, 15)} fetcher = IntrinioOptionsChainsFetcher() @@ -138,6 +157,7 @@ def test_intrinio_options_chains_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_options_unusual_fetcher(credentials=test_credentials): + """Test options unusual fetcher.""" params = { "source": "delayed", "trade_type": "block", @@ -153,6 +173,7 @@ def test_intrinio_options_unusual_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_balance_sheet_fetcher(credentials=test_credentials): + """Test balance sheet fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioBalanceSheetFetcher() @@ -162,6 +183,7 @@ def test_intrinio_balance_sheet_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_cash_flow_statement_fetcher(credentials=test_credentials): + """Test cash flow statement fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioCashFlowStatementFetcher() result = fetcher.test(params, credentials) @@ -170,6 +192,7 @@ def test_intrinio_cash_flow_statement_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_income_statement_fetcher(credentials=test_credentials): + """Test income statement fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioIncomeStatementFetcher() @@ -179,6 +202,7 @@ def test_intrinio_income_statement_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_fred_series_fetcher(credentials=test_credentials): + """Test fred series fetcher.""" params = { "symbol": "$GDP", "start_date": date(2022, 9, 20), @@ -192,6 +216,7 @@ def test_intrinio_fred_series_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_calendar_ipo_fetcher(credentials=test_credentials): + """Test calendar IPO fetcher.""" params = {"status": "upcoming"} fetcher = IntrinioCalendarIpoFetcher() @@ -201,6 +226,7 @@ def test_intrinio_calendar_ipo_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_search_attributes(credentials=test_credentials): + """Test search attributes fetcher.""" params = {"query": "ebit"} fetcher = IntrinioSearchAttributesFetcher() @@ -210,6 +236,7 @@ def test_intrinio_search_attributes(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_historical_attributes(credentials=test_credentials): + """Test historical attributes fetcher.""" params = { "provider": "intrinio", "symbol": "AAPL,MSFT", @@ -229,6 +256,7 @@ def test_intrinio_historical_attributes(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_latest_attributes(credentials=test_credentials): + """Test latest attributes fetcher.""" params = { "provider": "intrinio", "symbol": "AAPL,MSFT", @@ -242,6 +270,7 @@ def test_intrinio_latest_attributes(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_equity_info_fetcher(credentials=test_credentials): + """Test equity info fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioEquityInfoFetcher() @@ -251,6 +280,7 @@ def test_intrinio_equity_info_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_market_indices_fetcher(credentials=test_credentials): + """Test market indices fetcher.""" params = { "symbol": "$DJI", "tag": "level", @@ -265,6 +295,7 @@ def test_intrinio_market_indices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_index_historical_fetcher(credentials=test_credentials): + """Test index historical fetcher.""" params = { "symbol": "DJI", "start_date": date(2024, 1, 1), @@ -278,6 +309,7 @@ def test_intrinio_index_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_historical_dividends_fetcher(credentials=test_credentials): + """Test historical dividends fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -291,6 +323,7 @@ def test_intrinio_historical_dividends_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_company_filings_fetcher(credentials=test_credentials): + """Test company filings fetcher.""" params = { "symbol": "AAPL", "form_type": None, @@ -306,6 +339,7 @@ def test_intrinio_company_filings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_insider_trading_fetcher(credentials=test_credentials): + """Test insider trading fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -329,6 +363,7 @@ def test_intrinio_insider_trading_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_key_metrics_fetcher(credentials=test_credentials): + """Test key metrics fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioKeyMetricsFetcher() @@ -338,6 +373,7 @@ def test_intrinio_key_metrics_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_share_statistics_fetcher(credentials=test_credentials): + """Test share statistics fetcher.""" params = {"symbol": "AAPL"} fetcher = IntrinioShareStatisticsFetcher() @@ -347,6 +383,7 @@ def test_intrinio_share_statistics_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_equity_search_fetcher(credentials=test_credentials): + """Test equity search fetcher.""" params = {"query": "gold", "limit": 100} fetcher = IntrinioEquitySearchFetcher() @@ -356,6 +393,7 @@ def test_intrinio_equity_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_financial_ratios_fetcher(credentials=test_credentials): + """Test financial ratios fetcher.""" params = {"symbol": "AAPL", "period": "annual", "limit": 2, "use_cache": False} fetcher = IntrinioFinancialRatiosFetcher() @@ -365,6 +403,7 @@ def test_intrinio_financial_ratios_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_reported_financials_fetcher(credentials=test_credentials): + """Test reported financials fetcher.""" params = { "symbol": "AAPL", "statement_type": "cash", @@ -379,6 +418,7 @@ def test_intrinio_reported_financials_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_etf_search_fetcher(credentials=test_credentials): + """Test etf search fetcher.""" params = {"query": "factor", "exchange": "bats"} fetcher = IntrinioEtfSearchFetcher() @@ -388,6 +428,7 @@ def test_intrinio_etf_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_etf_info_fetcher(credentials=test_credentials): + """Test etf info fetcher.""" params = {"symbol": "DJIA,SPY,GOVT"} fetcher = IntrinioEtfInfoFetcher() @@ -397,6 +438,7 @@ def test_intrinio_etf_info_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_etf_holdings_fetcher(credentials=test_credentials): + """Test etf holdings fetcher.""" params = {"symbol": "DJIA"} fetcher = IntrinioEtfHoldingsFetcher() @@ -406,6 +448,7 @@ def test_intrinio_etf_holdings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_etf_price_performance_fetcher(credentials=test_credentials): + """Test etf price performance fetcher.""" params = {"symbol": "SPY:US"} fetcher = IntrinioEtfPricePerformanceFetcher() @@ -415,8 +458,39 @@ def test_intrinio_etf_price_performance_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_intrinio_market_snapshots_fetcher(credentials=test_credentials): + """Test market snapshots fetcher.""" params = {"date": date(2022, 6, 30)} fetcher = IntrinioMarketSnapshotsFetcher() result = fetcher.test(params, credentials) assert result is None + + +@pytest.mark.record_http +def test_intrinio_forward_eps_estimates_fetcher(credentials=test_credentials): + """Test forward EPS estimates fetcher.""" + params = {"symbol": "AAPL"} + + fetcher = IntrinioForwardEpsEstimatesFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.record_http +def test_intrinio_forward_sales_estimates_fetcher(credentials=test_credentials): + """Test forward sales estimates fetcher.""" + params = {"symbol": "AAPL"} + + fetcher = IntrinioForwardSalesEstimatesFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.record_http +def test_intrinio_price_target_consensus_fetcher(credentials=test_credentials): + """Test price target consensus fetcher.""" + params = {"symbol": "AAPL"} + + fetcher = IntrinioPriceTargetConsensusFetcher() + result = fetcher.test(params, credentials) + assert result is None diff --git a/openbb_platform/providers/nasdaq/__init__.py b/openbb_platform/providers/nasdaq/__init__.py index e69de29bb2d..32980449cbc 100644 --- a/openbb_platform/providers/nasdaq/__init__.py +++ b/openbb_platform/providers/nasdaq/__init__.py @@ -0,0 +1 @@ +"""NASDAQ provider.""" diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/__init__.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/__init__.py index e69de29bb2d..cb477918ea6 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/__init__.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/__init__.py @@ -0,0 +1 @@ +"""NASDAQ provider data models.""" diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_dividend.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_dividend.py index 1e96673b9d2..201e55714f8 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_dividend.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_dividend.py @@ -50,6 +50,7 @@ class NasdaqCalendarDividendData(CalendarDividendData): ) @classmethod def validate_date(cls, v: str): + """Validate the date.""" v = v.replace("N/A", "") return datetime.strptime(v, "%m/%d/%Y").date() if v else None diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_earnings.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_earnings.py index 9c153700ca6..b84b8efc7f5 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_earnings.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/calendar_earnings.py @@ -1,5 +1,7 @@ """Nasdaq Earnings Calendar Model.""" +# pylint: disable=unused-argument + from concurrent.futures import ThreadPoolExecutor from datetime import ( date as dateType, @@ -138,6 +140,8 @@ class NasdaqCalendarEarningsFetcher( ): """Transform the query, extract and transform the data from the Nasdaq endpoints.""" + require_credentials = False + @staticmethod def transform_query(params: Dict[str, Any]) -> NasdaqCalendarEarningsQueryParams: """Transform the query params.""" diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot.py index f0ee0b72f1c..7fbaa956b5c 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot.py @@ -85,8 +85,7 @@ class NasdaqCotData(COTData): @field_validator("date", mode="before", check_fields=False) def date_validate(cls, v): # pylint: disable=E0213 - """Return the datetime object from the date string""" - + """Return the datetime object from the date string.""" return datetime.strptime(v, "%Y-%m-%d").date() @@ -95,6 +94,7 @@ class NasdaqCotFetcher(Fetcher[NasdaqCotQueryParams, List[NasdaqCotData]]): @staticmethod def transform_query(params: Dict[str, Any]) -> NasdaqCotQueryParams: + """Transform the query parameters.""" return NasdaqCotQueryParams(**params) @staticmethod @@ -103,6 +103,7 @@ class NasdaqCotFetcher(Fetcher[NasdaqCotQueryParams, List[NasdaqCotData]]): credentials: Optional[Dict[str, str]], **kwargs: Any, ) -> List[Dict]: + """Extract the data from the Nasdaq Data Link API.""" api_key = credentials.get("nasdaq_api_key") if credentials else "" # The "code" can be an exact name, a symbol, or a CFTC series code. @@ -174,4 +175,5 @@ class NasdaqCotFetcher(Fetcher[NasdaqCotQueryParams, List[NasdaqCotData]]): data: List[Dict], **kwargs: Any, ) -> List[NasdaqCotData]: + """Transform the data.""" return [NasdaqCotData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot_search.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot_search.py index 820a86eb55e..a642a3c3439 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot_search.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/cot_search.py @@ -10,6 +10,8 @@ from openbb_core.provider.standard_models.cot_search import ( ) from openbb_nasdaq.utils.series_ids import CFTC +# pylint: disable=W0613 + class NasdaqCotSearchQueryParams(CotSearchQueryParams): """Nasdaq CFTC Commitment of Traders Reports Search Query. @@ -31,6 +33,7 @@ class NasdaqCotSearchFetcher( @staticmethod def transform_query(params: Dict[str, Any]) -> NasdaqCotSearchQueryParams: + """Transform the query params.""" return NasdaqCotSearchQueryParams(**params) @staticmethod @@ -60,4 +63,5 @@ class NasdaqCotSearchFetcher( data: List[Dict], **kwargs: Any, ) -> List[NasdaqCotSearchData]: + """Transform the data.""" return [NasdaqCotSearchData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/historical_dividends.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/historical_dividends.py index 2ca017a496b..41dfde661d9 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/historical_dividends.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/historical_dividends.py @@ -2,12 +2,12 @@ # pylint: disable=unused-argument import asyncio -import warnings from datetime import ( date as dateType, datetime, ) from typing import Any, Dict, List, Optional +from warnings import warn from dateutil import parser from openbb_core.provider.abstract.fetcher import Fetcher @@ -20,8 +20,6 @@ from openbb_core.provider.utils.helpers import amake_request from openbb_nasdaq.utils.helpers import IPO_HEADERS from pydantic import Field, field_validator -_warn = warnings.warn - class NasdaqHistoricalDividendsQueryParams(HistoricalDividendsQueryParams): """Nasdaq Historical Dividends Query Params.""" @@ -92,6 +90,8 @@ class NasdaqHistoricalDividendsFetcher( ): """Nasdaq Historical Dividends Fetcher.""" + require_credentials = False + @staticmethod def transform_query(params: Dict[str, Any]) -> NasdaqHistoricalDividendsQueryParams: """Transform the params to the provider-specific query.""" @@ -117,13 +117,13 @@ class NasdaqHistoricalDividendsFetcher( url, headers=IPO_HEADERS, ) - if response.get("status").get("rCode") == 400: + if response.get("status").get("rCode") == 400: # type: ignore response = await amake_request( url.replace("stocks", "etf"), headers=IPO_HEADERS, ) - if response.get("status").get("rCode") == 200: - data = response.get("data").get("dividends").get("rows") + if response.get("status").get("rCode") == 200: # type: ignore + data = response.get("data").get("dividends").get("rows") # type: ignore if data: if len(symbols) > 1: @@ -131,7 +131,7 @@ class NasdaqHistoricalDividendsFetcher( d["symbol"] = symbol results.extend(data) if not data: - _warn(f"No data found for {symbol}") + warn(f"No data found for {symbol}") tasks = [get_one(symbol) for symbol in symbols] diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/utils/__init__.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/utils/__init__.py index e69de29bb2d..25cbd0e00fa 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/utils/__init__.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/utils/__init__.py @@ -0,0 +1 @@ +"""NASDAQ provider utils.""" diff --git a/openbb_platform/providers/nasdaq/poetry.lock b/openbb_platform/providers/nasdaq/poetry.lock index 725940d6f38..edc7e134e72 100644 --- a/openbb_platform/providers/nasdaq/poetry.lock +++ b/openbb_platform/providers/nasdaq/poetry.lock @@ -679,13 +679,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1409,4 +1409,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "efd8feefbbf69760dcb90234a4d68a77c2c99119012f289e9721b875f4e47d43" +content-hash = "a45b677f846583524cef16d530bb44638f8e6d7777370b5e1cd7ca4c40c226ea" diff --git a/openbb_platform/providers/nasdaq/pyproject.toml b/openbb_platform/providers/nasdaq/pyproject.toml index 11b0e030366..f2b78188d71 100644 --- a/openbb_platform/providers/nasdaq/pyproject.toml +++ b/openbb_platform/providers/nasdaq/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-nasdaq" -version = "1.1.5" +version = "1.1.6" description = "Nasdaq extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_nasdaq" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" random-user-agent = "^1.0.1" nasdaq-data-link = "^1.0.4" diff --git a/openbb_platform/providers/nasdaq/tests/__init__.py b/openbb_platform/providers/nasdaq/tests/__init__.py index e69de29bb2d..60bd86abf47 100644 --- a/openbb_platform/providers/nasdaq/tests/__init__.py +++ b/openbb_platform/providers/nasdaq/tests/__init__.py @@ -0,0 +1 @@ +"""NASDAQ provider tests.""" diff --git a/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py b/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py index 095763d5015..9a3adc506b8 100644 --- a/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py +++ b/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for the Nasdaq fetchers.""" + import datetime import pytest @@ -21,6 +23,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [ ("User-Agent", None), @@ -36,6 +39,7 @@ def vcr_config(): @pytest.mark.record_http def test_nasdaq_equity_search_fetcher(credentials=test_credentials): + """Test the Nasdaq Equity Search fetcher.""" params = {"query": "", "is_etf": True, "use_cache": False} fetcher = NasdaqEquitySearchFetcher() @@ -45,6 +49,7 @@ def test_nasdaq_equity_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_economic_calendar_fetcher(credentials=test_credentials): + """Test the Nasdaq Economic Calendar fetcher.""" params = { "start_date": datetime.date(2023, 11, 3), "end_date": datetime.date(2023, 11, 3), @@ -57,6 +62,7 @@ def test_nasdaq_economic_calendar_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_calendar_dividend_fetcher(credentials=test_credentials): + """Test the Nasdaq Calendar Dividend fetcher.""" params = { "start_date": datetime.date(2023, 11, 6), "end_date": datetime.date(2023, 11, 6), @@ -69,6 +75,7 @@ def test_nasdaq_calendar_dividend_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_calendar_ipo_fetcher(credentials=test_credentials): + """Test the Nasdaq Calendar IPO fetcher.""" params = { "start_date": datetime.date(2023, 11, 1), "end_date": datetime.date(2023, 11, 30), @@ -82,6 +89,7 @@ def test_nasdaq_calendar_ipo_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_top_retail_fetcher(credentials=test_credentials): + """Test the Nasdaq Top Retail fetcher.""" params = {} fetcher = NasdaqTopRetailFetcher() @@ -91,6 +99,7 @@ def test_nasdaq_top_retail_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_sp500_multiples_fetcher(credentials=test_credentials): + """Test the Nasdaq SP500 Multiples fetcher.""" params = {} fetcher = NasdaqSP500MultiplesFetcher() @@ -100,6 +109,7 @@ def test_nasdaq_sp500_multiples_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_cot_fetcher(credentials=test_credentials): + """Test the Nasdaq COT fetcher.""" params = {} fetcher = NasdaqCotFetcher() @@ -108,6 +118,7 @@ def test_nasdaq_cot_fetcher(credentials=test_credentials): def test_nasdaq_cot_search_fetcher(credentials=test_credentials): + """Test the Nasdaq COT Search fetcher.""" params = {} fetcher = NasdaqCotSearchFetcher() @@ -117,6 +128,7 @@ def test_nasdaq_cot_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_calendar_earnings_fetcher(credentials=test_credentials): + """Test the Nasdaq Calendar Earnings fetcher.""" params = { "start_date": datetime.date(2023, 11, 1), "end_date": datetime.date(2023, 11, 30), @@ -129,6 +141,7 @@ def test_nasdaq_calendar_earnings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_historical_dividends_fetcher(credentials=test_credentials): + """Test the Nasdaq Historical Dividends fetcher.""" params = {"symbol": "AAPL"} fetcher = NasdaqHistoricalDividendsFetcher() @@ -138,6 +151,7 @@ def test_nasdaq_historical_dividends_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_nasdaq_lbma_fixing_fetcher(credentials=test_credentials): + """Test the Nasdaq LBMA Fixing fetcher.""" params = {"asset": "gold"} fetcher = NasdaqLbmaFixingFetcher() diff --git a/openbb_platform/providers/oecd/__init__.py b/openbb_platform/providers/oecd/__init__.py index e69de29bb2d..78232822134 100644 --- a/openbb_platform/providers/oecd/__init__.py +++ b/openbb_platform/providers/oecd/__init__.py @@ -0,0 +1 @@ +"""OECD Provider for OpenBB Platform.""" diff --git a/openbb_platform/providers/oecd/openbb_oecd/utils/helpers.py b/openbb_platform/providers/oecd/openbb_oecd/utils/helpers.py index 61e5475137d..3e11609ef3e 100644 --- a/openbb_platform/providers/oecd/openbb_oecd/utils/helpers.py +++ b/openbb_platform/providers/oecd/openbb_oecd/utils/helpers.py @@ -1,3 +1,5 @@ +"""OECD helper functions.""" + import ssl from datetime import date from io import StringIO @@ -20,14 +22,16 @@ Path(cache).mkdir(parents=True, exist_ok=True) class CustomHttpAdapter(requests.adapters.HTTPAdapter): - # "Transport adapter" that allows us to use custom ssl_context. + """Transport adapter" that allows us to use custom ssl_context.""" def __init__(self, ssl_context=None, **kwargs): + """Initialize the adapter with a custom ssl_context.""" self.ssl_context = ssl_context super().__init__(**kwargs) # pylint: disable=arguments-differ def init_poolmanager(self, connections, maxsize, block=False): + """Initialize the poolmanager with a custom ssl_context.""" self.poolmanager = urllib3.poolmanager.PoolManager( # pylint: disable=attribute-defined-outside-init num_pools=connections, maxsize=maxsize, @@ -40,7 +44,7 @@ class CustomHttpAdapter(requests.adapters.HTTPAdapter): def get_legacy_session(): - """Stackoverflow code to create a custom session.""" + """Create a custom session.""" ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) ctx.options |= 0x4 # OP_LEGACY_SERVER_CONNECT session = requests.Session() @@ -64,9 +68,9 @@ def fetch_data(url: str, csv_kwargs: Optional[Dict] = None, **kwargs: Any) -> Da def oecd_xml_to_df(xml_string: str) -> DataFrame: - """Helper function to parse the OECD XML and return a dataframe. + """Parse the OECD XML and return a dataframe. - Parameters + Parameters ---------- xml_string : str A string containing the OECD XML data. @@ -108,7 +112,7 @@ def oecd_xml_to_df(xml_string: str) -> DataFrame: def parse_url(url: str) -> DataFrame: - """Helper function to parse the SDMX url and return a dataframe. + """Parse the SDMX url and return a dataframe. Parameters ---------- @@ -193,7 +197,7 @@ def write_to_cache(cache_str: str, data: DataFrame, cache_method: str) -> None: def query_dict_to_path(query_dict: dict) -> str: - """Convert the query dict into something usable for writing file""" + """Convert the query dict into something usable for writing file.""" items = sorted(query_dict.items()) key_parts = [f"{key}_{value}" for key, value in items] return "-".join(key_parts).replace("/", "_").replace(" ", "_") @@ -206,8 +210,7 @@ def get_possibly_cached_data( cache_method: str = "csv", skip_cache: bool = False, ) -> DataFrame: - """ - Retrieve data from a given URL or from the cache if available and valid. + """Retrieve data from a given URL or from the cache if available and valid. Parameters ---------- @@ -225,8 +228,9 @@ def get_possibly_cached_data( DataFrame A Pandas DataFrame containing the fetched or cached data. """ - - base_cache = f"{cache}/{function}_{query_dict_to_path(query_dict)}" + base_cache = ( + f"{cache}/{function}_{query_dict_to_path(query_dict if query_dict else {})}" + ) if cache_method == "parquet": cache_path = base_cache + ".parquet" elif cache_method == "csv": @@ -248,7 +252,7 @@ def get_possibly_cached_data( def oecd_date_to_python_date(input_date: Union[str, int]) -> date: - """Darrens good idea to make the dates filterable""" + """Use Darrens good idea to make the dates filterable.""" input_date = str(input_date) if "Q" in input_date: return to_datetime(input_date).to_period("Q").to_timestamp("Q").date() diff --git a/openbb_platform/providers/oecd/poetry.lock b/openbb_platform/providers/oecd/poetry.lock index e45b55d8095..f15d71a6c2c 100644 --- a/openbb_platform/providers/oecd/poetry.lock +++ b/openbb_platform/providers/oecd/poetry.lock @@ -648,13 +648,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1367,4 +1367,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "38738ec5f45508730461443188945421648873b1326a2838e98324696d059e33" +content-hash = "80240bbb79b7fbd6d34f3b1b386ab7152e103a26da4ffee37aafafb0561e300d" diff --git a/openbb_platform/providers/oecd/pyproject.toml b/openbb_platform/providers/oecd/pyproject.toml index be072794c41..e1a7aab7f81 100644 --- a/openbb_platform/providers/oecd/pyproject.toml +++ b/openbb_platform/providers/oecd/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-oecd" -version = "1.1.4" +version = "1.1.5" description = "OECD extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_oecd" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" urllib3 = ">1.26.16" defusedxml = "^0.8.0rc2" diff --git a/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py b/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py index 2bfd968f7c1..c1e0dc618ea 100644 --- a/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py +++ b/openbb_platform/providers/oecd/tests/test_oecd_fetchers.py @@ -1,3 +1,5 @@ +"""Test the OECD fetchers.""" + import datetime import pytest @@ -17,6 +19,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -27,6 +30,7 @@ def vcr_config(): @pytest.mark.record_http def test_oecd_nominal_gdp_fetcher(credentials=test_credentials): + """Test the OECD Nominal GDP fetcher.""" params = { "start_date": datetime.date(2020, 1, 1), "end_date": datetime.date(2023, 6, 6), @@ -39,6 +43,7 @@ def test_oecd_nominal_gdp_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_oecd_real_gdp_fetcher(credentials=test_credentials): + """Test the OECD Real GDP fetcher.""" params = { "start_date": datetime.date(2020, 1, 1), "end_date": datetime.date(2023, 6, 6), @@ -50,6 +55,7 @@ def test_oecd_real_gdp_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_oecd_forecast_gdp_fetcher(credentials=test_credentials): + """Test the OECD GDP Forecast fetcher.""" params = { "start_date": datetime.date(2020, 1, 1), "end_date": datetime.date(2023, 6, 6), @@ -62,6 +68,7 @@ def test_oecd_forecast_gdp_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_oecd_unemployment_fetcher(credentials=test_credentials): + """Test the OECD Unemployment Rate fetcher.""" params = { "start_date": datetime.date(2023, 1, 1), "end_date": datetime.date(2023, 6, 6), @@ -74,6 +81,7 @@ def test_oecd_unemployment_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_oecdcli_fetcher(credentials=test_credentials): + """Test the OECD Composite Leading Indicator fetcher.""" params = { "start_date": datetime.date(2023, 1, 1), "end_date": datetime.date(2023, 6, 6), @@ -86,6 +94,7 @@ def test_oecdcli_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_oecdstir_fetcher(credentials=test_credentials): + """Test the OECD Short Term Interest Rate fetcher.""" params = { "start_date": datetime.date(2023, 1, 1), "end_date": datetime.date(2023, 6, 6), @@ -98,6 +107,7 @@ def test_oecdstir_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_oecdltir_fetcher(credentials=test_credentials): + """Test the OECD Long Term Interest Rate fetcher.""" params = { "start_date": datetime.date(2023, 1, 1), "end_date": datetime.date(2023, 6, 6), diff --git a/openbb_platform/providers/polygon/__init__.py b/openbb_platform/providers/polygon/__init__.py index e69de29bb2d..058a541bd21 100644 --- a/openbb_platform/providers/polygon/__init__.py +++ b/openbb_platform/providers/polygon/__init__.py @@ -0,0 +1 @@ +"""Polygon Provider init.""" diff --git a/openbb_platform/providers/polygon/openbb_polygon/models/__init__.py b/openbb_platform/providers/polygon/openbb_polygon/models/__init__.py index e69de29bb2d..8062aa0a1f1 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/models/__init__.py +++ b/openbb_platform/providers/polygon/openbb_polygon/models/__init__.py @@ -0,0 +1 @@ +"""OpenBB Polygon provider data models.""" diff --git a/openbb_platform/providers/polygon/openbb_polygon/models/crypto_historical.py b/openbb_platform/providers/polygon/openbb_polygon/models/crypto_historical.py index 04a566a6250..dc9bb95fe2b 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/models/crypto_historical.py +++ b/openbb_platform/providers/polygon/openbb_polygon/models/crypto_historical.py @@ -3,7 +3,10 @@ # pylint: disable=unused-argument,protected-access,line-too-long import warnings -from datetime import datetime +from datetime import ( + datetime, + timezone, +) from typing import Any, Dict, List, Literal, Optional from dateutil.relativedelta import relativedelta @@ -18,6 +21,7 @@ from openbb_core.provider.utils.helpers import ( ClientResponse, ClientSession, amake_requests, + safe_fromtimestamp, ) from pydantic import ( Field, @@ -25,7 +29,6 @@ from pydantic import ( PrivateAttr, model_validator, ) -from pytz import timezone _warn = warnings.warn @@ -146,17 +149,18 @@ class PolygonCryptoHistoricalFetcher( data = await response.json() symbol = response.url.parts[4] - next_url = data.get("next_url", None) - results: list = data.get("results", []) + next_url = data.get("next_url", None) # type: ignore + results: list = data.get("results", []) # type: ignore while next_url: url = f"{next_url}&apiKey={api_key}" data = await session.get_json(url) - results.extend(data.get("results", [])) - next_url = data.get("next_url", None) + results.extend(data.get("results", [])) # type: ignore + next_url = data.get("next_url", None) # type: ignore for r in results: - r["t"] = datetime.fromtimestamp(r["t"] / 1000, tz=timezone("UTC")) + v = r["t"] / 1000 # milliseconds to seconds + r["t"] = safe_fromtimestamp(v, tz=timezone.utc) # type: ignore[arg-type] if query._timespan not in ["second", "minute", "hour"]: r["t"] = r["t"].date().strftime("%Y-%m-%d") else: diff --git a/openbb_platform/providers/polygon/openbb_polygon/models/currency_historical.py b/openbb_platform/providers/polygon/openbb_polygon/models/currency_historical.py index 0da2b73c2f2..9a4edcb98b4 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/models/currency_historical.py +++ b/openbb_platform/providers/polygon/openbb_polygon/models/currency_historical.py @@ -3,7 +3,10 @@ # pylint: disable=unused-argument,protected-access,line-too-long import warnings -from datetime import datetime +from datetime import ( + datetime, + timezone, +) from typing import Any, Dict, List, Literal, Optional from dateutil.relativedelta import relativedelta @@ -18,6 +21,7 @@ from openbb_core.provider.utils.helpers import ( ClientResponse, ClientSession, amake_requests, + safe_fromtimestamp, ) from pydantic import ( Field, @@ -25,7 +29,6 @@ from pydantic import ( PrivateAttr, model_validator, ) -from pytz import timezone _warn = warnings.warn @@ -143,17 +146,18 @@ class PolygonCurrencyHistoricalFetcher( data = await response.json() symbol = response.url.parts[4] - next_url = data.get("next_url", None) - results: list = data.get("results", []) + next_url = data.get("next_url", None) # type: ignore[union-attr] + results: list = data.get("results", []) # type: ignore[union-attr] while next_url: url = f"{next_url}&apiKey={api_key}" data = await session.get_json(url) - results.extend(data.get("results", [])) - next_url = data.get("next_url", None) + results.extend(data.get("results", [])) # type: ignore[union-attr] + next_url = data.get("next_url", None) # type: ignore[union-attr] for r in results: - r["t"] = datetime.fromtimestamp(r["t"] / 1000, tz=timezone("UTC")) + v = r["t"] / 1000 # milliseconds to seconds + r["t"] = safe_fromtimestamp(v, tz=timezone.utc) # type: ignore[arg-type] if query._timespan not in ["second", "minute", "hour"]: r["t"] = r["t"].date().strftime("%Y-%m-%d") else: diff --git a/openbb_platform/providers/polygon/openbb_polygon/models/equity_historical.py b/openbb_platform/providers/polygon/openbb_polygon/models/equity_historical.py index 85f4625a875..de818d61bfe 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/models/equity_historical.py +++ b/openbb_platform/providers/polygon/openbb_polygon/models/equity_historical.py @@ -3,7 +3,9 @@ # pylint: disable=unused-argument,protected-access import warnings -from datetime import datetime +from datetime import ( + datetime, +) from typing import Any, Dict, List, Literal, Optional from dateutil.relativedelta import relativedelta @@ -18,6 +20,7 @@ from openbb_core.provider.utils.helpers import ( ClientResponse, ClientSession, amake_requests, + safe_fromtimestamp, ) from pandas import to_datetime from pydantic import ( @@ -152,19 +155,18 @@ class PolygonEquityHistoricalFetcher( data = await response.json() symbol = response.url.parts[4] - next_url = data.get("next_url", None) - results: list = data.get("results", []) + next_url = data.get("next_url", None) # type: ignore + results: list = data.get("results", []) # type: ignore while next_url: url = f"{next_url}&apiKey={api_key}" data = await session.get_json(url) - results.extend(data.get("results", [])) - next_url = data.get("next_url", None) + results.extend(data.get("results", [])) # type: ignore + next_url = data.get("next_url", None) # type: ignore for r in results: - r["t"] = datetime.fromtimestamp( - r["t"] / 1000, tz=timezone("America/New_York") - ) + v = r["t"] / 1000 # milliseconds to seconds + r["t"] = safe_fromtimestamp(v, tz=timezone("America/New_York")) # type: ignore[arg-type] if query._timespan not in ["second", "minute", "hour"]: r["t"] = r["t"].date().strftime("%Y-%m-%d") else: diff --git a/openbb_platform/providers/polygon/openbb_polygon/models/index_historical.py b/openbb_platform/providers/polygon/openbb_polygon/models/index_historical.py index 01320ddfc75..74fa010e841 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/models/index_historical.py +++ b/openbb_platform/providers/polygon/openbb_polygon/models/index_historical.py @@ -18,6 +18,7 @@ from openbb_core.provider.utils.helpers import ( ClientResponse, ClientSession, amake_requests, + safe_fromtimestamp, ) from pydantic import ( Field, @@ -143,19 +144,18 @@ class PolygonIndexHistoricalFetcher( data = await response.json() symbol = response.url.parts[4] - next_url = data.get("next_url", None) - results: list = data.get("results", []) + next_url = data.get("next_url", None) # type: ignore[union-attr] + results: list = data.get("results", []) # type: ignore[union-attr] while next_url: url = f"{next_url}&apiKey={api_key}" data = await session.get_json(url) - results.extend(data.get("results", [])) - next_url = data.get("next_url", None) + results.extend(data.get("results", [])) # type: ignore[union-attr] + next_url = data.get("next_url", None) # type: ignore[union-attr] for r in results: - r["t"] = datetime.fromtimestamp( - r["t"] / 1000, tz=timezone("America/New_York") - ) + v = r["t"] / 1000 # milliseconds to seconds + r["t"] = safe_fromtimestamp(v, tz=timezone("America/New_York")) # type: ignore[arg-type] if query._timespan not in ["second", "minute", "hour"]: r["t"] = r["t"].date().strftime("%Y-%m-%d") else: diff --git a/openbb_platform/providers/polygon/openbb_polygon/models/market_indices.py b/openbb_platform/providers/polygon/openbb_polygon/models/market_indices.py index b473a42cffb..35670008e50 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/models/market_indices.py +++ b/openbb_platform/providers/polygon/openbb_polygon/models/market_indices.py @@ -1,6 +1,8 @@ """Polygon Market Indices Model.""" -from datetime import datetime +from datetime import ( + datetime, +) from typing import Any, Dict, List, Literal, Optional from dateutil.relativedelta import relativedelta @@ -10,6 +12,7 @@ from openbb_core.provider.standard_models.market_indices import ( MarketIndicesQueryParams, ) from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from openbb_core.provider.utils.helpers import safe_fromtimestamp from openbb_polygon.utils.helpers import get_data_many from pydantic import Field, PositiveInt @@ -94,7 +97,8 @@ class PolygonMarketIndicesFetcher( data = await get_data_many(request_url, "results", **kwargs) for d in data: - d["t"] = datetime.fromtimestamp(d["t"] / 1000) + v = d["t"] / 1000 # milliseconds to seconds + d["t"] = safe_fromtimestamp(v) if query.timespan not in ["minute", "hour"]: d["t"] = d["t"].date() diff --git a/openbb_platform/providers/polygon/openbb_polygon/utils/__init__.py b/openbb_platform/providers/polygon/openbb_polygon/utils/__init__.py index e69de29bb2d..23bbc3b80cb 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/utils/__init__.py +++ b/openbb_platform/providers/polygon/openbb_polygon/utils/__init__.py @@ -0,0 +1 @@ +"""OpenBB Polygon utils.""" diff --git a/openbb_platform/providers/polygon/openbb_polygon/utils/helpers.py b/openbb_platform/providers/polygon/openbb_polygon/utils/helpers.py index bc7f160f182..c2e4b3a0a20 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/utils/helpers.py +++ b/openbb_platform/providers/polygon/openbb_polygon/utils/helpers.py @@ -2,7 +2,7 @@ import json from io import StringIO -from typing import Any, List, Optional, Tuple, TypeVar, Union +from typing import Any, Dict, List, Optional, Tuple, TypeVar, Union from openbb_core.provider.utils.errors import EmptyDataError from openbb_core.provider.utils.helpers import ( @@ -31,16 +31,17 @@ class BasicResponse: def request(url: str) -> BasicResponse: - """ - Request function for PyScript. Pass in Method and make sure to await. + """Request function for PyScript. - Parameters: - ----------- + Pass in Method and make sure to await. + + Parameters + ---------- url: str URL to make request to - Return: - ------- + Return + ------ response: BasicRequest BasicRequest object with status_code and text attributes """ @@ -54,8 +55,8 @@ def request(url: str) -> BasicResponse: async def response_callback( response: ClientResponse, _: ClientSession ) -> Union[dict, List[dict]]: - """Callback for make_request.""" - data: dict = await response.json() + """Use callback for make_request.""" + data: Dict = await response.json() # type: ignore if response.status != 200: message = data.get("error", None) or data.get("message", None) @@ -79,15 +80,15 @@ async def get_data_many( ) -> List[dict]: """Get data from Polygon endpoint and convert to list of schemas. - Parameters: - ----------- + Parameters + ---------- url: str The URL to get the data from. sub_dict: Optional[str] The sub-dictionary to use. - Returns: - -------- + Returns + ------- List[dict] Dictionary of data. """ diff --git a/openbb_platform/providers/polygon/poetry.lock b/openbb_platform/providers/polygon/poetry.lock index 1f872410758..45aff8d211b 100644 --- a/openbb_platform/providers/polygon/poetry.lock +++ b/openbb_platform/providers/polygon/poetry.lock @@ -697,13 +697,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1416,4 +1416,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/polygon/pyproject.toml b/openbb_platform/providers/polygon/pyproject.toml index e5dd990d25c..0be41db1cb6 100644 --- a/openbb_platform/providers/polygon/pyproject.toml +++ b/openbb_platform/providers/polygon/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-polygon" -version = "1.1.4" +version = "1.1.5" description = "Polygon extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_polygon" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py b/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py index ebc51911a31..034334f2195 100644 --- a/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py +++ b/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py @@ -1,3 +1,5 @@ +"""Test the Polygon fetchers.""" + from datetime import date import pytest @@ -26,6 +28,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -36,6 +39,7 @@ def vcr_config(): @pytest.mark.record_http def test_polygon_equity_historical_fetcher(credentials=test_credentials): + """Test the Polygon Equity Historical fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -50,6 +54,7 @@ def test_polygon_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_market_indices_fetcher(credentials=test_credentials): + """Test the Polygon Market Indices fetcher.""" params = { "symbol": "NDX", "start_date": date(2023, 1, 1), @@ -63,6 +68,7 @@ def test_polygon_market_indices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_index_historical_fetcher(credentials=test_credentials): + """Test the Polygon Index Historical fetcher.""" params = { "symbol": "NDX", "start_date": date(2023, 1, 1), @@ -76,6 +82,7 @@ def test_polygon_index_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_company_news_fetcher(credentials=test_credentials): + """Test the Polygon Company News fetcher.""" params = {"symbol": "AAPL"} fetcher = PolygonCompanyNewsFetcher() @@ -85,6 +92,7 @@ def test_polygon_company_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_balance_sheet_fetcher(credentials=test_credentials): + """Test the Polygon Balance Sheet fetcher.""" params = {"symbol": "AAPL"} fetcher = PolygonBalanceSheetFetcher() @@ -94,6 +102,7 @@ def test_polygon_balance_sheet_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_income_statement_fetcher(credentials=test_credentials): + """Test the Polygon Income Statement fetcher.""" params = {"symbol": "AAPL"} fetcher = PolygonIncomeStatementFetcher() @@ -103,6 +112,7 @@ def test_polygon_income_statement_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_cash_flow_statement_fetcher(credentials=test_credentials): + """Test the Polygon Cash Flow Statement fetcher.""" params = {"symbol": "AAPL"} fetcher = PolygonCashFlowStatementFetcher() @@ -112,6 +122,7 @@ def test_polygon_cash_flow_statement_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_crypto_historical_fetcher(credentials=test_credentials): + """Test the Polygon Crypto Historical fetcher.""" params = { "symbol": "BTCUSD", "start_date": date(2023, 1, 1), @@ -125,6 +136,7 @@ def test_polygon_crypto_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_currency_historical_fetcher(credentials=test_credentials): + """Test the Polygon Currency Historical fetcher.""" params = { "symbol": "EURUSD", "start_date": date(2023, 1, 1), @@ -138,6 +150,7 @@ def test_polygon_currency_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_currency_pairs_fetcher(credentials=test_credentials): + """Test the Polygon Currency Pairs fetcher.""" params = {"date": date(2023, 1, 1)} fetcher = PolygonCurrencyPairsFetcher() @@ -147,6 +160,7 @@ def test_polygon_currency_pairs_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_equity_nbbo_fetcher(credentials=test_credentials): + """Test the Polygon Equity NBBO fetcher.""" params = {"symbol": "SPY", "limit": 1000} fetcher = PolygonEquityNBBOFetcher() @@ -156,6 +170,7 @@ def test_polygon_equity_nbbo_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_market_snapshots_fetcher(credentials=test_credentials): + """Test the Polygon Market Snapshots fetcher.""" params = {} fetcher = PolygonMarketSnapshotsFetcher() diff --git a/openbb_platform/providers/sec/__init__.py b/openbb_platform/providers/sec/__init__.py index e69de29bb2d..58f6e5aeaa4 100644 --- a/openbb_platform/providers/sec/__init__.py +++ b/openbb_platform/providers/sec/__init__.py @@ -0,0 +1 @@ +"""SEC Provider.""" diff --git a/openbb_platform/providers/sec/openbb_sec/models/__init__.py b/openbb_platform/providers/sec/openbb_sec/models/__init__.py index e69de29bb2d..a2faa26a3ad 100644 --- a/openbb_platform/providers/sec/openbb_sec/models/__init__.py +++ b/openbb_platform/providers/sec/openbb_sec/models/__init__.py @@ -0,0 +1 @@ +"""SEC Provider Models.""" diff --git a/openbb_platform/providers/sec/openbb_sec/models/company_filings.py b/openbb_platform/providers/sec/openbb_sec/models/company_filings.py index 1108ad19419..85d98ff1b0c 100644 --- a/openbb_platform/providers/sec/openbb_sec/models/company_filings.py +++ b/openbb_platform/providers/sec/openbb_sec/models/company_filings.py @@ -145,7 +145,7 @@ class SecCompanyFilingsFetcher( credentials: Optional[Dict[str, str]], **kwargs: Any, ) -> List[Dict]: - """Extracts the data from the SEC endpoint.""" + """Extract the data from the SEC endpoint.""" filings = pd.DataFrame() if query.symbol and not query.cik: @@ -156,12 +156,12 @@ class SecCompanyFilingsFetcher( return [] # The leading 0s need to be inserted but are typically removed from the data to store as an integer. - if len(query.cik) != 10: + if len(query.cik) != 10: # type: ignore cik_: str = "" - temp = 10 - len(query.cik) + temp = 10 - len(query.cik) # type: ignore for i in range(temp): cik_ = cik_ + "0" - query.cik = cik_ + query.cik + query.cik = cik_ + str(query.cik) # type: ignore url = f"https://data.sec.gov/submissions/CIK{query.cik}.json" r = ( @@ -236,5 +236,5 @@ class SecCompanyFilingsFetcher( def transform_data( query: SecCompanyFilingsQueryParams, data: List[Dict], **kwargs: Any ) -> List[SecCompanyFilingsData]: - """Transforms the data.""" + """Transform the data.""" return [SecCompanyFilingsData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/sec/openbb_sec/models/equity_ftd.py b/openbb_platform/providers/sec/openbb_sec/models/equity_ftd.py index ad8039bbc91..097a73d3a4d 100644 --- a/openbb_platform/providers/sec/openbb_sec/models/equity_ftd.py +++ b/openbb_platform/providers/sec/openbb_sec/models/equity_ftd.py @@ -56,7 +56,7 @@ class SecEquityFtdFetcher( credentials: Optional[Dict[str, str]], **kwargs: Any, ) -> List[Dict]: - """Extracts the data from the SEC website.""" + """Extract the data from the SEC website.""" results = [] limit = query.limit if query.limit is not None and query.limit > 0 else 0 symbol = query.symbol.upper() @@ -83,5 +83,5 @@ class SecEquityFtdFetcher( def transform_data( query: SecEquityFtdQueryParams, data: List[Dict], **kwargs: Any ) -> List[SecEquityFtdData]: - """Transforms the data to the standard format.""" + """Transform the data to the standard format.""" return [SecEquityFtdData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/sec/openbb_sec/utils/__init__.py b/openbb_platform/providers/sec/openbb_sec/utils/__init__.py index e69de29bb2d..e63a6cc9ef4 100644 --- a/openbb_platform/providers/sec/openbb_sec/utils/__init__.py +++ b/openbb_platform/providers/sec/openbb_sec/utils/__init__.py @@ -0,0 +1 @@ +"""SEC Utils.""" diff --git a/openbb_platform/providers/sec/openbb_sec/utils/helpers.py b/openbb_platform/providers/sec/openbb_sec/utils/helpers.py index 1b150ddd95b..e8622aac7f5 100644 --- a/openbb_platform/providers/sec/openbb_sec/utils/helpers.py +++ b/openbb_platform/providers/sec/openbb_sec/utils/helpers.py @@ -1,4 +1,4 @@ -"""SEC Helpers module""" +"""SEC Helpers module.""" # pylint: skip-file from datetime import timedelta @@ -30,7 +30,8 @@ sec_session_company_filings = requests_cache.CachedSession( def get_all_companies(use_cache: bool = True) -> pd.DataFrame: - """Gets all company names, tickers, and CIK numbers registered with the SEC. + """Get all company names, tickers, and CIK numbers registered with the SEC. + Companies are sorted by market cap. Returns @@ -41,7 +42,6 @@ def get_all_companies(use_cache: bool = True) -> pd.DataFrame: ------- >>> tickers = get_all_companies() """ - url = "https://www.sec.gov/files/company_tickers.json" r = ( @@ -56,8 +56,7 @@ def get_all_companies(use_cache: bool = True) -> pd.DataFrame: def get_all_ciks(use_cache: bool = True) -> pd.DataFrame: - """Gets a list of entity names and their CIK number.""" - + """Get a list of entity names and their CIK number.""" HEADERS = { "User-Agent": "my real company name definitelynot@fakecompany.com", "Accept-Encoding": "gzip, deflate", @@ -86,8 +85,7 @@ def get_all_ciks(use_cache: bool = True) -> pd.DataFrame: def get_mf_and_etf_map(use_cache: bool = True) -> pd.DataFrame: - """Returns the CIK number of a ticker symbol for querying the SEC API.""" - + """Return the CIK number of a ticker symbol for querying the SEC API.""" symbols = pd.DataFrame() url = "https://www.sec.gov/files/company_tickers_mf.json" @@ -110,8 +108,7 @@ def search_institutions(keyword: str, use_cache: bool = True) -> pd.DataFrame: def symbol_map(symbol: str, use_cache: bool = True) -> str: - """Returns the CIK number of a ticker symbol for querying the SEC API.""" - + """Return the CIK number of a ticker symbol for querying the SEC API.""" symbol = symbol.upper().replace(".", "-") symbols = get_all_companies(use_cache=use_cache) @@ -130,8 +127,7 @@ def symbol_map(symbol: str, use_cache: bool = True) -> str: def cik_map(cik: int, use_cache: bool = True) -> str: - """ - Converts a CIK number to a ticker symbol. Enter CIK as an integer with no leading zeros. + """Convert a CIK number to a ticker symbol. Enter CIK as an integer with no leading zeros. Function is not meant for funds. @@ -164,7 +160,8 @@ def get_frame( instantaneous: bool = False, use_cache: bool = True, ) -> Dict: - """ + """Get a frame of data for a given fact. + The xbrl/frames API aggregates one fact for each reporting entity that is last filed that most closely fits the calendrical period requested. @@ -197,7 +194,6 @@ def get_frame( Facts where units are, "shares": WeightedAverageNumberOfDilutedSharesOutstanding """ - if fact in ["WeightedAverageNumberOfDilutedSharesOutstanding"]: units = "shares" @@ -237,6 +233,7 @@ def get_frame( def get_schema_filelist(query: str = "", url: str = "") -> List: + """Get a list of schema files from the SEC website.""" results: List = [] url = url if url else f"https://xbrl.fasb.org/us-gaap/{query}" _url = url @@ -300,7 +297,6 @@ def download_zip_file(url, symbol: Optional[str] = None) -> List[Dict]: def get_ftd_urls() -> Dict: """Get Fails-to-Deliver Data URLs.""" - results = {} position = None key = "title" @@ -330,8 +326,8 @@ def get_ftd_urls() -> Dict: def get_series_id( symbol: Optional[str] = None, cik: Optional[str] = None, use_cache: bool = True ): - """ - This function maps the fund to the series and class IDs for validating the correct filing. + """Map the fund to the series and class IDs for validating the correct filing. + For an exact match, use a symbol. """ symbol = symbol if symbol else "" @@ -359,8 +355,7 @@ def get_series_id( def get_nport_candidates(symbol: str, use_cache: bool = True) -> List[Dict]: - """Gets a list of all NPORT-P filings for a given fund's symbol.""" - + """Get a list of all NPORT-P filings for a given fund's symbol.""" results = [] _series_id = get_series_id(symbol, use_cache=use_cache) try: diff --git a/openbb_platform/providers/sec/openbb_sec/utils/parse_13f.py b/openbb_platform/providers/sec/openbb_sec/utils/parse_13f.py index eda060c17bc..5fedbaf3858 100644 --- a/openbb_platform/providers/sec/openbb_sec/utils/parse_13f.py +++ b/openbb_platform/providers/sec/openbb_sec/utils/parse_13f.py @@ -1,6 +1,6 @@ """Utility functions for parsing SEC Form 13F-HR.""" -from typing import Dict, Optional +from typing import Any, Dict, Optional import xmltodict from bs4 import BeautifulSoup @@ -22,7 +22,7 @@ def date_to_quarter_end(date: str) -> str: def get_13f_candidates(symbol: Optional[str] = None, cik: Optional[str] = None): """Get the 13F-HR filings for a given symbol or CIK.""" fetcher = SecCompanyFilingsFetcher() - params = {} + params: Dict[str, Any] = {} if cik is not None: params["cik"] = str(cik) if symbol is not None: @@ -46,7 +46,7 @@ def get_13f_candidates(symbol: Optional[str] = None, cik: Optional[str] = None): async def complete_submission_callback(response, _): - """Callback function for processing the response object.""" + """Use callback function for processing the response object.""" if response.status == 200: return await response.text() raise RuntimeError(f"Request failed with status code {response.status}") @@ -106,7 +106,7 @@ def get_period_ending(filing_str: str): async def parse_13f_hr(filing: str): - """Parses a 13F-HR filing from the Complete Submission TXT file string.""" + """Parse a 13F-HR filing from the Complete Submission TXT file string.""" data = DataFrame() # Check if the input string is a URL diff --git a/openbb_platform/providers/sec/poetry.lock b/openbb_platform/providers/sec/poetry.lock index 831ebc05871..11e0c3e54c6 100644 --- a/openbb_platform/providers/sec/poetry.lock +++ b/openbb_platform/providers/sec/poetry.lock @@ -721,13 +721,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1584,4 +1584,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "8518d131e4fd2f87fdbfe11ceeb02d1389bad71baa0b8689e079bbc96aeab9a2" +content-hash = "5f1027824c017abd05bf08cc40628e94c28062b8a91a551667a46d30381d9be0" diff --git a/openbb_platform/providers/sec/pyproject.toml b/openbb_platform/providers/sec/pyproject.toml index a69eb563cc6..c9e51879d41 100644 --- a/openbb_platform/providers/sec/pyproject.toml +++ b/openbb_platform/providers/sec/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-sec" -version = "1.1.4" +version = "1.1.5" description = "SEC extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_sec" }] [tool.poetry.dependencies] python = ">=3.8,<3.12" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" requests-cache = "^1.1.0" xmltodict = "^0.13.0" pytest-freezegun = "^0.4.2" diff --git a/openbb_platform/providers/sec/tests/__init__.py b/openbb_platform/providers/sec/tests/__init__.py index e69de29bb2d..9c38549cbb3 100644 --- a/openbb_platform/providers/sec/tests/__init__.py +++ b/openbb_platform/providers/sec/tests/__init__.py @@ -0,0 +1 @@ +"""SEC tests.""" diff --git a/openbb_platform/providers/sec/tests/test_sec_fetchers.py b/openbb_platform/providers/sec/tests/test_sec_fetchers.py index e7f7f2df02c..60db05d26d3 100644 --- a/openbb_platform/providers/sec/tests/test_sec_fetchers.py +++ b/openbb_platform/providers/sec/tests/test_sec_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for the SEC fetchers.""" + import pytest from openbb_core.app.service.user_service import UserService from openbb_sec.models.cik_map import SecCikMapFetcher @@ -17,6 +19,7 @@ test_credentials = UserService().default_user_settings.credentials.dict() @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -27,6 +30,7 @@ def vcr_config(): @pytest.mark.record_http def test_sec_etf_holdings_fetcher(credentials=test_credentials): + """Test the SEC ETF Holdings fetcher.""" params = {"symbol": "TQQQ", "use_cache": False} fetcher = SecEtfHoldingsFetcher() @@ -36,6 +40,7 @@ def test_sec_etf_holdings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_sic_search_fetcher(credentials=test_credentials): + """Test the SEC SIC Search fetcher.""" params = {"query": "oil", "use_cache": False} fetcher = SecSicSearchFetcher() @@ -45,6 +50,7 @@ def test_sec_sic_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_symbol_map_fetcher(credentials=test_credentials): + """Test the SEC Symbol Map fetcher.""" params = {"query": "0000909832"} fetcher = SecSymbolMapFetcher() @@ -54,6 +60,7 @@ def test_sec_symbol_map_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_equity_ftd_fetcher(credentials=test_credentials): + """Test the SEC Equity FTD fetcher.""" params = {"symbol": "AAPL", "limit": 1} fetcher = SecEquityFtdFetcher() @@ -63,6 +70,7 @@ def test_sec_equity_ftd_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_equity_search_fetcher(credentials=test_credentials): + """Test the SEC Equity Search fetcher.""" params = {"query": "trust", "use_cache": False} fetcher = SecEquitySearchFetcher() @@ -72,6 +80,7 @@ def test_sec_equity_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_company_filings_fetcher(credentials=test_credentials): + """Test the SEC Company Filings fetcher.""" params = {"symbol": "AAPL", "type": "10-K", "use_cache": False} fetcher = SecCompanyFilingsFetcher() @@ -81,6 +90,7 @@ def test_sec_company_filings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_institutions_search_fetcher(credentials=test_credentials): + """Test the SEC Institutions Search fetcher.""" params = {"query": "Investment Trust", "use_cache": False} fetcher = SecInstitutionsSearchFetcher() @@ -90,6 +100,7 @@ def test_sec_institutions_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_schema_files_fetcher(credentials=test_credentials): + """Test the SEC Schema Files fetcher.""" params = {"query": "2022"} fetcher = SecSchemaFilesFetcher() @@ -99,6 +110,7 @@ def test_sec_schema_files_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_rss_litigation_fetcher(credentials=test_credentials): + """Test the SEC RSS Litigation fetcher.""" params = {} fetcher = SecRssLitigationFetcher() @@ -108,6 +120,7 @@ def test_sec_rss_litigation_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_cik_map_fetcher(credentials=test_credentials): + """Test the SEC CIK map fetcher.""" params = {"symbol": "OXY"} fetcher = SecCikMapFetcher() @@ -117,6 +130,7 @@ def test_sec_cik_map_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_sec_form_13FHR_fetcher(credentials=test_credentials): + """Test the SEC Form 13FHR fetcher.""" params = {"symbol": "NVDA"} fetcher = SecForm13FHRFetcher() diff --git a/openbb_platform/providers/seeking_alpha/poetry.lock b/openbb_platform/providers/seeking_alpha/poetry.lock index 12b9fd975a0..718edef43ca 100644 --- a/openbb_platform/providers/seeking_alpha/poetry.lock +++ b/openbb_platform/providers/seeking_alpha/poetry.lock @@ -712,13 +712,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1431,4 +1431,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/seeking_alpha/pyproject.toml b/openbb_platform/providers/seeking_alpha/pyproject.toml index 586057006d6..8701c492759 100644 --- a/openbb_platform/providers/seeking_alpha/pyproject.toml +++ b/openbb_platform/providers/seeking_alpha/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-seeking-alpha" -version = "1.1.4" +version = "1.1.5" description = "Seeking Alpha extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_seeking_alpha" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/seeking_alpha/tests/__init__.py b/openbb_platform/providers/seeking_alpha/tests/__init__.py index e69de29bb2d..47cf47b762c 100644 --- a/openbb_platform/providers/seeking_alpha/tests/__init__.py +++ b/openbb_platform/providers/seeking_alpha/tests/__init__.py @@ -0,0 +1 @@ +"""Seeking Alpha provider tests.""" diff --git a/openbb_platform/providers/seeking_alpha/tests/test_seeking_alpha_fetchers.py b/openbb_platform/providers/seeking_alpha/tests/test_seeking_alpha_fetchers.py index fb89a5e0299..e279c044e00 100644 --- a/openbb_platform/providers/seeking_alpha/tests/test_seeking_alpha_fetchers.py +++ b/openbb_platform/providers/seeking_alpha/tests/test_seeking_alpha_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for the Seeking Alpha fetchers.""" + import pytest from openbb_core.app.service.user_service import UserService from openbb_seeking_alpha.models.upcoming_release_days import ( @@ -11,6 +13,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -21,6 +24,7 @@ def vcr_config(): @pytest.mark.record_http def test_sa_upcoming_release_days_fetcher(credentials=test_credentials): + """Test the Seeking Alpha Upcoming Release Days fetcher.""" params = {"limit": 5} fetcher = SAUpcomingReleaseDaysFetcher() diff --git a/openbb_platform/providers/stockgrid/__init__.py b/openbb_platform/providers/stockgrid/__init__.py index e69de29bb2d..61d62436f15 100644 --- a/openbb_platform/providers/stockgrid/__init__.py +++ b/openbb_platform/providers/stockgrid/__init__.py @@ -0,0 +1 @@ +"""Stockgrid provider.""" diff --git a/openbb_platform/providers/stockgrid/poetry.lock b/openbb_platform/providers/stockgrid/poetry.lock index 035cf5320d7..10be16a257a 100644 --- a/openbb_platform/providers/stockgrid/poetry.lock +++ b/openbb_platform/providers/stockgrid/poetry.lock @@ -696,13 +696,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1489,4 +1489,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e65cf7357235dd769f59f934a0b3b7269423aefab7894263aec71a45c2dc95db" +content-hash = "26d1a0d45b5b2c949bc78c9c9d7f1f4b0da40bfd8ae1ff8882d162fa23248a53" diff --git a/openbb_platform/providers/stockgrid/pyproject.toml b/openbb_platform/providers/stockgrid/pyproject.toml index 12c744446f0..64f5ff05a1e 100644 --- a/openbb_platform/providers/stockgrid/pyproject.toml +++ b/openbb_platform/providers/stockgrid/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-stockgrid" -version = "1.1.4" +version = "1.1.5" description = "stockgrid extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_stockgrid" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" pytest-freezegun = "^0.4.2" [build-system] diff --git a/openbb_platform/providers/stockgrid/tests/test_stockgrid_fetchers.py b/openbb_platform/providers/stockgrid/tests/test_stockgrid_fetchers.py index cdc591c080d..a06c0e619ea 100644 --- a/openbb_platform/providers/stockgrid/tests/test_stockgrid_fetchers.py +++ b/openbb_platform/providers/stockgrid/tests/test_stockgrid_fetchers.py @@ -1,3 +1,5 @@ +"""Test stockgrid fetchers.""" + import pytest from openbb_core.app.service.user_service import UserService from openbb_stockgrid.models.short_volume import StockgridShortVolumeFetcher @@ -9,6 +11,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -20,6 +23,7 @@ def vcr_config(): @pytest.mark.freeze_time("2023-11-08") @pytest.mark.record_http def test_stockgrid_short_volume_fetcher(credentials=test_credentials): + """Test short volume fetcher.""" params = {"symbol": "AAPL"} fetcher = StockgridShortVolumeFetcher() diff --git a/openbb_platform/providers/tests/__init__.py b/openbb_platform/providers/tests/__init__.py index e69de29bb2d..bf8046d32a1 100644 --- a/openbb_platform/providers/tests/__init__.py +++ b/openbb_platform/providers/tests/__init__.py @@ -0,0 +1 @@ +"""OpenBB Provider tests.""" diff --git a/openbb_platform/providers/tests/utils/__init__.py b/openbb_platform/providers/tests/utils/__init__.py index e69de29bb2d..83831219db3 100644 --- a/openbb_platform/providers/tests/utils/__init__.py +++ b/openbb_platform/providers/tests/utils/__init__.py @@ -0,0 +1 @@ +"""Provider test utils.""" diff --git a/openbb_platform/providers/tiingo/__init__.py b/openbb_platform/providers/tiingo/__init__.py index e69de29bb2d..da05810f5e9 100644 --- a/openbb_platform/providers/tiingo/__init__.py +++ b/openbb_platform/providers/tiingo/__init__.py @@ -0,0 +1 @@ +"""Tiingo provider.""" diff --git a/openbb_platform/providers/tiingo/poetry.lock b/openbb_platform/providers/tiingo/poetry.lock index 7f12dfce23c..f5cf8931f29 100644 --- a/openbb_platform/providers/tiingo/poetry.lock +++ b/openbb_platform/providers/tiingo/poetry.lock @@ -682,13 +682,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1401,4 +1401,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/tiingo/pyproject.toml b/openbb_platform/providers/tiingo/pyproject.toml index 18b3abfff52..2c703613733 100644 --- a/openbb_platform/providers/tiingo/pyproject.toml +++ b/openbb_platform/providers/tiingo/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-tiingo" -version = "1.1.4" +version = "1.1.5" description = "Tiingo extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_tiingo" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/tiingo/tests/test_tiingo_fetchers.py b/openbb_platform/providers/tiingo/tests/test_tiingo_fetchers.py index 24357f9e02e..26dcddaf1df 100644 --- a/openbb_platform/providers/tiingo/tests/test_tiingo_fetchers.py +++ b/openbb_platform/providers/tiingo/tests/test_tiingo_fetchers.py @@ -1,3 +1,5 @@ +"""Test Tiingo fetchers.""" + from datetime import date import pytest @@ -16,6 +18,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -26,6 +29,7 @@ def vcr_config(): @pytest.mark.record_http def test_tiingo_equity_historical_fetcher(credentials=test_credentials): + """Test Tiingo equity historical fetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -39,6 +43,7 @@ def test_tiingo_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tiingo_company_news_fetcher(credentials=test_credentials): + """Test Tiingo company news fetcher.""" params = {"symbol": "AAPL,MSFT"} fetcher = TiingoCompanyNewsFetcher() @@ -48,6 +53,7 @@ def test_tiingo_company_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tiingo_world_news_fetcher(credentials=test_credentials): + """Test Tiingo world news fetcher.""" params = {"limit": 20} fetcher = TiingoWorldNewsFetcher() @@ -57,6 +63,7 @@ def test_tiingo_world_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tiingo_crypto_historical_fetcher(credentials=test_credentials): + """Test Tiingo crypto historical fetcher.""" params = { "symbol": "BTCUSD", "start_date": date(2023, 1, 1), @@ -70,6 +77,7 @@ def test_tiingo_crypto_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tiingo_currency_historical_fetcher(credentials=test_credentials): + """Test Tiingo currency historical fetcher.""" params = { "symbol": "EURUSD", "start_date": date(2023, 1, 1), @@ -83,6 +91,7 @@ def test_tiingo_currency_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tiingo_trailing_div_yield_fetcher(credentials=test_credentials): + """Test Tiingo trailing dividend yield fetcher.""" params = {"symbol": "SCHD"} fetcher = TiingoTrailingDivYieldFetcher() diff --git a/openbb_platform/providers/tmx/__init__.py b/openbb_platform/providers/tmx/__init__.py index e69de29bb2d..ecfc13312a4 100644 --- a/openbb_platform/providers/tmx/__init__.py +++ b/openbb_platform/providers/tmx/__init__.py @@ -0,0 +1 @@ +"""TMX Provider.""" diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/__init__.py b/openbb_platform/providers/tmx/openbb_tmx/models/__init__.py index e69de29bb2d..8810abcee39 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/__init__.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/__init__.py @@ -0,0 +1 @@ +"""TMX Provider Models.""" diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/calendar_earnings.py b/openbb_platform/providers/tmx/openbb_tmx/models/calendar_earnings.py index 0494f09d08b..87082ce6130 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/calendar_earnings.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/calendar_earnings.py @@ -1,4 +1,4 @@ -"""TMX Earnings Calendar Model""" +"""TMX Earnings Calendar Model.""" # pylint: disable=unused-argument import asyncio @@ -85,14 +85,12 @@ class TmxCalendarEarningsFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the TMX endpoint.""" - - results = [] - dates = [] + results: List[Dict] = [] user_agent = get_random_agent() dates = date_range(query.start_date, end=query.end_date) async def create_task(date, results): - """Creates a task for a single date in the range.""" + """Create a task for a single date in the range.""" data = [] date = date.strftime("%Y-%m-%d") payload = gql.get_earnings_date_payload.copy() diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/company_news.py b/openbb_platform/providers/tmx/openbb_tmx/models/company_news.py index 4c8269ac241..cc8fd504cdc 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/company_news.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/company_news.py @@ -26,9 +26,17 @@ class TmxCompanyNewsQueryParams(CompanyNewsQueryParams): default=1, description="The page number to start from. Use with limit." ) + @field_validator("symbol", mode="before") + @classmethod + def symbols_validate(cls, v): + """Validate the symbols.""" + if v is None: + raise ValueError("Symbol is a required field for TMX.") + return v + class TmxCompanyNewsData(CompanyNewsData): - """TMX Stock News Data""" + """TMX Stock News Data.""" __alias_dict__ = { "date": "datetime", @@ -63,12 +71,11 @@ class TmxCompanyNewsFetcher( ) -> List[Dict]: """Return the raw data from the TMX endpoint.""" user_agent = get_random_agent() - symbols = query.symbol.split(",") - results = [] + symbols = query.symbol.split(",") # type: ignore + results: List[Dict] = [] async def create_task(symbol, results): - """Makes a POST request to the TMX GraphQL endpoint for a single symbol.""" - + """Make a POST request to the TMX GraphQL endpoint for a single symbol.""" symbol = ( symbol.upper().replace(".TO", "").replace(".TSX", "").replace("-", ".") ) @@ -78,7 +85,7 @@ class TmxCompanyNewsFetcher( payload["variables"]["limit"] = query.limit payload["variables"]["locale"] = "en" url = "https://app-money.tmx.com/graphql" - data = {} + data: Dict = {} response = await get_data_from_gql( method="POST", url=url, diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/equity_historical.py b/openbb_platform/providers/tmx/openbb_tmx/models/equity_historical.py index acc66c79449..f81c10e06f9 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/equity_historical.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/equity_historical.py @@ -48,7 +48,7 @@ class TmxEquityHistoricalQueryParams(EquityHistoricalQueryParams): interval: Union[ Literal["1m", "2m", "5m", "15m", "30m", "60m", "1h", "1d", "1W", "1M"], str, int - ] = Field( + ] = Field( # type: ignore description=QUERY_DESCRIPTIONS.get("interval", "") + " Or, any integer (entered as a string) representing the number of minutes." + " Default is daily data." @@ -146,12 +146,11 @@ class TmxEquityHistoricalFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the TMX endpoint.""" - results: List[Dict] = [] symbols = query.symbol.split(",") async def create_task(symbol, results): - """Makes a POST request to the TMX GraphQL endpoint for a single ticker.""" + """Make a POST request to the TMX GraphQL endpoint for a single ticker.""" data: List[Dict] = [] # A different request is used for each type of interval. if query.interval == "day": @@ -199,7 +198,6 @@ class TmxEquityHistoricalFetcher( **kwargs: Any, ) -> List[TmxEquityHistoricalData]: """Return the transformed data.""" - results = DataFrame(data) if results.empty or len(results) == 0: raise EmptyDataError() diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/equity_profile.py b/openbb_platform/providers/tmx/openbb_tmx/models/equity_profile.py index 9627e25b7c6..ddce1445ef7 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/equity_profile.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/equity_profile.py @@ -1,4 +1,4 @@ -"""TMX Equity Profile fetcher""" +"""TMX Equity Profile fetcher.""" # pylint: disable=unused-argument import asyncio @@ -84,18 +84,16 @@ class TmxEquityProfileFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the TMX endpoint.""" - symbols = query.symbol.split(",") # The list where the results will be stored and appended to. - results = [] + results: List[Dict] = [] user_agent = get_random_agent() url = "https://app-money.tmx.com/graphql" async def create_task(symbol: str, results) -> None: - """Makes a POST request to the TMX GraphQL endpoint for a single symbol.""" - + """Make a POST request to the TMX GraphQL endpoint for a single symbol.""" symbol = ( symbol.upper().replace("-", ".").replace(".TO", "").replace(".TSX", "") ) @@ -133,7 +131,6 @@ class TmxEquityProfileFetcher( **kwargs: Any, ) -> List[TmxEquityProfileData]: """Return the transformed data.""" - # Get only the items associated with `equity.profile()`. items_list = [ "shortDescription", diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/equity_quote.py b/openbb_platform/providers/tmx/openbb_tmx/models/equity_quote.py index 8edd26c6099..a97659e5f7a 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/equity_quote.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/equity_quote.py @@ -1,4 +1,4 @@ -"""TMX Equity Profile fetcher""" +"""TMX Equity Profile fetcher.""" # pylint: disable=unused-argument @@ -237,7 +237,7 @@ class TmxEquityQuoteData(EquityQuoteData): ) @classmethod def date_validate(cls, v): # pylint: disable=E0213 - """Return the datetime object from the date string""" + """Return the datetime object from the date string.""" if v: try: return datetime.strptime(v, "%Y-%m-%d").date() @@ -281,18 +281,16 @@ class TmxEquityQuoteFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the TMX endpoint.""" - symbols = query.symbol.split(",") # The list where the results will be stored and appended to. - results = [] + results: List[Dict] = [] user_agent = get_random_agent() url = "https://app-money.tmx.com/graphql" async def create_task(symbol: str, results) -> None: - """Makes a POST request to the TMX GraphQL endpoint for a single symbol.""" - + """Make a POST request to the TMX GraphQL endpoint for a single symbol.""" symbol = ( symbol.upper().replace("-", ".").replace(".TO", "").replace(".TSX", "") ) @@ -332,7 +330,6 @@ class TmxEquityQuoteFetcher( **kwargs: Any, ) -> List[TmxEquityQuoteData]: """Return the transformed data.""" - # Remove the items associated with `equity.profile()`. items_list = [ "shortDescription", diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/gainers.py b/openbb_platform/providers/tmx/openbb_tmx/models/gainers.py index 169a737201b..461be6775af 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/gainers.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/gainers.py @@ -76,6 +76,7 @@ class TmxGainersData(EquityPerformanceData): @model_validator(mode="before") @classmethod def check_metric(cls, values): + """Check for missing metrics.""" for k, v in values.items(): if v is None or v == "-": values[k] = 0 @@ -104,7 +105,6 @@ class TmxGainersFetcher( **kwargs: Any, ) -> List[TmxGainersData]: """Return the raw data from the TMX endpoint.""" - user_agent = get_random_agent() payload = gql.get_stock_list_payload.copy() payload["variables"]["stockListId"] = STOCK_LISTS_DICT[query.category] diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/index_constituents.py b/openbb_platform/providers/tmx/openbb_tmx/models/index_constituents.py index 915ebe03005..9d299d3fa24 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/index_constituents.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/index_constituents.py @@ -1,4 +1,4 @@ -"""TMX Index Constituents Model""" +"""TMX Index Constituents Model.""" # pylint: disable=unused-argument from typing import Any, Dict, List, Optional @@ -49,6 +49,8 @@ class TmxIndexConstituentsFetcher( List[TmxIndexConstituentsData], ] ): + """TMX Index Constituents Fetcher.""" + @staticmethod def transform_query(params: Dict[str, Any]) -> TmxIndexConstituentsQueryParams: """Transform the query.""" @@ -61,7 +63,6 @@ class TmxIndexConstituentsFetcher( **kwargs: Any, ) -> Dict: """Return the raw data from the TMX endpoint.""" - url = "https://tmxinfoservices.com/files/indices/sptsx-indices.json" data = await get_data_from_url( diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/index_snapshots.py b/openbb_platform/providers/tmx/openbb_tmx/models/index_snapshots.py index a57e030155b..2052991fff7 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/index_snapshots.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/index_snapshots.py @@ -1,4 +1,4 @@ -"""TMX Index Snapshots Model""" +"""TMX Index Snapshots Model.""" # pylint: disable=unused-argument import json @@ -24,7 +24,7 @@ from pydantic import Field, field_validator class TmxIndexSnapshotsQueryParams(IndexSnapshotsQueryParams): """TMX Index Snapshots Query Params.""" - region: Literal[None, "ca", "us"] = Field(default="ca") + region: Literal[None, "ca", "us"] = Field(default="ca") # type: ignore use_cache: bool = Field( default=True, description="Whether to use a cached request." @@ -151,6 +151,8 @@ class TmxIndexSnapshotsFetcher( List[TmxIndexSnapshotsData], ] ): + """TMX Index Snapshots Fetcher.""" + @staticmethod def transform_query(params: Dict[str, Any]) -> TmxIndexSnapshotsQueryParams: """Transform the query.""" diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/insider_trading.py b/openbb_platform/providers/tmx/openbb_tmx/models/insider_trading.py index 831ae110771..4764e5310c3 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/insider_trading.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/insider_trading.py @@ -1,4 +1,4 @@ -"""TMX Insider Trading Model""" +"""TMX Insider Trading Model.""" # pylint: disable=unused-argument import json @@ -17,7 +17,7 @@ from pydantic import Field, field_validator class TmxInsiderTradingQueryParams(InsiderTradingQueryParams): - """TMX Insider Trading Query Params""" + """TMX Insider Trading Query Params.""" summary: bool = Field( default=False, @@ -26,7 +26,7 @@ class TmxInsiderTradingQueryParams(InsiderTradingQueryParams): class TmxInsiderTradingData(InsiderTradingData): - """TMX Insider Trading Data""" + """TMX Insider Trading Data.""" period: str = Field( description="The period of the activity. Bucketed by three, six, and twelve months." @@ -66,6 +66,7 @@ class TmxInsiderTradingData(InsiderTradingData): @field_validator("period", mode="before", check_fields=False) @classmethod def period_to_snake_case(cls, v): + """Convert the period to snake case.""" return to_snake_case(v) if v else None @@ -89,7 +90,6 @@ class TmxInsiderTradingFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the TMX endpoint.""" - results = [] user_agent = get_random_agent() symbol = ( diff --git a/openbb_platform/providers/tmx/openbb_tmx/models/price_target_consensus.py b/openbb_platform/providers/tmx/openbb_tmx/models/price_target_consensus.py index fd66433b45d..1ee9a9f7135 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/models/price_target_consensus.py +++ b/openbb_platform/providers/tmx/openbb_tmx/models/price_target_consensus.py @@ -20,6 +20,14 @@ class TmxPriceTargetConsensusQueryParams(PriceTargetConsensusQueryParams): __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def check_symbol(cls, value): + """Check the symbol.""" + if not value: + raise RuntimeError("Error: Symbol is a required field for TMX.") + return value + class TmxPriceTargetConsensusData(PriceTargetConsensusData): """TMX Price Target Consensus Data.""" @@ -88,8 +96,8 @@ class TmxPriceTargetConsensusFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the TMX endpoint.""" - symbols = query.symbol.split(",") - results = [] + symbols = query.symbol.split(",") # type: ignore + results: List[Dict] = [] async def create_task(symbol, results): """Create a task for each symbol provided.""" diff --git a/openbb_platform/providers/tmx/openbb_tmx/utils/__init__.py b/openbb_platform/providers/tmx/openbb_tmx/utils/__init__.py index e69de29bb2d..75323e86bd9 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/utils/__init__.py +++ b/openbb_platform/providers/tmx/openbb_tmx/utils/__init__.py @@ -0,0 +1 @@ +"""TMX Provider Utils.""" diff --git a/openbb_platform/providers/tmx/openbb_tmx/utils/helpers.py b/openbb_platform/providers/tmx/openbb_tmx/utils/helpers.py index 6f31263e82f..2ed84d0abb0 100644 --- a/openbb_platform/providers/tmx/openbb_tmx/utils/helpers.py +++ b/openbb_platform/providers/tmx/openbb_tmx/utils/helpers.py @@ -12,7 +12,7 @@ from datetime import ( timedelta, ) from io import StringIO -from typing import Any, Dict, List, Literal, Optional +from typing import Any, Dict, List, Literal, Optional, Union import exchange_calendars as xcals import pandas as pd @@ -265,7 +265,7 @@ NASDAQ_GIDS = { async def response_callback(response, _: Any): - """Callback for HTTP Client Response.""" + """Use callback for HTTP Client Response.""" content_type = response.headers.get("Content-Type", "") if "application/json" in content_type: return await response.json() @@ -296,7 +296,6 @@ async def get_data_from_url( async def get_data_from_gql(url: str, headers, data, **kwargs: Any) -> Any: """Make an asynchronous GraphQL request.""" - response = await amake_request( url=url, method="POST", @@ -310,7 +309,7 @@ async def get_data_from_gql(url: str, headers, data, **kwargs: Any) -> Any: def replace_values_in_list_of_dicts(data): - """Helper function to replace "NA" and "-" with None in a list of dictionaries.""" + """Replace "NA" and "-" with None in a list of dictionaries.""" for d in data: for k, v in d.items(): if isinstance(v, dict): @@ -329,7 +328,7 @@ def replace_values_in_list_of_dicts(data): def check_weekday(date) -> str: - """Helper function to check if the input date is a weekday, and if not, returns the next weekday. + """Check if the input date is a weekday, and if not, returns the next weekday. Parameters ---------- @@ -341,32 +340,27 @@ def check_weekday(date) -> str: str Date in YYYY-MM-DD format. If the date is a weekend, returns the date of the next weekday. """ - if pd.to_datetime(date).weekday() > 4: return next_workday(pd.to_datetime(date)).strftime("%Y-%m-%d") return date async def get_all_etfs(use_cache: bool = True) -> List[Dict]: - """ - Gets a summary of the TMX ETF universe. + """Get a summary of the TMX ETF universe. Returns ------- Dict Dictionary with all TMX-listed ETFs. """ - url = "https://dgr53wu9i7rmp.cloudfront.net/etfs/etfs.json" response = await get_data_from_url( url, use_cache=use_cache, backend=tmx_etfs_backend ) - if response is None: - raise RuntimeError( - f"There was a problem with the request. Could not get ETFs. -> {response.status_code}" - ) + if not response or response is None: + raise RuntimeError("There was a problem with the request. Could not get ETFs.") response = replace_values_in_list_of_dicts(response) @@ -403,8 +397,7 @@ async def get_all_etfs(use_cache: bool = True) -> List[Dict]: async def get_tmx_tickers( exchange: Literal["tsx", "tsxv"] = "tsx", use_cache: bool = True ) -> Dict: - """Gets a dictionary of either TSX or TSX-V symbols and names.""" - + """Get a dictionary of either TSX or TSX-V symbols and names.""" tsx_json_url = "https://www.tsx.com/json/company-directory/search" url = f"{tsx_json_url}/{exchange}/*" response = await get_data_from_url( @@ -420,7 +413,7 @@ async def get_tmx_tickers( async def get_all_tmx_companies(use_cache: bool = True) -> Dict: - """Merges TSX and TSX-V listings into a single dictionary.""" + """Merge TSX and TSX-V listings into a single dictionary.""" all_tmx = {} tsx_tickers = await get_tmx_tickers(use_cache=use_cache) tsxv_tickers = await get_tmx_tickers("tsxv", use_cache=use_cache) @@ -430,14 +423,13 @@ async def get_all_tmx_companies(use_cache: bool = True) -> Dict: async def get_all_options_tickers(use_cache: bool = True) -> pd.DataFrame: - """Returns a DataFrame with all valid ticker symbols.""" - + """Return a DataFrame with all valid ticker symbols.""" url = "https://www.m-x.ca/en/trading/data/options-list" r = await get_data_from_url(url, use_cache=use_cache, backend=tmx_companies_backend) - if r is None: - raise RuntimeError(f"Error with the request: {r.status_code}") + if r is None or r == []: + raise RuntimeError("Error with the request") # mypy: ignore options_listings = pd.read_html(StringIO(r)) listings = pd.concat(options_listings) @@ -456,8 +448,7 @@ async def get_all_options_tickers(use_cache: bool = True) -> pd.DataFrame: async def get_current_options(symbol: str, use_cache: bool = True) -> pd.DataFrame: - """Gets the current quotes for the complete options chain.""" - + """Get the current quotes for the complete options chain.""" SYMBOLS = await get_all_options_tickers(use_cache=use_cache) data = pd.DataFrame() symbol = symbol.upper() @@ -558,8 +549,7 @@ async def get_current_options(symbol: str, use_cache: bool = True) -> pd.DataFra async def download_eod_chains( symbol: str, date: Optional[dateType] = None, use_cache: bool = False ) -> pd.DataFrame: - """Downloads EOD chains data for a given symbol and date.""" - + """Download EOD chains data for a given symbol and date.""" symbol = symbol.upper() SYMBOLS = await get_all_options_tickers(use_cache=False) # Remove echange identifiers from the symbol. @@ -582,10 +572,10 @@ async def download_eod_chains( EOD_URL = BASE_URL + f"{symbol}" "&dnld=1#quotes" if date is not None: date = check_weekday(date) # type: ignore - if cal.is_session(date) is False: + if cal.is_session(date) is False: # type: ignore date = (pd.to_datetime(date) + timedelta(days=1)).strftime("%Y-%m-%d") # type: ignore date = check_weekday(date) # type: ignore - if cal.is_session(date=date) is False: + if cal.is_session(date=date) is False: # type: ignore date = (pd.to_datetime(date) + timedelta(days=1)).strftime("%Y-%m-%d") # type: ignore EOD_URL = ( @@ -717,8 +707,8 @@ async def get_company_filings( async def get_daily_price_history( symbol: str, - start_date: Optional[dateType] = None, - end_date: Optional[dateType] = None, + start_date: Optional[Union[str, dateType]] = None, + end_date: Optional[Union[str, dateType]] = None, adjustment: Literal[ "splits_only", "unadjusted", "splits_and_dividends" ] = "splits_only", @@ -834,21 +824,23 @@ async def get_daily_price_history( async def get_weekly_or_monthly_price_history( symbol: str, - start_date: Optional[dateType] = None, - end_date: Optional[dateType] = None, + start_date: Optional[Union[str, dateType]] = None, + end_date: Optional[Union[str, dateType]] = None, interval: Literal["month", "week"] = "month", ): """Get historical price data.""" - start_date = ( - datetime.strptime(start_date, "%Y-%m-%d") - if isinstance(start_date, str) - else start_date - ) - end_date = ( - datetime.strptime(end_date, "%Y-%m-%d") - if isinstance(end_date, str) - else end_date - ) + if start_date: + start_date = ( + datetime.strptime(start_date, "%Y-%m-%d") + if isinstance(start_date, str) + else start_date + ) + if end_date: + end_date = ( + datetime.strptime(end_date, "%Y-%m-%d") + if isinstance(end_date, str) + else end_date + ) user_agent = get_random_agent() results: List[Dict] = [] symbol = symbol.upper().replace("-", ".").replace(".TO", "").replace(".TSX", "") @@ -868,8 +860,14 @@ async def get_weekly_or_monthly_price_history( payload["variables"].pop("endDateTime") payload["variables"]["symbol"] = symbol payload["variables"]["freq"] = interval - payload["variables"]["end"] = end_date.strftime("%Y-%m-%d") - payload["variables"]["start"] = start_date.strftime("%Y-%m-%d") + payload["variables"]["end"] = ( + end_date.strftime("%Y-%m-%d") if isinstance(end_date, dateType) else end_date + ) + payload["variables"]["start"] = ( + start_date.strftime("%Y-%m-%d") + if isinstance(start_date, dateType) + else start_date + ) url = "https://app-money.tmx.com/graphql" data = await get_data_from_gql( method="POST", @@ -914,21 +912,23 @@ async def get_weekly_or_monthly_price_history( async def get_intraday_price_history( symbol: str, - start_date: Optional[dateType] = None, - end_date: Optional[dateType] = None, + start_date: Optional[Union[str, dateType]] = None, + end_date: Optional[Union[str, dateType]] = None, interval: Optional[int] = 1, ): """Get historical price data.""" - start_date = ( - datetime.strptime(start_date, "%Y-%m-%d") - if isinstance(start_date, str) - else start_date - ) - end_date = ( - datetime.strptime(end_date, "%Y-%m-%d") - if isinstance(end_date, str) - else end_date - ) + if start_date: + start_date = ( + datetime.strptime(start_date, "%Y-%m-%d") + if isinstance(start_date, str) + else start_date + ) + if end_date: + end_date = ( + datetime.strptime(end_date, "%Y-%m-%d") + if isinstance(end_date, str) + else end_date + ) user_agent = get_random_agent() results: List[Dict] = [] symbol = symbol.upper().replace("-", ".").replace(".TO", "").replace(".TSX", "") @@ -941,11 +941,11 @@ async def get_intraday_price_history( # This is the first date of available intraday data. date_check = datetime(2022, 4, 12).date() start_date = max(start_date, date_check) - if end_date < date_check: + if end_date < date_check: # type: ignore end_date = datetime.now().date() # Generate a list of dates from start_date to end_date with a frequency of 3 weeks dates = list( - rrule.rrule(rrule.WEEKLY, interval=4, dtstart=start_date, until=end_date) + rrule.rrule(rrule.WEEKLY, interval=4, dtstart=start_date, until=end_date) # type: ignore ) if dates[-1] != end_date: @@ -1039,8 +1039,10 @@ async def get_intraday_price_history( async def get_all_bonds(use_cache: bool = True) -> pd.DataFrame: - """Gets all bonds reference data published by CIRO. The complete list is approximately 70-100K securities.""" + """Get all bonds reference data published by CIRO. + The complete list is approximately 70-100K securities. + """ url = "https://bondtradedata.iiroc.ca/debtip/designatedbonds/list" response = await get_data_from_url( url, use_cache=use_cache, timeout=30, backend=tmx_bonds_backend diff --git a/openbb_platform/providers/tmx/poetry.lock b/openbb_platform/providers/tmx/poetry.lock index 7d2790aca29..e9d1c0cab5d 100644 --- a/openbb_platform/providers/tmx/poetry.lock +++ b/openbb_platform/providers/tmx/poetry.lock @@ -756,13 +756,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1501,4 +1501,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "a0e9e0c6fc96a331f4ae5355ccdfbc55ebf564b33e75953e5c8f82a9b3ab952e" +content-hash = "d2c6f6ecc431b148a13d6bd38750be5d9fe52558fab654fb9d76d15502225bfd" diff --git a/openbb_platform/providers/tmx/pyproject.toml b/openbb_platform/providers/tmx/pyproject.toml index 675beab0ab2..2765f631836 100644 --- a/openbb_platform/providers/tmx/pyproject.toml +++ b/openbb_platform/providers/tmx/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-tmx" -version = "1.0.1" +version = "1.0.2" description = "Unofficial TMX data provider extension for the OpenBB Platform - Public Canadian markets data for Python and Fast API." authors = ["OpenBB "] readme = "README.md" @@ -12,7 +12,7 @@ aiohttp-client-cache = "^0.10.0" aiosqlite = "^0.19.0" random-user-agent = "^1.0.1" exchange-calendars = "^4.2.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/tmx/tests/__init__.py b/openbb_platform/providers/tmx/tests/__init__.py index 8b137891791..82c47774efc 100644 --- a/openbb_platform/providers/tmx/tests/__init__.py +++ b/openbb_platform/providers/tmx/tests/__init__.py @@ -1 +1 @@ - +"""TMX Tests.""" diff --git a/openbb_platform/providers/tmx/tests/test_tmx_fetchers.py b/openbb_platform/providers/tmx/tests/test_tmx_fetchers.py index 652b0159def..685da00dad2 100644 --- a/openbb_platform/providers/tmx/tests/test_tmx_fetchers.py +++ b/openbb_platform/providers/tmx/tests/test_tmx_fetchers.py @@ -33,6 +33,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump() @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -43,6 +44,7 @@ def vcr_config(): @pytest.mark.record_http def test_tmx_equity_profile_fetcher(credentials=test_credentials): + """Test equity profile fetcher.""" params = {"symbol": "RY,NTR"} fetcher = TmxEquityProfileFetcher() @@ -52,6 +54,7 @@ def test_tmx_equity_profile_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_equity_search_fetcher(credentials=test_credentials): + """Test equity search fetcher.""" params = {"query": "gold", "use_cache": False} fetcher = TmxEquitySearchFetcher() @@ -61,6 +64,7 @@ def test_tmx_equity_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_available_indices_fetcher(credentials=test_credentials): + """Test available indices fetcher.""" params = {"use_cache": False} fetcher = TmxAvailableIndicesFetcher() @@ -70,6 +74,7 @@ def test_tmx_available_indices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_calendar_earnings_fetcher(credentials=test_credentials): + """Test calendar earnings fetcher.""" params = {"start_date": date(2023, 1, 2), "end_date": date(2023, 1, 31)} fetcher = TmxCalendarEarningsFetcher() @@ -79,6 +84,7 @@ def test_tmx_calendar_earnings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_company_filings_fetcher(credentials=test_credentials): + """Test company filings fetcher.""" params = { "symbol": "SHOP", "start_date": date(2023, 6, 30), @@ -92,6 +98,7 @@ def test_tmx_company_filings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_company_news_fetcher(credentials=test_credentials): + """Test company news fetcher.""" params = {"symbol": "SHOP", "limit": 5} fetcher = TmxCompanyNewsFetcher() @@ -101,6 +108,7 @@ def test_tmx_company_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_equity_historical_fetcher(credentials=test_credentials): + """Test equity historical fetcher.""" params = { "symbol": "SHOP", "start_date": date(2022, 1, 1), @@ -114,6 +122,7 @@ def test_tmx_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_equity_quote_fetcher(credentials=test_credentials): + """Test equity quote fetcher.""" params = {"symbol": "SHOP"} fetcher = TmxEquityQuoteFetcher() @@ -123,6 +132,7 @@ def test_tmx_equity_quote_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_etf_countries_fetcher(credentials=test_credentials): + """Test ETF countries fetcher.""" params = {"symbol": "HXX", "use_cache": False} fetcher = TmxEtfCountriesFetcher() @@ -132,6 +142,7 @@ def test_tmx_etf_countries_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_etf_holdings_fetcher(credentials=test_credentials): + """Test ETF holdings fetcher.""" params = {"symbol": "XIU", "use_cache": False} fetcher = TmxEtfHoldingsFetcher() @@ -141,6 +152,7 @@ def test_tmx_etf_holdings_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_etf_info_fetcher(credentials=test_credentials): + """Test ETF info fetcher.""" params = {"symbol": "XIU", "use_cache": False} fetcher = TmxEtfInfoFetcher() @@ -150,6 +162,7 @@ def test_tmx_etf_info_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_etf_search_fetcher(credentials=test_credentials): + """Test ETF search fetcher.""" params = {"query": "sector", "use_cache": False} fetcher = TmxEtfSearchFetcher() @@ -159,6 +172,7 @@ def test_tmx_etf_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_etf_sectors_fetcher(credentials=test_credentials): + """Test ETF sectors fetcher.""" params = {"symbol": "XIU", "use_cache": False} fetcher = TmxEtfSectorsFetcher() @@ -168,6 +182,7 @@ def test_tmx_etf_sectors_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_gainers_fetcher(credentials=test_credentials): + """Test gainers fetcher.""" params = {} fetcher = TmxGainersFetcher() @@ -177,6 +192,7 @@ def test_tmx_gainers_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_historical_dividends_fetcher(credentials=test_credentials): + """Test historical dividends fetcher.""" params = {"symbol": "TD"} fetcher = TmxHistoricalDividendsFetcher() @@ -186,6 +202,7 @@ def test_tmx_historical_dividends_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_index_constituents_fetcher(credentials=test_credentials): + """Test index constituents fetcher.""" params = {"symbol": "^TX60", "use_cache": False} fetcher = TmxIndexConstituentsFetcher() @@ -195,6 +212,7 @@ def test_tmx_index_constituents_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_index_sectors_fetcher(credentials=test_credentials): + """Test index sectors fetcher.""" params = {"symbol": "^TSX", "use_cache": False} fetcher = TmxIndexSectorsFetcher() @@ -204,6 +222,7 @@ def test_tmx_index_sectors_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_index_snapshots_fetcher(credentials=test_credentials): + """Test index snapshots fetcher.""" params = {"use_cache": False} fetcher = TmxIndexSnapshotsFetcher() @@ -213,6 +232,7 @@ def test_tmx_index_snapshots_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_insider_trading_fetcher(credentials=test_credentials): + """Test insider trading fetcher.""" params = {"symbol": "SHOP", "summary": False} fetcher = TmxInsiderTradingFetcher() @@ -222,6 +242,7 @@ def test_tmx_insider_trading_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_options_chains_fetcher(credentials=test_credentials): + """Test options chains fetcher.""" params = {"symbol": "SHOP", "use_cache": False} fetcher = TmxOptionsChainsFetcher() @@ -231,6 +252,7 @@ def test_tmx_options_chains_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_price_target_consensus_fetcher(credentials=test_credentials): + """Test price target consensus fetcher.""" params = {"symbol": "SHOP"} fetcher = TmxPriceTargetConsensusFetcher() @@ -240,6 +262,7 @@ def test_tmx_price_target_consensus_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_treasury_prices_fetcher(credentials=test_credentials): + """Test treasury prices fetcher.""" params = {"govt_type": "federal", "use_cache": False} fetcher = TmxTreasuryPricesFetcher() @@ -249,6 +272,7 @@ def test_tmx_treasury_prices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tmx_bond_prices_fetcher(credentials=test_credentials): + """Test bond prices fetcher.""" params = {"use_cache": False, "coupon_rate_min": 4} fetcher = TmxBondPricesFetcher() diff --git a/openbb_platform/providers/tradier/__init__.py b/openbb_platform/providers/tradier/__init__.py index e69de29bb2d..192b3be92d7 100644 --- a/openbb_platform/providers/tradier/__init__.py +++ b/openbb_platform/providers/tradier/__init__.py @@ -0,0 +1 @@ +"""Tradier provider.""" diff --git a/openbb_platform/providers/tradier/openbb_tradier/models/__init__.py b/openbb_platform/providers/tradier/openbb_tradier/models/__init__.py index e69de29bb2d..7c35443f7b5 100644 --- a/openbb_platform/providers/tradier/openbb_tradier/models/__init__.py +++ b/openbb_platform/providers/tradier/openbb_tradier/models/__init__.py @@ -0,0 +1 @@ +"""Tradier provider models.""" diff --git a/openbb_platform/providers/tradier/openbb_tradier/models/equity_historical.py b/openbb_platform/providers/tradier/openbb_tradier/models/equity_historical.py index b03249fc0d7..eed0d09d93a 100644 --- a/openbb_platform/providers/tradier/openbb_tradier/models/equity_historical.py +++ b/openbb_platform/providers/tradier/openbb_tradier/models/equity_historical.py @@ -1,4 +1,4 @@ -"""Tradier Equity Historical Model""" +"""Tradier Equity Historical Model.""" # pylint: disable = unused-argument @@ -16,7 +16,7 @@ from openbb_core.provider.utils.descriptions import ( QUERY_DESCRIPTIONS, ) from openbb_core.provider.utils.errors import EmptyDataError -from openbb_core.provider.utils.helpers import amake_request +from openbb_core.provider.utils.helpers import amake_request, safe_fromtimestamp from openbb_tradier.utils.constants import INTERVALS_DICT from pandas import to_datetime from pydantic import Field @@ -56,7 +56,6 @@ class TradierEquityHistoricalFetcher( @staticmethod def transform_query(params: Dict[str, Any]) -> TradierEquityHistoricalQueryParams: """Transform the query.""" - if params.get("interval") in ["1d", "1W", "1M"]: if params.get("start_date") is None: params["start_date"] = (datetime.now() - timedelta(days=365)).date() @@ -85,7 +84,6 @@ class TradierEquityHistoricalFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the Tradier endpoint.""" - api_key = credentials.get("tradier_api_key") if credentials else "" sandbox = True @@ -120,7 +118,6 @@ class TradierEquityHistoricalFetcher( async def get_one(symbol): """Get data for one symbol.""" - result = [] url = ( @@ -150,7 +147,7 @@ class TradierEquityHistoricalFetcher( r["symbol"] = symbol _ = r.pop("time") r["timestamp"] = ( - datetime.fromtimestamp(r.get("timestamp")) + safe_fromtimestamp(r.get("timestamp")) .replace(microsecond=0) .astimezone(timezone("America/New_York")) ) diff --git a/openbb_platform/providers/tradier/openbb_tradier/models/equity_quote.py b/openbb_platform/providers/tradier/openbb_tradier/models/equity_quote.py index 667879bcdf9..d3a2abef9fa 100644 --- a/openbb_platform/providers/tradier/openbb_tradier/models/equity_quote.py +++ b/openbb_platform/providers/tradier/openbb_tradier/models/equity_quote.py @@ -1,4 +1,4 @@ -"""Tradier Equity Quote Model""" +"""Tradier Equity Quote Model.""" # pylint: disable = unused-argument @@ -15,7 +15,7 @@ from openbb_core.provider.standard_models.equity_quote import ( EquityQuoteQueryParams, ) from openbb_core.provider.utils.errors import EmptyDataError -from openbb_core.provider.utils.helpers import amake_request +from openbb_core.provider.utils.helpers import amake_request, safe_fromtimestamp from openbb_tradier.utils.constants import OPTIONS_EXCHANGES, STOCK_EXCHANGES from pydantic import Field, field_validator, model_validator from pytz import timezone @@ -157,7 +157,8 @@ class TradierEquityQuoteData(EquityQuoteData): def validate_dates(cls, v): """Validate the dates.""" if v != 0 and v is not None and isinstance(v, int): - v = datetime.fromtimestamp(int(v) / 1000) + v = int(v) / 1000 # milliseconds to seconds + v = safe_fromtimestamp(v) v = v.replace(microsecond=0) v = v.astimezone(timezone("America/New_York")) return v @@ -202,7 +203,6 @@ class TradierEquityQuoteFetcher( **kwargs: Any, ) -> List[Dict]: """Return the raw data from the Tradier endpoint.""" - api_key = credentials.get("tradier_api_key") if credentials else "" sandbox = True @@ -245,7 +245,6 @@ class TradierEquityQuoteFetcher( **kwargs: Any, ) -> List[TradierEquityQuoteData]: """Transform and validate the data.""" - results: List[TradierEquityQuoteData] = [] for d in data: diff --git a/openbb_platform/providers/tradier/openbb_tradier/models/options_chains.py b/openbb_platform/providers/tradier/openbb_tradier/models/options_chains.py index ba4f728dda8..16cdbab51f0 100644 --- a/openbb_platform/providers/tradier/openbb_tradier/models/options_chains.py +++ b/openbb_platform/providers/tradier/openbb_tradier/models/options_chains.py @@ -1,4 +1,4 @@ -"""Tradier Options Chains Model""" +"""Tradier Options Chains Model.""" # pylint: disable = unused-argument @@ -13,15 +13,14 @@ from openbb_core.provider.standard_models.options_chains import ( OptionsChainsQueryParams, ) from openbb_core.provider.utils.errors import EmptyDataError -from openbb_core.provider.utils.helpers import amake_request +from openbb_core.provider.utils.helpers import amake_request, safe_fromtimestamp from openbb_tradier.utils.constants import OPTIONS_EXCHANGES, STOCK_EXCHANGES from pydantic import Field, field_validator, model_validator from pytz import timezone class TradierOptionsChainsQueryParams(OptionsChainsQueryParams): - """ - Tradier Options Chains Query. + """Tradier Options Chains Query. Source: https://documentation.tradier.com/brokerage-api/markets/get-options-chains @@ -31,7 +30,7 @@ class TradierOptionsChainsQueryParams(OptionsChainsQueryParams): class TradierOptionsChainsData(OptionsChainsData): - """Tradier Options Chains Data""" + """Tradier Options Chains Data.""" __alias_dict__ = { "expiration": "expiration_date", @@ -127,7 +126,8 @@ class TradierOptionsChainsData(OptionsChainsData): def validate_dates(cls, v): """Validate the dates.""" if v != 0 and v is not None and isinstance(v, int): - v = datetime.fromtimestamp(int(v) / 1000) + v = int(v) / 1000 # milliseconds to seconds + v = safe_fromtimestamp(v) v = v.replace(microsecond=0) v = v.astimezone(timezone("America/New_York")) return v @@ -177,6 +177,7 @@ class TradierOptionsChainsFetcher( @staticmethod def transform_query(params: Dict[str, Any]) -> TradierOptionsChainsQueryParams: + """Transform the query parameters.""" return TradierOptionsChainsQueryParams(**params) @staticmethod @@ -185,8 +186,7 @@ class TradierOptionsChainsFetcher( credentials: Optional[Dict[str, str]], **kwargs: Any, ) -> List[Dict]: - """Return the raw data from the Tradier endpoint""" - + """Return the raw data from the Tradier endpoint.""" api_key = credentials.get("tradier_api_key") if credentials else "" sandbox = True @@ -216,7 +216,6 @@ class TradierOptionsChainsFetcher( # Get the expiration dates for the symbol so we can gather the chains data. async def get_expirations(symbol): """Get the expiration dates for the given symbol.""" - url = ( f"{BASE_URL}expirations?symbol={symbol}&includeAllRoots=true" "&strikes=false&contractSize=false&expirationType=false" diff --git a/openbb_platform/providers/tradier/openbb_tradier/utils/__init__.py b/openbb_platform/providers/tradier/openbb_tradier/utils/__init__.py index e69de29bb2d..5b37a7ad204 100644 --- a/openbb_platform/providers/tradier/openbb_tradier/utils/__init__.py +++ b/openbb_platform/providers/tradier/openbb_tradier/utils/__init__.py @@ -0,0 +1 @@ +"""Tradier provider utils.""" diff --git a/openbb_platform/providers/tradier/poetry.lock b/openbb_platform/providers/tradier/poetry.lock index 1260407c2cb..445e03c1e28 100644 --- a/openbb_platform/providers/tradier/poetry.lock +++ b/openbb_platform/providers/tradier/poetry.lock @@ -715,13 +715,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1409,4 +1409,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/tradier/pyproject.toml b/openbb_platform/providers/tradier/pyproject.toml index 9a139c5b99d..d5c21e972a9 100644 --- a/openbb_platform/providers/tradier/pyproject.toml +++ b/openbb_platform/providers/tradier/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-tradier" -version = "1.0.1" +version = "1.0.2" description = "Tradier Provider Extension for the OpenBB Platform" authors = ["OpenBB "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_tradier" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/tradier/tests/__init__.py b/openbb_platform/providers/tradier/tests/__init__.py index e69de29bb2d..f070d287ac6 100644 --- a/openbb_platform/providers/tradier/tests/__init__.py +++ b/openbb_platform/providers/tradier/tests/__init__.py @@ -0,0 +1 @@ +"""Tradier provider tests.""" diff --git a/openbb_platform/providers/tradier/tests/test_tradier_fetchers.py b/openbb_platform/providers/tradier/tests/test_tradier_fetchers.py index 56a954db0be..7eba9625148 100644 --- a/openbb_platform/providers/tradier/tests/test_tradier_fetchers.py +++ b/openbb_platform/providers/tradier/tests/test_tradier_fetchers.py @@ -16,6 +16,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [ ("User-Agent", None), @@ -27,6 +28,7 @@ def vcr_config(): @pytest.mark.record_http def test_tradier_equity_historical_fetcher(credentials=test_credentials): + """Test the Tradier Equity Historical fetcher.""" params = { "start_date": datetime(2024, 2, 1).date(), "end_date": datetime(2024, 2, 29).date(), @@ -41,6 +43,7 @@ def test_tradier_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tradier_equity_search_fetcher(credentials=test_credentials): + """Test the Tradier Equity Search fetcher.""" params = { "query": "brookfield", "is_symbol": False, @@ -53,6 +56,7 @@ def test_tradier_equity_search_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tradier_equity_quote_fetcher(credentials=test_credentials): + """Test the Tradier Equity Quote fetcher.""" params = {"symbol": "SPY,SPY251219P00450000"} fetcher = TradierEquityQuoteFetcher() @@ -62,6 +66,7 @@ def test_tradier_equity_quote_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_tradier_derivatives_options_chains_fetcher(credentials=test_credentials): + """Test the Tradier Derivatives Options Chains fetcher.""" params = {"symbol": "PLTR"} fetcher = TradierOptionsChainsFetcher() diff --git a/openbb_platform/providers/tradingeconomics/__init__.py b/openbb_platform/providers/tradingeconomics/__init__.py index e69de29bb2d..7a4238e74bb 100644 --- a/openbb_platform/providers/tradingeconomics/__init__.py +++ b/openbb_platform/providers/tradingeconomics/__init__.py @@ -0,0 +1 @@ +"""OpenBB Trading Economics Provider.""" diff --git a/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/models/economic_calendar.py b/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/models/economic_calendar.py index c0a14d17818..97e1056633b 100644 --- a/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/models/economic_calendar.py +++ b/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/models/economic_calendar.py @@ -62,6 +62,7 @@ class TEEconomicCalendarQueryParams(EconomicCalendarQueryParams): @field_validator("importance") @classmethod def importance_to_number(cls, v): + """Convert importance to number.""" string_to_value = {"Low": 1, "Medium": 2, "High": 3} return string_to_value.get(v, None) @@ -93,6 +94,7 @@ class TEEconomicCalendarData(EconomicCalendarData): @field_validator("date", mode="before") @classmethod def validate_date(cls, v: str) -> datetime: + """Validate the date.""" return to_datetime(v, utc=True) diff --git a/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/countries.py b/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/countries.py index c604b77e9c4..ab31a2be579 100644 --- a/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/countries.py +++ b/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/countries.py @@ -1,3 +1,5 @@ +"""Countries list for Trading Economics API.""" + country_dict = { "G20": [ "United States", diff --git a/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/url_generator.py b/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/url_generator.py index 0bcb2a46005..f9063ecd259 100644 --- a/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/url_generator.py +++ b/openbb_platform/providers/tradingeconomics/openbb_tradingeconomics/utils/url_generator.py @@ -6,6 +6,7 @@ from urllib.parse import quote, urlencode def check_args(query_args: Dict, to_include: List[str]): + """Check if all fields in to_include are present in query_args.""" available_args = ["country", "start_date", "end_date", "importance", "group"] # Check if all fields in to_include are present in query_args @@ -16,9 +17,10 @@ def check_args(query_args: Dict, to_include: List[str]): def generate_url(in_query): - """ - Generate the url for trading economimcs. There is not a single api endpoint to hit so these are - generated based on the combinations. There are also some combinations that return no data so that will return "" + """Generate the url for trading economimcs. + + There is not a single api endpoint to hit so these are generated based on the combinations. + There are also some combinations that return no data so that will return an empty string. """ # Converting the input query to a dict of params that are not None query = {k: v for k, v in in_query.dict().items() if v is not None} diff --git a/openbb_platform/providers/tradingeconomics/poetry.lock b/openbb_platform/providers/tradingeconomics/poetry.lock index 68bb6b9b230..5d97ba2712d 100644 --- a/openbb_platform/providers/tradingeconomics/poetry.lock +++ b/openbb_platform/providers/tradingeconomics/poetry.lock @@ -671,13 +671,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1390,4 +1390,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/tradingeconomics/pyproject.toml b/openbb_platform/providers/tradingeconomics/pyproject.toml index d3f0da54ff0..0df223d8877 100644 --- a/openbb_platform/providers/tradingeconomics/pyproject.toml +++ b/openbb_platform/providers/tradingeconomics/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-tradingeconomics" -version = "1.1.4" +version = "1.1.5" description = "Trading Economics extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_tradingeconomics" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py b/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py index 5feba458012..35d5088fd05 100644 --- a/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py +++ b/openbb_platform/providers/tradingeconomics/tests/test_tradingeconomics_fetchers.py @@ -1,3 +1,5 @@ +"""Test the Trading Economics fetchers.""" + from datetime import date import pytest @@ -11,6 +13,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -21,6 +24,7 @@ def vcr_config(): @pytest.mark.record_http def test_tradingeconomics_economic_calendar_fetcher(credentials=test_credentials): + """Test the Trading Economics economic calendar fetcher.""" params = { "start_date": date(2023, 1, 1), "end_date": date(2023, 6, 6), diff --git a/openbb_platform/providers/tradingeconomics/tests/test_url_generator.py b/openbb_platform/providers/tradingeconomics/tests/test_url_generator.py index 566282ba09a..70b49140c58 100644 --- a/openbb_platform/providers/tradingeconomics/tests/test_url_generator.py +++ b/openbb_platform/providers/tradingeconomics/tests/test_url_generator.py @@ -9,30 +9,35 @@ from providers.tradingeconomics.openbb_tradingeconomics.utils.url_generator impo def test_check_args_valid(): + """Test check_args with valid args.""" query_args = {"country": "US", "start_date": "2023-01-01", "end_date": "2023-01-31"} to_include = ["country", "start_date", "end_date"] assert check_args(query_args, to_include) def test_check_args_invalid(): + """Test check_args with missing args.""" query_args = {"country": "US"} to_include = ["start_date", "end_date"] assert not check_args(query_args, to_include) def create_query_mock(query_dict): + """Create a query mock.""" query_mock = Mock() query_mock.dict.return_value = query_dict return query_mock def test_generate_url_country_only(): + """Test generate_url with country.""" query_mock = create_query_mock({"country": "US"}) expected_url = "https://api.tradingeconomics.com/calendar/country/US?c=" assert generate_url(query_mock) == expected_url def test_generate_url_country_and_dates(): + """Test generate_url with country and dates.""" query_mock = create_query_mock( {"country": "US", "start_date": "2023-01-01", "end_date": "2023-01-31"} ) @@ -43,24 +48,28 @@ def test_generate_url_country_and_dates(): def test_generate_url_importance_only(): + """Test generate_url with importance.""" query_mock = create_query_mock({"importance": "High"}) expected_url = "https://api.tradingeconomics.com/calendar?importance=High&c=" assert generate_url(query_mock) == expected_url def test_generate_url_no_data(): + """Test generate_url with no data.""" query_mock = create_query_mock({}) expected_url = "https://api.tradingeconomics.com/calendar?c=" assert generate_url(query_mock) == expected_url def test_generate_url_group_only(): + """Test generate_url with group.""" query_mock = create_query_mock({"group": "G20"}) expected_url = "https://api.tradingeconomics.com/calendar/group/G20?c=" assert generate_url(query_mock) == expected_url def test_generate_url_country_group_and_dates(): + """Test generate_url with country, group, and dates.""" query_mock = create_query_mock( { "country": "US", diff --git a/openbb_platform/providers/wsj/__init__.py b/openbb_platform/providers/wsj/__init__.py index e69de29bb2d..41291b5e014 100644 --- a/openbb_platform/providers/wsj/__init__.py +++ b/openbb_platform/providers/wsj/__init__.py @@ -0,0 +1 @@ +"""WSJ provider.""" diff --git a/openbb_platform/providers/wsj/poetry.lock b/openbb_platform/providers/wsj/poetry.lock index 12b9fd975a0..718edef43ca 100644 --- a/openbb_platform/providers/wsj/poetry.lock +++ b/openbb_platform/providers/wsj/poetry.lock @@ -712,13 +712,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1431,4 +1431,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e5a1c1f22e0b8e42343cef04f6f23281c7d6441df13f2be91584098c856ab1f0" +content-hash = "ca421fe0dbae56150a2fc3a7978ad65f3dd4e70025bc4da4a7f1338b8eca522c" diff --git a/openbb_platform/providers/wsj/pyproject.toml b/openbb_platform/providers/wsj/pyproject.toml index c58dc746e36..9009d2df2e0 100644 --- a/openbb_platform/providers/wsj/pyproject.toml +++ b/openbb_platform/providers/wsj/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-wsj" -version = "1.1.4" +version = "1.1.5" description = "wsj extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,7 +8,7 @@ packages = [{ include = "openbb_wsj" }] [tool.poetry.dependencies] python = "^3.8" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/wsj/tests/test_wsj_fetchers.py b/openbb_platform/providers/wsj/tests/test_wsj_fetchers.py index 1390cdd57d6..30f1eb80eae 100644 --- a/openbb_platform/providers/wsj/tests/test_wsj_fetchers.py +++ b/openbb_platform/providers/wsj/tests/test_wsj_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for the WSJ fetchers.""" + import pytest from openbb_core.app.service.user_service import UserService from openbb_wsj.models.active import WSJActiveFetcher @@ -11,6 +13,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ @@ -21,6 +24,7 @@ def vcr_config(): @pytest.mark.record_http def test_wsj_gainers_fetcher(credentials=test_credentials): + """Test the WSJ Gainers fetcher.""" params = {} fetcher = WSJGainersFetcher() @@ -30,6 +34,7 @@ def test_wsj_gainers_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_wsj_losers_fetcher(credentials=test_credentials): + """Test the WSJ Losers fetcher.""" params = {} fetcher = WSJLosersFetcher() @@ -39,6 +44,7 @@ def test_wsj_losers_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_wsj_active_fetcher(credentials=test_credentials): + """Test the WSJ Active fetcher.""" params = {} fetcher = WSJActiveFetcher() diff --git a/openbb_platform/providers/yfinance/__init__.py b/openbb_platform/providers/yfinance/__init__.py index e69de29bb2d..2b56bab4609 100644 --- a/openbb_platform/providers/yfinance/__init__.py +++ b/openbb_platform/providers/yfinance/__init__.py @@ -0,0 +1 @@ +"""YFinance provider.""" diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/models/available_indices.py b/openbb_platform/providers/yfinance/openbb_yfinance/models/available_indices.py index cb5eda90a15..5326bd66292 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/models/available_indices.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/models/available_indices.py @@ -1,5 +1,7 @@ """Yahoo Finance Available Indices Model.""" +# pylint: disable=unused-argument + from typing import Any, Dict, List, Optional import pandas as pd @@ -43,10 +45,11 @@ class YFinanceAvailableIndicesFetcher( @staticmethod def extract_data( - query: YFinanceAvailableIndicesQueryParams, + query: YFinanceAvailableIndicesQueryParams, # pylint disable=unused-argument credentials: Optional[Dict[str, str]], **kwargs: Any, ) -> List[Dict]: + """Extract the data.""" indices = pd.DataFrame(INDICES).transpose().reset_index() indices.columns = ["code", "name", "ticker"] diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py b/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py index cc98e5838c3..7150bc7be50 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py @@ -3,7 +3,10 @@ # pylint: disable=unused-argument import asyncio import warnings -from datetime import datetime +from datetime import ( + date as dateType, + timezone, +) from typing import Any, Dict, List, Optional from openbb_core.provider.abstract.fetcher import Fetcher @@ -11,6 +14,7 @@ from openbb_core.provider.standard_models.equity_info import ( EquityInfoData, EquityInfoQueryParams, ) +from openbb_core.provider.utils.helpers import safe_fromtimestamp from pydantic import Field, field_validator from yfinance import Ticker @@ -97,9 +101,9 @@ class YFinanceEquityProfileData(EquityInfoData): @field_validator("first_stock_price_date", mode="before", check_fields=False) @classmethod - def validate_first_trade_date(cls, v): + def validate_first_trade_date(cls, v: float) -> Optional[dateType]: """Validate first stock price date.""" - return datetime.utcfromtimestamp(v).date() if v else None + return safe_fromtimestamp(v, tz=timezone.utc).date() if v else None class YFinanceEquityProfileFetcher( diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/models/etf_info.py b/openbb_platform/providers/yfinance/openbb_yfinance/models/etf_info.py index c2ce1a28355..915fb44bf4f 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/models/etf_info.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/models/etf_info.py @@ -11,6 +11,7 @@ from openbb_core.provider.standard_models.etf_info import ( EtfInfoData, EtfInfoQueryParams, ) +from openbb_core.provider.utils.helpers import safe_fromtimestamp from pydantic import Field, field_validator from yfinance import Ticker @@ -275,7 +276,7 @@ class YFinanceEtfInfoFetcher( "fundInceptionDate" not in result and _first_trade is not None ): - result["fundInceptionDate"] = datetime.fromtimestamp( + result["fundInceptionDate"] = safe_fromtimestamp( _first_trade ) except Exception as e: diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/models/price_target_consensus.py b/openbb_platform/providers/yfinance/openbb_yfinance/models/price_target_consensus.py index a412f210dae..15d628580fd 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/models/price_target_consensus.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/models/price_target_consensus.py @@ -10,7 +10,7 @@ from openbb_core.provider.standard_models.price_target_consensus import ( PriceTargetConsensusData, PriceTargetConsensusQueryParams, ) -from pydantic import Field +from pydantic import Field, field_validator from yfinance import Ticker _warn = warnings.warn @@ -21,6 +21,14 @@ class YFinancePriceTargetConsensusQueryParams(PriceTargetConsensusQueryParams): __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def check_symbol(cls, value): + """Check the symbol.""" + if not value: + raise RuntimeError("Error: Symbol is a required field for yFinance.") + return value + class YFinancePriceTargetConsensusData(PriceTargetConsensusData): """YFinance Price Target Consensus Data.""" @@ -78,7 +86,7 @@ class YFinancePriceTargetConsensusFetcher( **kwargs: Any, ) -> List[Dict]: """Extract the raw data from YFinance.""" - symbols = query.symbol.split(",") + symbols = query.symbol.split(",") # type: ignore results = [] fields = [ "symbol", diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py b/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py index dbc2ebe3c28..0965aefbd54 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/utils/helpers.py @@ -100,19 +100,22 @@ def yf_download( """Get yFinance OHLC data for any ticker and interval available.""" symbol = symbol.upper() _start_date = start_date - + intraday = False if interval in ["60m", "1h"]: period = "2y" if period in ["5y", "10y", "max"] else period _start_date = None + intraday = True if interval in ["2m", "5m", "15m", "30m", "90m"]: _start_date = (datetime.now().date() - relativedelta(days=58)).strftime( "%Y-%m-%d" ) + intraday = True if interval == "1m": period = "5d" _start_date = None + intraday = True if adjusted is False: kwargs = dict(auto_adjust=False, back_adjust=False) @@ -158,7 +161,6 @@ def yf_download( data = data.rename(columns={"Date": "date", "Datetime": "date"}) data["date"] = data["date"].apply(pd.to_datetime) data = data[data["Open"] > 0] - if start_date is not None: data = data[data["date"] >= pd.to_datetime(start_date)] if ( @@ -167,31 +169,19 @@ def yf_download( and pd.to_datetime(end_date) > pd.to_datetime(start_date) ): data = data[ - data["date"] <= (pd.to_datetime(end_date) + relativedelta(days=1)) + data["date"] + <= ( + pd.to_datetime(end_date) + + relativedelta(minutes=719 if intraday is True else 0) + ) ] - - if period not in [ - "max", - "1d", - "5d", - "1wk", - "1mo", - "3mo", - "6mo", - "1y", - "2y", - "5y", - "10y", - ]: + if intraday is True: data["date"] = data["date"].dt.strftime("%Y-%m-%d %H:%M:%S") - if interval not in ["1m", "2m", "5m", "15m", "30m", "90m", "60m", "1h"]: + else: data["date"] = data["date"].dt.strftime("%Y-%m-%d") - if adjusted is False: data = data.drop(columns=["Adj Close"]) - data.columns = data.columns.str.lower().str.replace(" ", "_").to_list() - return data diff --git a/openbb_platform/providers/yfinance/poetry.lock b/openbb_platform/providers/yfinance/poetry.lock index e84a52a557e..bb3e8113a19 100644 --- a/openbb_platform/providers/yfinance/poetry.lock +++ b/openbb_platform/providers/yfinance/poetry.lock @@ -815,13 +815,13 @@ files = [ [[package]] name = "openbb-core" -version = "1.1.5" +version = "1.1.6" description = "OpenBB package with core functionality" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "openbb_core-1.1.5-py3-none-any.whl", hash = "sha256:abac970b9503a40ed12c3a153b734c419e46bdc7ecd9e9d51c384c0b6bf140bd"}, - {file = "openbb_core-1.1.5.tar.gz", hash = "sha256:c280bfbf579cf1accf32bbd6a4de581c39b5e88793a3d2c362c85c87a3fe31ad"}, + {file = "openbb_core-1.1.6-py3-none-any.whl", hash = "sha256:4161d6e7654cab2185fcc39e5172385c8226e3cf6bfd5d4b1ff1076f70a6374c"}, + {file = "openbb_core-1.1.6.tar.gz", hash = "sha256:bf56a8a0dc26d72e679a2c68b1f57bf6703ed130b52348a77a2f6cfa32c9fcae"}, ] [package.dependencies] @@ -1568,4 +1568,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "3e865f0f5dc1b20c0e90eda299e1d7b6c6afa5709c662e8114a68409deb4f17e" +content-hash = "73606ddf4e01de6d5b9108cb82022a6e5278b7fbcab693e7eead4e020f1db445" diff --git a/openbb_platform/providers/yfinance/pyproject.toml b/openbb_platform/providers/yfinance/pyproject.toml index d680b13ef53..fbf499bc5ed 100644 --- a/openbb_platform/providers/yfinance/pyproject.toml +++ b/openbb_platform/providers/yfinance/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb-yfinance" -version = "1.1.4" +version = "1.1.5" description = "yfinance extension for OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -9,7 +9,7 @@ packages = [{ include = "openbb_yfinance" }] [tool.poetry.dependencies] python = "^3.8" yfinance = "^0.2.27" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" [build-system] requires = ["poetry-core"] diff --git a/openbb_platform/providers/yfinance/tests/__init__.py b/openbb_platform/providers/yfinance/tests/__init__.py index e69de29bb2d..e59458f440e 100644 --- a/openbb_platform/providers/yfinance/tests/__init__.py +++ b/openbb_platform/providers/yfinance/tests/__init__.py @@ -0,0 +1 @@ +"""YFinance tests.""" diff --git a/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py b/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py index 7fe29e3c429..1dd0c1671a6 100644 --- a/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py +++ b/openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py @@ -1,3 +1,5 @@ +"""Tests for YFinance fetchers.""" + from datetime import date import pytest @@ -48,6 +50,7 @@ test_credentials = UserService().default_user_settings.credentials.model_dump( @pytest.fixture(scope="module") def vcr_config(): + """VCR configuration.""" return { "filter_headers": [ ("User-Agent", None), @@ -64,6 +67,7 @@ def vcr_config(): @pytest.mark.record_http def test_y_finance_crypto_historical_fetcher(credentials=test_credentials): + """Test YFinanceCryptoHistoricalFetcher.""" params = { "symbol": "BTCUSD", "start_date": date(2023, 1, 1), @@ -78,6 +82,7 @@ def test_y_finance_crypto_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_currency_historical_fetcher(credentials=test_credentials): + """Test YFinanceCurrencyHistoricalFetcher.""" params = { "symbol": "EURUSD", "start_date": date(2023, 1, 1), @@ -91,6 +96,7 @@ def test_y_finance_currency_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_index_historical_fetcher(credentials=test_credentials): + """Test YFinanceIndexHistoricalFetcher.""" params = { "symbol": "^GSPC", "start_date": date(2023, 1, 1), @@ -104,6 +110,7 @@ def test_y_finance_index_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_equity_historical_fetcher(credentials=test_credentials): + """Test YFinanceEquityHistoricalFetcher.""" params = { "symbol": "AAPL", "start_date": date(2023, 1, 1), @@ -118,6 +125,7 @@ def test_y_finance_equity_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_historical_dividends_fetcher(credentials=test_credentials): + """Test YFinanceHistoricalDividendsFetcher.""" params = {"symbol": "IBM"} fetcher = YFinanceHistoricalDividendsFetcher() @@ -127,6 +135,7 @@ def test_y_finance_historical_dividends_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_market_indices_fetcher(credentials=test_credentials): + """Test YFinanceMarketIndicesFetcher.""" params = { "symbol": "^GSPC", "start_date": date(2023, 1, 1), @@ -140,6 +149,7 @@ def test_y_finance_market_indices_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_futures_historical_fetcher(credentials=test_credentials): + """Test YFinanceFuturesHistoricalFetcher.""" params = { "symbol": "ES=F", "start_date": date(2023, 1, 1), @@ -154,6 +164,7 @@ def test_y_finance_futures_historical_fetcher(credentials=test_credentials): @pytest.mark.skip("Unreliable amount of data while recording test.") @pytest.mark.record_http def test_y_finance_futures_curve_fetcher(credentials=test_credentials): + """Test YFinanceFuturesCurveFetcher.""" params = {"symbol": "ES"} fetcher = YFinanceFuturesCurveFetcher() @@ -163,6 +174,7 @@ def test_y_finance_futures_curve_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_company_news_fetcher(credentials=test_credentials): + """Test YFinanceCompanyNewsFetcher.""" params = {"symbol": "AAPL,MSFT"} fetcher = YFinanceCompanyNewsFetcher() @@ -172,6 +184,7 @@ def test_y_finance_company_news_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_balance_sheet_fetcher(credentials=test_credentials): + """Test YFinanceBalanceSheetFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceBalanceSheetFetcher() @@ -181,6 +194,7 @@ def test_y_finance_balance_sheet_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_cash_flow_statement_fetcher(credentials=test_credentials): + """Test YFinanceCashFlowStatementFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceCashFlowStatementFetcher() @@ -190,6 +204,7 @@ def test_y_finance_cash_flow_statement_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_income_statement_fetcher(credentials=test_credentials): + """Test YFinanceIncomeStatementFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceIncomeStatementFetcher() @@ -198,6 +213,7 @@ def test_y_finance_income_statement_fetcher(credentials=test_credentials): def test_y_finance_available_fetcher(credentials=test_credentials): + """Test YFinanceAvailableIndicesFetcher.""" params = {} fetcher = YFinanceAvailableIndicesFetcher() @@ -207,6 +223,7 @@ def test_y_finance_available_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_etf_historical_fetcher(credentials=test_credentials): + """Test YFinanceEtfHistoricalFetcher.""" params = { "symbol": "SPY", "start_date": date(2023, 1, 1), @@ -220,6 +237,7 @@ def test_y_finance_etf_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_active_fetcher(credentials=test_credentials): + """Test YFActiveFetcher.""" params = {} fetcher = YFActiveFetcher() @@ -229,6 +247,7 @@ def test_y_finance_active_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_gainers_fetcher(credentials=test_credentials): + """Test YFGainersFetcher.""" params = {} fetcher = YFGainersFetcher() @@ -238,6 +257,7 @@ def test_y_finance_gainers_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_losers_fetcher(credentials=test_credentials): + """Test YFLosersFetcher.""" params = {} fetcher = YFLosersFetcher() @@ -247,6 +267,7 @@ def test_y_finance_losers_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_undervalued_large_caps_fetcher(credentials=test_credentials): + """Test YFUndervaluedLargeCapsFetcher.""" params = {} fetcher = YFUndervaluedLargeCapsFetcher() @@ -256,6 +277,7 @@ def test_y_finance_undervalued_large_caps_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_undervalued_growth_equities_fetcher(credentials=test_credentials): + """Test YFUndervaluedGrowthEquitiesFetcher.""" params = {} fetcher = YFUndervaluedGrowthEquitiesFetcher() @@ -265,6 +287,7 @@ def test_y_finance_undervalued_growth_equities_fetcher(credentials=test_credenti @pytest.mark.record_http def test_y_finance_aggressive_small_caps_fetcher(credentials=test_credentials): + """Test YFAggressiveSmallCapsFetcher.""" params = {} fetcher = YFAggressiveSmallCapsFetcher() @@ -274,6 +297,7 @@ def test_y_finance_aggressive_small_caps_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_growth_tech_equities_fetcher(credentials=test_credentials): + """Test YFGrowthTechEquitiesFetcher.""" params = {} fetcher = YFGrowthTechEquitiesFetcher() @@ -283,6 +307,7 @@ def test_y_finance_growth_tech_equities_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_equity_profile_fetcher(credentials=test_credentials): + """Test YFinanceEquityProfileFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceEquityProfileFetcher() @@ -292,6 +317,7 @@ def test_y_finance_equity_profile_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_equity_quote_fetcher(credentials=test_credentials): + """Test YFinanceEquityQuoteFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceEquityQuoteFetcher() @@ -301,6 +327,7 @@ def test_y_finance_equity_quote_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_price_target_consensus_fetcher(credentials=test_credentials): + """Test YFinancePriceTargetConsensusFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinancePriceTargetConsensusFetcher() @@ -310,6 +337,7 @@ def test_y_finance_price_target_consensus_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_share_statistics_fetcher(credentials=test_credentials): + """Test YFinanceShareStatisticsFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceShareStatisticsFetcher() @@ -319,6 +347,7 @@ def test_y_finance_share_statistics_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_key_executives_fetcher(credentials=test_credentials): + """Test YFinanceKeyExecutivesFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceKeyExecutivesFetcher() @@ -328,6 +357,7 @@ def test_y_finance_key_executives_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_key_metrics_fetcher(credentials=test_credentials): + """Test YFinanceKeyMetricsFetcher.""" params = {"symbol": "AAPL"} fetcher = YFinanceKeyMetricsFetcher() @@ -337,6 +367,7 @@ def test_y_finance_key_metrics_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_y_finance_etf_info_fetcher(credentials=test_credentials): + """Test YFinanceEtfInfoFetcher.""" params = {"symbol": "QQQ"} fetcher = YFinanceEtfInfoFetcher() diff --git a/openbb_platform/providers/yfinance/tests/test_yfinance_helpers.py b/openbb_platform/providers/yfinance/tests/test_yfinance_helpers.py index 9c8b13bca67..7c3817cbc36 100644 --- a/openbb_platform/providers/yfinance/tests/test_yfinance_helpers.py +++ b/openbb_platform/providers/yfinance/tests/test_yfinance_helpers.py @@ -20,12 +20,14 @@ def mock_futures_csv(monkeypatch): def test_get_futures_data(mock_futures_csv): + """Test get_futures_data.""" df = get_futures_data() assert not df.empty assert df.equals(MOCK_FUTURES_DATA) def test_df_transform_numbers(): + """Test df_transform_numbers.""" data = pd.DataFrame( {"Value": ["1M", "2.5B", "3T"], "% Change": ["1%", "-2%", "3.5%"]} ) diff --git a/openbb_platform/pyproject.toml b/openbb_platform/pyproject.toml index c819c502c08..3eb6a6b8b6a 100644 --- a/openbb_platform/pyproject.toml +++ b/openbb_platform/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openbb" -version = "4.1.6" +version = "4.1.7" description = "OpenBB" authors = ["OpenBB Team "] readme = "README.md" @@ -8,51 +8,51 @@ packages = [{ include = "openbb" }] [tool.poetry.dependencies] python = ">=3.8,<3.12" -openbb-core = "^1.1.5" +openbb-core = "^1.1.6" -openbb-benzinga = "^1.1.4" -openbb-federal-reserve = "^1.1.4" -openbb-fmp = "^1.1.4" -openbb-fred = "^1.1.4" -openbb-intrinio = "^1.1.4" -openbb-oecd = "^1.1.4" -openbb-polygon = "^1.1.4" -openbb-sec = "^1.1.4" -openbb-tiingo = "^1.1.4" -openbb-tradingeconomics = "^1.1.4" -openbb-yfinance = "^1.1.4" +openbb-benzinga = "^1.1.5" +openbb-federal-reserve = "^1.1.5" +openbb-fmp = "^1.1.5" +openbb-fred = "^1.1.5" +openbb-intrinio = "^1.1.5" +openbb-oecd = "^1.1.5" +openbb-polygon = "^1.1.5" +openbb-sec = "^1.1.5" +openbb-tiingo = "^1.1.5" +openbb-tradingeconomics = "^1.1.5" +openbb-yfinance = "^1.1.5" -openbb-commodity = "^1.0.2" -openbb-crypto = "^1.1.4" -openbb-currency = "^1.1.4" -openbb-derivatives = "^1.1.4" -openbb-economy = "^1.1.4" -openbb-equity = "^1.1.4" -openbb-etf = "^1.1.4" -openbb-fixedincome = "^1.1.4" -openbb-index = "^1.1.4" -openbb-news = "^1.1.4" -openbb-regulators = "^1.1.4" +openbb-commodity = "^1.0.4" +openbb-crypto = "^1.1.5" +openbb-currency = "^1.1.5" +openbb-derivatives = "^1.1.5" +openbb-economy = "^1.1.5" +openbb-equity = "^1.1.5" +openbb-etf = "^1.1.5" +openbb-fixedincome = "^1.1.5" +openbb-index = "^1.1.5" +openbb-news = "^1.1.5" +openbb-regulators = "^1.1.5" # Community dependencies -openbb-alpha-vantage = { version = "^1.1.4", optional = true } -openbb-biztoc = { version = "^1.1.4", optional = true } -openbb-cboe = { version = "^1.1.4", optional = true } -openbb-ecb = { version = "^1.1.4", optional = true } -openbb-finra = { version = "^1.1.4", optional = true } -openbb-finviz = { version = "^1.0.3", optional = true } -openbb-government-us = { version = "^1.1.4", optional = true } -openbb-nasdaq = { version = "^1.1.4", optional = true } -openbb-seeking-alpha = { version = "^1.1.4", optional = true } -openbb-stockgrid = { version = "^1.1.4", optional = true } -openbb-tmx = { version = "^1.0.1", optional = true } -openbb-tradier = { version = "^1.0.1", optional = true } -openbb-wsj = { version = "^1.1.4", optional = true } +openbb-alpha-vantage = { version = "^1.1.5", optional = true } +openbb-biztoc = { version = "^1.1.5", optional = true } +openbb-cboe = { version = "^1.1.5", optional = true } +openbb-ecb = { version = "^1.1.5", optional = true } +openbb-finra = { version = "^1.1.5", optional = true } +openbb-finviz = { version = "^1.0.4", optional = true } +openbb-government-us = { version = "^1.1.5", optional = true } +openbb-nasdaq = { version = "^1.1.5", optional = true } +openbb-seeking-alpha = { version = "^1.1.5", optional = true } +openbb-stockgrid = { version = "^1.1.5", optional = true } +openbb-tmx = { version = "^1.0.2", optional = true } +openbb-tradier = { version = "^1.0.2", optional = true } +openbb-wsj = { version = "^1.1.5", optional = true } -openbb-charting = { version = "^2.0.2", optional = true } -openbb-econometrics = { version = "^1.1.4", optional = true } -openbb-quantitative = { version = "^1.1.4", optional = true } -openbb-technical = { version = "^1.1.5", optional = true } +openbb-charting = { version = "^2.0.3", optional = true } +openbb-econometrics = { version = "^1.1.5", optional = true } +openbb-quantitative = { version = "^1.1.5", optional = true } +openbb-technical = { version = "^1.1.6", optional = true } [tool.poetry.extras] alpha_vantage = ["openbb-alpha-vantage"] diff --git a/openbb_platform/tests/conftest.py b/openbb_platform/tests/conftest.py index 5348bc9d309..0c35960fb62 100644 --- a/openbb_platform/tests/conftest.py +++ b/openbb_platform/tests/conftest.py @@ -1,3 +1,5 @@ +"""Configuration for pytest.""" + # TODO: See if we can dynamically import the test modules under the openbb_platform # TODO: Add global fixture for headers here @@ -6,4 +8,5 @@ import os def pytest_configure(): + """Set environment variables for testing.""" os.environ["OPENBB_AUTO_BUILD"] = "false" diff --git a/openbb_platform/tests/test_auto_build.py b/openbb_platform/tests/test_auto_build.py new file mode 100644 index 00000000000..bd6acd65fd6 --- /dev/null +++ b/openbb_platform/tests/test_auto_build.py @@ -0,0 +1,35 @@ +"""Test the auto_build feature.""" + +import importlib +import sys +from unittest.mock import patch + +import pytest + +# pylint: disable=redefined-outer-name, unused-import, import-outside-toplevel + + +@pytest.fixture(autouse=True) +def setup_mocks(): + """Set up mocks for the test.""" + with patch( + "openbb_core.app.static.package_builder.PackageBuilder.auto_build" + ) as mock_auto_build: + mock_auto_build.return_value = None + yield mock_auto_build + + +@pytest.fixture +def openbb_module(setup_mocks): + """Reload the openbb module.""" + if "openbb" in sys.modules: + importlib.reload(sys.modules["openbb"]) + else: + pass + return setup_mocks + + +@pytest.mark.integration +def test_autobuild_called(openbb_module): + """Test that auto_build is called upon importing openbb.""" + openbb_module.assert_called_once() diff --git a/openbb_platform/tests/test_extension_map.py b/openbb_platform/tests/test_extension_map.py index aa24ace5633..b3a4c742b36 100644 --- a/openbb_platform/tests/test_extension_map.py +++ b/openbb_platform/tests/test_extension_map.py @@ -1,3 +1,5 @@ +"""Test the extension map.""" + import json from pathlib import Path from typing import Dict @@ -6,12 +8,10 @@ from poetry.core.constraints.version import Version, VersionConstraint, parse_co from poetry.core.pyproject.toml import PyProjectTOML -def load_ext_map(file: Path) -> Dict[str, Version]: - """Load the extension map from extension_map.json.""" +def create_ext_map(extensions: dict) -> Dict[str, Version]: + """Create the extension map from extension.""" ext_map = {} - with open(file) as f: - ext_map_json = json.load(f) - for _, v in ext_map_json.items(): + for _, v in extensions.items(): for value in v: name, version = value.split("@") ext_map[name] = Version.parse(version) @@ -36,9 +36,9 @@ def load_req_ext(file: Path) -> Dict[str, VersionConstraint]: def test_extension_map(): """Ensure only required extensions are built and versions respect pyproject.toml""" this_dir = Path(__file__).parent - ext_map = load_ext_map( - Path(this_dir, "..", "openbb", "assets", "extension_map.json") - ) + with open(Path(this_dir, "..", "openbb", "assets", "reference.json")) as f: + reference = json.load(f) + ext_map = create_ext_map(reference.get("info", {}).get("extensions", {})) req_ext = load_req_ext(Path(this_dir, "..", "pyproject.toml")) for ext in req_ext: diff --git a/poetry.lock b/poetry.lock index f67bc7728cd..5d6d1804b87 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "absl-py" -version = "1.4.0" +version = "2.1.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "absl-py-1.4.0.tar.gz", hash = "sha256:d2c244d01048ba476e7c080bd2c6df5e141d211de80223460d5b3b8a2a58433d"}, - {file = "absl_py-1.4.0-py3-none-any.whl", hash = "sha256:0d3fe606adfa4f7db64792dd4c7aee4ee0c38ab75dfd353b7a83ed3e957fcb47"}, + {file = "absl-py-2.1.0.tar.gz", hash = "sha256:7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff"}, + {file = "absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308"}, ] [[package]] @@ -27,13 +27,13 @@ triad = ">=0.6.1" [[package]] name = "aiodns" -version = "3.0.0" +version = "3.2.0" description = "Simple DNS resolver for asyncio" optional = false python-versions = "*" files = [ - {file = "aiodns-3.0.0-py3-none-any.whl", hash = "sha256:2b19bc5f97e5c936638d28e665923c093d8af2bf3aa88d35c43417fa25d136a2"}, - {file = "aiodns-3.0.0.tar.gz", hash = "sha256:946bdfabe743fceeeb093c8a010f5d1645f708a241be849e17edfb0e49e08cd6"}, + {file = "aiodns-3.2.0-py3-none-any.whl", hash = "sha256:e443c0c27b07da3174a109fd9e736d69058d808f144d3c9d56dbd1776964c5f5"}, + {file = "aiodns-3.2.0.tar.gz", hash = "sha256:62869b23409349c21b072883ec8998316b234c9a9e36675756e8e317e8768f72"}, ] [package.dependencies] @@ -52,111 +52,99 @@ files = [ [[package]] name = "aiohttp" -version = "3.8.5" +version = "3.9.5" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, + {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, + {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, + {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, + {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, + {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, + {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, + {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, + {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, + {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, ] [package.dependencies] aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] +speedups = ["Brotli", "aiodns", "brotlicffi"] [[package]] name = "aiosignal" @@ -174,18 +162,21 @@ frozenlist = ">=1.1.0" [[package]] name = "aiosqlite" -version = "0.19.0" +version = "0.20.0" description = "asyncio bridge to the standard sqlite3 module" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, - {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, + {file = "aiosqlite-0.20.0-py3-none-any.whl", hash = "sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6"}, + {file = "aiosqlite-0.20.0.tar.gz", hash = "sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7"}, ] +[package.dependencies] +typing_extensions = ">=4.0" + [package.extras] -dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] -docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] +dev = ["attribution (==1.7.0)", "black (==24.2.0)", "coverage[toml] (==7.4.1)", "flake8 (==7.0.0)", "flake8-bugbear (==24.2.6)", "flit (==3.9.0)", "mypy (==1.8.0)", "ufmt (==2.3.0)", "usort (==1.0.8.post1)"] +docs = ["sphinx (==7.2.6)", "sphinx-mdinclude (==0.5.3)"] [[package]] name = "alabaster" @@ -215,53 +206,40 @@ requests = "*" [[package]] name = "altair" -version = "5.0.1" +version = "5.3.0" description = "Vega-Altair: A declarative statistical visualization library for Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "altair-5.0.1-py3-none-any.whl", hash = "sha256:9f3552ed5497d4dfc14cf48a76141d8c29ee56eae2873481b4b28134268c9bbe"}, - {file = "altair-5.0.1.tar.gz", hash = "sha256:087d7033cb2d6c228493a053e12613058a5d47faf6a36aea3ff60305fd8b4cb0"}, + {file = "altair-5.3.0-py3-none-any.whl", hash = "sha256:7084a1dab4d83c5e7e5246b92dc1b4451a6c68fd057f3716ee9d315c8980e59a"}, + {file = "altair-5.3.0.tar.gz", hash = "sha256:5a268b1a0983b23d8f9129f819f956174aa7aea2719ed55a52eba9979b9f6675"}, ] [package.dependencies] jinja2 = "*" jsonschema = ">=3.0" numpy = "*" -pandas = ">=0.18" +packaging = "*" +pandas = ">=0.25" toolz = "*" typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] -dev = ["black (<24)", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff", "types-jsonschema", "types-setuptools", "vega-datasets", "vl-convert-python"] -doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] +all = ["altair-tiles (>=0.3.0)", "anywidget (>=0.9.0)", "pyarrow (>=11)", "vega-datasets (>=0.9.0)", "vegafusion[embed] (>=1.6.6)", "vl-convert-python (>=1.3.0)"] +dev = ["geopandas", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff (>=0.3.0)", "types-jsonschema", "types-setuptools"] +doc = ["docutils", "jinja2", "myst-parser", "numpydoc", "pillow (>=9,<10)", "pydata-sphinx-theme (>=0.14.1)", "scipy", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] [[package]] name = "altgraph" -version = "0.17.3" +version = "0.17.4" description = "Python graph (network) package" optional = true python-versions = "*" files = [ - {file = "altgraph-0.17.3-py2.py3-none-any.whl", hash = "sha256:c8ac1ca6772207179ed8003ce7687757c04b0b71536f81e2ac5755c6226458fe"}, - {file = "altgraph-0.17.3.tar.gz", hash = "sha256:ad33358114df7c9416cdb8fa1eaa5852166c505118717021c6a8c7c7abbd03dd"}, + {file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"}, + {file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"}, ] -[[package]] -name = "ansi2html" -version = "1.8.0" -description = "" -optional = true -python-versions = ">=3.6" -files = [ - {file = "ansi2html-1.8.0-py3-none-any.whl", hash = "sha256:ef9cc9682539dbe524fbf8edad9c9462a308e04bce1170c32daa8fdfd0001785"}, - {file = "ansi2html-1.8.0.tar.gz", hash = "sha256:38b82a298482a1fa2613f0f9c9beb3db72a8f832eeac58eb2e47bf32cd37f6d5"}, -] - -[package.extras] -docs = ["Sphinx", "setuptools-scm", "sphinx-rtd-theme"] -test = ["pytest", "pytest-cov"] - [[package]] name = "ansiwrap" version = "0.8.4" @@ -321,13 +299,13 @@ files = [ [[package]] name = "appnope" -version = "0.1.3" +version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] [[package]] @@ -371,22 +349,23 @@ statsmodels = ">=0.11" [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" @@ -427,17 +406,22 @@ tests = ["pytest"] [[package]] name = "arrow" -version = "1.2.3" +version = "1.3.0" description = "Better dates & times for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, ] [package.dependencies] python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] [[package]] name = "ascii-magic" @@ -467,13 +451,13 @@ files = [ [[package]] name = "astroid" -version = "2.15.6" +version = "2.15.8" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, - {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] [package.dependencies] @@ -536,30 +520,31 @@ test-all = ["coverage[toml]", "ipython (>=4.2)", "objgraph", "pytest (>=7.0)", " [[package]] name = "asttokens" -version = "2.2.1" +version = "2.4.1" description = "Annotate AST trees with source code positions" optional = false python-versions = "*" files = [ - {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, - {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, ] [package.dependencies] -six = "*" +six = ">=1.12.0" [package.extras] -test = ["astroid", "pytest"] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "async-timeout" -version = "4.0.2" +version = "4.0.3" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] [[package]] @@ -591,18 +576,21 @@ tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy" [[package]] name = "babel" -version = "2.12.1" +version = "2.14.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "backcall" version = "0.2.0" @@ -655,24 +643,25 @@ tzdata = ["tzdata"] [[package]] name = "bandit" -version = "1.7.5" +version = "1.7.8" description = "Security oriented static analyser for python code." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, - {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, + {file = "bandit-1.7.8-py3-none-any.whl", hash = "sha256:509f7af645bc0cd8fd4587abc1a038fc795636671ee8204d502b933aee44f381"}, + {file = "bandit-1.7.8.tar.gz", hash = "sha256:36de50f720856ab24a24dbaa5fee2c66050ed97c1477e0a1159deab1775eab6b"}, ] [package.dependencies] colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" PyYAML = ">=5.3.1" rich = "*" stevedore = ">=1.20.0" [package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] +baseline = ["GitPython (>=3.1.30)"] +sarif = ["jschema-to-python (>=1.2.3)", "sarif-om (>=1.0.4)"] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)"] toml = ["tomli (>=1.1.0)"] yaml = ["PyYAML"] @@ -692,51 +681,54 @@ tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", " [[package]] name = "beautifulsoup4" -version = "4.12.2" +version = "4.12.3" description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, - {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, ] [package.dependencies] soupsieve = ">1.2" [package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] [[package]] name = "black" -version = "24.2.0" +version = "24.4.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"}, - {file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"}, - {file = "black-24.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f"}, - {file = "black-24.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a"}, - {file = "black-24.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd"}, - {file = "black-24.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2"}, - {file = "black-24.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92"}, - {file = "black-24.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23"}, - {file = "black-24.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b"}, - {file = "black-24.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9"}, - {file = "black-24.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693"}, - {file = "black-24.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982"}, - {file = "black-24.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4"}, - {file = "black-24.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218"}, - {file = "black-24.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0"}, - {file = "black-24.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d"}, - {file = "black-24.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8"}, - {file = "black-24.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8"}, - {file = "black-24.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540"}, - {file = "black-24.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31"}, - {file = "black-24.2.0-py3-none-any.whl", hash = "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6"}, - {file = "black-24.2.0.tar.gz", hash = "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894"}, + {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"}, + {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"}, + {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"}, + {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"}, + {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"}, + {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"}, + {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"}, + {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"}, + {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"}, + {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"}, + {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"}, + {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"}, + {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"}, + {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"}, + {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"}, + {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"}, + {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"}, + {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"}, + {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"}, + {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"}, + {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"}, + {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"}, ] [package.dependencies] @@ -756,13 +748,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "6.0.0" +version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, - {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] [package.dependencies] @@ -770,147 +762,145 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] +css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "blinker" -version = "1.6.2" +version = "1.7.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "blinker-1.6.2-py3-none-any.whl", hash = "sha256:c3d739772abb7bc2860abf5f2ec284223d9ad5c76da018234f6f50d6f31ab1f0"}, - {file = "blinker-1.6.2.tar.gz", hash = "sha256:4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213"}, + {file = "blinker-1.7.0-py3-none-any.whl", hash = "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9"}, + {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] [[package]] name = "brotli" -version = "1.0.9" +version = "1.1.0" description = "Python bindings for the Brotli compression library" optional = true python-versions = "*" files = [ - {file = "Brotli-1.0.9-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:268fe94547ba25b58ebc724680609c8ee3e5a843202e9a381f6f9c5e8bdb5c70"}, - {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b"}, - {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5913a1177fc36e30fcf6dc868ce23b0453952c78c04c266d3149b3d39e1410d6"}, - {file = "Brotli-1.0.9-cp27-cp27m-win32.whl", hash = "sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa"}, - {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452"}, - {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7"}, - {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9744a863b489c79a73aba014df554b0e7a0fc44ef3f8a0ef2a52919c7d155031"}, - {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a72661af47119a80d82fa583b554095308d6a4c356b2a554fdc2799bc19f2a43"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb"}, - {file = "Brotli-1.0.9-cp310-cp310-win32.whl", hash = "sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181"}, - {file = "Brotli-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2"}, - {file = "Brotli-1.0.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc0283a406774f465fb45ec7efb66857c09ffefbe49ec20b7882eff6d3c86d3a"}, - {file = "Brotli-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:11d3283d89af7033236fa4e73ec2cbe743d4f6a81d41bd234f24bf63dde979df"}, - {file = "Brotli-1.0.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1306004d49b84bd0c4f90457c6f57ad109f5cc6067a9664e12b7b79a9948ad"}, - {file = "Brotli-1.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1375b5d17d6145c798661b67e4ae9d5496920d9265e2f00f1c2c0b5ae91fbde"}, - {file = "Brotli-1.0.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cab1b5964b39607a66adbba01f1c12df2e55ac36c81ec6ed44f2fca44178bf1a"}, - {file = "Brotli-1.0.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ed6a5b3d23ecc00ea02e1ed8e0ff9a08f4fc87a1f58a2530e71c0f48adf882f"}, - {file = "Brotli-1.0.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cb02ed34557afde2d2da68194d12f5719ee96cfb2eacc886352cb73e3808fc5d"}, - {file = "Brotli-1.0.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b3523f51818e8f16599613edddb1ff924eeb4b53ab7e7197f85cbc321cdca32f"}, - {file = "Brotli-1.0.9-cp311-cp311-win32.whl", hash = "sha256:ba72d37e2a924717990f4d7482e8ac88e2ef43fb95491eb6e0d124d77d2a150d"}, - {file = "Brotli-1.0.9-cp311-cp311-win_amd64.whl", hash = "sha256:3ffaadcaeafe9d30a7e4e1e97ad727e4f5610b9fa2f7551998471e3736738679"}, - {file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"}, - {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296"}, - {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430"}, - {file = "Brotli-1.0.9-cp35-cp35m-win32.whl", hash = "sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1"}, - {file = "Brotli-1.0.9-cp35-cp35m-win_amd64.whl", hash = "sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea"}, - {file = "Brotli-1.0.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b"}, - {file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"}, - {file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"}, - {file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d"}, - {file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"}, - {file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"}, - {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb"}, - {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649"}, - {file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"}, - {file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"}, - {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19"}, - {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5cb1e18167792d7d21e21365d7650b72d5081ed476123ff7b8cac7f45189c0c7"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c"}, - {file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"}, - {file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:73fd30d4ce0ea48010564ccee1a26bfe39323fde05cb34b5863455629db61dc7"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02177603aaca36e1fd21b091cb742bb3b305a569e2402f1ca38af471777fb019"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:76ffebb907bec09ff511bb3acc077695e2c32bc2142819491579a695f77ffd4d"}, - {file = "Brotli-1.0.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b43775532a5904bc938f9c15b77c613cb6ad6fb30990f3b0afaea82797a402d8"}, - {file = "Brotli-1.0.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5bf37a08493232fbb0f8229f1824b366c2fc1d02d64e7e918af40acd15f3e337"}, - {file = "Brotli-1.0.9-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:330e3f10cd01da535c70d09c4283ba2df5fb78e915bea0a28becad6e2ac010be"}, - {file = "Brotli-1.0.9-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e1abbeef02962596548382e393f56e4c94acd286bd0c5afba756cffc33670e8a"}, - {file = "Brotli-1.0.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3148362937217b7072cf80a2dcc007f09bb5ecb96dae4617316638194113d5be"}, - {file = "Brotli-1.0.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:336b40348269f9b91268378de5ff44dc6fbaa2268194f85177b53463d313842a"}, - {file = "Brotli-1.0.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b8b09a16a1950b9ef495a0f8b9d0a87599a9d1f179e2d4ac014b2ec831f87e7"}, - {file = "Brotli-1.0.9-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c8e521a0ce7cf690ca84b8cc2272ddaf9d8a50294fd086da67e517439614c755"}, - {file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, ] [[package]] name = "brotlicffi" -version = "1.0.9.2" +version = "1.1.0.0" description = "Python CFFI bindings to the Brotli library" optional = true -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "brotlicffi-1.0.9.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:408ec4359f9763280d5c4e0ad29c51d1240b25fdd18719067e972163b4125b98"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2e4629f7690ded66c8818715c6d4dd6a7ff6a4f10fad6186fe99850f781ce210"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:137c4635edcdf593de5ce9d0daa596bf499591b16b8fca5fd72a490deb54b2ee"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:af8a1b7bcfccf9c41a3c8654994d6a81821fdfe4caddcfe5045bfda936546ca3"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9078432af4785f35ab3840587eed7fb131e3fc77eb2a739282b649b343c584dd"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7bb913d5bf3b4ce2ec59872711dc9faaff5f320c3c3827cada2d8a7b793a7753"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:16a0c9392a1059e2e62839fbd037d2e7e03c8ae5da65e9746f582464f7fab1bb"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:94d2810efc5723f1447b332223b197466190518a3eeca93b9f357efb5b22c6dc"}, - {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9e70f3e20f317d70912b10dbec48b29114d3dbd0e9d88475cb328e6c086f0546"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:586f0ea3c2eed455d5f2330b9ab4a591514c8de0ee53d445645efcfbf053c69f"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux1_i686.whl", hash = "sha256:4454c3baedc277fd6e65f983e3eb8e77f4bc15060f69370a0201746e2edeca81"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:52c1c12dad6eb1d44213a0a76acf5f18f64653bd801300bef5e2f983405bdde5"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:21cd400d24b344c218d8e32b394849e31b7c15784667575dbda9f65c46a64b0a"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:71061f8bc86335b652e442260c4367b782a92c6e295cf5a10eff84c7d19d8cf5"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:15e0db52c56056be6310fc116b3d7c6f34185594e261f23790b2fb6489998363"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-win32.whl", hash = "sha256:551305703d12a2dd1ae43d3dde35dee20b1cb49b5796279d4d34e2c6aec6be4d"}, - {file = "brotlicffi-1.0.9.2-cp35-abi3-win_amd64.whl", hash = "sha256:2be4fb8a7cb482f226af686cd06d2a2cab164ccdf99e460f8e3a5ec9a5337da2"}, - {file = "brotlicffi-1.0.9.2-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:8e7221d8a084d32d15c7b58e0ce0573972375c5038423dbe83f217cfe512e680"}, - {file = "brotlicffi-1.0.9.2-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:75a46bc5ed2753e1648cc211dcb2c1ac66116038766822dc104023f67ff4dfd8"}, - {file = "brotlicffi-1.0.9.2-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1e27c43ef72a278f9739b12b2df80ee72048cd4cbe498f8bbe08aaaa67a5d5c8"}, - {file = "brotlicffi-1.0.9.2-pp27-pypy_73-win32.whl", hash = "sha256:feb942814285bdc5e97efc77a04e48283c17dfab9ea082d79c0a7b9e53ef1eab"}, - {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a6208d82c3172eeeb3be83ed4efd5831552c7cd47576468e50fcf0fb23fcf97f"}, - {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:408c810c599786fb806556ff17e844a903884e6370ca400bcec7fa286149f39c"}, - {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a73099858ee343e8801710a08be8d194f47715ff21e98d92a19ac461058f52d1"}, - {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-win32.whl", hash = "sha256:916b790f967a18a595e61f218c252f83718ac91f24157d622cf0fa710cd26ab7"}, - {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba4a00263af40e875ec3d6c7f623cbf8c795b55705da18c64ec36b6bf0848bc5"}, - {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-manylinux1_x86_64.whl", hash = "sha256:df78aa47741122b0d5463f1208b7bb18bc9706dee5152d9f56e0ead4865015cd"}, - {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:9030cd5099252d16bfa4e22659c84a89c102e94f8e81d30764788b72e2d7cfb7"}, - {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-win32.whl", hash = "sha256:7e72978f4090a161885b114f87b784f538dcb77dafc6602592c1cf39ae8d243d"}, - {file = "brotlicffi-1.0.9.2.tar.gz", hash = "sha256:0c248a68129d8fc6a217767406c731e498c3e19a7be05ea0a90c3c86637b7d96"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, ] [package.dependencies] @@ -956,43 +946,47 @@ dev = ["black (>=20.8b1)", "codecov", "coverage", "cython (>=0.25)", "ffn (>=0.3 [[package]] name = "cachetools" -version = "5.3.1" +version = "5.3.3" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, - {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, + {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, + {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, ] [[package]] name = "catboost" -version = "1.2" +version = "1.2.5" description = "CatBoost Python Package" optional = true python-versions = "*" files = [ - {file = "catboost-1.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:b7ff06dd4e72ba5ba2d827d0870080485dcd91dfb30b820e377f6a634258c47a"}, - {file = "catboost-1.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:93a9ef21b3b1817e6480854f40f0a2daad8393ee92b0b46b952db4097be46855"}, - {file = "catboost-1.2-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:bfcb35e91b6fe42dcc92614d02f13dc47a4484ca5162de84a04c09244085d8d3"}, - {file = "catboost-1.2-cp310-cp310-win_amd64.whl", hash = "sha256:788e617712c8730e7edebac5c8efafd693097ba81b38c1992894e74702b8904e"}, - {file = "catboost-1.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:983c7ec6654baddf19c574a72cfa53e926e89e5ab48941b3bc94c06edca38a49"}, - {file = "catboost-1.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:96873ffbf8913457845926221e607aabfabcad2f40615a9d21a7ec1d65bcb8da"}, - {file = "catboost-1.2-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:a0236f6328e33f1e2e5fd6ca619ea5f8759ade06d709bd9c706443b20525fada"}, - {file = "catboost-1.2-cp311-cp311-win_amd64.whl", hash = "sha256:51d0a826b8d77ce4de43a861786a11aa3e6ea7a40b7e3ef5ae085893324d86db"}, - {file = "catboost-1.2-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:aaa3b90b76e7d6feff9955732b06fe3d2646e6bd5a0072d97ccc92fa8f6ef107"}, - {file = "catboost-1.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cf432f9d72b6c2f5cfa91b178e1e85cc627365dd90326ef2970e3ac12254e27f"}, - {file = "catboost-1.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:24346ceafcc3225b70ead73fbe19248c2869a4ef0d1d671bf9a8140ed4ab3c91"}, - {file = "catboost-1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:33283992ccd673e3e39d0f71d34c7249cc6deeb1a1e0abfef3d545405c29d417"}, - {file = "catboost-1.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:32b5577dbf509e0d736da9c6b63324a235a1d895b0873307e4a290c194fa5eac"}, - {file = "catboost-1.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:475932765e16e812692b84bae5bfccb9612b12d52c8e936163fd9c70cb279c59"}, - {file = "catboost-1.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:30dd2241cf487eb3f06d7c33a807e2eb35b20367268161c08b4c047d7185a8a0"}, - {file = "catboost-1.2-cp38-cp38-win_amd64.whl", hash = "sha256:e616148b739527dcf02945744ea98ecb3c9619098f1b9bf4f83b77158a6fb764"}, - {file = "catboost-1.2-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:de0c55196ab95c6d0245d8c15cd8ec2b82eca6043c4554282809d0301e799654"}, - {file = "catboost-1.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:601a9cdfd5fd8663da39c080213ac69241734b8d4120de3b0d60f3af35c1c4b0"}, - {file = "catboost-1.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:234ce778e278757ff7de2b5b2513953bf7877ceb1c477fe8176a279d24931520"}, - {file = "catboost-1.2-cp39-cp39-win_amd64.whl", hash = "sha256:bc67c9ccf1cd61a23eb0f52e255eb787c2752d7fd982c6e257c82a451260084b"}, - {file = "catboost-1.2.tar.gz", hash = "sha256:39e53403727ecfbb48156773ef3006b4e71cc35ab49cc9a0cf044b474c34be0c"}, + {file = "catboost-1.2.5-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d266bcd87e7afa8c8c4cae1dbdb66f9487368ee2c1d2bbcefda0cbff7cb48ac4"}, + {file = "catboost-1.2.5-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:4143449dae1efc2752cbde2537b90611f36716e4e1e6827fc6856d07de16b431"}, + {file = "catboost-1.2.5-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:a92da61e95919b03d611045f0f3373799deec6f8192d7d1211714a21ff0da65e"}, + {file = "catboost-1.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:ad6ae9387759ca121042db60f4c73014027cb160a9dde1f52d353ca18b471e7c"}, + {file = "catboost-1.2.5-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:68dc17e6850f1ad8256fbbfbfac2c26b7be291c78b0961b135adf3aa6ed503bf"}, + {file = "catboost-1.2.5-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b6e1617b57deca52c8880ec2439d0fb514d7e9f78479bae8dbfbd2f95bb3b28e"}, + {file = "catboost-1.2.5-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:9e0aac17d1a25e0f67770ba7362c6275db611ebb5dc6179daed84f55c3db976c"}, + {file = "catboost-1.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:901bf56e43334ce42f45b5c62fab1d8a14d54160b6da0645c798b7b7ad415da1"}, + {file = "catboost-1.2.5-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:82a321ba006abdeae9beb6e53c2d407b0eaaeadb4c1b56de1344f693e7512d08"}, + {file = "catboost-1.2.5-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:4180fe03d110acf44d09df7e3fd8e1ef62bfd3ac22ce90185332f52e24e96ac9"}, + {file = "catboost-1.2.5-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:e1925714d40a2a0d9fd086c33f2a668610c07630201527018f3f17a3d530c464"}, + {file = "catboost-1.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:f13acbcf2f3639d3d06808428db3207c7d776314041619cc32578927ec752221"}, + {file = "catboost-1.2.5-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:1d8b06333495a90192618ddc4b0ea15186a35a53f55b7743e4c9758de1bb785d"}, + {file = "catboost-1.2.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:87a556dfdad702d958b2f7bb1b6fc8bee4b1bf9bf3e7736aac3f70cb9522d53a"}, + {file = "catboost-1.2.5-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:d0db06d11dd9446bcb1cd1417bced0c4f956abe3f50f72df79f1b2b6789a6bde"}, + {file = "catboost-1.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a1149bedba20fff940ece5ddd8e56420ebe26850b23533dfc6e5e4994049d220"}, + {file = "catboost-1.2.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:6e3a9bd84c3a92f7cab0a9c3451df21d930f4ebb4716f85513b4feac2b0ef209"}, + {file = "catboost-1.2.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:51acfea3bf141d25e3bc43e8dfc505920a8e701cb06c8d4164661a118e3e1178"}, + {file = "catboost-1.2.5-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6acfc79e2be02b34caa26a339ace52c5991b1d9862dcb94f5ced1bd9ca9a8c18"}, + {file = "catboost-1.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:dabd1ea1bda91f72792b7f348d0301e637f98251fc4d50b62ffc872721997f47"}, + {file = "catboost-1.2.5-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:ed9521ce617f370dd7f8214f6b5ea2cdb2bfb47a2be0fb19a03b7c9d4399b4d1"}, + {file = "catboost-1.2.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:6cd81cb508031cb5feccdecb6f309fc9562b7114bc82fa06c17ffdbdb079198c"}, + {file = "catboost-1.2.5-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:86e05596a5330de7a8376f344079c3333fd3254e4300549654e343703f7315b0"}, + {file = "catboost-1.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:c75f57b1df9893d67ed8f04c32d5e8fe3d591ee873a94a2ff8279e32549397b0"}, + {file = "catboost-1.2.5.tar.gz", hash = "sha256:12c31650fa55944e9ab5863d4eef194533914920c358b52a7a7d7b0b855cba9f"}, ] [package.dependencies] @@ -1034,13 +1028,13 @@ ujson = ["ujson (>=5.4.0,<6.0.0)"] [[package]] name = "ccxt" -version = "4.0.33" -description = "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges" +version = "4.3.2" +description = "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges" optional = false python-versions = "*" files = [ - {file = "ccxt-4.0.33-py2.py3-none-any.whl", hash = "sha256:79985862f5d8c1f3ddff15e49fa8ac0bd4aac5b41fb6ef4c649caa76fc6dc44d"}, - {file = "ccxt-4.0.33.tar.gz", hash = "sha256:f9ac6db84823dfa98d45999ea41d629b8496b7e9c3fccae8b8624f95b7c3ea4a"}, + {file = "ccxt-4.3.2-py2.py3-none-any.whl", hash = "sha256:63f99e173be9f8f95042932db5c008a6c83845978542f3015f83b7fdc939a1e2"}, + {file = "ccxt-4.3.2.tar.gz", hash = "sha256:af3de8ed05c9dba192b0db9b1f1387a1c5ae5c5fb602630d48ef90a9d7949b1d"}, ] [package.dependencies] @@ -1050,93 +1044,83 @@ certifi = ">=2018.1.18" cryptography = ">=2.6.1" requests = ">=2.18.4" setuptools = ">=60.9.0" +typing-extensions = ">=4.4.0" yarl = {version = ">=1.7.2", markers = "python_version >= \"3.5.2\""} [package.extras] -qa = ["flake8 (==3.7.9)"] +qa = ["ruff (==0.0.292)", "tox (>=4.8.0)"] +type = ["mypy (==1.6.1)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -1144,108 +1128,144 @@ pycparser = "*" [[package]] name = "cfgv" -version = "3.3.1" +version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8" files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" 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.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "clarabel" +version = "0.7.1" +description = "Clarabel Conic Interior Point Solver for Rust / Python" +optional = true +python-versions = ">=3.7" +files = [ + {file = "clarabel-0.7.1-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:32980b578842d17abe3d277df2d31a6b8bff3facf33b169c74d59b2ada10b61b"}, + {file = "clarabel-0.7.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b4d414b9db040effa186f9e048de2c7d3e38b6edcadaaa2432a52b6451ba9999"}, + {file = "clarabel-0.7.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec0fde90a467e07010176b0bd159ab8cb11c59c8ff0a09580af1ac77d7861971"}, + {file = "clarabel-0.7.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:754e2681eb74e7f6fc35612ae58219d76819a0bc1b67771752b6f5425f72c1f8"}, + {file = "clarabel-0.7.1-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33283d190f1e2a3b8559c928f0eb0d1fefc45aad334fd0566cdf5eaa94606a13"}, + {file = "clarabel-0.7.1-cp37-abi3-win32.whl", hash = "sha256:519f9b1daba08f909c106da8b5fd52937cfbc4ba27086c4cbd9728d168cfbc5c"}, + {file = "clarabel-0.7.1-cp37-abi3-win_amd64.whl", hash = "sha256:33faf5a02465eb5f7f7380d892ce3cf1d293a3efefcea18d637c618f012f5f36"}, + {file = "clarabel-0.7.1.tar.gz", hash = "sha256:a30ab135f475c5bc78329fd7df575291155e6055bcaf02124eb610b8ad176396"}, +] + +[package.dependencies] +numpy = "*" +scipy = "*" + [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -1253,49 +1273,50 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cloudpickle" -version = "2.2.1" -description = "Extended pickling support for Python objects" +version = "3.0.0" +description = "Pickler class to extend the standard pickle.Pickler functionality" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cloudpickle-2.2.1-py3-none-any.whl", hash = "sha256:61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f"}, - {file = "cloudpickle-2.2.1.tar.gz", hash = "sha256:d89684b8de9e34a2a43b3460fbca07d09d6e25ce858df4d5a44240403b6178f5"}, + {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, + {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, ] [[package]] name = "cmdstanpy" -version = "1.1.0" +version = "1.2.2" description = "Python interface to CmdStan" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "cmdstanpy-1.1.0-py3-none-any.whl", hash = "sha256:ebceb2255855827bb512bb1e402388e38f4a705ebf71831b97cbfbb3e61fc38a"}, - {file = "cmdstanpy-1.1.0.tar.gz", hash = "sha256:c2312ca93e0444d771973ca17ef4c84c0fd06570c8912daae4c6e7c869272d6b"}, + {file = "cmdstanpy-1.2.2-py3-none-any.whl", hash = "sha256:b18cf61f9cae6babf4b26ab06a2c3572a64fc7781017ededdfa073430f8e29eb"}, + {file = "cmdstanpy-1.2.2.tar.gz", hash = "sha256:09bcadd54a582090d722ba3e76d516db696275ab861ef71805195d0df2dd34a9"}, ] [package.dependencies] numpy = ">=1.21" pandas = "*" +stanio = ">=0.4.0,<2.0.0" tqdm = "*" [package.extras] all = ["xarray"] -docs = ["matplotlib", "numpydoc", "sphinx", "sphinx-gallery", "sphinx-rtd-theme"] -tests = ["flake8", "mypy", "pylint", "pytest", "pytest-cov", "pytest-order", "tqdm", "xarray"] +docs = ["ipykernel", "ipython", "ipywidgets", "matplotlib", "nbsphinx", "pydata-sphinx-theme (<0.9)", "sphinx (>5,<6)", "sphinx-copybutton", "xarray"] +test = ["flake8", "mypy", "pylint", "pytest", "pytest-cov", "pytest-order", "xarray"] [[package]] name = "codespell" -version = "2.2.5" +version = "2.2.6" description = "Codespell" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "codespell-2.2.5-py3-none-any.whl", hash = "sha256:efa037f54b73c84f7bd14ce8e853d5f822cdd6386ef0ff32e957a3919435b9ec"}, - {file = "codespell-2.2.5.tar.gz", hash = "sha256:6d9faddf6eedb692bf80c9a94ec13ab4f5fb585aabae5f3750727148d7b5be56"}, + {file = "codespell-2.2.6-py3-none-any.whl", hash = "sha256:9ee9a3e5df0990604013ac2a9f22fa8e57669c827124a2e961fe8a1da4cacc07"}, + {file = "codespell-2.2.6.tar.gz", hash = "sha256:a8c65d8eb3faa03deabab6b3bbe798bea72e1799c7e9e955d57eca4096abcff9"}, ] [package.extras] -dev = ["Pygments", "build", "chardet", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli"] +dev = ["Pygments", "build", "chardet", "pre-commit", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli", "twine"] hard-encoding-detection = ["chardet"] toml = ["tomli"] types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] @@ -1313,22 +1334,20 @@ files = [ [[package]] name = "comm" -version = "0.1.3" +version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"}, - {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"}, + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] [package.dependencies] -traitlets = ">=5.3" +traitlets = ">=4" [package.extras] -lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] test = ["pytest"] -typing = ["mypy (>=0.990)"] [[package]] name = "commonmark" @@ -1346,63 +1365,72 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "contourpy" -version = "1.1.0" +version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.8" files = [ - {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, - {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, - {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, - {file = "contourpy-1.1.0-cp310-cp310-win32.whl", hash = "sha256:9b2dd2ca3ac561aceef4c7c13ba654aaa404cf885b187427760d7f7d4c57cff8"}, - {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, - {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, - {file = "contourpy-1.1.0-cp311-cp311-win32.whl", hash = "sha256:edb989d31065b1acef3828a3688f88b2abb799a7db891c9e282df5ec7e46221b"}, - {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, - {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, - {file = "contourpy-1.1.0-cp38-cp38-win32.whl", hash = "sha256:108dfb5b3e731046a96c60bdc46a1a0ebee0760418951abecbe0fc07b5b93b27"}, - {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, - {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, - {file = "contourpy-1.1.0-cp39-cp39-win32.whl", hash = "sha256:71551f9520f008b2950bef5f16b0e3587506ef4f23c734b71ffb7b89f8721999"}, - {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, - {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, + {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, + {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, + {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, + {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, + {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, + {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, + {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, + {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, + {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, + {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, + {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, + {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, + {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, + {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, + {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, + {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, ] [package.dependencies] -numpy = ">=1.16" +numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} [package.extras] bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "wurlitzer"] @@ -1425,73 +1453,83 @@ dev = ["black", "build", "isort", "pylint"] docs = ["myst-parser", "sphinx", "sphinx-rtd-theme"] tests = ["coverage"] +[[package]] +name = "coreforecast" +version = "0.0.8" +description = "Fast implementations of common forecasting routines" +optional = true +python-versions = ">=3.8" +files = [ + {file = "coreforecast-0.0.8-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:599ca1dd0d8f41396c47107ecc9ce777769d6572f8c2a4494d9688a2e4424895"}, + {file = "coreforecast-0.0.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e5c2a1983465563ca2d3078f6ba449214e20eef5056013a62893cd6958cd7497"}, + {file = "coreforecast-0.0.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f6ca35496eaada7cbb4b3f07dde2a9612b9c8ae849f2e02dc54e1c528c42248"}, + {file = "coreforecast-0.0.8-py3-none-win_amd64.whl", hash = "sha256:155104b5077fa6b44fc23c3761cca24343cfda0203574a2b7104cc7ee609e5a7"}, + {file = "coreforecast-0.0.8.tar.gz", hash = "sha256:c352306fadf1faa52c68170abbd9ef6b5cb95fec8a0667206e4efe0f397b7f9b"}, +] + +[package.dependencies] +importlib_resources = {version = "*", markers = "python_version < \"3.10\""} +numpy = ">=1.20.0" + [[package]] name = "coverage" -version = "7.2.7" +version = "7.4.4" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"}, + {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"}, + {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"}, + {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"}, + {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"}, + {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"}, + {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"}, + {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"}, + {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"}, + {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"}, + {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"}, + {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"}, + {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"}, ] [package.dependencies] @@ -1502,47 +1540,56 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.2" +version = "42.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, - {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, - {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, - {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, - {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, - {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, - {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, - {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, - {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, - {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, + {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, + {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, + {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, + {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, + {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, + {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, ] [package.dependencies] -cffi = ">=1.12" +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] nox = ["nox"] -pep8test = ["black", "check-sdist", "mypy", "ruff"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] @@ -1577,182 +1624,158 @@ test = ["flake8", "isort", "pytest"] [[package]] name = "cvxpy" -version = "1.2.2" +version = "1.4.3" description = "A domain-specific language for modeling convex optimization problems in Python." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "cvxpy-1.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0280e486f1eaa942a85ddbd4f660e69335a06d075381c202645679a98f9655e"}, - {file = "cvxpy-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1af7a07246e9d8518c819e18b46a888adfe514a809f5d1393b106118fcc2260e"}, - {file = "cvxpy-1.2.2-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:9d051a0186063e7e71ada198fca1c304645a00881fac63ee482fc47eb241fc06"}, - {file = "cvxpy-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:3029fbcd99a0dac4426f989c00db77c2c76389e6366dc1af82de0ed5658f1939"}, - {file = "cvxpy-1.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbcf638d6948ed1e6324924b1200bce3e75a3bf675a356bbbe06f7758300e0aa"}, - {file = "cvxpy-1.2.2-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:b0041dfe7e158307755910dbb72fd360144fc8602640873ddb364cbfc7363b47"}, - {file = "cvxpy-1.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ab6e635d6849a5c8a82cd4f1a4578a24fa85ba9cd50dcd73ee0b3758acba2d57"}, - {file = "cvxpy-1.2.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:99edcd3bf4b60ea7776fa9b13ae11f828017f00b32a824965c0a397e27548bdf"}, - {file = "cvxpy-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:174297709f6d68ea60e6f482e21c54237fe6a1424cc7fd8bbd296afc1b1f6695"}, - {file = "cvxpy-1.2.2-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:28b37a498821699714ad3fe487837661c34efdfbf156a5b0ce02d64f69930436"}, - {file = "cvxpy-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:711391e46dd6a9a01a7ea412de09616c8ef413c0c339f6416da35090607238b9"}, - {file = "cvxpy-1.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:129b37ca74e27c07593ef1d2a463f8e6f61f88fd6b87302acf3deab15d135b18"}, - {file = "cvxpy-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f6fe6952bb2ed2296ad03c9d50a3a31f4753555c6b7babe5a39cad48983678c5"}, - {file = "cvxpy-1.2.2-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:da2c8338a580dc3430142c3a5022a4806eb87859b7293d11edd3ca376926a9de"}, - {file = "cvxpy-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:aad6784de16d64320a1ee7ad4aa1c7910bc59a5a7f49b84b0f7d48cd92190155"}, - {file = "cvxpy-1.2.2.tar.gz", hash = "sha256:c8e91545585eb632ce030fbf2c301d573ec3cf7971f9a387a0f0a61a2feae6b8"}, + {file = "cvxpy-1.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f4dc744a6f38328b0511cd57cfd81a517c0568d3b6e994d6dda3f309a1ce47cf"}, + {file = "cvxpy-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c32199a26d889e74d70bc39f0369680cb7d2625e7c47c42483ca166d37122c2"}, + {file = "cvxpy-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a4fed75c1714409fd5125269935a68bc3f57c522623a5d7eab68623a19f3a6f"}, + {file = "cvxpy-1.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8198e390490a0543caad428fc0d8a5c0914052c22630277d00bfdc7a770c4b11"}, + {file = "cvxpy-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:bea83a4a829d7197c307badbbe2f05d6e7aed85ed63badd800b89534b33b38de"}, + {file = "cvxpy-1.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:443313eca702750a7a2878e841de23cc5111085f4069e842d027ebc5c98c10ac"}, + {file = "cvxpy-1.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ae3d4ec202dc446206d8c6eae83353827842dc0e232f4e4f0d588fb2d59705a"}, + {file = "cvxpy-1.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8ee4d0d1ecb2e09e41a31192ea103c7c1f626204925fb7f6590d11471cb357"}, + {file = "cvxpy-1.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeb6f60608d4716ced43105cbeb0df2a787583f51bfbf9465fea5c435f8456ca"}, + {file = "cvxpy-1.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:243d0315140a7572cd4ec2e9bf13c1e407627d78dc5f9491abfa9adc64569268"}, + {file = "cvxpy-1.4.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:69ee039b43e425ffc0cb5581c2befee571bee2b007d5a119fa17695f908d861e"}, + {file = "cvxpy-1.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:502c590099a4faeee28247a3d139d618a94ec6d2986dc7cc0db2ac614660ddc5"}, + {file = "cvxpy-1.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57a803bb786ab43da0c0a4fbbb0b2438fd13a4b38b68f8f16474a214a78b0823"}, + {file = "cvxpy-1.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331cc160e66b7271b734b8ad0b65456d32445e00c397c35b7f2b105091ecfa84"}, + {file = "cvxpy-1.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:4b4d46fd521b755a6abd57384b2355db28d7165a6d90118278ebd7553e4ba70b"}, + {file = "cvxpy-1.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:80dde991c27d4e3b91597a00b85d460a9db03b484ba6a3b940647e324ad30110"}, + {file = "cvxpy-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:06091d3278c65ef996306b5a85a7848055331ef390262f2cf354811f43ddea68"}, + {file = "cvxpy-1.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e16bf04f75266c61ee469a0a3b1364c1e1e87d47dc47fedcdc43435c74dd97f3"}, + {file = "cvxpy-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14882db05fa36cab94262b7e9574c43f87301ab025daefdabaa7659f2623e731"}, + {file = "cvxpy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:f094da24c46e6b0b936369463d483755eafbb13fd6a8d8d1ca962987d02eb014"}, + {file = "cvxpy-1.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b8d652877989ddc28099a367fb7a4bb771d54895e3e1167c835ee3f91606bd13"}, + {file = "cvxpy-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25d3ac5953effaa5c72ab8d261dbe94d8a1947de0324a7e30053ef3b0cee853e"}, + {file = "cvxpy-1.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d612c7bdff73a730c11d6094540705ca9c8312d9ebb6af75c09337123dd66b2"}, + {file = "cvxpy-1.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1475fd4c4778067d5ec03b35fe714d6a4074e1e213262a8bddbd9b638e004419"}, + {file = "cvxpy-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:8d30081ef5e906cc6352fc6760f462a6dfcb5150a5a26e21da942b6ae0759293"}, + {file = "cvxpy-1.4.3.tar.gz", hash = "sha256:b1b078c8c05923ad128e7d814b0be1c337ac05262a78b757a8e6f957648ad953"}, ] [package.dependencies] +clarabel = ">=0.5.0" ecos = ">=2" numpy = ">=1.15" -osqp = ">=0.4.1" +osqp = ">=0.6.2" +pybind11 = "*" scipy = ">=1.1.0" -scs = ">=1.1.6" +scs = ">=3.0" + +[package.extras] +cbc = ["cylp (>=0.91.5)"] +clarabel = ["clarabel"] +cvxopt = ["cvxopt"] +diffcp = ["diffcp"] +glop = ["ortools (>=9.5,<9.8)"] +glpk = ["cvxopt"] +glpk-mi = ["cvxopt"] +gurobi = ["gurobipy"] +highs = ["scipy (>=1.6.1)"] +mosek = ["Mosek"] +pdlp = ["ortools (>=9.5,<9.8)"] +piqp = ["piqp"] +proxqp = ["proxsuite"] +scip = ["PySCIPOpt"] +scipy = ["scipy"] +scs = ["setuptools (>65.5.1)"] +xpress = ["xpress"] [[package]] name = "cycler" -version = "0.11.0" +version = "0.12.1" description = "Composable style cycles" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, ] +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "cython" -version = "3.0.0" +version = "3.0.10" description = "The Cython compiler for writing C extensions in the Python language." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Cython-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c7d728e1a49ad01d41181e3a9ea80b8d14e825f4679e4dd837cbf7bca7998a5"}, - {file = "Cython-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:626a4a6ef4b7ced87c348ea805488e4bd39dad9d0b39659aa9e1040b62bbfedf"}, - {file = "Cython-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33c900d1ca9f622b969ac7d8fc44bdae140a4a6c7d8819413b51f3ccd0586a09"}, - {file = "Cython-3.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a65bc50dc1bc2faeafd9425defbdef6a468974f5c4192497ff7f14adccfdcd32"}, - {file = "Cython-3.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b71b399b10b038b056ad12dce1e317a8aa7a96e99de7e4fa2fa5d1c9415cfb9"}, - {file = "Cython-3.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f42f304c097cc53e9eb5f1a1d150380353d5018a3191f1b77f0de353c762181e"}, - {file = "Cython-3.0.0-cp310-cp310-win32.whl", hash = "sha256:3e234e2549e808d9259fdb23ebcfd145be30c638c65118326ec33a8d29248dc2"}, - {file = "Cython-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:829c8333195100448a23863cf64a07e1334fae6a275aefe871458937911531b6"}, - {file = "Cython-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06db81b1a01858fcc406616f8528e686ffb6cf7c3d78fb83767832bfecea8ad8"}, - {file = "Cython-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c93634845238645ce7abf63a56b1c5b6248189005c7caff898fd4a0dac1c5e1e"}, - {file = "Cython-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa606675c6bd23478b1d174e2a84e3c5a2c660968f97dc455afe0fae198f9d3d"}, - {file = "Cython-3.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3355e6f690184f984eeb108b0f5bbc4bcf8b9444f8168933acf79603abf7baf"}, - {file = "Cython-3.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:93a34e1ca8afa4b7075b02ed14a7e4969256297029fb1bfd4cbe48f7290dbcff"}, - {file = "Cython-3.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb1165ca9e78823f9ad1efa5b3d83156f868eabd679a615d140a3021bb92cd65"}, - {file = "Cython-3.0.0-cp311-cp311-win32.whl", hash = "sha256:2fadde1da055944f5e1e17625055f54ddd11f451889110278ef30e07bd5e1695"}, - {file = "Cython-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:254ed1f03a6c237fa64f0c6e44862058de65bfa2e6a3b48ca3c205492e0653aa"}, - {file = "Cython-3.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4e212237b7531759befb92699c452cd65074a78051ae4ee36ff8b237395ecf3d"}, - {file = "Cython-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f29307463eba53747b31f71394ed087e3e3e264dcc433e62de1d51f5c0c966c"}, - {file = "Cython-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53328a8af0806bebbdb48a4191883b11ee9d9dfb084d84f58fa5a8ab58baefc9"}, - {file = "Cython-3.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5962e70b15e863e72bed6910e8c6ffef77d36cc98e2b31c474378f3b9e49b0e3"}, - {file = "Cython-3.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9e69139f4e60ab14c50767a568612ea64d6907e9c8e0289590a170eb495e005f"}, - {file = "Cython-3.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c40bdbcb2286f0aeeb5df9ce53d45da2d2a9b36a16b331cd0809d212d22a8fc7"}, - {file = "Cython-3.0.0-cp312-cp312-win32.whl", hash = "sha256:8abb8915eb2e57fa53d918afe641c05d1bcc6ed1913682ec1f28de71f4e3f398"}, - {file = "Cython-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:30a4bd2481e59bd7ab2539f835b78edc19fc455811e476916f56026b93afd28b"}, - {file = "Cython-3.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0e1e4b7e4bfbf22fecfa5b852f0e499c442d4853b7ebd33ae37cdec9826ed5d8"}, - {file = "Cython-3.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b00df42cdd1a285a64491ba23de08ab14169d3257c840428d40eb7e8e9979af"}, - {file = "Cython-3.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:650d03ddddc08b051b4659778733f0f173ca7d327415755c05d265a6c1ba02fb"}, - {file = "Cython-3.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4965f2ebade17166f21a508d66dd60d2a0b3a3b90abe3f72003baa17ae020dd6"}, - {file = "Cython-3.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4123c8d03167803df31da6b39de167cb9c04ac0aa4e35d4e5aa9d08ad511b84d"}, - {file = "Cython-3.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:296c53b6c0030cf82987eef163444e8d7631cc139d995f9d58679d9fd1ddbf31"}, - {file = "Cython-3.0.0-cp36-cp36m-win32.whl", hash = "sha256:0d2c1e172f1c81bafcca703093608e10dc16e3e2d24c5644c17606c7fdb1792c"}, - {file = "Cython-3.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:bc816d8eb3686d6f8d165f4156bac18c1147e1035dc28a76742d0b7fb5b7c032"}, - {file = "Cython-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8d86651347bbdbac1aca1824696c5e4c0a3b162946c422edcca2be12a03744d1"}, - {file = "Cython-3.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84176bd04ce9f3cc8799b47ec6d1959fa1ea5e71424507df7bbf0b0915bbedef"}, - {file = "Cython-3.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35abcf07b8277ec95bbe49a07b5c8760a2d941942ccfe759a94c8d2fe5602e9f"}, - {file = "Cython-3.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a44d6b9a29b2bff38bb648577b2fcf6a68cf8b1783eee89c2eb749f69494b98d"}, - {file = "Cython-3.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4dc6bbe7cf079db37f1ebb9b0f10d0d7f29e293bb8688e92d50b5ea7a91d82f3"}, - {file = "Cython-3.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e28763e75e380b8be62b02266a7995a781997c97c119efbdccb8fb954bcd7574"}, - {file = "Cython-3.0.0-cp37-cp37m-win32.whl", hash = "sha256:edae615cb4af51d5173e76ba9aea212424d025c57012e9cdf2f131f774c5ba71"}, - {file = "Cython-3.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:20c604e974832aaf8b7a1f5455ee7274b34df62a35ee095cd7d2ed7e818e6c53"}, - {file = "Cython-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c85fd2b1cbd9400d60ebe074795bb9a9188752f1612be3b35b0831a24879b91f"}, - {file = "Cython-3.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:090256c687106932339f87f888b95f0d69c617bc9b18801555545b695d29d8ab"}, - {file = "Cython-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cec2a67a0a7d9d4399758c0657ca03e5912e37218859cfbf046242cc532bfb3b"}, - {file = "Cython-3.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1cdd01ce45333bc264a218c6e183700d6b998f029233f586a53c9b13455c2d2"}, - {file = "Cython-3.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecee663d2d50ca939fc5db81f2f8a219c2417b4651ad84254c50a03a9cb1aadd"}, - {file = "Cython-3.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:30f10e79393b411af7677c270ea69807acb9fc30205c8ff25561f4deef780ec1"}, - {file = "Cython-3.0.0-cp38-cp38-win32.whl", hash = "sha256:609777d3a7a0a23b225e84d967af4ad2485c8bdfcacef8037cf197e87d431ca0"}, - {file = "Cython-3.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:7f4a6dfd42ae0a45797f50fc4f6add702abf46ab3e7cd61811a6c6a97a40e1a2"}, - {file = "Cython-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2d8158277c8942c0b20ff4c074fe6a51c5b89e6ac60cef606818de8c92773596"}, - {file = "Cython-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54e34f99b2a8c1e11478541b2822e6408c132b98b6b8f5ed89411e5e906631ea"}, - {file = "Cython-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877d1c8745df59dd2061a0636c602729e9533ba13f13aa73a498f68662e1cbde"}, - {file = "Cython-3.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204690be60f0ff32eb70b04f28ef0d1e50ffd7b3f77ba06a7dc2389ee3b848e0"}, - {file = "Cython-3.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:06fcb4628ccce2ba5abc8630adbeaf4016f63a359b4c6c3827b2d80e0673981c"}, - {file = "Cython-3.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:090e24cfa31c926d0b13d8bb2ef48175acdd061ae1413343c94a2b12a4a4fa6f"}, - {file = "Cython-3.0.0-cp39-cp39-win32.whl", hash = "sha256:4cd00f2158dc00f7f93a92444d0f663eda124c9c29bbbd658964f4e89c357fe8"}, - {file = "Cython-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:5b4cc896d49ce2bae8d6a030f9a4c64965b59c38acfbf4617685e17f7fcf1731"}, - {file = "Cython-3.0.0-py2.py3-none-any.whl", hash = "sha256:ff1aef1a03cfe293237c7a86ae9625b0411b2df30c53d1a7f29a8d381f38a1df"}, - {file = "Cython-3.0.0.tar.gz", hash = "sha256:350b18f9673e63101dbbfcf774ee2f57c20ac4636d255741d76ca79016b1bd82"}, -] - -[[package]] -name = "dash" -version = "2.9.3" -description = "A Python framework for building reactive web-apps. Developed by Plotly." -optional = true -python-versions = ">=3.6" -files = [ - {file = "dash-2.9.3-py3-none-any.whl", hash = "sha256:a749ae1ea9de3fe7b785353a818ec9b629d39c6b7e02462954203bd1e296fd0e"}, - {file = "dash-2.9.3.tar.gz", hash = "sha256:47392f8d6455dc989a697407eb5941f3bad80604df985ab1ac9d4244568ffb34"}, -] - -[package.dependencies] -dash-core-components = "2.0.0" -dash-html-components = "2.0.0" -dash-table = "5.0.0" -Flask = ">=1.0.4" -plotly = ">=5.0.0" - -[package.extras] -celery = ["celery[redis] (>=5.1.2)", "importlib-metadata (<5)", "redis (>=3.5.3)"] -ci = ["black (==21.6b0)", "black (==22.3.0)", "dash-dangerously-set-inner-html", "dash-flow-example (==0.0.5)", "flake8 (==3.9.2)", "flaky (==3.7.0)", "flask-talisman (==1.0.0)", "isort (==4.3.21)", "mimesis", "mock (==4.0.3)", "numpy", "openpyxl", "orjson (==3.5.4)", "orjson (==3.6.7)", "pandas (==1.1.5)", "pandas (>=1.4.0)", "preconditions", "pyarrow", "pyarrow (<3)", "pylint (==2.13.5)", "pytest-mock", "pytest-rerunfailures", "pytest-sugar (==0.9.6)", "xlrd (<2)", "xlrd (>=2.0.1)"] -compress = ["flask-compress"] -dev = ["PyYAML (>=5.4.1)", "coloredlogs (>=15.0.1)", "fire (>=0.4.0)"] -diskcache = ["diskcache (>=5.2.1)", "multiprocess (>=0.70.12)", "psutil (>=5.8.0)"] -testing = ["beautifulsoup4 (>=4.8.2)", "cryptography (<3.4)", "dash-testing-stub (>=0.0.2)", "lxml (>=4.6.2)", "multiprocess (>=0.70.12)", "percy (>=2.0.2)", "psutil (>=5.8.0)", "pytest (>=6.0.2)", "requests[security] (>=2.21.0)", "selenium (>=3.141.0,<=4.2.0)", "waitress (>=1.4.4)"] - -[[package]] -name = "dash-core-components" -version = "2.0.0" -description = "Core component suite for Dash" -optional = true -python-versions = "*" -files = [ - {file = "dash_core_components-2.0.0-py3-none-any.whl", hash = "sha256:52b8e8cce13b18d0802ee3acbc5e888cb1248a04968f962d63d070400af2e346"}, - {file = "dash_core_components-2.0.0.tar.gz", hash = "sha256:c6733874af975e552f95a1398a16c2ee7df14ce43fa60bb3718a3c6e0b63ffee"}, -] - -[[package]] -name = "dash-html-components" -version = "2.0.0" -description = "Vanilla HTML components for Dash" -optional = true -python-versions = "*" -files = [ - {file = "dash_html_components-2.0.0-py3-none-any.whl", hash = "sha256:b42cc903713c9706af03b3f2548bda4be7307a7cf89b7d6eae3da872717d1b63"}, - {file = "dash_html_components-2.0.0.tar.gz", hash = "sha256:8703a601080f02619a6390998e0b3da4a5daabe97a1fd7a9cebc09d015f26e50"}, -] - -[[package]] -name = "dash-table" -version = "5.0.0" -description = "Dash table" -optional = true -python-versions = "*" -files = [ - {file = "dash_table-5.0.0-py3-none-any.whl", hash = "sha256:19036fa352bb1c11baf38068ec62d172f0515f73ca3276c79dee49b95ddc16c9"}, - {file = "dash_table-5.0.0.tar.gz", hash = "sha256:18624d693d4c8ef2ddec99a6f167593437a7ea0bf153aa20f318c170c5bc7308"}, + {file = "Cython-3.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e876272548d73583e90babda94c1299537006cad7a34e515a06c51b41f8657aa"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adc377aa33c3309191e617bf675fdbb51ca727acb9dc1aa23fc698d8121f7e23"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:401aba1869a57aba2922ccb656a6320447e55ace42709b504c2f8e8b166f46e1"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:541fbe725d6534a90b93f8c577eb70924d664b227a4631b90a6e0506d1469591"}, + {file = "Cython-3.0.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:86998b01f6a6d48398df8467292c7637e57f7e3a2ca68655367f13f66fed7734"}, + {file = "Cython-3.0.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d092c0ddba7e9e530a5c5be4ac06db8360258acc27675d1fc86294a5dc8994c5"}, + {file = "Cython-3.0.10-cp310-cp310-win32.whl", hash = "sha256:3cffb666e649dba23810732497442fb339ee67ba4e0be1f0579991e83fcc2436"}, + {file = "Cython-3.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:9ea31184c7b3a728ef1f81fccb161d8948c05aa86c79f63b74fb6f3ddec860ec"}, + {file = "Cython-3.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:051069638abfb076900b0c2bcb6facf545655b3f429e80dd14365192074af5a4"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712760879600907189c7d0d346851525545484e13cd8b787e94bfd293da8ccf0"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38d40fa1324ac47c04483d151f5e092406a147eac88a18aec789cf01c089c3f2"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bd49a3a9fdff65446a3e1c2bfc0ec85c6ce4c3cad27cd4ad7ba150a62b7fb59"}, + {file = "Cython-3.0.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e8df79b596633b8295eaa48b1157d796775c2bb078f32267d32f3001b687f2fd"}, + {file = "Cython-3.0.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bcc9795990e525c192bc5c0775e441d7d56d7a7d02210451e9e13c0448dba51b"}, + {file = "Cython-3.0.10-cp311-cp311-win32.whl", hash = "sha256:09f2000041db482cad3bfce94e1fa3a4c82b0e57390a164c02566cbbda8c4f12"}, + {file = "Cython-3.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:3919a55ec9b6c7db6f68a004c21c05ed540c40dbe459ced5d801d5a1f326a053"}, + {file = "Cython-3.0.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8f2864ab5fcd27a346f0b50f901ebeb8f60b25a60a575ccfd982e7f3e9674914"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:407840c56385b9c085826fe300213e0e76ba15d1d47daf4b58569078ecb94446"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a036d00caa73550a3a976432ef21c1e3fa12637e1616aab32caded35331ae96"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cc6a0e7e23a96dec3f3c9d39690d4281beabd5297855140d0d30855f950275e"}, + {file = "Cython-3.0.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a5e14a8c6a8157d2b0cdc2e8e3444905d20a0e78e19d2a097e89fb8b04b51f6b"}, + {file = "Cython-3.0.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f8a2b8fa0fd8358bccb5f3304be563c4750aae175100463d212d5ea0ec74cbe0"}, + {file = "Cython-3.0.10-cp312-cp312-win32.whl", hash = "sha256:2d29e617fd23cf4b83afe8f93f2966566c9f565918ad1e86a4502fe825cc0a79"}, + {file = "Cython-3.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:6c5af936940a38c300977b81598d9c0901158f220a58c177820e17e1774f1cf1"}, + {file = "Cython-3.0.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:5f465443917d5c0f69825fca3b52b64c74ac3de0143b1fff6db8ba5b48c9fb4a"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fadb84193c25641973666e583df8df4e27c52cdc05ddce7c6f6510d690ba34a"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fa9e7786083b6aa61594c16979d621b62e61fcd9c2edd4761641b95c7fb34b2"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4780d0f98ce28191c4d841c4358b5d5e79d96520650910cd59904123821c52d"}, + {file = "Cython-3.0.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:32fbad02d1189be75eb96456d9c73f5548078e5338d8fa153ecb0115b6ee279f"}, + {file = "Cython-3.0.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:90e2f514fc753b55245351305a399463103ec18666150bb1c36779b9862388e9"}, + {file = "Cython-3.0.10-cp36-cp36m-win32.whl", hash = "sha256:a9c976e9ec429539a4367cb4b24d15a1e46b925976f4341143f49f5f161171f5"}, + {file = "Cython-3.0.10-cp36-cp36m-win_amd64.whl", hash = "sha256:a9bb402674788a7f4061aeef8057632ec440123e74ed0fb425308a59afdfa10e"}, + {file = "Cython-3.0.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:206e803598010ecc3813db8748ed685f7beeca6c413f982df9f8a505fce56563"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15b6d397f4ee5ad54e373589522af37935a32863f1b23fa8c6922adf833e28e2"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a181144c2f893ed8e6a994d43d0b96300bc99873f21e3b7334ca26c61c37b680"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b74b700d6a793113d03fb54b63bdbadba6365379424bac7c0470605672769260"}, + {file = "Cython-3.0.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:076e9fd4e0ca33c5fa00a7479180dbfb62f17fe928e2909f82da814536e96d2b"}, + {file = "Cython-3.0.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:269f06e6961e8591d56e30b46e1a51b6ccb42cab04c29fa3b30d3e8723485fb4"}, + {file = "Cython-3.0.10-cp37-cp37m-win32.whl", hash = "sha256:d4e83a8ceff7af60064da4ccfce0ac82372544dd5392f1b350c34f1b04d0fae6"}, + {file = "Cython-3.0.10-cp37-cp37m-win_amd64.whl", hash = "sha256:40fac59c3a7fbcd9c25aea64c342c890a5e2270ce64a1525e840807800167799"}, + {file = "Cython-3.0.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f43a58bf2434870d2fc42ac2e9ff8138c9e00c6251468de279d93fa279e9ba3b"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e9a885ec63d3955a08cefc4eec39fefa9fe14989c6e5e2382bd4aeb6bdb9bc3"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acfbe0fff364d54906058fc61f2393f38cd7fa07d344d80923937b87e339adcf"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8adcde00a8a88fab27509b558cd8c2959ab0c70c65d3814cfea8c68b83fa6dcd"}, + {file = "Cython-3.0.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2c9c1e3e78909488f3b16fabae02308423fa6369ed96ab1e250807d344cfffd7"}, + {file = "Cython-3.0.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc6e0faf5b57523b073f0cdefadcaef3a51235d519a0594865925cadb3aeadf0"}, + {file = "Cython-3.0.10-cp38-cp38-win32.whl", hash = "sha256:35f6ede7c74024ed1982832ae61c9fad7cf60cc3f5b8c6a63bb34e38bc291936"}, + {file = "Cython-3.0.10-cp38-cp38-win_amd64.whl", hash = "sha256:950c0c7b770d2a7cec74fb6f5ccc321d0b51d151f48c075c0d0db635a60ba1b5"}, + {file = "Cython-3.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:077b61ee789e48700e25d4a16daa4258b8e65167136e457174df400cf9b4feab"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f1f8bba9d8f37c0cffc934792b4ac7c42d0891077127c11deebe9fa0a0f7e4"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:651a15a8534ebfb9b58cb0b87c269c70984b6f9c88bfe65e4f635f0e3f07dfcd"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d10fc9aa82e5e53a0b7fd118f9771199cddac8feb4a6d8350b7d4109085aa775"}, + {file = "Cython-3.0.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f610964ab252a83e573a427e28b103e2f1dd3c23bee54f32319f9e73c3c5499"}, + {file = "Cython-3.0.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c9c4c4f3ab8f8c02817b0e16e8fa7b8cc880f76e9b63fe9c010e60c1a6c2b13"}, + {file = "Cython-3.0.10-cp39-cp39-win32.whl", hash = "sha256:0bac3ccdd4e03924028220c62ae3529e17efa8ca7e9df9330de95de02f582b26"}, + {file = "Cython-3.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:81f356c1c8c0885b8435bfc468025f545c5d764aa9c75ab662616dd1193c331e"}, + {file = "Cython-3.0.10-py2.py3-none-any.whl", hash = "sha256:fcbb679c0b43514d591577fd0d20021c55c240ca9ccafbdb82d3fb95e5edfee2"}, + {file = "Cython-3.0.10.tar.gz", hash = "sha256:dcc96739331fb854dcf503f94607576cfe8488066c61ca50dfd55836f132de99"}, ] [[package]] name = "dateparser" -version = "1.1.8" +version = "1.2.0" description = "Date parsing library designed to parse dates from HTML pages" optional = false python-versions = ">=3.7" files = [ - {file = "dateparser-1.1.8-py2.py3-none-any.whl", hash = "sha256:070b29b5bbf4b1ec2cd51c96ea040dc68a614de703910a91ad1abba18f9f379f"}, - {file = "dateparser-1.1.8.tar.gz", hash = "sha256:86b8b7517efcc558f085a142cdb7620f0921543fcabdb538c8a4c4001d8178e3"}, + {file = "dateparser-1.2.0-py2.py3-none-any.whl", hash = "sha256:0b21ad96534e562920a0083e97fd45fa959882d4162acc358705144520a35830"}, + {file = "dateparser-1.2.0.tar.gz", hash = "sha256:7975b43a4222283e0ae15be7b4999d08c9a70e2d378ac87385b1ccf2cffbbb30"}, ] [package.dependencies] @@ -1768,13 +1791,13 @@ langdetect = ["langdetect"] [[package]] name = "datetime" -version = "5.2" +version = "5.5" description = "This package provides a DateTime data type, as known from Zope. Unless you need to communicate with Zope APIs, you're probably better off using Python's built-in datetime module." optional = false python-versions = ">=3.7" files = [ - {file = "DateTime-5.2-py3-none-any.whl", hash = "sha256:25250fb36f7184dad805faaf3f012e0b36f353cd97518e8f232babef5c53596e"}, - {file = "DateTime-5.2.tar.gz", hash = "sha256:63194d2184de10e0b41e76596ba6538bd1d89db6f7b3c182789c75b0ac5c6697"}, + {file = "DateTime-5.5-py3-none-any.whl", hash = "sha256:0abf6c51cb4ba7cee775ca46ccc727f3afdde463be28dbbe8803631fefd4a120"}, + {file = "DateTime-5.5.tar.gz", hash = "sha256:21ec6331f87a7fcb57bd7c59e8a68bfffe6fcbf5acdbbc7b356d6a9a020191d3"}, ] [package.dependencies] @@ -1783,29 +1806,33 @@ pytz = "*" [[package]] name = "debugpy" -version = "1.6.7" +version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, + {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, + {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"}, + {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"}, + {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"}, + {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"}, + {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"}, + {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"}, + {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"}, + {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"}, + {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"}, + {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"}, + {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"}, + {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"}, + {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"}, + {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"}, + {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"}, + {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"}, + {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"}, + {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"}, + {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"}, + {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"}, ] [[package]] @@ -1843,51 +1870,49 @@ files = [ [[package]] name = "dill" -version = "0.3.6" -description = "serialize all of python" +version = "0.3.8" +description = "serialize all of Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "distlib" -version = "0.3.7" +version = "0.3.8" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] [[package]] name = "dnspython" -version = "2.4.0" +version = "2.6.1" description = "DNS toolkit" optional = false -python-versions = ">=3.8,<4.0" +python-versions = ">=3.8" files = [ - {file = "dnspython-2.4.0-py3-none-any.whl", hash = "sha256:46b4052a55b56beea3a3bdd7b30295c292bd6827dd442348bc116f2d35b17f0a"}, - {file = "dnspython-2.4.0.tar.gz", hash = "sha256:758e691dbb454d5ccf4e1b154a19e52847f79e21a42fef17b969144af29a4e6c"}, + {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, + {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, ] -[package.dependencies] -httpcore = {version = ">=0.17.3", markers = "python_version >= \"3.8\""} -sniffio = ">=1.1,<2.0" - [package.extras] -dnssec = ["cryptography (>=2.6,<42.0)"] -doh = ["h2 (>=4.1.0)", "httpx (>=0.24.1)"] -doq = ["aioquic (>=0.9.20)"] -idna = ["idna (>=2.1,<4.0)"] -trio = ["trio (>=0.14,<0.23)"] -wmi = ["wmi (>=1.5.1,<2.0.0)"] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=41)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=0.9.25)"] +idna = ["idna (>=3.6)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] [[package]] name = "docstring-parser" @@ -1902,13 +1927,13 @@ files = [ [[package]] name = "docstring-to-markdown" -version = "0.12" +version = "0.15" description = "On the fly conversion of Python docstrings to markdown" optional = true python-versions = ">=3.6" files = [ - {file = "docstring-to-markdown-0.12.tar.gz", hash = "sha256:40004224b412bd6f64c0f3b85bb357a41341afd66c4b4896709efa56827fb2bb"}, - {file = "docstring_to_markdown-0.12-py3-none-any.whl", hash = "sha256:7df6311a887dccf9e770f51242ec002b19f0591994c4783be49d24cdc1df3737"}, + {file = "docstring-to-markdown-0.15.tar.gz", hash = "sha256:e146114d9c50c181b1d25505054a8d0f7a476837f0da2c19f07e06eaed52b73d"}, + {file = "docstring_to_markdown-0.15-py3-none-any.whl", hash = "sha256:27afb3faedba81e34c33521c32bbd258d7fbb79eedf7d29bc4e81080e854aec0"}, ] [[package]] @@ -1924,13 +1949,13 @@ files = [ [[package]] name = "ecdsa" -version = "0.18.0" +version = "0.19.0" description = "ECDSA cryptographic signature library (pure python)" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.6" files = [ - {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, - {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, + {file = "ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a"}, + {file = "ecdsa-0.19.0.tar.gz", hash = "sha256:60eaad1199659900dd0af521ed462b793bbdf867432b3948e87416ae4caf6bf8"}, ] [package.dependencies] @@ -1942,27 +1967,30 @@ gmpy2 = ["gmpy2"] [[package]] name = "ecos" -version = "2.0.12" +version = "2.0.13" description = "This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information." optional = true python-versions = "*" files = [ - {file = "ecos-2.0.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:835298a299c88c207b3402fba60ad9b5688b59bbbf2ac34a46de5b37165d773a"}, - {file = "ecos-2.0.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608bc822ee8e070927ab3519169b13a1a0fe88f3d562212d6b5dbb1039776360"}, - {file = "ecos-2.0.12-cp310-cp310-win_amd64.whl", hash = "sha256:5184a9d8521ad1af90ffcd9902a6fa75c7bc473f37d30d86f97beda1033dfca2"}, - {file = "ecos-2.0.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eba07599084724eedc20b2862d5580eebebb09609f4740baadc78401cb99827c"}, - {file = "ecos-2.0.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4979dc2d1cb6667e371a45a61887068505c1305437eef104ed6ef16f4b6aa0e3"}, - {file = "ecos-2.0.12-cp311-cp311-win_amd64.whl", hash = "sha256:da8fbbca3feb83a9e27075d29b3765417d0c80af8ea83cbdc4a558cae7b564af"}, - {file = "ecos-2.0.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f70e4547966f530fd7715756f7a65d5b9b90b312b9d37f243ef9356c05e7d74c"}, - {file = "ecos-2.0.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:617be25d74222849622b0f82b94a11abcf1fae78ccaf69977b328321ee6ffa0b"}, - {file = "ecos-2.0.12-cp37-cp37m-win_amd64.whl", hash = "sha256:29d00164eaea66ed54697a3b361c575284a8bca54f2623381a0635806c7303a7"}, - {file = "ecos-2.0.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4e86671397d1d2cd7cccff8a9c45be0541b0c60af8b92a0ff3581c9ed869db67"}, - {file = "ecos-2.0.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:858a4dd3177bdc8cc6e362031732f5177b62138a1e4ef91c0dc3c6bd7d2d1248"}, - {file = "ecos-2.0.12-cp38-cp38-win_amd64.whl", hash = "sha256:528b02f53835bd1baeb2e23f8153b8d6cc2b3704e1768be6a1a972f542241670"}, - {file = "ecos-2.0.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e42bd4c19af6e04f76ccc85d941b1f1adc7faeee4d06d482395a6beb7bec895"}, - {file = "ecos-2.0.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6def54336a15b5a49bc3bfcaa36035e8557cae8a4853b17ca84f5a29c93bcaea"}, - {file = "ecos-2.0.12-cp39-cp39-win_amd64.whl", hash = "sha256:7af08941552fce108bd80145cdb6be7fa74477a20bacdac170800442cc7027d4"}, - {file = "ecos-2.0.12.tar.gz", hash = "sha256:f48816d73b87ae325556ea537b7c8743187311403c80e3832035224156337c4e"}, + {file = "ecos-2.0.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1c1acf33b70f8657c25f07ec8d7b59bb01dbad39f072fa61fc956c2166ed979"}, + {file = "ecos-2.0.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ea88ee2c94192004d6be9c55a3c79f184eaba3bbf31474229045a1b0a8a1536"}, + {file = "ecos-2.0.13-cp310-cp310-win_amd64.whl", hash = "sha256:df8ae7fce79be9e5f79f0511c51a4824795de5154847fabe1a0288bc2ea349d3"}, + {file = "ecos-2.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88dd628bc6e77a069165fa5f50340e2856795c28e00e3fce213a04d7c41c584a"}, + {file = "ecos-2.0.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2c969c7e22fd8a1d1cd0a90f4325d90572da23e2e923b0da6138ce62503d0"}, + {file = "ecos-2.0.13-cp311-cp311-win_amd64.whl", hash = "sha256:936890fb85a186360a5c8f228dd19acb760e234b38c598d0b46ab29644e31dfc"}, + {file = "ecos-2.0.13-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62ed497ab56017f1d7264eb56223826a984462b1d84fb850d10f0bec3490877d"}, + {file = "ecos-2.0.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf2b1384012bee9e58e5a2373905d3644f74a0ea000b307a239366fe7850c29c"}, + {file = "ecos-2.0.13-cp312-cp312-win_amd64.whl", hash = "sha256:2c1ea09069e32185912506f946bb6d1f144841ba1d1cd0217c67f72cbdf7a8fd"}, + {file = "ecos-2.0.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9f4a76a3e1165359e1704ec6b1b89d487858ec0d838d62a7268133d88221914"}, + {file = "ecos-2.0.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c2d4e0d3ada1a619ddd62fbf48ccbe9b738fdbef119945fe2a05566d03b85a"}, + {file = "ecos-2.0.13-cp37-cp37m-win_amd64.whl", hash = "sha256:84c72e1e5ffa41cd38352dcf0a8c25418f5bf04ed76a576db0daaf9a69f5568f"}, + {file = "ecos-2.0.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1979f1f17ec7f1a0fc45964d02d762393f9f427d965fe8a893e7b1476a9023c3"}, + {file = "ecos-2.0.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:059e6c29c89f47a490353e4f9336e96350a5102a97e1d8a2aaff796bcbe50058"}, + {file = "ecos-2.0.13-cp38-cp38-win_amd64.whl", hash = "sha256:30c7d0cce6c830da5b9ea25af0d47b203255639524eb4d03d1331c600958c834"}, + {file = "ecos-2.0.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42c15f1d79eb2ada532e9781b4aeb3ed84b1c7e38239ba4d6502c6a092d5b1"}, + {file = "ecos-2.0.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32fb33185f6dd94a1c798bc481eb86c9f4e832efec91f6ab0584e2fc26fd375e"}, + {file = "ecos-2.0.13-cp39-cp39-win_amd64.whl", hash = "sha256:68995ab12d363576dddb2d1f91ead3b9c8a8ca61f29000f0b1daef1b4e7b5b64"}, + {file = "ecos-2.0.13.tar.gz", hash = "sha256:f2a9dc108ade7faf6f6f4fad245f4714b7293c8767d2a351ead59428a94a98b9"}, ] [package.dependencies] @@ -1982,89 +2010,94 @@ files = [ [[package]] name = "ephem" -version = "4.1.4" +version = "4.1.5" description = "Compute positions of the planets and stars" optional = true python-versions = "*" files = [ - {file = "ephem-4.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:024752ae7074c660630046929e12650cc6e72e1c11b7554ccefbe16f8ce3c48d"}, - {file = "ephem-4.1.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:158bf9fb2b58cb77c606687c9ad35dc82903ed00617a12c93dd2d89a65d6374d"}, - {file = "ephem-4.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11be09d245e77457e87988a4fdc811bdc6c5f1daaa73fb24289b220db720831d"}, - {file = "ephem-4.1.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:649bd2c85f5fc450136dacc0416af7127a07c0b2ce84bfdc89c1bc78129216a3"}, - {file = "ephem-4.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6918b012365791b786ed0f30e8ea3941cbc49486dcf6c28d151f119c62d5be8"}, - {file = "ephem-4.1.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d343e9ca26f04a05b01fcaaf800224da5d15ad76902d7dc452c216e448293893"}, - {file = "ephem-4.1.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d0403738f59aefe81ee5b0219cd909f2a05b03b7da465f9b233da57d3dea0de6"}, - {file = "ephem-4.1.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d61f38f35c25049ca2b95aa4e12e952e5ef56b31eac4a9d6d4e24aacf9373101"}, - {file = "ephem-4.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4039aa2f0b8c204283fc478551d8b29c9473137ad8a910a5ff60ae3be6593c7b"}, - {file = "ephem-4.1.4-cp310-cp310-win32.whl", hash = "sha256:8979429643ac4e29a5496321c9c41a20cd7a6a530aee9865c7fab0008450ef28"}, - {file = "ephem-4.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:589a2235f49232b92ee0247923360a264086a57b2c39d4191348f95ba5ce0c3d"}, - {file = "ephem-4.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feab5f68ae9fa622d6316790c9cfc399e8b78f7958a61da4edf2cb5e0e675d44"}, - {file = "ephem-4.1.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df9c482c8d25e69271311606b4de0e177e44ceb11781c7ebacf17cc5b391f832"}, - {file = "ephem-4.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cceea883856817f3ea3f73442e3be3a4a56558cdb77cc85d02db4429ce5ab16"}, - {file = "ephem-4.1.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f3e9ea626bc522fd4dd1ff795f0922fcb4c4eb57effe91b6284411166ddd1fd7"}, - {file = "ephem-4.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad22e769bd35415cad8f2ef6d4d875190d9bdad4fed2842fd19dac6f1ccb9dd"}, - {file = "ephem-4.1.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3327218495235ec215ffe43253c0bf3fa982f59504b351c53b024f1c7b63752"}, - {file = "ephem-4.1.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d2c56238a1aec72a78ad7061f5c531df97a66ea0cca45204b6b8141c3bb1540e"}, - {file = "ephem-4.1.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fffe176bd94f4f61be5a54b54a966988cceb6ba69a6ed729aab166020fdb37c3"}, - {file = "ephem-4.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8f9b27117e7a82f7f70db9cb23b5cc36d37b166a2f73c55e14d7225d0ab95afa"}, - {file = "ephem-4.1.4-cp311-cp311-win32.whl", hash = "sha256:9bb21c0b117c9122c0141b0a71ee6fbbb087ed2aab4a7ab60f009e95e9f4a521"}, - {file = "ephem-4.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:55d7fb5c34b2e453e01fa4ca7ee375b19b438c9401ae8c4099ae4a3a37656972"}, - {file = "ephem-4.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f9e24aeea560dfcece3c2e313eb94e6be3e84888091455e541fa88f3a44da584"}, - {file = "ephem-4.1.4-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:653d99386932e5f78bb9cfc4495030ad9f3345eb4c2b32dca55547da8f1f0332"}, - {file = "ephem-4.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53786461a6d5799d5fffe76622ad51444b264d1c7263b92a6dfcac640c3da93a"}, - {file = "ephem-4.1.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:268f57f8768ccb0abbdf4cefb4781c7db812950019868f687b407b428513ee53"}, - {file = "ephem-4.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d630aa287255ea9fba6962f351e4e0729bb620570684d52fbfcc31b11527f09e"}, - {file = "ephem-4.1.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b5f229bbf62ecb4cd6bb3374b15d0f8ff7b3d970c2936fccd89bdf9d693907a2"}, - {file = "ephem-4.1.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d60d56f182de54bd84fadd6ea2dd8e8ef6fdef6a698c7cafd404ecb6eeefa598"}, - {file = "ephem-4.1.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:404500c8d0030d75ec15bb6b98eee78ad163fd5252102c962ae6fb39c9488198"}, - {file = "ephem-4.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fb020d6cc5ab1ad1cd9d3da4a6e2506beebb41d1b337d79cc20cc0a17f550f1"}, - {file = "ephem-4.1.4-cp312-cp312-win32.whl", hash = "sha256:29e71636ee4719419d03184abc85085f76989c79a61844f5e60acbf2513d2b42"}, - {file = "ephem-4.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:549654f63d88e0ab6248ae25ac2939131474ab9f3a91bee6b68ca6f214747c2a"}, - {file = "ephem-4.1.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:40067fc050c946c8d4c2d779805b61f063471a091e6124cbabcf61ac538011b2"}, - {file = "ephem-4.1.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e2abe97aa2b091090012768b4d94793213cc01f0bf040dcc311a380ab08df69"}, - {file = "ephem-4.1.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2677d3a5b42aedc578de10b0eecdba6a50731f159cb28f7ad38c5f62143494"}, - {file = "ephem-4.1.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80a73da8ec61f86e5a97f73311159e61279dabdfbd17c9d4e2791a25a836f9ce"}, - {file = "ephem-4.1.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a146db114cfc942d123a38c301a8b8ca7eef2e37d2c5a4bd59e4abc99123c083"}, - {file = "ephem-4.1.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4f3650c27c3ab6b73e2de7fd8de10e1c0d73f4683c9c5fb2e7113722ec2c2b53"}, - {file = "ephem-4.1.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:171fc5e7c4e9523f900dfd5ab6520bceb260a2b59fcb558d9aec17fd562b6251"}, - {file = "ephem-4.1.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:8974799afb37f17ac71e16e479d0e315d74bea4bed2becaf21d1b9304299bbaf"}, - {file = "ephem-4.1.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:3c39fb62c240f57533ea618295e510c44e466e74f2f4a899fbaa04b166b62d04"}, - {file = "ephem-4.1.4-cp36-cp36m-win32.whl", hash = "sha256:23e1432f021c69b2965c87a693ffd25caf08416e92bcb0fed91425083a374210"}, - {file = "ephem-4.1.4-cp36-cp36m-win_amd64.whl", hash = "sha256:86d6dda3581e61f6bad5479e26bca9e560671852ac00a5a8ed10f722635ddf71"}, - {file = "ephem-4.1.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e731c3e2f1767fab14e5d4077a3519f70afd22cb7dd113274c2850f8ef8ff828"}, - {file = "ephem-4.1.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8b79b47c7be0d64013fb5d97dd6bbfb9bf63ae07b2ec917be19d3b4cc5782b8"}, - {file = "ephem-4.1.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89f759ce8e3489d15b9f3796d210196085dcb84cacdf24b2ece791b029245544"}, - {file = "ephem-4.1.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:daf1a1280102e14c718d684989da34151697a426522f8ae18b1081e8bad705c9"}, - {file = "ephem-4.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3da3b76d5d5e339461059c3314013c152ef569c798bfd578bcfb504b875a837"}, - {file = "ephem-4.1.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aac0a0e41deb2a197cf67e800a3d0f4029139b9ce12bed148ffe994ec78593f9"}, - {file = "ephem-4.1.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:85809803e349bb4a0d56880067549abdc2b93fddf93ac3d55486040cbec1553f"}, - {file = "ephem-4.1.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:93d8f8b4e6206d3401dbdb0cdabb0d15c59cf9c2a7ee7c586da8c7dbf1f2a136"}, - {file = "ephem-4.1.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5beaa0cb659951211aec33a7c132557a1a161dacf53f1b1493830489cfc68215"}, - {file = "ephem-4.1.4-cp37-cp37m-win32.whl", hash = "sha256:bbd4727498928ece694ec1b33023f16b6d050d9952d4052129b24e08e04d67fd"}, - {file = "ephem-4.1.4-cp37-cp37m-win_amd64.whl", hash = "sha256:39c710d73449b1c495b58d803da881363a0cae4b728de9fa332f77bcb4686ac8"}, - {file = "ephem-4.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24b7e90c731e851a56ab5e9d538915faaa54945e9b5211cfdf04e570fc27c529"}, - {file = "ephem-4.1.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab40ad7a5ccd66cad4161ca2295c04f01a74ec596c936c3af97a67733e2cd5bf"}, - {file = "ephem-4.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:555d63d70e36e46e43b955c37cdb0f8b82ee2051c575960c4b01948be9f04e5e"}, - {file = "ephem-4.1.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a29de7c737047cc2412edada9d03b761339d3560d7db471cd04f257e1e02f2f"}, - {file = "ephem-4.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e737b49643a300fa15b788accc72802af93b49cd5d071e53111e08e3fba6570"}, - {file = "ephem-4.1.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:56c448a83290dabd1df5865fbf9e39d17400abcef37cb36de90ea1a860c0a08e"}, - {file = "ephem-4.1.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3bd7da534a542d937b10f3c643301dc9b8bc09f7a40350b32efc32910232da9e"}, - {file = "ephem-4.1.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0493ad1b3d2505acbf442e31aadb86fba096ba30008a586fe6361a9de5974ed3"}, - {file = "ephem-4.1.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3442fba6afae0bcb643c9b069765033b67d2c8fe4350f9beb4f2f5cfdaaa7442"}, - {file = "ephem-4.1.4-cp38-cp38-win32.whl", hash = "sha256:8e0bb8379fb6b709a3cbceb6a11a3dc0f25e5b16a6f009b48e09d6b95f896d9c"}, - {file = "ephem-4.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:a940cd4d8d7aed68efd3d6b717f393bbedf541d388ba11eb3ed56a9fc6cbb1ca"}, - {file = "ephem-4.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f51a3bcd5f69c4070e8a6936e4a61019ad2d6b94bc8b5ca1e498dea0962a373"}, - {file = "ephem-4.1.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:41680b48aeae5b992371bf7ec1bc07457500ff4a6ea7d333793e945b97951de0"}, - {file = "ephem-4.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f11edaef2e4a4d010e21b5ff8bcd9435fbc7fe9e16923f81143f248ae8ae8e9d"}, - {file = "ephem-4.1.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72078b49748318cbbbe1a49ab5dcd05e63c917151351175b590833e6163a1506"}, - {file = "ephem-4.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2ba977ad0402ac44fe66af6e1119632efe84b7d1255f8f6f94d7768d9487453"}, - {file = "ephem-4.1.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a21a11285904f43c3bc6909727d09109b8e38dc2e3cda662089601cb37b3d082"}, - {file = "ephem-4.1.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9aabc3cab5fb9440564dfdf79e39ee01d16554d7bfb8228cddfe9eada460dba9"}, - {file = "ephem-4.1.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:5327fd48fc8ff966023a6f177813fc058bb2a496c70b53a79f85bf2eba3ca93d"}, - {file = "ephem-4.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e429f6e0e05e4c8c54802e951cd1bde440dd6f896c2b5691ef5ebd9bc3ba489"}, - {file = "ephem-4.1.4-cp39-cp39-win32.whl", hash = "sha256:a8d125d04800425a9d944109710687bbb3703e8f04ac3bc8445779bb0ad5dcc2"}, - {file = "ephem-4.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:4e8ec4e29c7f04d6334215775a8c4dc77eae8ed698384530d9415a98500ed01c"}, - {file = "ephem-4.1.4.tar.gz", hash = "sha256:73a59f0d2162d1624535c3c3b75f956556bdbb2055eaf554a7bef147d3f9c760"}, + {file = "ephem-4.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0796dbcd24f76af0e81c22e1f709b42873ef81d2c4dfa962f8d346f11489785d"}, + {file = "ephem-4.1.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0266cf69d594bd94034bd13c18dbcef13b301acd7357d7cf7d1bb8acaf7f00b4"}, + {file = "ephem-4.1.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3db8d53a37c772e1b132f5ed3535027d73e8dca4ead99a7563f09c4308996b63"}, + {file = "ephem-4.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c6e7523d8856caa4ac53db1988693ce7a516fb25c1cd3c74a3472f951691c0e"}, + {file = "ephem-4.1.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:203bd3f00c49012bd07eb2627bcf9538f608b3431cb8053a7d3115e1df396312"}, + {file = "ephem-4.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec7ddf15c319a83fb5dadff58bb6e5fbcaff09338f5c2a1b2c7b1445b87002b5"}, + {file = "ephem-4.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:13f800e03aad215ae6a4217122e64d0ce90e914574f8b5afa381d81dad0eecaa"}, + {file = "ephem-4.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83921b341b4f4725e59c1463b9613f3fd3991392e17904170b146f5d6945afcb"}, + {file = "ephem-4.1.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6219412800138f489733cb3a8b4fab0a8b3ef2dd5ec143aff35950dca9a71c36"}, + {file = "ephem-4.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b95bf8c92a5eae665d63371440b93778b2508ad448907d12f72ed6ed08ea476c"}, + {file = "ephem-4.1.5-cp310-cp310-win32.whl", hash = "sha256:afefe022448f09c3e15472bd3ad30fa4824f8c4a9de65216b9952b9dfcec8750"}, + {file = "ephem-4.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:53df72aa3e2f1359ed56587b1930d0030fec030db71744564a83c10ea54316a7"}, + {file = "ephem-4.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b3e385d8447d908be6dd8c53c4452fee7d61040c9b6bb5a60195b57c85545ca6"}, + {file = "ephem-4.1.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:be6c4ced150d79ab6b5ff3bb7545fee26cf7f4f64ccf476a14850a63bbf125e7"}, + {file = "ephem-4.1.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c8a70e36632e88227c4ba8184fd91dbd32d0140f799202b5fb8510508f4c8e4"}, + {file = "ephem-4.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ee2a4966167a0300db2c9155e4b64fc1a6bb67ca869659d4c0342869c44d4f3"}, + {file = "ephem-4.1.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b45b9b15e65c7f26c1342b70e06e49bd83a9c527affe9de0fb5953a3a25a0cda"}, + {file = "ephem-4.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e21a8120569f315ce181f2e654528cd10c18cb92382248de90574effed57d227"}, + {file = "ephem-4.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:864d6aba1699f26e7768ed424d5218396300dce6d8deccb1c97164a424343675"}, + {file = "ephem-4.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8f8f5dd5b1343dc77ea891ab423677a631fd7b820bbbeac7ec53ee332e8a4ca5"}, + {file = "ephem-4.1.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:8a2347ad88aad026dff6f00b931bd2b0d6b4f184bf65ffd4b62f557526bf335d"}, + {file = "ephem-4.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5496ebc21b2873e986836ad0756818bee80ed6deee58e1167a9876e4a64f0bbf"}, + {file = "ephem-4.1.5-cp311-cp311-win32.whl", hash = "sha256:f319ca58ee2ee27c18e42657ad8d3d1b0251dd369c9fd60af45b2bc2c42ded0a"}, + {file = "ephem-4.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:cc6a49fd3250cf67305230da962d779632b13da2a8fae5c383e973fa113baa97"}, + {file = "ephem-4.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:51c17c62b031ec246546aa482d98e9a5573405385eb7adf7154f5a1af309ac8a"}, + {file = "ephem-4.1.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ff1436219d2dad1433c5f0a61f3a947ab6d4c622cc6a90d7cb5c2e28a8669fba"}, + {file = "ephem-4.1.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9495d515a6f49bd7a90f58320af1a95e4c3ab89307fbf31045cf05570f779eaf"}, + {file = "ephem-4.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7952e8b54c771be6a58ce9aca91d729bcdace2293c68fe825df3433995aedafc"}, + {file = "ephem-4.1.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e99ba9fbd5c136fc18b94fe5e709a7c4a19f13ed1c6a16bdec448cbd7d1bcb1"}, + {file = "ephem-4.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d2922e6cb66434e9edd3764b103b6bdd394a701bd39395c46f0a7751b9829ee"}, + {file = "ephem-4.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:692f8dea9e91447c6406e9ee7001075d5794948677f5f8ee4601c146509b15b1"}, + {file = "ephem-4.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7122f46a0ce2c2551360bf43b693a3f1f543c0aa6e736b2513bc3203df27df7c"}, + {file = "ephem-4.1.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a68dd823d823ace3ecd94b3cf926d51ae8aa88ce248159850a8db45547720843"}, + {file = "ephem-4.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cf745e4f02455d6c0f1d85a61206c420ee2c909b392266109e2da2d3a8c023db"}, + {file = "ephem-4.1.5-cp312-cp312-win32.whl", hash = "sha256:e1772852072727e848b5fe035ce7d9dc4662c1baffbd9e4cd7467ecf384db1d9"}, + {file = "ephem-4.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:fd984e38c5078be8cb881ed75c69b2204a1d7fd2230571fc92112edfc5362bf6"}, + {file = "ephem-4.1.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:740a5950b31ac9a7ca40a95b7cfb1678e747e860f77ac0030984c10dc5464e7f"}, + {file = "ephem-4.1.5-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf5b786ed28e7d00704d2cf3862dec75223790ed800c285a91acfa538b1755c"}, + {file = "ephem-4.1.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87e5be99ebc3bfa1dc70f31ba737dcdf9f6219570fa9a5729d0ff60134c7dc43"}, + {file = "ephem-4.1.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:261f82bd821cfbb8a056bb834da06d19d3afd3eb735c8cd549f775e45caef502"}, + {file = "ephem-4.1.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc612e5d1829f64a8db55d8b2566bef4ce479c1bbee110fedf3197170635f70c"}, + {file = "ephem-4.1.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9fa8ee5d77a8a27a21d39142ee7c6332915b9e79a416a941cbc6f3db64c32cfe"}, + {file = "ephem-4.1.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c109219a4728281dd4e8b1e9f449900d7a63e9400ef43c85151750d4725b0c9e"}, + {file = "ephem-4.1.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cf81a3bfa15d84871c4f87ecbf92280184ce96619cacdfe55f761d510a7f81db"}, + {file = "ephem-4.1.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:39dcc1b00882a2782771b12731a943706da8990c89be75caa294f0574cca661f"}, + {file = "ephem-4.1.5-cp36-cp36m-win32.whl", hash = "sha256:7b6384a032897d3e47da92ccc3348b74517c0dcf478a63b8cdedf69c177bccd2"}, + {file = "ephem-4.1.5-cp36-cp36m-win_amd64.whl", hash = "sha256:3bea9cb5a4a98d9c51430a395c4ad4f6307402fa7d3ffbe1bb28f7508e094dd3"}, + {file = "ephem-4.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cac6ed1664e7db22f3aadd8bc6b7afed191b8d5ce3aab9a00d719890a7c344d2"}, + {file = "ephem-4.1.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02316f8ebb3f82273bc5fbb2970fd98bfb56ed8349197aff0f56c9b5fa04e47a"}, + {file = "ephem-4.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b044d4e3b11953b0543cbd10468bf84afaa840d165c6effbffff3c15d721234"}, + {file = "ephem-4.1.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a69b27eb82d7c0dccdd54e11ad27f3cadcddb02169a570ac7864dbaa9a10486"}, + {file = "ephem-4.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b01734c27ce38705418191322fd7bd0372d9709d326263991b1c7e1bc75a59f"}, + {file = "ephem-4.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bcae4b30c4a7474cfc102610f23a4a114196c8d15165cbc0551fb0d542a768eb"}, + {file = "ephem-4.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6fde92b6cc7837c141506a09f721f983e31b32785a9680f4d075be9763dc931b"}, + {file = "ephem-4.1.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:0849f522d1ad4daac5407307be786a54283599cfe87f3fcfc677153db45d7e22"}, + {file = "ephem-4.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:82025d4a6d5f6d76a1f45b4eb940030be93e38a3ac3c589990172beac53c854e"}, + {file = "ephem-4.1.5-cp37-cp37m-win32.whl", hash = "sha256:d7c446228a8756fa39876701abf34d516cd9b49b867d52c2f661f1cf1d927335"}, + {file = "ephem-4.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:b1f509901dcf2b95cc175be39c90eb457e081f8ed9762f4aae74f45e092c7f8b"}, + {file = "ephem-4.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8d1ca9cec961115a6197faee6ae2231bc76f9a7090bfdf759c810718c7715db9"}, + {file = "ephem-4.1.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3f95e89ab21e5214dbadfd41f9c94ce538bcd4411c18400cc638a00df728d67c"}, + {file = "ephem-4.1.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e8239ec63c9c6a1ab4d8c578bf6b34c114a3754b80c2e02ce07de827925353"}, + {file = "ephem-4.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:972ff0942ddf0f4ac5124bd974608b8371b22e84ab5ed49b4634455331f41987"}, + {file = "ephem-4.1.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd85a8b5b20020e791273f9cfd80510e4f647c362e5a3b7aec2abcb604d8d02a"}, + {file = "ephem-4.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:543ddd9e6bf573c24c1ccf30257ec655d8be00e28279fbdadbc774927d949663"}, + {file = "ephem-4.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:beea8cccaf184cd2a16c091b0ce92293f1128e49fd43e3c81e79c9f8d051cea6"}, + {file = "ephem-4.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4f53899fbcdd14790b7a61aa70218337e1c6aabc26af99d2485ed6d98fec8cee"}, + {file = "ephem-4.1.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3733d751c015d28bc043d543c47cee8d0a699a8330d3d34c9afdbd7e96310842"}, + {file = "ephem-4.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a7c904e6df8511bfad2a3119d2ba2333d94953d0d212b31725f4f749267f21cc"}, + {file = "ephem-4.1.5-cp38-cp38-win32.whl", hash = "sha256:3b46aa3f576d528a9dd4357b18c3e59308d0a1e537e45fe91df3753fa63100bf"}, + {file = "ephem-4.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:37751e9bdb10ae109a2e7d7353911470ee5752f5caee4bbe0d764a39cdd57a5a"}, + {file = "ephem-4.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fd76c85313b44e4a9b2e8a14f8e5ffbf43541b3cd023d623664f1dca8c8bf407"}, + {file = "ephem-4.1.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b56f805aa26818e7efa46c2bf98417f677e4dc9ae1b6ef278747d823c7d4df6"}, + {file = "ephem-4.1.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e9c15b5e5386cbee128737465ad7b042f57603c3e75bdbab84cd71b416127cf"}, + {file = "ephem-4.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0f7f4a9de84a4ef8ce77ee980a963bb7725791caa3cb3389490ed35be1d06e8"}, + {file = "ephem-4.1.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b38d0033f7e4ba6e2f5c9ecfc0827d619796ff182d98cc0adb62c6bce701fe0"}, + {file = "ephem-4.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb55fc94512d0c46e610fa67af5fcad51e28aa2b30f7e88ef4cb38c7a443e81a"}, + {file = "ephem-4.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c4183bc20f5933c9fad3d754f9a9ac75dc9ea0d8c6a7faff63de5d28d6bf26d9"}, + {file = "ephem-4.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e067f98b6cd9da55a5de9ce7b2e1222574006b4c3083363eda507ce97ce9867b"}, + {file = "ephem-4.1.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:b5cf0e29657001482f3ed8eeaf1757c67b8d8fdc9c90e57b8d544fd1e7e4d6b3"}, + {file = "ephem-4.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5058cfcf36643b11198d54266137d7db8476d66b2c9ff5e4e35638fc3254a2d"}, + {file = "ephem-4.1.5-cp39-cp39-win32.whl", hash = "sha256:c1eed128e5f6e551bc50cfaa87395cef7f03d65537fe4e8502704d200279e3b2"}, + {file = "ephem-4.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:f4ff7153ac577cb336e08fdc7a76ac91185b2af5dae9ba3ae9d0e87af3ac35c3"}, + {file = "ephem-4.1.5.tar.gz", hash = "sha256:0c64a8aa401574c75942045b9af70d1656e14c5366151c0cbb400cbeedc2362a"}, ] [[package]] @@ -2080,13 +2113,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -2117,13 +2150,13 @@ dev = ["flake8", "hypothesis", "pip-tools", "pytest", "pytest-benchmark", "pytes [[package]] name = "execnet" -version = "2.0.2" +version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, - {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, ] [package.extras] @@ -2131,27 +2164,27 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "1.2.0" +version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, - {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, ] [package.extras] -tests = ["asttokens", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.19.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, + {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, ] [package.extras] @@ -2159,13 +2192,13 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "feedparser" -version = "6.0.10" +version = "6.0.11" description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" optional = false python-versions = ">=3.6" files = [ - {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, - {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, + {file = "feedparser-6.0.11-py3-none-any.whl", hash = "sha256:0be7ee7b395572b19ebeb1d6aafb0028dee11169f1c934e0ed67d54992f4ad45"}, + {file = "feedparser-6.0.11.tar.gz", hash = "sha256:c9d0407b64c6f2a065d0ebb292c2b35c01050cc0dc33757461aaabdc4c4184d5"}, ] [package.dependencies] @@ -2215,18 +2248,19 @@ dev = ["black (>=20.8b1)", "codecov", "coverage", "flake8", "flake8-black", "fut [[package]] name = "filelock" -version = "3.12.2" +version = "3.13.4" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, + {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] [[package]] name = "financedatabase" @@ -2244,13 +2278,13 @@ pandas = "*" [[package]] name = "finnhub-python" -version = "2.4.18" +version = "2.4.19" description = "Finnhub API" optional = false python-versions = "*" files = [ - {file = "finnhub-python-2.4.18.tar.gz", hash = "sha256:46d932508f4753be207de73cce81c43070504fc68a2e2f6cb2a25c9cafa7cef4"}, - {file = "finnhub_python-2.4.18-py3-none-any.whl", hash = "sha256:93e4ad04a63318d9495fbfc9680caef58f1c152cc35c629e94df5431dfb8d7a6"}, + {file = "finnhub-python-2.4.19.tar.gz", hash = "sha256:1c216df125fe4c38ff6033613739f07efaf4bce1b7502dde54d31631bbeb5cca"}, + {file = "finnhub_python-2.4.19-py3-none-any.whl", hash = "sha256:e9bb56cf41d88a903e9f083a6fc2076187c0a0cbcc55d9f78941c4f455134229"}, ] [package.dependencies] @@ -2297,113 +2331,98 @@ requests = "*" [[package]] name = "flake8" -version = "6.0.0" +version = "7.0.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" files = [ - {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, - {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, + {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, + {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, ] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.10.0,<2.11.0" -pyflakes = ">=3.0.0,<3.1.0" - -[[package]] -name = "flask" -version = "2.3.2" -description = "A simple framework for building complex web applications." -optional = true -python-versions = ">=3.8" -files = [ - {file = "Flask-2.3.2-py3-none-any.whl", hash = "sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0"}, - {file = "Flask-2.3.2.tar.gz", hash = "sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef"}, -] - -[package.dependencies] -blinker = ">=1.6.2" -click = ">=8.1.3" -importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} -itsdangerous = ">=2.1.2" -Jinja2 = ">=3.1.2" -Werkzeug = ">=2.3.3" - -[package.extras] -async = ["asgiref (>=3.2)"] -dotenv = ["python-dotenv"] +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "fonttools" -version = "4.41.0" +version = "4.51.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.41.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ba2a367ff478cd108d5319c0dc4fd4eb4ea3476dbfc45b00c45718e889cd9463"}, - {file = "fonttools-4.41.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69178674505ec81adf4af2a3bbacd0cb9a37ba7831bc3fca307f80e48ab2767b"}, - {file = "fonttools-4.41.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86edb95c4d1fe4fae2111d7e0c10c6e42b7790b377bcf1952303469eee5b52bb"}, - {file = "fonttools-4.41.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50f8bdb421270f71b54695c62785e300fab4bb6127be40bf9f3084962a0c3adb"}, - {file = "fonttools-4.41.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c890061915e95b619c1d3cc3c107c6fb021406b701c0c24b03e74830d522f210"}, - {file = "fonttools-4.41.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b329ae7ce971b5c4148d6cdb8119c0ce4587265b2330d4f2f3776ef851bee020"}, - {file = "fonttools-4.41.0-cp310-cp310-win32.whl", hash = "sha256:bc9e7b1e268be7a23fc66471b615c324e99c5db39ce8c49dd6dd8e962c7bc1b8"}, - {file = "fonttools-4.41.0-cp310-cp310-win_amd64.whl", hash = "sha256:f3fe90dfb297bd8265238c06787911cd81c2cb89ac5b13e1c911928bdabfce0f"}, - {file = "fonttools-4.41.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e38bd91eae257f36c2b7245c0278e9cd9d754f3a66b8d2b548c623ba66e387b6"}, - {file = "fonttools-4.41.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:415cf7c806a3f56fb280dadcf3c92c85c0415e75665ca957b4a2a2e39c17a5c9"}, - {file = "fonttools-4.41.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:381558eafffc1432d08ca58063e71c7376ecaae48e9318354a90a1049a644845"}, - {file = "fonttools-4.41.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ee75b8ca48f6c48af25e967dce995ef94e46872b35c7d454b983c62c9c7006d"}, - {file = "fonttools-4.41.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d45f28c20bb67dee0f4a4caae709f40b0693d764b7b2bf2d58890f36b1bfcef0"}, - {file = "fonttools-4.41.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5448a87f6ed57ed844b64a05d3792827af584a8584613f6289867f4e77eb603b"}, - {file = "fonttools-4.41.0-cp311-cp311-win32.whl", hash = "sha256:69dbe0154e15b68dd671441ea8f23dad87488b24a6e650d45958f4722819a443"}, - {file = "fonttools-4.41.0-cp311-cp311-win_amd64.whl", hash = "sha256:ea879afd1d6189fca02a85a7868560c9bb8415dccff6b7ae6d81e4f06b3ab30d"}, - {file = "fonttools-4.41.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8f602dd5bcde7e4241419924f23c6f0d66723dd5408a58c3a2f781745c693f45"}, - {file = "fonttools-4.41.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:06eac087ea55b3ebb2207d93b5ac56c847163899f05f5a77e1910f688fe10030"}, - {file = "fonttools-4.41.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e22d0144d735f6c7df770509b8c0c33414bf460df0d5dddc98a159e5dbb10eb"}, - {file = "fonttools-4.41.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19d461c801b8904d201c6c38a99bfcfef673bfdfe0c7f026f582ef78896434e0"}, - {file = "fonttools-4.41.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:72d40a32d6443871ea0d147813caad58394b48729dfa4fbc45dcaac54f9506f2"}, - {file = "fonttools-4.41.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0614b6348866092d00df3dfb37e037fc06412ca67087de361a2777ea5ed62c16"}, - {file = "fonttools-4.41.0-cp38-cp38-win32.whl", hash = "sha256:e43f6c7f9ba4f9d29edee530e45f9aa162872ec9549398b85971477a99f2a806"}, - {file = "fonttools-4.41.0-cp38-cp38-win_amd64.whl", hash = "sha256:eb9dfa87152bd97019adc387b2f29ef6af601de4386f36570ca537ace96d96ed"}, - {file = "fonttools-4.41.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d2dae84a3d0f76884a6102c62f2795b2d6602c2c95cfcce74c8a590b6200e533"}, - {file = "fonttools-4.41.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cc3324e4159e6d1f55c3615b4c1c211f87cc96cc0cc7c946c8447dc1319f2e9d"}, - {file = "fonttools-4.41.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c654b1facf1f3b742e4d9b2dcdf0fa867b1f007b1b4981cc58a75ef5dca2a3c"}, - {file = "fonttools-4.41.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:560ea1a604c927399f36742abf342a4c5f3fee8e8e8a484b774dfe9630bd9a91"}, - {file = "fonttools-4.41.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9387b09694fbf8ac7dcf887069068f81fb4124d05e09557ac7daabfbec1744bd"}, - {file = "fonttools-4.41.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:465d0f24bf4f75160f441793b55076b7a080a57d3a1f738390af2c20bee24fbb"}, - {file = "fonttools-4.41.0-cp39-cp39-win32.whl", hash = "sha256:841c491fa3e9c54e8f9cd5dae059e88f45e086aea090c28be9d42f59c8b99e01"}, - {file = "fonttools-4.41.0-cp39-cp39-win_amd64.whl", hash = "sha256:efd59e83223cb77952997fb850c7a7c2a958c9af0642060f536722c2a9e9d53b"}, - {file = "fonttools-4.41.0-py3-none-any.whl", hash = "sha256:5b1c2b21b40229166a864f2b0aec06d37f0a204066deb1734c93370e0c76339d"}, - {file = "fonttools-4.41.0.tar.gz", hash = "sha256:6faff25991dec48f8cac882055a09ae1a29fd15bc160bc3d663e789e994664c2"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, + {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, + {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, + {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, + {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, + {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, + {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, + {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, + {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, + {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, + {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, + {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, + {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.0.0)"] +unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] name = "formulaic" -version = "0.6.4" +version = "1.0.1" description = "An implementation of Wilkinson formulas." optional = false python-versions = ">=3.7.2" files = [ - {file = "formulaic-0.6.4-py3-none-any.whl", hash = "sha256:570b3c7ab15fe8095e0dc86a4f71217102b23ce7e715053751a6cdcc580d7767"}, - {file = "formulaic-0.6.4.tar.gz", hash = "sha256:a8c84b6fa6df9216dbeaddcfa3f097bd5efe88e340211ac34c18cffe133cdb78"}, + {file = "formulaic-1.0.1-py3-none-any.whl", hash = "sha256:be9e6127b98ba0293654be528fd070ede264f64d0247477c4d5af799b0b12cf2"}, + {file = "formulaic-1.0.1.tar.gz", hash = "sha256:64dd7992a7aa5bbceb1e40679d0f01fc6f0ba12b7d23d78094a88c2edc68fba1"}, ] [package.dependencies] -astor = ">=0.8" +astor = {version = ">=0.8", markers = "python_version < \"3.9\""} graphlib-backport = {version = ">=1.0.0", markers = "python_version < \"3.9\""} interface-meta = ">=1.2.0" numpy = ">=1.16.5" @@ -2456,13 +2475,13 @@ pandas = "*" [[package]] name = "freezegun" -version = "1.2.2" +version = "1.4.0" description = "Let your Python tests travel through time" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "freezegun-1.2.2-py3-none-any.whl", hash = "sha256:ea1b963b993cb9ea195adbd893a48d573fda951b0da64f60883d7e988b606c9f"}, - {file = "freezegun-1.2.2.tar.gz", hash = "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446"}, + {file = "freezegun-1.4.0-py3-none-any.whl", hash = "sha256:55e0fc3c84ebf0a96a5aa23ff8b53d70246479e9a68863f1fcac5a3e52f19dd6"}, + {file = "freezegun-1.4.0.tar.gz", hash = "sha256:10939b0ba0ff5adaecf3b06a5c2f73071d9678e507c5eaedb23c761d56ac774b"}, ] [package.dependencies] @@ -2470,118 +2489,133 @@ python-dateutil = ">=2.7" [[package]] name = "frozendict" -version = "2.3.8" +version = "2.4.2" description = "A simple immutable dictionary" optional = false python-versions = ">=3.6" files = [ - {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, - {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:750632cc890d8ee9484fe6d31b261159144b6efacc08e1317fe46accd1410373"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ee5fe2658a8ac9a57f748acaf563f6a47f80b8308cbf0a04fac0ba057d41f75"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23c4bb46e6b8246e1e7e49b5593c2bc09221db0d8f31f7c092be8dfb42b9e620"}, - {file = "frozendict-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:c31abc8acea309b132dde441856829f6003a3d242da8b54bce4c0f2a3c8c63f0"}, - {file = "frozendict-2.3.8-cp310-cp310-win_arm64.whl", hash = "sha256:9ea5520e85447ff8d4681e181941e482662817ccba921b7cb3f87922056d892a"}, - {file = "frozendict-2.3.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f83fed36497af9562ead5e9fb8443224ba2781786bd3b92b1087cb7d0ff20135"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27c5c1d29d0eda7979253ec88abc239da1313b38f39f4b16984db3b3e482300"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c785de7f1a13f15963945f400656b18f057c2fc76c089dacf127a2bb188c03"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8cf35ddd25513428ec152614def9696afb93ae5ec0eb54fa6aa6206eda77ac4c"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ffc684773de7c88724788fa9787d0016fd75830412d58acbd9ed1a04762c675b"}, - {file = "frozendict-2.3.8-cp36-cp36m-win_amd64.whl", hash = "sha256:4c258aab9c8488338634f2ec670ef049dbf0ab0e7a2fa9bc2c7b5009cb614801"}, - {file = "frozendict-2.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47fc26468407fdeb428cfc89495b7921419e670355c21b383765482fdf6c5c14"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea638228692db2bf94bce40ea4b25f4077588497b516bd16576575560094bd9"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a75bf87e76c4386caecdbdd02a99e53ad43a6b5c38fb3d5a634a9fc9ce41462"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed5a6c5c7a0f57269577c2a338a6002949aea21a23b7b7d06da7e7dced8b605b"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d086440328a465dea9bef2dbad7548d75d1a0a0d21f43a08c03e1ec79ac5240e"}, - {file = "frozendict-2.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:0bc4767e2f83db5b701c787e22380296977368b0c57e485ca71b2eedfa11c4a3"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:638cf363d3cbca31a341503cf2219eac52a5f5140449676fae3d9644cd3c5487"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b2fd8ce36277919b36e3c834d2389f3cd7ac068ae730c312671dd4439a5dd65"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3957d52f1906b0c85f641a1911d214255873f6408ab4e5ad657cc27a247fb145"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72cfe08ab8ae524e54848fa90b22d02c1b1ecfb3064438696bcaa4b953f18772"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4742e76c4111bd09198d3ab66cef94be8506212311338f9182d6ef5f5cb60493"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:313ed8d9ba6bac35d7635cd9580ee5721a0fb016f4d2d20f0efa05dbecbdb1be"}, - {file = "frozendict-2.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:d3c6ce943946c2a61501c8cf116fff0892d11dd579877eb36e2aea2c27fddfef"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0f573dc4861dd7ec9e055c8cceaf45355e894e749f621f199aab7b311ac4bdb"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b3435e5f1ca5ae68a5e95e64b09d6d5c645cadd6b87569a0b3019dd248c8d00"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145afd033ebfade28416093335261b8ec1af5cccc593482309e7add062ec8668"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da98427de26b5a2865727947480cbb53860089c4d195baa29c539da811cea617"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e82befa7c385a668d569cebbebbdf49cee6fea4083f08e869a1b08cfb640a9f"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80abe81d36e889ceec665e06ec764a7638000fa3e7be09786ac4d3ddc64b76db"}, - {file = "frozendict-2.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ccc94ac781710db44e142e1a11ff9b31d02c032c01c6868d51fcbef73086225"}, - {file = "frozendict-2.3.8-cp39-cp39-win_arm64.whl", hash = "sha256:e72dbc1bcc2203cef38d205f692396f5505921a5680f66aa9a7e8bb71fd38f28"}, - {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, - {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, + {file = "frozendict-2.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19743495b1e92a7e4db56fcd6a5d36ea1d1b0f550822d6fd780e44d58f0b8c18"}, + {file = "frozendict-2.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81efb4ea854a1c93d954a67389eaf78c508acb2d4768321a835cda2754ec5c01"}, + {file = "frozendict-2.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5f1a4d9662b854dce52b560b60f51349905dc871826b8c6be20141a13067a53"}, + {file = "frozendict-2.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1412aeb325e4a28cfe32106c66c046372bb7fd5a9af1748193549c5d01a9e9c1"}, + {file = "frozendict-2.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7ce0535f02eba9746e4e2cf0abef0f0f2051d20fdccf4af31bc3d1adecf5a71"}, + {file = "frozendict-2.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07153e6d2720fa1131bb180ce388c7042affb29561d8bcd1c0d6e683a8beaea2"}, + {file = "frozendict-2.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f7a90ea6d5248617a1222daef07d22fb146ff07635a36db327e1ce114bf3e304"}, + {file = "frozendict-2.4.2-cp310-cp310-win_arm64.whl", hash = "sha256:20a6f741c92fdeb3766924cde42b8ee445cf568e3be8aa983cb83e9fe5b61e63"}, + {file = "frozendict-2.4.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:146129502cd9d96de64e0c8f7dc4c66422da3d4bfccf891dd80a3821b358a926"}, + {file = "frozendict-2.4.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ac1f74ccf818977abbc1868090c06436b8f06534d306f808f15cffc304ae046"}, + {file = "frozendict-2.4.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d2ea4f10505ad15f53ce3742420682d916d0c4d566edb8e1019756e7cea30"}, + {file = "frozendict-2.4.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4a5841681e70d2862ca153543f2912e0bab034bf29e2d3610e86ea42506121c2"}, + {file = "frozendict-2.4.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d4a10119f17552cbeab48d4ae830ba091c6d47616589618adc31f251184579a7"}, + {file = "frozendict-2.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:7d13ffe649e9db6f4bb5e107d9be7dfd23e13101bc69f97aa5fa6cbf6aecaadd"}, + {file = "frozendict-2.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19e64630e164a297f83e9a1c69f1cd36fa4b3d1196c1f9fc006a0385aa198ea4"}, + {file = "frozendict-2.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bedb0a6587bae53bd53727b92a87c4cf90ad7a7e0bd2db562d439beb6982712e"}, + {file = "frozendict-2.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cc9d063131fd8adbeb18a473d222b5dc8301cac9505cfe578158f9a9bf55a9"}, + {file = "frozendict-2.4.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:92c46b155ea9eb9ecabc66ba2d9030f2634319f55c6448688965ece094f14b51"}, + {file = "frozendict-2.4.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f958d40637e0440bce2453019821c94fe86cfc5f3847ae11cd4f02c3548b1d1b"}, + {file = "frozendict-2.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ac954be447a907face9b652207fbd943b9b552212890db959ba653e8f1dc3f56"}, + {file = "frozendict-2.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f7e0ff5e84742604a1b42c2de4f1e67630c0868cf52a5c585b54a99e06f6b453"}, + {file = "frozendict-2.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:84c36bfa819cd8442f6e0bdb86413c7678b2822a46b1a22cfa0f0dd30d9e5c45"}, + {file = "frozendict-2.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cead3bfe70c90c634a9b76807c9d7e75e6c5666ec96fa2cea8e7412ccf22a1f8"}, + {file = "frozendict-2.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc6e3158107b5431255978b954758b1041cc70a3b8e7657373110512eb528e3"}, + {file = "frozendict-2.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4db1d6cc412bd865cab36723995208b82166a97bc6c724753bcd2b90cf24f164"}, + {file = "frozendict-2.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ff6fb5831539fffb09d71cc0cc0462b1f27c0160cb6c6fa2d1f4c1bc7fffe52a"}, + {file = "frozendict-2.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:79e1c94ad2a925ad5723d82a4134c6d851d5a7bc72b7e9da8b2087c42758a512"}, + {file = "frozendict-2.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34704f9ffb21448d4b5c0f9239f8f058c0efab4bfdbe2956c5be978fef0b929c"}, + {file = "frozendict-2.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5280d685cd1659883a3010dec843afe3065416ae92e453498997d4474a898a39"}, + {file = "frozendict-2.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ca09a376114172e4d9918e6d576f58244c45e21f5af1245085699fd3a171c47"}, + {file = "frozendict-2.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55953aa2acf5bf183c664f3d0f540f8c8ac8f5fa97170f2098d413414318eb2b"}, + {file = "frozendict-2.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:476e4857e1d87b05c9102dd5409216ce4716cb7df619e6657429bc99279303cc"}, + {file = "frozendict-2.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4a8b298f39242d25770d029588ce9d4f524e9f4edc60d2d34b6178fb07c8a93e"}, + {file = "frozendict-2.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:c157b8a92743a7905b341edb0663044fecdc7780f96c59a2843d3da68d694b90"}, + {file = "frozendict-2.4.2-cp39-cp39-win_arm64.whl", hash = "sha256:cbab325c0a98b2f3ee291b36710623781b4977a3057f9103a7b0f11bcc23b177"}, + {file = "frozendict-2.4.2.tar.gz", hash = "sha256:741779e1d1a2e6bb2c623f78423bd5d14aad35dc0c57e6ccc89e54eaab5f1b8a"}, ] [[package]] name = "frozenlist" -version = "1.4.0" +version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] [[package]] @@ -2605,18 +2639,17 @@ scandir = ["scandir (>=1.5,<2.0)"] [[package]] name = "fsspec" -version = "2023.6.0" +version = "2024.3.1" description = "File-system specification" optional = true python-versions = ">=3.8" files = [ - {file = "fsspec-2023.6.0-py3-none-any.whl", hash = "sha256:1cbad1faef3e391fba6dc005ae9b5bdcbf43005c9167ce78c915549c352c869a"}, - {file = "fsspec-2023.6.0.tar.gz", hash = "sha256:d0b2f935446169753e7a5c5c55681c54ea91996cc67be93c39a154fb3a2742af"}, + {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, + {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, ] [package.dependencies] aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""} -requests = {version = "*", optional = true, markers = "extra == \"http\""} [package.extras] abfs = ["adlfs"] @@ -2633,7 +2666,7 @@ github = ["requests"] gs = ["gcsfs"] gui = ["panel"] hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] libarchive = ["libarchive-c"] oci = ["ocifs"] s3 = ["s3fs"] @@ -2644,54 +2677,53 @@ tqdm = ["tqdm"] [[package]] name = "fugue" -version = "0.8.5" +version = "0.8.7" description = "An abstraction layer for distributed computation" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "fugue-0.8.5-py3-none-any.whl", hash = "sha256:cb4173bd787a7afbabf96b5233f942c1422ce6722dcdd64daef72814be791d69"}, - {file = "fugue-0.8.5.tar.gz", hash = "sha256:e6bee3339d1cfeed3bec5967884914da492305fe19262a718b2796481e9a7cfa"}, + {file = "fugue-0.8.7-py3-none-any.whl", hash = "sha256:d4dc16bac9850024109b999cd163a6ca4976bd0bf190a85730d91ff74737c3f2"}, + {file = "fugue-0.8.7.tar.gz", hash = "sha256:4c56946de46083778cdd6ec5b91ac5d37a847164c80790771edc6832bb9a260d"}, ] [package.dependencies] adagio = ">=0.2.4" fugue-sql-antlr = ">=0.1.6" jinja2 = "*" -pandas = ">=1.2.0" -pyarrow = ">=0.15.1" -qpd = ">=0.4.3" +qpd = ">=0.4.4" sqlglot = "*" -triad = ">=0.9.0" +triad = ">=0.9.3" [package.extras] -all = ["dask[dataframe,distributed]", "dask[dataframe,distributed] (>=2022.9.0)", "duckdb (>=0.5.0)", "fugue-sql-antlr[cpp] (>=0.1.6)", "ibis-framework (>=2.1.1)", "ibis-framework (>=3.2.0)", "ipython (>=7.10.0)", "jinja2", "jupyterlab", "notebook", "polars", "pyarrow (>=6.0.1)", "pyspark (>=3.1.1)", "qpd[dask] (>=0.4.3)", "ray[data] (>=2.0.0)", "sqlglot"] +all = ["dask-sql", "dask[dataframe,distributed] (>=2023.5.0)", "duckdb (>=0.5.0)", "fugue-sql-antlr[cpp] (>=0.1.6)", "ibis-framework (>=3.2.0,<6)", "ipython (>=7.10.0)", "jinja2", "jupyterlab", "notebook", "pandas (>=2.0.2)", "polars", "pyarrow (>=6.0.1)", "pyspark (>=3.1.1)", "ray[data] (>=2.4.0)", "sqlglot"] cpp-sql-parser = ["fugue-sql-antlr[cpp] (>=0.1.6)"] -dask = ["dask[dataframe,distributed]", "dask[dataframe,distributed] (>=2022.9.0)", "qpd[dask] (>=0.4.3)"] -duckdb = ["duckdb (>=0.5.0)", "numpy", "pyarrow (>=6.0.1)"] -ibis = ["ibis-framework (>=2.1.1)", "ibis-framework (>=3.2.0)"] +dask = ["dask[dataframe,distributed] (>=2023.5.0)", "pandas (>=2.0.2)", "pyarrow (>=7.0.0)"] +duckdb = ["duckdb (>=0.5.0)", "numpy"] +ibis = ["ibis-framework (>=3.2.0,<6)"] notebook = ["ipython (>=7.10.0)", "jupyterlab", "notebook"] polars = ["polars"] -ray = ["duckdb (>=0.5.0)", "pyarrow (>=6.0.1)", "ray[data] (>=2.0.0)"] +ray = ["duckdb (>=0.5.0)", "pyarrow (>=6.0.1)", "ray[data] (>=2.4.0)"] spark = ["pyspark (>=3.1.1)"] -sql = ["fugue-sql-antlr (>=0.1.6)", "jinja2", "qpd (>=0.4.3)", "sqlglot"] +sql = ["fugue-sql-antlr (>=0.1.6)", "jinja2", "qpd (>=0.4.4)", "sqlglot"] [[package]] name = "fugue-sql-antlr" -version = "0.1.6" +version = "0.2.0" description = "Fugue SQL Antlr Parser" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "fugue-sql-antlr-0.1.6.tar.gz", hash = "sha256:7787bb0e8fa9e1333cd09a6fee913cae1e02ec26f91cabae9e821adf4cca4f5e"}, + {file = "fugue-sql-antlr-0.2.0.tar.gz", hash = "sha256:e15433aaf09502c5b0423019d9fa93e161172ceb08e7bd27af0175dadf3cf552"}, ] [package.dependencies] -antlr4-python3-runtime = ">=4.11.1,<4.12" +antlr4-python3-runtime = "<4.12" jinja2 = "*" +packaging = "*" triad = ">=0.6.8" [package.extras] -cpp = ["fugue-sql-antlr-cpp (==0.1.6)"] +cpp = ["fugue-sql-antlr-cpp (==0.2.0)"] test = ["speedy_antlr_tool"] [[package]] @@ -2707,23 +2739,24 @@ files = [ [[package]] name = "future" -version = "0.18.3" +version = "1.0.0" description = "Clean single-source support for Python 3 and 2" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ - {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, + {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, + {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, ] [[package]] name = "gitdb" -version = "4.0.10" +version = "4.0.11" description = "Git Object Database" optional = false python-versions = ">=3.7" files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, ] [package.dependencies] @@ -2731,35 +2764,37 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.32" +version = "3.1.43" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, - {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, + {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, + {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" +[package.extras] +doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] + [[package]] name = "google-auth" -version = "2.22.0" +version = "2.29.0" description = "Google Authentication Library" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "google-auth-2.22.0.tar.gz", hash = "sha256:164cba9af4e6e4e40c3a4f90a1a6c12ee56f14c0b4868d1ca91b32826ab334ce"}, - {file = "google_auth-2.22.0-py2.py3-none-any.whl", hash = "sha256:d61d1b40897407b574da67da1a833bdc10d5a11642566e506565d1b1a46ba873"}, + {file = "google-auth-2.29.0.tar.gz", hash = "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360"}, + {file = "google_auth-2.29.0-py2.py3-none-any.whl", hash = "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" -six = ">=1.9.0" -urllib3 = "<2.0" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] @@ -2788,87 +2823,96 @@ tool = ["click (>=6.0.0)"] [[package]] name = "graphlib-backport" -version = "1.0.3" +version = "1.1.0" description = "Backport of the Python 3.9 graphlib module for Python 3.6+" optional = false python-versions = ">=3.6,<4.0" files = [ - {file = "graphlib_backport-1.0.3-py3-none-any.whl", hash = "sha256:24246967b9e7e6a91550bc770e6169585d35aa32790258579a8a3899a8c18fde"}, - {file = "graphlib_backport-1.0.3.tar.gz", hash = "sha256:7bb8fc7757b8ae4e6d8000a26cd49e9232aaa9a3aa57edb478474b8424bfaae2"}, + {file = "graphlib_backport-1.1.0-py3-none-any.whl", hash = "sha256:eccacf9f2126cdf89ce32a6018c88e1ecd3e4898a07568add6e1907a439055ba"}, + {file = "graphlib_backport-1.1.0.tar.gz", hash = "sha256:00a7888b21e5393064a133209cb5d3b3ef0a2096cf023914c9d778dff5644125"}, ] [[package]] name = "graphviz" -version = "0.20.1" +version = "0.20.3" description = "Simple Python interface for Graphviz" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "graphviz-0.20.1-py3-none-any.whl", hash = "sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977"}, - {file = "graphviz-0.20.1.zip", hash = "sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8"}, + {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, + {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, ] [package.extras] dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] -docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] -test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=3)"] +docs = ["sphinx (>=5,<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] +test = ["coverage", "pytest (>=7,<8.1)", "pytest-cov", "pytest-mock (>=3)"] [[package]] name = "grpcio" -version = "1.56.2" +version = "1.62.2" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.7" files = [ - {file = "grpcio-1.56.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:bf0b9959e673505ee5869950642428046edb91f99942607c2ecf635f8a4b31c9"}, - {file = "grpcio-1.56.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:5144feb20fe76e73e60c7d73ec3bf54f320247d1ebe737d10672480371878b48"}, - {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a72797549935c9e0b9bc1def1768c8b5a709538fa6ab0678e671aec47ebfd55e"}, - {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3f3237a57e42f79f1e560726576aedb3a7ef931f4e3accb84ebf6acc485d316"}, - {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900bc0096c2ca2d53f2e5cebf98293a7c32f532c4aeb926345e9747452233950"}, - {file = "grpcio-1.56.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:97e0efaebbfd222bcaac2f1735c010c1d3b167112d9d237daebbeedaaccf3d1d"}, - {file = "grpcio-1.56.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c0c85c5cbe8b30a32fa6d802588d55ffabf720e985abe9590c7c886919d875d4"}, - {file = "grpcio-1.56.2-cp310-cp310-win32.whl", hash = "sha256:06e84ad9ae7668a109e970c7411e7992751a116494cba7c4fb877656527f9a57"}, - {file = "grpcio-1.56.2-cp310-cp310-win_amd64.whl", hash = "sha256:10954662f77dc36c9a1fb5cc4a537f746580d6b5734803be1e587252682cda8d"}, - {file = "grpcio-1.56.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:c435f5ce1705de48e08fcbcfaf8aee660d199c90536e3e06f2016af7d6a938dd"}, - {file = "grpcio-1.56.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:6108e5933eb8c22cd3646e72d5b54772c29f57482fd4c41a0640aab99eb5071d"}, - {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8391cea5ce72f4a12368afd17799474015d5d3dc00c936a907eb7c7eaaea98a5"}, - {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:750de923b456ca8c0f1354d6befca45d1f3b3a789e76efc16741bd4132752d95"}, - {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fda2783c12f553cdca11c08e5af6eecbd717280dc8fbe28a110897af1c15a88c"}, - {file = "grpcio-1.56.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9e04d4e4cfafa7c5264e535b5d28e786f0571bea609c3f0aaab13e891e933e9c"}, - {file = "grpcio-1.56.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89a49cc5ad08a38b6141af17e00d1dd482dc927c7605bc77af457b5a0fca807c"}, - {file = "grpcio-1.56.2-cp311-cp311-win32.whl", hash = "sha256:6a007a541dff984264981fbafeb052bfe361db63578948d857907df9488d8774"}, - {file = "grpcio-1.56.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4063ef2b11b96d949dccbc5a987272f38d55c23c4c01841ea65a517906397f"}, - {file = "grpcio-1.56.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:a6ff459dac39541e6a2763a4439c4ca6bc9ecb4acc05a99b79246751f9894756"}, - {file = "grpcio-1.56.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:f20fd21f7538f8107451156dd1fe203300b79a9ddceba1ee0ac8132521a008ed"}, - {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d1fbad1f9077372b6587ec589c1fc120b417b6c8ad72d3e3cc86bbbd0a3cee93"}, - {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee26e9dfb3996aff7c870f09dc7ad44a5f6732b8bdb5a5f9905737ac6fd4ef1"}, - {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4c60abd950d6de3e4f1ddbc318075654d275c29c846ab6a043d6ed2c52e4c8c"}, - {file = "grpcio-1.56.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1c31e52a04e62c8577a7bf772b3e7bed4df9c9e0dd90f92b6ffa07c16cab63c9"}, - {file = "grpcio-1.56.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:345356b307cce5d14355e8e055b4ca5f99bc857c33a3dc1ddbc544fca9cd0475"}, - {file = "grpcio-1.56.2-cp37-cp37m-win_amd64.whl", hash = "sha256:42e63904ee37ae46aa23de50dac8b145b3596f43598fa33fe1098ab2cbda6ff5"}, - {file = "grpcio-1.56.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:7c5ede2e2558f088c49a1ddda19080e4c23fb5d171de80a726b61b567e3766ed"}, - {file = "grpcio-1.56.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:33971197c47965cc1d97d78d842163c283e998223b151bab0499b951fd2c0b12"}, - {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d39f5d4af48c138cb146763eda14eb7d8b3ccbbec9fe86fb724cd16e0e914c64"}, - {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ded637176addc1d3eef35331c39acc598bac550d213f0a1bedabfceaa2244c87"}, - {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c90da4b124647547a68cf2f197174ada30c7bb9523cb976665dfd26a9963d328"}, - {file = "grpcio-1.56.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3ccb621749a81dc7755243665a70ce45536ec413ef5818e013fe8dfbf5aa497b"}, - {file = "grpcio-1.56.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4eb37dd8dd1aa40d601212afa27ca5be255ba792e2e0b24d67b8af5e012cdb7d"}, - {file = "grpcio-1.56.2-cp38-cp38-win32.whl", hash = "sha256:ddb4a6061933bd9332b74eac0da25f17f32afa7145a33a0f9711ad74f924b1b8"}, - {file = "grpcio-1.56.2-cp38-cp38-win_amd64.whl", hash = "sha256:8940d6de7068af018dfa9a959a3510e9b7b543f4c405e88463a1cbaa3b2b379a"}, - {file = "grpcio-1.56.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:51173e8fa6d9a2d85c14426bdee5f5c4a0654fd5fddcc21fe9d09ab0f6eb8b35"}, - {file = "grpcio-1.56.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:373b48f210f43327a41e397391715cd11cfce9ded2fe76a5068f9bacf91cc226"}, - {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:42a3bbb2bc07aef72a7d97e71aabecaf3e4eb616d39e5211e2cfe3689de860ca"}, - {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5344be476ac37eb9c9ad09c22f4ea193c1316bf074f1daf85bddb1b31fda5116"}, - {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3fa3ab0fb200a2c66493828ed06ccd1a94b12eddbfb985e7fd3e5723ff156c6"}, - {file = "grpcio-1.56.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b975b85d1d5efc36cf8b237c5f3849b64d1ba33d6282f5e991f28751317504a1"}, - {file = "grpcio-1.56.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cbdf2c498e077282cd427cfd88bdce4668019791deef0be8155385ab2ba7837f"}, - {file = "grpcio-1.56.2-cp39-cp39-win32.whl", hash = "sha256:139f66656a762572ae718fa0d1f2dce47c05e9fbf7a16acd704c354405b97df9"}, - {file = "grpcio-1.56.2-cp39-cp39-win_amd64.whl", hash = "sha256:830215173ad45d670140ff99aac3b461f9be9a6b11bee1a17265aaaa746a641a"}, - {file = "grpcio-1.56.2.tar.gz", hash = "sha256:0ff789ae7d8ddd76d2ac02e7d13bfef6fc4928ac01e1dcaa182be51b6bcc0aaa"}, + {file = "grpcio-1.62.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:66344ea741124c38588a664237ac2fa16dfd226964cca23ddc96bd4accccbde5"}, + {file = "grpcio-1.62.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:5dab7ac2c1e7cb6179c6bfad6b63174851102cbe0682294e6b1d6f0981ad7138"}, + {file = "grpcio-1.62.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:3ad00f3f0718894749d5a8bb0fa125a7980a2f49523731a9b1fabf2b3522aa43"}, + {file = "grpcio-1.62.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e72ddfee62430ea80133d2cbe788e0d06b12f865765cb24a40009668bd8ea05"}, + {file = "grpcio-1.62.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53d3a59a10af4c2558a8e563aed9f256259d2992ae0d3037817b2155f0341de1"}, + {file = "grpcio-1.62.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1511a303f8074f67af4119275b4f954189e8313541da7b88b1b3a71425cdb10"}, + {file = "grpcio-1.62.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b94d41b7412ef149743fbc3178e59d95228a7064c5ab4760ae82b562bdffb199"}, + {file = "grpcio-1.62.2-cp310-cp310-win32.whl", hash = "sha256:a75af2fc7cb1fe25785be7bed1ab18cef959a376cdae7c6870184307614caa3f"}, + {file = "grpcio-1.62.2-cp310-cp310-win_amd64.whl", hash = "sha256:80407bc007754f108dc2061e37480238b0dc1952c855e86a4fc283501ee6bb5d"}, + {file = "grpcio-1.62.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:c1624aa686d4b36790ed1c2e2306cc3498778dffaf7b8dd47066cf819028c3ad"}, + {file = "grpcio-1.62.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:1c1bb80299bdef33309dff03932264636450c8fdb142ea39f47e06a7153d3063"}, + {file = "grpcio-1.62.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:db068bbc9b1fa16479a82e1ecf172a93874540cb84be69f0b9cb9b7ac3c82670"}, + {file = "grpcio-1.62.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2cc8a308780edbe2c4913d6a49dbdb5befacdf72d489a368566be44cadaef1a"}, + {file = "grpcio-1.62.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0695ae31a89f1a8fc8256050329a91a9995b549a88619263a594ca31b76d756"}, + {file = "grpcio-1.62.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:88b4f9ee77191dcdd8810241e89340a12cbe050be3e0d5f2f091c15571cd3930"}, + {file = "grpcio-1.62.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a0204532aa2f1afd467024b02b4069246320405bc18abec7babab03e2644e75"}, + {file = "grpcio-1.62.2-cp311-cp311-win32.whl", hash = "sha256:6e784f60e575a0de554ef9251cbc2ceb8790914fe324f11e28450047f264ee6f"}, + {file = "grpcio-1.62.2-cp311-cp311-win_amd64.whl", hash = "sha256:112eaa7865dd9e6d7c0556c8b04ae3c3a2dc35d62ad3373ab7f6a562d8199200"}, + {file = "grpcio-1.62.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:65034473fc09628a02fb85f26e73885cf1ed39ebd9cf270247b38689ff5942c5"}, + {file = "grpcio-1.62.2-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d2c1771d0ee3cf72d69bb5e82c6a82f27fbd504c8c782575eddb7839729fbaad"}, + {file = "grpcio-1.62.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:3abe6838196da518863b5d549938ce3159d809218936851b395b09cad9b5d64a"}, + {file = "grpcio-1.62.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5ffeb269f10cedb4f33142b89a061acda9f672fd1357331dbfd043422c94e9e"}, + {file = "grpcio-1.62.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404d3b4b6b142b99ba1cff0b2177d26b623101ea2ce51c25ef6e53d9d0d87bcc"}, + {file = "grpcio-1.62.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:262cda97efdabb20853d3b5a4c546a535347c14b64c017f628ca0cc7fa780cc6"}, + {file = "grpcio-1.62.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17708db5b11b966373e21519c4c73e5a750555f02fde82276ea2a267077c68ad"}, + {file = "grpcio-1.62.2-cp312-cp312-win32.whl", hash = "sha256:b7ec9e2f8ffc8436f6b642a10019fc513722858f295f7efc28de135d336ac189"}, + {file = "grpcio-1.62.2-cp312-cp312-win_amd64.whl", hash = "sha256:aa787b83a3cd5e482e5c79be030e2b4a122ecc6c5c6c4c42a023a2b581fdf17b"}, + {file = "grpcio-1.62.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:cfd23ad29bfa13fd4188433b0e250f84ec2c8ba66b14a9877e8bce05b524cf54"}, + {file = "grpcio-1.62.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:af15e9efa4d776dfcecd1d083f3ccfb04f876d613e90ef8432432efbeeac689d"}, + {file = "grpcio-1.62.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:f4aa94361bb5141a45ca9187464ae81a92a2a135ce2800b2203134f7a1a1d479"}, + {file = "grpcio-1.62.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82af3613a219512a28ee5c95578eb38d44dd03bca02fd918aa05603c41018051"}, + {file = "grpcio-1.62.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55ddaf53474e8caeb29eb03e3202f9d827ad3110475a21245f3c7712022882a9"}, + {file = "grpcio-1.62.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79b518c56dddeec79e5500a53d8a4db90da995dfe1738c3ac57fe46348be049"}, + {file = "grpcio-1.62.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a5eb4844e5e60bf2c446ef38c5b40d7752c6effdee882f716eb57ae87255d20a"}, + {file = "grpcio-1.62.2-cp37-cp37m-win_amd64.whl", hash = "sha256:aaae70364a2d1fb238afd6cc9fcb10442b66e397fd559d3f0968d28cc3ac929c"}, + {file = "grpcio-1.62.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:1bcfe5070e4406f489e39325b76caeadab28c32bf9252d3ae960c79935a4cc36"}, + {file = "grpcio-1.62.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:da6a7b6b938c15fa0f0568e482efaae9c3af31963eec2da4ff13a6d8ec2888e4"}, + {file = "grpcio-1.62.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:41955b641c34db7d84db8d306937b72bc4968eef1c401bea73081a8d6c3d8033"}, + {file = "grpcio-1.62.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c772f225483905f675cb36a025969eef9712f4698364ecd3a63093760deea1bc"}, + {file = "grpcio-1.62.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07ce1f775d37ca18c7a141300e5b71539690efa1f51fe17f812ca85b5e73262f"}, + {file = "grpcio-1.62.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:26f415f40f4a93579fd648f48dca1c13dfacdfd0290f4a30f9b9aeb745026811"}, + {file = "grpcio-1.62.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:db707e3685ff16fc1eccad68527d072ac8bdd2e390f6daa97bc394ea7de4acea"}, + {file = "grpcio-1.62.2-cp38-cp38-win32.whl", hash = "sha256:589ea8e75de5fd6df387de53af6c9189c5231e212b9aa306b6b0d4f07520fbb9"}, + {file = "grpcio-1.62.2-cp38-cp38-win_amd64.whl", hash = "sha256:3c3ed41f4d7a3aabf0f01ecc70d6b5d00ce1800d4af652a549de3f7cf35c4abd"}, + {file = "grpcio-1.62.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:162ccf61499c893831b8437120600290a99c0bc1ce7b51f2c8d21ec87ff6af8b"}, + {file = "grpcio-1.62.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:f27246d7da7d7e3bd8612f63785a7b0c39a244cf14b8dd9dd2f2fab939f2d7f1"}, + {file = "grpcio-1.62.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:2507006c8a478f19e99b6fe36a2464696b89d40d88f34e4b709abe57e1337467"}, + {file = "grpcio-1.62.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a90ac47a8ce934e2c8d71e317d2f9e7e6aaceb2d199de940ce2c2eb611b8c0f4"}, + {file = "grpcio-1.62.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99701979bcaaa7de8d5f60476487c5df8f27483624f1f7e300ff4669ee44d1f2"}, + {file = "grpcio-1.62.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:af7dc3f7a44f10863b1b0ecab4078f0a00f561aae1edbd01fd03ad4dcf61c9e9"}, + {file = "grpcio-1.62.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fa63245271920786f4cb44dcada4983a3516be8f470924528cf658731864c14b"}, + {file = "grpcio-1.62.2-cp39-cp39-win32.whl", hash = "sha256:c6ad9c39704256ed91a1cffc1379d63f7d0278d6a0bad06b0330f5d30291e3a3"}, + {file = "grpcio-1.62.2-cp39-cp39-win_amd64.whl", hash = "sha256:16da954692fd61aa4941fbeda405a756cd96b97b5d95ca58a92547bba2c1624f"}, + {file = "grpcio-1.62.2.tar.gz", hash = "sha256:c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.56.2)"] +protobuf = ["grpcio-tools (>=1.62.2)"] [[package]] name = "h11" @@ -2932,39 +2976,40 @@ lxml = ["lxml"] [[package]] name = "httpcore" -version = "0.17.3" +version = "1.0.5" description = "A minimal low-level HTTP client." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, - {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] [package.dependencies] -anyio = ">=3.0,<5.0" certifi = "*" h11 = ">=0.13,<0.15" -sniffio = "==1.*" [package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httpx" -version = "0.24.1" +version = "0.27.0" description = "The next generation HTTP client." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, - {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, ] [package.dependencies] +anyio = "*" certifi = "*" -httpcore = ">=0.15.0,<0.18.0" +httpcore = "==1.*" idna = "*" sniffio = "*" @@ -2976,18 +3021,18 @@ socks = ["socksio (==1.*)"] [[package]] name = "huggingface-hub" -version = "0.16.4" +version = "0.22.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = true -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.16.4-py3-none-any.whl", hash = "sha256:0d3df29932f334fead024afc7cb4cc5149d955238b8b5e42dcf9740d6995a349"}, - {file = "huggingface_hub-0.16.4.tar.gz", hash = "sha256:608c7d4f3d368b326d1747f91523dbd1f692871e8e2e7a4750314a2dd8b63e14"}, + {file = "huggingface_hub-0.22.2-py3-none-any.whl", hash = "sha256:3429e25f38ccb834d310804a3b711e7e4953db5a9e420cc147a5e194ca90fd17"}, + {file = "huggingface_hub-0.22.2.tar.gz", hash = "sha256:32e9a9a6843c92f253ff9ca16b9985def4d80a93fb357af5353f770ef74a81be"}, ] [package.dependencies] filelock = "*" -fsspec = "*" +fsspec = ">=2023.5.0" packaging = ">=20.9" pyyaml = ">=5.1" requests = "*" @@ -2995,26 +3040,28 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -inference = ["aiohttp", "pydantic"] -quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"] +hf-transfer = ["hf-transfer (>=0.1.4)"] +inference = ["aiohttp", "minijinja (>=1.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["torch"] -typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] +tensorflow-testing = ["keras (<3.0)", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors", "torch"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] [[package]] name = "identify" -version = "2.5.25" +version = "2.5.35" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.25-py2.py3-none-any.whl", hash = "sha256:9df2489842707d431b38ce3410ef8df40da5b10a3e28a3fcac1a42523e956409"}, - {file = "identify-2.5.25.tar.gz", hash = "sha256:db4de0e758c0db8f81996816cd2f3f2f8c5c8d49a7fd02f3b4109aac6fd80e29"}, + {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, + {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, ] [package.extras] @@ -3022,13 +3069,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.4" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -3044,40 +3091,40 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.1.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "importlib-resources" -version = "6.0.0" +version = "6.4.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.0-py3-none-any.whl", hash = "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"}, - {file = "importlib_resources-6.0.0.tar.gz", hash = "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2"}, + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "inflection" @@ -3114,13 +3161,13 @@ files = [ [[package]] name = "intrinio-sdk" -version = "6.24.1" +version = "6.27.2" description = "Intrinio API" optional = false python-versions = "*" files = [ - {file = "intrinio-sdk-6.24.1.tar.gz", hash = "sha256:d2aab87a63de7b2390f8c8b2281ee5290bb2cc14a6d10e148fcdc870e4eae12a"}, - {file = "intrinio_sdk-6.24.1-py3-none-any.whl", hash = "sha256:72c92a9b6154458759b3badba414fc1bf3b64c3589ab808bd7230a2ad087fccb"}, + {file = "intrinio-sdk-6.27.2.tar.gz", hash = "sha256:fed1a704f5278753efee1143589a7b48d6ffd28b2288012dffbfcaf4834db1be"}, + {file = "intrinio_sdk-6.27.2-py3-none-any.whl", hash = "sha256:6f3f905180073eaf1d2c9cb3441a181ed2c72ff1802af98bcc32a3db2ef06c24"}, ] [package.dependencies] @@ -3132,13 +3179,13 @@ urllib3 = ">=1.15" [[package]] name = "ipykernel" -version = "6.24.0" +version = "6.29.4" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.24.0-py3-none-any.whl", hash = "sha256:2f5fffc7ad8f1fd5aadb4e171ba9129d9668dbafa374732cf9511ada52d6547f"}, - {file = "ipykernel-6.24.0.tar.gz", hash = "sha256:29cea0a716b1176d002a61d0b0c851f34536495bc4ef7dd0222c88b41b816123"}, + {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, + {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, ] [package.dependencies] @@ -3152,7 +3199,7 @@ matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" -pyzmq = ">=20" +pyzmq = ">=24" tornado = ">=6.1" traitlets = ">=5.4.0" @@ -3161,7 +3208,7 @@ cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipympl" @@ -3230,21 +3277,21 @@ files = [ [[package]] name = "ipywidgets" -version = "8.0.7" +version = "8.1.2" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0"}, - {file = "ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf"}, + {file = "ipywidgets-8.1.2-py3-none-any.whl", hash = "sha256:bbe43850d79fb5e906b14801d6c01402857996864d1e5b6fa62dd2ee35559f60"}, + {file = "ipywidgets-8.1.2.tar.gz", hash = "sha256:d0b9b41e49bae926a866e613a39b0f0097745d2b9f1f3dd406641b4a57ec42c9"}, ] [package.dependencies] -ipykernel = ">=4.5.1" +comm = ">=0.1.3" ipython = ">=6.1.0" -jupyterlab-widgets = ">=3.0.7,<3.1.0" +jupyterlab-widgets = ">=3.0.10,<3.1.0" traitlets = ">=4.3.1" -widgetsnbextension = ">=4.0.7,<4.1.0" +widgetsnbextension = ">=4.0.10,<4.1.0" [package.extras] test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] @@ -3290,31 +3337,17 @@ arrow = ">=0.15.0" [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "itsdangerous" -version = "2.1.2" -description = "Safely pass data to untrusted environments and back." -optional = true -python-versions = ">=3.7" -files = [ - {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, - {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, -] +colors = ["colorama (>=0.4.6)"] [[package]] name = "jedi" @@ -3355,13 +3388,13 @@ pygls = ">=1.0.0,<2.0.0" [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -3372,29 +3405,26 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" -version = "1.3.1" +version = "1.4.0" description = "Lightweight pipelining with Python functions" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "joblib-1.3.1-py3-none-any.whl", hash = "sha256:89cf0529520e01b3de7ac7b74a8102c90d16d54c64b5dd98cafcd14307fdf915"}, - {file = "joblib-1.3.1.tar.gz", hash = "sha256:1f937906df65329ba98013dc9692fe22a4c5e4a648112de500508b18a21b41e3"}, + {file = "joblib-1.4.0-py3-none-any.whl", hash = "sha256:42942470d4062537be4d54c83511186da1fc14ba354961a2114da91efa9a4ed7"}, + {file = "joblib-1.4.0.tar.gz", hash = "sha256:1eb0dc091919cd384490de890cb5dfd538410a6d4b3b54eef09fb8c50b409b1c"}, ] [[package]] name = "json5" -version = "0.9.14" +version = "0.9.25" description = "A Python implementation of the JSON5 data format." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, - {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, ] -[package.extras] -dev = ["hypothesis"] - [[package]] name = "jsonpointer" version = "2.4" @@ -3461,13 +3491,13 @@ test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-comm [[package]] name = "jupyter-core" -version = "5.3.1" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, - {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] [package.dependencies] @@ -3476,32 +3506,8 @@ pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_ traitlets = ">=5.3" [package.extras] -docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-dash" -version = "0.4.2" -description = "Dash support for the Jupyter notebook interface" -optional = true -python-versions = ">=3.5" -files = [ - {file = "jupyter-dash-0.4.2.tar.gz", hash = "sha256:d546c7c25a2867c14c95a48af0ad572803b26915a5ce6052158c9dede4dbf48c"}, - {file = "jupyter_dash-0.4.2-py3-none-any.whl", hash = "sha256:b07d90ccf38d4dfb04efd630a2b2627f367b79fa4296ee3912d0c4e21e73e9b2"}, -] - -[package.dependencies] -ansi2html = "*" -dash = "*" -flask = "*" -ipykernel = "*" -ipython = "*" -nest-asyncio = "*" -requests = "*" -retrying = "*" - -[package.extras] -dev = ["jupyter-server-proxy", "jupyterlab (>=2.0)", "notebook (>=6.0)"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" @@ -3529,13 +3535,13 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= [[package]] name = "jupyter-lsp" -version = "2.2.0" +version = "2.2.5" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"}, - {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"}, + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, ] [package.dependencies] @@ -3576,13 +3582,13 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console [[package]] name = "jupyter-server-fileid" -version = "0.9.0" -description = "" +version = "0.9.2" +description = "Jupyter Server extension providing an implementation of the File ID service." optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_server_fileid-0.9.0-py3-none-any.whl", hash = "sha256:5b489c6fe6783c41174a728c7b81099608518387e53c3d53451a67f46a0cb7b0"}, - {file = "jupyter_server_fileid-0.9.0.tar.gz", hash = "sha256:171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8"}, + {file = "jupyter_server_fileid-0.9.2-py3-none-any.whl", hash = "sha256:76a2fbcea6950968485dcd509c2d6ac417ca11e61ab1ad447a475f0878ca808f"}, + {file = "jupyter_server_fileid-0.9.2.tar.gz", hash = "sha256:ffb11460ca5f8567644f6120b25613fca8e3f3048b38d14c6e3fe1902f314a9b"}, ] [package.dependencies] @@ -3591,7 +3597,7 @@ jupyter-server = ">=1.15,<3" [package.extras] cli = ["click"] -test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] +test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov", "pytest-jupyter"] [[package]] name = "jupyter-server-ydoc" @@ -3633,13 +3639,13 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we [[package]] name = "jupyterlab" -version = "3.6.5" +version = "3.6.7" description = "JupyterLab computational environment" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, - {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, + {file = "jupyterlab-3.6.7-py3-none-any.whl", hash = "sha256:d92d57d402f53922bca5090654843aa08e511290dff29fdb0809eafbbeb6df98"}, + {file = "jupyterlab-3.6.7.tar.gz", hash = "sha256:2fadeaec161b0d1aec19f17721d8b803aef1d267f89c8b636b703be14f435c8f"}, ] [package.dependencies] @@ -3657,6 +3663,7 @@ tomli = {version = "*", markers = "python_version < \"3.11\""} tornado = ">=6.1.0" [package.extras] +docs = ["jsx-lexer", "myst-parser", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8)", "sphinx-copybutton", "sphinx-rtd-theme"] test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "requests", "requests-cache", "virtualenv"] [[package]] @@ -3690,24 +3697,24 @@ jupyterlab = ">=3.1.0,<4.0.0a0" [[package]] name = "jupyterlab-pygments" -version = "0.2.2" +version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, ] [[package]] name = "jupyterlab-server" -version = "2.23.0" +version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, - {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, ] [package.dependencies] @@ -3723,94 +3730,130 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" -version = "3.0.8" +version = "3.0.10" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_widgets-3.0.8-py3-none-any.whl", hash = "sha256:4715912d6ceab839c9db35953c764b3214ebbc9161c809f6e0510168845dfdf5"}, - {file = "jupyterlab_widgets-3.0.8.tar.gz", hash = "sha256:d428ab97b8d87cc7c54cbf37644d6e0f0e662f23876e05fa460a73ec3257252a"}, + {file = "jupyterlab_widgets-3.0.10-py3-none-any.whl", hash = "sha256:dd61f3ae7a5a7f80299e14585ce6cf3d6925a96c9103c978eda293197730cb64"}, + {file = "jupyterlab_widgets-3.0.10.tar.gz", hash = "sha256:04f2ac04976727e4f9d0fa91cdc2f1ab860f965e504c29dbd6a65c882c9d04c0"}, ] [[package]] name = "kiwisolver" -version = "1.4.4" +version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.7" files = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, ] [[package]] @@ -3826,47 +3869,48 @@ files = [ [[package]] name = "lazy-object-proxy" -version = "1.9.0" +version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] [[package]] @@ -3894,23 +3938,24 @@ dask = ["dask[array] (>=2.0.0)", "dask[dataframe] (>=2.0.0)", "dask[distributed] [[package]] name = "lightning-utilities" -version = "0.9.0" -description = "PyTorch Lightning Sample project." +version = "0.11.2" +description = "Lightning toolbox for across the our ecosystem." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "lightning-utilities-0.9.0.tar.gz", hash = "sha256:efbf2c488c257f942abdfd06cf646fb84ca215a9663b60081811e22a15ee033b"}, - {file = "lightning_utilities-0.9.0-py3-none-any.whl", hash = "sha256:918dd90c775719e3855631db6282ad75c14da4c5727c4cebdd1589d865fad03d"}, + {file = "lightning-utilities-0.11.2.tar.gz", hash = "sha256:adf4cf9c5d912fe505db4729e51d1369c6927f3a8ac55a9dff895ce5c0da08d9"}, + {file = "lightning_utilities-0.11.2-py3-none-any.whl", hash = "sha256:541f471ed94e18a28d72879338c8c52e873bb46f4c47644d89228faeb6751159"}, ] [package.dependencies] packaging = ">=17.1" +setuptools = "*" typing-extensions = "*" [package.extras] cli = ["fire"] docs = ["requests (>=2.0.0)"] -typing = ["mypy (>=1.0.0)"] +typing = ["mypy (>=1.0.0)", "types-setuptools"] [[package]] name = "linearmodels" @@ -3958,46 +4003,46 @@ statsmodels = ">=0.11" [[package]] name = "llvmlite" -version = "0.40.1" +version = "0.41.1" description = "lightweight wrapper around basic LLVM functionality" optional = true python-versions = ">=3.8" files = [ - {file = "llvmlite-0.40.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:84ce9b1c7a59936382ffde7871978cddcda14098e5a76d961e204523e5c372fb"}, - {file = "llvmlite-0.40.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3673c53cb21c65d2ff3704962b5958e967c6fc0bd0cff772998face199e8d87b"}, - {file = "llvmlite-0.40.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bba2747cf5b4954e945c287fe310b3fcc484e2a9d1b0c273e99eb17d103bb0e6"}, - {file = "llvmlite-0.40.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbd5e82cc990e5a3e343a3bf855c26fdfe3bfae55225f00efd01c05bbda79918"}, - {file = "llvmlite-0.40.1-cp310-cp310-win32.whl", hash = "sha256:09f83ea7a54509c285f905d968184bba00fc31ebf12f2b6b1494d677bb7dde9b"}, - {file = "llvmlite-0.40.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b37297f3cbd68d14a97223a30620589d98ad1890e5040c9e5fc181063f4ed49"}, - {file = "llvmlite-0.40.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a66a5bd580951751b4268f4c3bddcef92682814d6bc72f3cd3bb67f335dd7097"}, - {file = "llvmlite-0.40.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:467b43836b388eaedc5a106d76761e388dbc4674b2f2237bc477c6895b15a634"}, - {file = "llvmlite-0.40.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c23edd196bd797dc3a7860799054ea3488d2824ecabc03f9135110c2e39fcbc"}, - {file = "llvmlite-0.40.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a36d9f244b6680cb90bbca66b146dabb2972f4180c64415c96f7c8a2d8b60a36"}, - {file = "llvmlite-0.40.1-cp311-cp311-win_amd64.whl", hash = "sha256:5b3076dc4e9c107d16dc15ecb7f2faf94f7736cd2d5e9f4dc06287fd672452c1"}, - {file = "llvmlite-0.40.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a7525db121f2e699809b539b5308228854ccab6693ecb01b52c44a2f5647e20"}, - {file = "llvmlite-0.40.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:84747289775d0874e506f907a4513db889471607db19b04de97d144047fec885"}, - {file = "llvmlite-0.40.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e35766e42acef0fe7d1c43169a8ffc327a47808fae6a067b049fe0e9bbf84dd5"}, - {file = "llvmlite-0.40.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cda71de10a1f48416309e408ea83dab5bf36058f83e13b86a2961defed265568"}, - {file = "llvmlite-0.40.1-cp38-cp38-win32.whl", hash = "sha256:96707ebad8b051bbb4fc40c65ef93b7eeee16643bd4d579a14d11578e4b7a647"}, - {file = "llvmlite-0.40.1-cp38-cp38-win_amd64.whl", hash = "sha256:e44f854dc11559795bcdeaf12303759e56213d42dabbf91a5897aa2d8b033810"}, - {file = "llvmlite-0.40.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f643d15aacd0b0b0dc8b74b693822ba3f9a53fa63bc6a178c2dba7cc88f42144"}, - {file = "llvmlite-0.40.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:39a0b4d0088c01a469a5860d2e2d7a9b4e6a93c0f07eb26e71a9a872a8cadf8d"}, - {file = "llvmlite-0.40.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9329b930d699699846623054121ed105fd0823ed2180906d3b3235d361645490"}, - {file = "llvmlite-0.40.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2dbbb8424037ca287983b115a29adf37d806baf7e1bf4a67bd2cffb74e085ed"}, - {file = "llvmlite-0.40.1-cp39-cp39-win32.whl", hash = "sha256:e74e7bec3235a1e1c9ad97d897a620c5007d0ed80c32c84c1d787e7daa17e4ec"}, - {file = "llvmlite-0.40.1-cp39-cp39-win_amd64.whl", hash = "sha256:ff8f31111bb99d135ff296757dc81ab36c2dee54ed4bd429158a96da9807c316"}, - {file = "llvmlite-0.40.1.tar.gz", hash = "sha256:5cdb0d45df602099d833d50bd9e81353a5e036242d3c003c5b294fc61d1986b4"}, + {file = "llvmlite-0.41.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1e1029d47ee66d3a0c4d6088641882f75b93db82bd0e6178f7bd744ebce42b9"}, + {file = "llvmlite-0.41.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:150d0bc275a8ac664a705135e639178883293cf08c1a38de3bbaa2f693a0a867"}, + {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eee5cf17ec2b4198b509272cf300ee6577229d237c98cc6e63861b08463ddc6"}, + {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd0338da625346538f1173a17cabf21d1e315cf387ca21b294ff209d176e244"}, + {file = "llvmlite-0.41.1-cp310-cp310-win32.whl", hash = "sha256:fa1469901a2e100c17eb8fe2678e34bd4255a3576d1a543421356e9c14d6e2ae"}, + {file = "llvmlite-0.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:2b76acee82ea0e9304be6be9d4b3840208d050ea0dcad75b1635fa06e949a0ae"}, + {file = "llvmlite-0.41.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:210e458723436b2469d61b54b453474e09e12a94453c97ea3fbb0742ba5a83d8"}, + {file = "llvmlite-0.41.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:855f280e781d49e0640aef4c4af586831ade8f1a6c4df483fb901cbe1a48d127"}, + {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67340c62c93a11fae482910dc29163a50dff3dfa88bc874872d28ee604a83be"}, + {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2181bb63ef3c607e6403813421b46982c3ac6bfc1f11fa16a13eaafb46f578e6"}, + {file = "llvmlite-0.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:9564c19b31a0434f01d2025b06b44c7ed422f51e719ab5d24ff03b7560066c9a"}, + {file = "llvmlite-0.41.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5940bc901fb0325970415dbede82c0b7f3e35c2d5fd1d5e0047134c2c46b3281"}, + {file = "llvmlite-0.41.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8b0a9a47c28f67a269bb62f6256e63cef28d3c5f13cbae4fab587c3ad506778b"}, + {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8afdfa6da33f0b4226af8e64cfc2b28986e005528fbf944d0a24a72acfc9432"}, + {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8454c1133ef701e8c050a59edd85d238ee18bb9a0eb95faf2fca8b909ee3c89a"}, + {file = "llvmlite-0.41.1-cp38-cp38-win32.whl", hash = "sha256:2d92c51e6e9394d503033ffe3292f5bef1566ab73029ec853861f60ad5c925d0"}, + {file = "llvmlite-0.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:df75594e5a4702b032684d5481db3af990b69c249ccb1d32687b8501f0689432"}, + {file = "llvmlite-0.41.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04725975e5b2af416d685ea0769f4ecc33f97be541e301054c9f741003085802"}, + {file = "llvmlite-0.41.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf14aa0eb22b58c231243dccf7e7f42f7beec48970f2549b3a6acc737d1a4ba4"}, + {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c32356f669e036eb01016e883b22add883c60739bc1ebee3a1cc0249a50828"}, + {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24091a6b31242bcdd56ae2dbea40007f462260bc9bdf947953acc39dffd54f8f"}, + {file = "llvmlite-0.41.1-cp39-cp39-win32.whl", hash = "sha256:880cb57ca49e862e1cd077104375b9d1dfdc0622596dfa22105f470d7bacb309"}, + {file = "llvmlite-0.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:92f093986ab92e71c9ffe334c002f96defc7986efda18397d0f08534f3ebdc4d"}, + {file = "llvmlite-0.41.1.tar.gz", hash = "sha256:f19f767a018e6ec89608e1f6b13348fa2fcde657151137cb64e56d48598a92db"}, ] [[package]] name = "loguru" -version = "0.7.0" +version = "0.7.2" description = "Python logging made (stupidly) simple" optional = false python-versions = ">=3.5" files = [ - {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, - {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, + {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, + {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, ] [package.dependencies] @@ -4005,22 +4050,22 @@ colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} [package.extras] -dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] +dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] [[package]] name = "lsprotocol" -version = "2023.0.0a2" +version = "2023.0.1" description = "Python implementation of the Language Server Protocol." optional = true python-versions = ">=3.7" files = [ - {file = "lsprotocol-2023.0.0a2-py3-none-any.whl", hash = "sha256:c4f2f77712b50d065b17f9b50d2b88c480dc2ce4bbaa56eea8269dbf54bc9701"}, - {file = "lsprotocol-2023.0.0a2.tar.gz", hash = "sha256:80aae7e39171b49025876a524937c10be2eb986f4be700ca22ee7d186b8488aa"}, + {file = "lsprotocol-2023.0.1-py3-none-any.whl", hash = "sha256:c75223c9e4af2f24272b14c6375787438279369236cd568f596d4951052a60f2"}, + {file = "lsprotocol-2023.0.1.tar.gz", hash = "sha256:cc5c15130d2403c18b734304339e51242d3018a05c4f7d0f198ad6e0cd21861d"}, ] [package.dependencies] attrs = ">=21.3.0" -cattrs = "*" +cattrs = "!=23.2.1" [[package]] name = "lunarcalendar" @@ -4040,120 +4085,184 @@ pytz = "*" [[package]] name = "lxml" -version = "4.9.3" +version = "5.2.1" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f7785f4f789fdb522729ae465adcaa099e2a3441519df750ebdccc481d961a1"}, + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cc6ee342fb7fa2471bd9b6d6fdfc78925a697bf5c2bcd0a302e98b0d35bfad3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:794f04eec78f1d0e35d9e0c36cbbb22e42d370dda1609fb03bcd7aeb458c6377"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817d420c60a5183953c783b0547d9eb43b7b344a2c46f69513d5952a78cddf3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2213afee476546a7f37c7a9b4ad4d74b1e112a6fafffc9185d6d21f043128c81"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b070bbe8d3f0f6147689bed981d19bbb33070225373338df755a46893528104a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e02c5175f63effbd7c5e590399c118d5db6183bbfe8e0d118bdb5c2d1b48d937"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3dc773b2861b37b41a6136e0b72a1a44689a9c4c101e0cddb6b854016acc0aa8"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:d7520db34088c96cc0e0a3ad51a4fd5b401f279ee112aa2b7f8f976d8582606d"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:bcbf4af004f98793a95355980764b3d80d47117678118a44a80b721c9913436a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2b44bec7adf3e9305ce6cbfa47a4395667e744097faed97abb4728748ba7d47"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1c5bb205e9212d0ebddf946bc07e73fa245c864a5f90f341d11ce7b0b854475d"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2c9d147f754b1b0e723e6afb7ba1566ecb162fe4ea657f53d2139bbf894d050a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3545039fa4779be2df51d6395e91a810f57122290864918b172d5dc7ca5bb433"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a91481dbcddf1736c98a80b122afa0f7296eeb80b72344d7f45dc9f781551f56"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2ddfe41ddc81f29a4c44c8ce239eda5ade4e7fc305fb7311759dd6229a080052"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a7baf9ffc238e4bf401299f50e971a45bfcc10a785522541a6e3179c83eabf0a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:31e9a882013c2f6bd2f2c974241bf4ba68c85eba943648ce88936d23209a2e01"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a15438253b34e6362b2dc41475e7f80de76320f335e70c5528b7148cac253a1"}, + {file = "lxml-5.2.1-cp310-cp310-win32.whl", hash = "sha256:6992030d43b916407c9aa52e9673612ff39a575523c5f4cf72cdef75365709a5"}, + {file = "lxml-5.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:da052e7962ea2d5e5ef5bc0355d55007407087392cf465b7ad84ce5f3e25fe0f"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:70ac664a48aa64e5e635ae5566f5227f2ab7f66a3990d67566d9907edcbbf867"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1ae67b4e737cddc96c99461d2f75d218bdf7a0c3d3ad5604d1f5e7464a2f9ffe"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f18a5a84e16886898e51ab4b1d43acb3083c39b14c8caeb3589aabff0ee0b270"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6f2c8372b98208ce609c9e1d707f6918cc118fea4e2c754c9f0812c04ca116d"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:394ed3924d7a01b5bd9a0d9d946136e1c2f7b3dc337196d99e61740ed4bc6fe1"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d077bc40a1fe984e1a9931e801e42959a1e6598edc8a3223b061d30fbd26bbc"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764b521b75701f60683500d8621841bec41a65eb739b8466000c6fdbc256c240"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a6b45da02336895da82b9d472cd274b22dc27a5cea1d4b793874eead23dd14f"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:5ea7b6766ac2dfe4bcac8b8595107665a18ef01f8c8343f00710b85096d1b53a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:e196a4ff48310ba62e53a8e0f97ca2bca83cdd2fe2934d8b5cb0df0a841b193a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:200e63525948e325d6a13a76ba2911f927ad399ef64f57898cf7c74e69b71095"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dae0ed02f6b075426accbf6b2863c3d0a7eacc1b41fb40f2251d931e50188dad"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:ab31a88a651039a07a3ae327d68ebdd8bc589b16938c09ef3f32a4b809dc96ef"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:df2e6f546c4df14bc81f9498bbc007fbb87669f1bb707c6138878c46b06f6510"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5dd1537e7cc06efd81371f5d1a992bd5ab156b2b4f88834ca852de4a8ea523fa"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b9ec9c9978b708d488bec36b9e4c94d88fd12ccac3e62134a9d17ddba910ea9"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8e77c69d5892cb5ba71703c4057091e31ccf534bd7f129307a4d084d90d014b8"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a8d5c70e04aac1eda5c829a26d1f75c6e5286c74743133d9f742cda8e53b9c2f"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c94e75445b00319c1fad60f3c98b09cd63fe1134a8a953dcd48989ef42318534"}, + {file = "lxml-5.2.1-cp311-cp311-win32.whl", hash = "sha256:4951e4f7a5680a2db62f7f4ab2f84617674d36d2d76a729b9a8be4b59b3659be"}, + {file = "lxml-5.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:5c670c0406bdc845b474b680b9a5456c561c65cf366f8db5a60154088c92d102"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4"}, + {file = "lxml-5.2.1-cp312-cp312-win32.whl", hash = "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134"}, + {file = "lxml-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a"}, + {file = "lxml-5.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:70a9768e1b9d79edca17890175ba915654ee1725975d69ab64813dd785a2bd5c"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38d7b9a690b090de999835f0443d8aa93ce5f2064035dfc48f27f02b4afc3d0"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5670fb70a828663cc37552a2a85bf2ac38475572b0e9b91283dc09efb52c41d1"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:958244ad566c3ffc385f47dddde4145088a0ab893504b54b52c041987a8c1863"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6241d4eee5f89453307c2f2bfa03b50362052ca0af1efecf9fef9a41a22bb4f"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2a66bf12fbd4666dd023b6f51223aed3d9f3b40fef06ce404cb75bafd3d89536"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:9123716666e25b7b71c4e1789ec829ed18663152008b58544d95b008ed9e21e9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:0c3f67e2aeda739d1cc0b1102c9a9129f7dc83901226cc24dd72ba275ced4218"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5d5792e9b3fb8d16a19f46aa8208987cfeafe082363ee2745ea8b643d9cc5b45"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:88e22fc0a6684337d25c994381ed8a1580a6f5ebebd5ad41f89f663ff4ec2885"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:21c2e6b09565ba5b45ae161b438e033a86ad1736b8c838c766146eff8ceffff9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_s390x.whl", hash = "sha256:afbbdb120d1e78d2ba8064a68058001b871154cc57787031b645c9142b937a62"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:627402ad8dea044dde2eccde4370560a2b750ef894c9578e1d4f8ffd54000461"}, + {file = "lxml-5.2.1-cp36-cp36m-win32.whl", hash = "sha256:e89580a581bf478d8dcb97d9cd011d567768e8bc4095f8557b21c4d4c5fea7d0"}, + {file = "lxml-5.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:59565f10607c244bc4c05c0c5fa0c190c990996e0c719d05deec7030c2aa8289"}, + {file = "lxml-5.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:857500f88b17a6479202ff5fe5f580fc3404922cd02ab3716197adf1ef628029"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56c22432809085b3f3ae04e6e7bdd36883d7258fcd90e53ba7b2e463efc7a6af"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a55ee573116ba208932e2d1a037cc4b10d2c1cb264ced2184d00b18ce585b2c0"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:6cf58416653c5901e12624e4013708b6e11142956e7f35e7a83f1ab02f3fe456"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:64c2baa7774bc22dd4474248ba16fe1a7f611c13ac6123408694d4cc93d66dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:74b28c6334cca4dd704e8004cba1955af0b778cf449142e581e404bd211fb619"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7221d49259aa1e5a8f00d3d28b1e0b76031655ca74bb287123ef56c3db92f213"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3dbe858ee582cbb2c6294dc85f55b5f19c918c2597855e950f34b660f1a5ede6"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:04ab5415bf6c86e0518d57240a96c4d1fcfc3cb370bb2ac2a732b67f579e5a04"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:6ab833e4735a7e5533711a6ea2df26459b96f9eec36d23f74cafe03631647c41"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f443cdef978430887ed55112b491f670bba6462cea7a7742ff8f14b7abb98d75"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9e2addd2d1866fe112bc6f80117bcc6bc25191c5ed1bfbcf9f1386a884252ae8"}, + {file = "lxml-5.2.1-cp37-cp37m-win32.whl", hash = "sha256:f51969bac61441fd31f028d7b3b45962f3ecebf691a510495e5d2cd8c8092dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b0b58fbfa1bf7367dde8a557994e3b1637294be6cf2169810375caf8571a085c"}, + {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3e183c6e3298a2ed5af9d7a356ea823bccaab4ec2349dc9ed83999fd289d14d5"}, + {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:804f74efe22b6a227306dd890eecc4f8c59ff25ca35f1f14e7482bbce96ef10b"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08802f0c56ed150cc6885ae0788a321b73505d2263ee56dad84d200cab11c07a"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8c09ed18ecb4ebf23e02b8e7a22a05d6411911e6fabef3a36e4f371f4f2585"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d30321949861404323c50aebeb1943461a67cd51d4200ab02babc58bd06a86"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b560e3aa4b1d49e0e6c847d72665384db35b2f5d45f8e6a5c0072e0283430533"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:058a1308914f20784c9f4674036527e7c04f7be6fb60f5d61353545aa7fcb739"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:adfb84ca6b87e06bc6b146dc7da7623395db1e31621c4785ad0658c5028b37d7"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:417d14450f06d51f363e41cace6488519038f940676ce9664b34ebf5653433a5"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a2dfe7e2473f9b59496247aad6e23b405ddf2e12ef0765677b0081c02d6c2c0b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bf2e2458345d9bffb0d9ec16557d8858c9c88d2d11fed53998512504cd9df49b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:58278b29cb89f3e43ff3e0c756abbd1518f3ee6adad9e35b51fb101c1c1daaec"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:64641a6068a16201366476731301441ce93457eb8452056f570133a6ceb15fca"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:78bfa756eab503673991bdcf464917ef7845a964903d3302c5f68417ecdc948c"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:11a04306fcba10cd9637e669fd73aa274c1c09ca64af79c041aa820ea992b637"}, + {file = "lxml-5.2.1-cp38-cp38-win32.whl", hash = "sha256:66bc5eb8a323ed9894f8fa0ee6cb3e3fb2403d99aee635078fd19a8bc7a5a5da"}, + {file = "lxml-5.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:9676bfc686fa6a3fa10cd4ae6b76cae8be26eb5ec6811d2a325636c460da1806"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cf22b41fdae514ee2f1691b6c3cdeae666d8b7fa9434de445f12bbeee0cf48dd"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec42088248c596dbd61d4ae8a5b004f97a4d91a9fd286f632e42e60b706718d7"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd53553ddad4a9c2f1f022756ae64abe16da1feb497edf4d9f87f99ec7cf86bd"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feaa45c0eae424d3e90d78823f3828e7dc42a42f21ed420db98da2c4ecf0a2cb"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddc678fb4c7e30cf830a2b5a8d869538bc55b28d6c68544d09c7d0d8f17694dc"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:853e074d4931dbcba7480d4dcab23d5c56bd9607f92825ab80ee2bd916edea53"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4691d60512798304acb9207987e7b2b7c44627ea88b9d77489bbe3e6cc3bd4"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:beb72935a941965c52990f3a32d7f07ce869fe21c6af8b34bf6a277b33a345d3"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:6588c459c5627fefa30139be4d2e28a2c2a1d0d1c265aad2ba1935a7863a4913"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:588008b8497667f1ddca7c99f2f85ce8511f8f7871b4a06ceede68ab62dff64b"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6787b643356111dfd4032b5bffe26d2f8331556ecb79e15dacb9275da02866e"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c17b64b0a6ef4e5affae6a3724010a7a66bda48a62cfe0674dabd46642e8b54"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:27aa20d45c2e0b8cd05da6d4759649170e8dfc4f4e5ef33a34d06f2d79075d57"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d4f2cc7060dc3646632d7f15fe68e2fa98f58e35dd5666cd525f3b35d3fed7f8"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff46d772d5f6f73564979cd77a4fffe55c916a05f3cb70e7c9c0590059fb29ef"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96323338e6c14e958d775700ec8a88346014a85e5de73ac7967db0367582049b"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:52421b41ac99e9d91934e4d0d0fe7da9f02bfa7536bb4431b4c05c906c8c6919"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7a7efd5b6d3e30d81ec68ab8a88252d7c7c6f13aaa875009fe3097eb4e30b84c"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ed777c1e8c99b63037b91f9d73a6aad20fd035d77ac84afcc205225f8f41188"}, + {file = "lxml-5.2.1-cp39-cp39-win32.whl", hash = "sha256:644df54d729ef810dcd0f7732e50e5ad1bd0a135278ed8d6bcb06f33b6b6f708"}, + {file = "lxml-5.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:9ca66b8e90daca431b7ca1408cae085d025326570e57749695d6a01454790e95"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b0ff53900566bc6325ecde9181d89afadc59c5ffa39bddf084aaedfe3b06a11"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6037392f2d57793ab98d9e26798f44b8b4da2f2464388588f48ac52c489ea1"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9c07e7a45bb64e21df4b6aa623cb8ba214dfb47d2027d90eac197329bb5e94"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3249cc2989d9090eeac5467e50e9ec2d40704fea9ab72f36b034ea34ee65ca98"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f42038016852ae51b4088b2862126535cc4fc85802bfe30dea3500fdfaf1864e"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:533658f8fbf056b70e434dff7e7aa611bcacb33e01f75de7f821810e48d1bb66"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:622020d4521e22fb371e15f580d153134bfb68d6a429d1342a25f051ec72df1c"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7b51824aa0ee957ccd5a741c73e6851de55f40d807f08069eb4c5a26b2baa"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c6ad0fbf105f6bcc9300c00010a2ffa44ea6f555df1a2ad95c88f5656104817"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e233db59c8f76630c512ab4a4daf5a5986da5c3d5b44b8e9fc742f2a24dbd460"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a014510830df1475176466b6087fc0c08b47a36714823e58d8b8d7709132a96"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d38c8f50ecf57f0463399569aa388b232cf1a2ffb8f0a9a5412d0db57e054860"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5aea8212fb823e006b995c4dda533edcf98a893d941f173f6c9506126188860d"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff097ae562e637409b429a7ac958a20aab237a0378c42dabaa1e3abf2f896e5f"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f5d65c39f16717a47c36c756af0fb36144069c4718824b7533f803ecdf91138"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3d0c3dd24bb4605439bf91068598d00c6370684f8de4a67c2992683f6c309d6b"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e32be23d538753a8adb6c85bd539f5fd3b15cb987404327c569dfc5fd8366e85"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cc518cea79fd1e2f6c90baafa28906d4309d24f3a63e801d855e7424c5b34144"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0af35bd8ebf84888373630f73f24e86bf016642fb8576fba49d3d6b560b7cbc"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8aca2e3a72f37bfc7b14ba96d4056244001ddcc18382bd0daa087fd2e68a354"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ca1e8188b26a819387b29c3895c47a5e618708fe6f787f3b1a471de2c4a94d9"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c8ba129e6d3b0136a0f50345b2cb3db53f6bda5dd8c7f5d83fbccba97fb5dcb5"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e998e304036198b4f6914e6a1e2b6f925208a20e2042563d9734881150c6c246"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d3be9b2076112e51b323bdf6d5a7f8a798de55fb8d95fcb64bd179460cdc0704"}, + {file = "lxml-5.2.1.tar.gz", hash = "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] +source = ["Cython (>=3.0.10)"] [[package]] name = "macholib" -version = "1.16.2" +version = "1.16.3" description = "Mach-O header analysis and editing" optional = true python-versions = "*" files = [ - {file = "macholib-1.16.2-py2.py3-none-any.whl", hash = "sha256:44c40f2cd7d6726af8fa6fe22549178d3a4dfecc35a9cd15ea916d9c83a688e0"}, - {file = "macholib-1.16.2.tar.gz", hash = "sha256:557bbfa1bb255c20e9abafe7ed6cd8046b48d9525db2f9b77d3122a63a2a8bf8"}, + {file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"}, + {file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"}, ] [package.dependencies] @@ -4161,19 +4270,20 @@ altgraph = ">=0.17" [[package]] name = "markdown" -version = "3.4.3" +version = "3.6" description = "Python implementation of John Gruber's Markdown." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Markdown-3.4.3-py3-none-any.whl", hash = "sha256:065fd4df22da73a625f14890dd77eb8040edcbd68794bcd35943be14490608b2"}, - {file = "Markdown-3.4.3.tar.gz", hash = "sha256:8bf101198e004dc93e84a12a7395e31aac6a9c9942848ae1d99b9d72cf9b3520"}, + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] @@ -4200,121 +4310,127 @@ testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,< [[package]] name = "markupsafe" -version = "2.1.3" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "matplotlib" -version = "3.7.2" +version = "3.7.5" description = "Python plotting package" optional = false python-versions = ">=3.8" files = [ - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:2699f7e73a76d4c110f4f25be9d2496d6ab4f17345307738557d345f099e07de"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a8035ba590658bae7562786c9cc6ea1a84aa49d3afab157e414c9e2ea74f496d"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f8e4a49493add46ad4a8c92f63e19d548b2b6ebbed75c6b4c7f46f57d36cdd1"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71667eb2ccca4c3537d9414b1bc00554cb7f91527c17ee4ec38027201f8f1603"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:152ee0b569a37630d8628534c628456b28686e085d51394da6b71ef84c4da201"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070f8dddd1f5939e60aacb8fa08f19551f4b0140fab16a3669d5cd6e9cb28fc8"}, - {file = "matplotlib-3.7.2-cp310-cp310-win32.whl", hash = "sha256:fdbb46fad4fb47443b5b8ac76904b2e7a66556844f33370861b4788db0f8816a"}, - {file = "matplotlib-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:23fb1750934e5f0128f9423db27c474aa32534cec21f7b2153262b066a581fd1"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:30e1409b857aa8a747c5d4f85f63a79e479835f8dffc52992ac1f3f25837b544"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:50e0a55ec74bf2d7a0ebf50ac580a209582c2dd0f7ab51bc270f1b4a0027454e"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac60daa1dc83e8821eed155796b0f7888b6b916cf61d620a4ddd8200ac70cd64"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305e3da477dc8607336ba10bac96986d6308d614706cae2efe7d3ffa60465b24"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c308b255efb9b06b23874236ec0f10f026673ad6515f602027cc8ac7805352d"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c521e21031632aa0d87ca5ba0c1c05f3daacadb34c093585a0be6780f698e4"}, - {file = "matplotlib-3.7.2-cp311-cp311-win32.whl", hash = "sha256:26bede320d77e469fdf1bde212de0ec889169b04f7f1179b8930d66f82b30cbc"}, - {file = "matplotlib-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4860132c8c05261a5f5f8467f1b269bf1c7c23902d75f2be57c4a7f2394b3e"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:a1733b8e84e7e40a9853e505fe68cc54339f97273bdfe6f3ed980095f769ddc7"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d9881356dc48e58910c53af82b57183879129fa30492be69058c5b0d9fddf391"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f081c03f413f59390a80b3e351cc2b2ea0205839714dbc364519bcf51f4b56ca"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cd120fca3407a225168238b790bd5c528f0fafde6172b140a2f3ab7a4ea63e9"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c1590b90aa7bd741b54c62b78de05d4186271e34e2377e0289d943b3522273"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d2ff3c984b8a569bc1383cd468fc06b70d7b59d5c2854ca39f1436ae8394117"}, - {file = "matplotlib-3.7.2-cp38-cp38-win32.whl", hash = "sha256:5dea00b62d28654b71ca92463656d80646675628d0828e08a5f3b57e12869e13"}, - {file = "matplotlib-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f506a1776ee94f9e131af1ac6efa6e5bc7cb606a3e389b0ccb6e657f60bb676"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6515e878f91894c2e4340d81f0911857998ccaf04dbc1bba781e3d89cbf70608"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:71f7a8c6b124e904db550f5b9fe483d28b896d4135e45c4ea381ad3b8a0e3256"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12f01b92ecd518e0697da4d97d163b2b3aa55eb3eb4e2c98235b3396d7dad55f"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e28d6396563955f7af437894a36bf2b279462239a41028323e04b85179058b"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbcf59334ff645e6a67cd5f78b4b2cdb76384cdf587fa0d2dc85f634a72e1a3e"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:318c89edde72ff95d8df67d82aca03861240512994a597a435a1011ba18dbc7f"}, - {file = "matplotlib-3.7.2-cp39-cp39-win32.whl", hash = "sha256:ce55289d5659b5b12b3db4dc9b7075b70cef5631e56530f14b2945e8836f2d20"}, - {file = "matplotlib-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:2ecb5be2b2815431c81dc115667e33da0f5a1bcf6143980d180d09a717c4a12e"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdcd28360dbb6203fb5219b1a5658df226ac9bebc2542a9e8f457de959d713d0"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3cca3e842b11b55b52c6fb8bd6a4088693829acbfcdb3e815fa9b7d5c92c1b"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebf577c7a6744e9e1bd3fee45fc74a02710b214f94e2bde344912d85e0c9af7c"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:936bba394682049919dda062d33435b3be211dc3dcaa011e09634f060ec878b2"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bc221ffbc2150458b1cd71cdd9ddd5bb37962b036e41b8be258280b5b01da1dd"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35d74ebdb3f71f112b36c2629cf32323adfbf42679e2751252acd468f5001c07"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717157e61b3a71d3d26ad4e1770dc85156c9af435659a25ee6407dc866cb258d"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"}, - {file = "matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"}, + {file = "matplotlib-3.7.5-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:4a87b69cb1cb20943010f63feb0b2901c17a3b435f75349fd9865713bfa63925"}, + {file = "matplotlib-3.7.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d3ce45010fefb028359accebb852ca0c21bd77ec0f281952831d235228f15810"}, + {file = "matplotlib-3.7.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fbea1e762b28400393d71be1a02144aa16692a3c4c676ba0178ce83fc2928fdd"}, + {file = "matplotlib-3.7.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec0e1adc0ad70ba8227e957551e25a9d2995e319c29f94a97575bb90fa1d4469"}, + {file = "matplotlib-3.7.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6738c89a635ced486c8a20e20111d33f6398a9cbebce1ced59c211e12cd61455"}, + {file = "matplotlib-3.7.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1210b7919b4ed94b5573870f316bca26de3e3b07ffdb563e79327dc0e6bba515"}, + {file = "matplotlib-3.7.5-cp310-cp310-win32.whl", hash = "sha256:068ebcc59c072781d9dcdb82f0d3f1458271c2de7ca9c78f5bd672141091e9e1"}, + {file = "matplotlib-3.7.5-cp310-cp310-win_amd64.whl", hash = "sha256:f098ffbaab9df1e3ef04e5a5586a1e6b1791380698e84938d8640961c79b1fc0"}, + {file = "matplotlib-3.7.5-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f65342c147572673f02a4abec2d5a23ad9c3898167df9b47c149f32ce61ca078"}, + {file = "matplotlib-3.7.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4ddf7fc0e0dc553891a117aa083039088d8a07686d4c93fb8a810adca68810af"}, + {file = "matplotlib-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ccb830fc29442360d91be48527809f23a5dcaee8da5f4d9b2d5b867c1b087b8"}, + {file = "matplotlib-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efc6bb28178e844d1f408dd4d6341ee8a2e906fc9e0fa3dae497da4e0cab775d"}, + {file = "matplotlib-3.7.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b15c4c2d374f249f324f46e883340d494c01768dd5287f8bc00b65b625ab56c"}, + {file = "matplotlib-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d028555421912307845e59e3de328260b26d055c5dac9b182cc9783854e98fb"}, + {file = "matplotlib-3.7.5-cp311-cp311-win32.whl", hash = "sha256:fe184b4625b4052fa88ef350b815559dd90cc6cc8e97b62f966e1ca84074aafa"}, + {file = "matplotlib-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:084f1f0f2f1010868c6f1f50b4e1c6f2fb201c58475494f1e5b66fed66093647"}, + {file = "matplotlib-3.7.5-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:34bceb9d8ddb142055ff27cd7135f539f2f01be2ce0bafbace4117abe58f8fe4"}, + {file = "matplotlib-3.7.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c5a2134162273eb8cdfd320ae907bf84d171de948e62180fa372a3ca7cf0f433"}, + {file = "matplotlib-3.7.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:039ad54683a814002ff37bf7981aa1faa40b91f4ff84149beb53d1eb64617980"}, + {file = "matplotlib-3.7.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d742ccd1b09e863b4ca58291728db645b51dab343eebb08d5d4b31b308296ce"}, + {file = "matplotlib-3.7.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:743b1c488ca6a2bc7f56079d282e44d236bf375968bfd1b7ba701fd4d0fa32d6"}, + {file = "matplotlib-3.7.5-cp312-cp312-win_amd64.whl", hash = "sha256:fbf730fca3e1f23713bc1fae0a57db386e39dc81ea57dc305c67f628c1d7a342"}, + {file = "matplotlib-3.7.5-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:cfff9b838531698ee40e40ea1a8a9dc2c01edb400b27d38de6ba44c1f9a8e3d2"}, + {file = "matplotlib-3.7.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:1dbcca4508bca7847fe2d64a05b237a3dcaec1f959aedb756d5b1c67b770c5ee"}, + {file = "matplotlib-3.7.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4cdf4ef46c2a1609a50411b66940b31778db1e4b73d4ecc2eaa40bd588979b13"}, + {file = "matplotlib-3.7.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:167200ccfefd1674b60e957186dfd9baf58b324562ad1a28e5d0a6b3bea77905"}, + {file = "matplotlib-3.7.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:53e64522934df6e1818b25fd48cf3b645b11740d78e6ef765fbb5fa5ce080d02"}, + {file = "matplotlib-3.7.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e3bc79b2d7d615067bd010caff9243ead1fc95cf735c16e4b2583173f717eb"}, + {file = "matplotlib-3.7.5-cp38-cp38-win32.whl", hash = "sha256:6b641b48c6819726ed47c55835cdd330e53747d4efff574109fd79b2d8a13748"}, + {file = "matplotlib-3.7.5-cp38-cp38-win_amd64.whl", hash = "sha256:f0b60993ed3488b4532ec6b697059897891927cbfc2b8d458a891b60ec03d9d7"}, + {file = "matplotlib-3.7.5-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:090964d0afaff9c90e4d8de7836757e72ecfb252fb02884016d809239f715651"}, + {file = "matplotlib-3.7.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9fc6fcfbc55cd719bc0bfa60bde248eb68cf43876d4c22864603bdd23962ba25"}, + {file = "matplotlib-3.7.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7cc3078b019bb863752b8b60e8b269423000f1603cb2299608231996bd9d54"}, + {file = "matplotlib-3.7.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e4e9a868e8163abaaa8259842d85f949a919e1ead17644fb77a60427c90473c"}, + {file = "matplotlib-3.7.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa7ebc995a7d747dacf0a717d0eb3aa0f0c6a0e9ea88b0194d3a3cd241a1500f"}, + {file = "matplotlib-3.7.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3785bfd83b05fc0e0c2ae4c4a90034fe693ef96c679634756c50fe6efcc09856"}, + {file = "matplotlib-3.7.5-cp39-cp39-win32.whl", hash = "sha256:29b058738c104d0ca8806395f1c9089dfe4d4f0f78ea765c6c704469f3fffc81"}, + {file = "matplotlib-3.7.5-cp39-cp39-win_amd64.whl", hash = "sha256:fd4028d570fa4b31b7b165d4a685942ae9cdc669f33741e388c01857d9723eab"}, + {file = "matplotlib-3.7.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2a9a3f4d6a7f88a62a6a18c7e6a84aedcaf4faf0708b4ca46d87b19f1b526f88"}, + {file = "matplotlib-3.7.5-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9b3fd853d4a7f008a938df909b96db0b454225f935d3917520305b90680579c"}, + {file = "matplotlib-3.7.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ad550da9f160737d7890217c5eeed4337d07e83ca1b2ca6535078f354e7675"}, + {file = "matplotlib-3.7.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:20da7924a08306a861b3f2d1da0d1aa9a6678e480cf8eacffe18b565af2813e7"}, + {file = "matplotlib-3.7.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b45c9798ea6bb920cb77eb7306409756a7fab9db9b463e462618e0559aecb30e"}, + {file = "matplotlib-3.7.5-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a99866267da1e561c7776fe12bf4442174b79aac1a47bd7e627c7e4d077ebd83"}, + {file = "matplotlib-3.7.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b6aa62adb6c268fc87d80f963aca39c64615c31830b02697743c95590ce3fbb"}, + {file = "matplotlib-3.7.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e530ab6a0afd082d2e9c17eb1eb064a63c5b09bb607b2b74fa41adbe3e162286"}, + {file = "matplotlib-3.7.5.tar.gz", hash = "sha256:1e5c971558ebc811aa07f54c7b7c677d78aa518ef4c390e14673a09e0860184a"}, ] [package.dependencies] @@ -4323,21 +4439,21 @@ cycler = ">=0.10" fonttools = ">=4.22.0" importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.0.1" -numpy = ">=1.20" +numpy = ">=1.20,<2" packaging = ">=20.0" pillow = ">=6.2.0" -pyparsing = ">=2.3.1,<3.1" +pyparsing = ">=2.3.1" python-dateutil = ">=2.7" [[package]] name = "matplotlib-inline" -version = "0.1.6" +version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] [package.dependencies] @@ -4375,13 +4491,13 @@ testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] [[package]] name = "mistune" -version = "3.0.1" +version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.7" files = [ - {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, - {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] [[package]] @@ -4413,24 +4529,24 @@ files = [ [[package]] name = "more-itertools" -version = "9.1.0" +version = "10.2.0" description = "More routines for operating on iterables, beyond itertools" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"}, - {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"}, + {file = "more-itertools-10.2.0.tar.gz", hash = "sha256:8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1"}, + {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, ] [[package]] name = "mplfinance" -version = "0.12.9b7" +version = "0.12.10b0" description = "Utilities for the visualization, and visual analysis, of financial data" optional = false python-versions = "*" files = [ - {file = "mplfinance-0.12.9b7-py3-none-any.whl", hash = "sha256:8b5d186f0cd504f34da7547933c27e87f237fe3721a83de6b93c6eaf28377dcd"}, - {file = "mplfinance-0.12.9b7.tar.gz", hash = "sha256:8c0ef47dfb465ea95b7c3577e261b57b5d6ad2bce6d287a17b8b4dd2fbacc92e"}, + {file = "mplfinance-0.12.10b0-py3-none-any.whl", hash = "sha256:76d3b095f05ff35de730751649de063bea4064d0c49b21b6182c82997a7f52bb"}, + {file = "mplfinance-0.12.10b0.tar.gz", hash = "sha256:7da150b5851aa5119ad6e06b55e48338b619bb6773f1b85df5de67a5ffd917bf"}, ] [package.dependencies] @@ -4455,85 +4571,101 @@ requests = ">=2.28.1" [[package]] name = "multidict" -version = "6.0.4" +version = "6.0.5" description = "multidict implementation" optional = false python-versions = ">=3.7" files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] [[package]] @@ -4549,49 +4681,49 @@ files = [ [[package]] name = "mutagen" -version = "1.46.0" +version = "1.47.0" description = "read and write audio tags for many formats" optional = true python-versions = ">=3.7" files = [ - {file = "mutagen-1.46.0-py3-none-any.whl", hash = "sha256:8af0728aa2d5c3ee5a727e28d0627966641fddfe804c23eabb5926a4d770aed5"}, - {file = "mutagen-1.46.0.tar.gz", hash = "sha256:6e5f8ba84836b99fe60be5fb27f84be4ad919bbb6b49caa6ae81e70584b55e58"}, + {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, + {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, ] [[package]] name = "mypy" -version = "1.5.1" +version = "1.9.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, + {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, + {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, + {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, + {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, + {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, + {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, + {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, + {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, + {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, + {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, + {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, + {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, + {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, + {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, + {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, + {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, + {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, ] [package.dependencies] @@ -4602,6 +4734,7 @@ typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] +mypyc = ["setuptools (>=50)"] reports = ["lxml"] [[package]] @@ -4677,34 +4810,35 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p [[package]] name = "nbclient" -version = "0.6.8" +version = "0.10.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.6.8-py3-none-any.whl", hash = "sha256:7cce8b415888539180535953f80ea2385cdbb444944cdeb73ffac1556fdbc228"}, - {file = "nbclient-0.6.8.tar.gz", hash = "sha256:268fde3457cafe1539e32eb1c6d796bbedb90b9e92bacd3e43d83413734bb0e8"}, + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, ] [package.dependencies] -jupyter-client = ">=6.1.5" -nbformat = ">=5.0" -nest-asyncio = "*" -traitlets = ">=5.2.2" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" [package.extras] -sphinx = ["Sphinx (>=1.7)", "autodoc-traits", "mock", "moto", "myst-parser", "sphinx-book-theme"] -test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets", "mypy", "nbconvert", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.7.2" -description = "Converting Jupyter Notebooks" +version = "7.16.3" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.7.2-py3-none-any.whl", hash = "sha256:25e0cf2b663ee0cd5a90afb6b2f2940bf1abe5cc5bc995b88c8156ca65fa7ede"}, - {file = "nbconvert-7.7.2.tar.gz", hash = "sha256:36d3e7bf32f0c075878176cdeeb645931c994cbed5b747bc7a570ba8cd2321f3"}, + {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, + {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, ] [package.dependencies] @@ -4731,24 +4865,24 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.1" +version = "5.10.4" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.1-py3-none-any.whl", hash = "sha256:b7968ebf4811178a4108ee837eae1442e3f054132100f0359219e9ed1ce3ca45"}, - {file = "nbformat-5.9.1.tar.gz", hash = "sha256:3a7f52d040639cbd8a3890218c8b0ffb93211588c57446c90095e32ba5881b5d"}, + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, ] [package.dependencies] -fastjsonschema = "*" +fastjsonschema = ">=2.15" jsonschema = ">=2.6" -jupyter-core = "*" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" traitlets = ">=5.1" [package.extras] @@ -4757,32 +4891,32 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nbmake" -version = "1.4.1" +version = "1.1" description = "Pytest plugin for testing notebooks" optional = false -python-versions = ">=3.7.0,<4.0.0" +python-versions = ">=3.6.1,<4.0.0" files = [ - {file = "nbmake-1.4.1-py3-none-any.whl", hash = "sha256:1c1619fc54a2fb64bfd84acbdf13b2ffba0e4a03bfea1684f4648f28ca850ada"}, - {file = "nbmake-1.4.1.tar.gz", hash = "sha256:7f602ba5195e80e4f2527944bb06d3b4df0d1520e73ba66126b51132b1f646ea"}, + {file = "nbmake-1.1-py3-none-any.whl", hash = "sha256:04603dd8b7894830f7079b317bc81df29b15ddd0db014279c58145b6fce80d7a"}, + {file = "nbmake-1.1.tar.gz", hash = "sha256:d59158797cecb7d7b248a061854fbd7fa0bdd9ff2c19b0d0bae8ee2ca90ffd13"}, ] [package.dependencies] ipykernel = ">=5.4.0" -nbclient = ">=0.6.6,<0.7.0" +nbclient = ">=0.3,<1.0" nbformat = ">=5.0.8,<6.0.0" pydantic = ">=1.7.2,<2.0.0" Pygments = ">=2.7.3,<3.0.0" -pytest = ">=6.1.0" +pytest = ">=6.1.0,<7.0.0" [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] [[package]] @@ -4821,13 +4955,13 @@ pandas = ">=1.1" [[package]] name = "nixtlats" -version = "0.1.11" -description = "Nixtla SDK" +version = "0.1.21" +description = "TimeGPT SDK" optional = false python-versions = ">=3.7" files = [ - {file = "nixtlats-0.1.11-py3-none-any.whl", hash = "sha256:f2ddda8e23aa58e7f771892186176b687d2302e445ff762dcf699d1cea06b75d"}, - {file = "nixtlats-0.1.11.tar.gz", hash = "sha256:778c340fddf02f3b6a11bd69ccd797a83fab1c67177b85f11bc61ceb6c41f1c3"}, + {file = "nixtlats-0.1.21-py3-none-any.whl", hash = "sha256:9706dad5b1d9b2706df0f2f0fcd6144235bdcb96826691c6e91ecf3ac182a13a"}, + {file = "nixtlats-0.1.21.tar.gz", hash = "sha256:f15a657bc5314bb794e816bf4ba76fd7b09ced4d0a95ecf9ea7041d4b48cba58"}, ] [package.dependencies] @@ -4835,9 +4969,14 @@ httpx = "*" pandas = "*" pydantic = "<2" requests = "*" +tenacity = "*" +utilsforecast = ">=0.0.13" [package.extras] -dev = ["black", "nbdev", "openbb", "plotly", "python-dotenv", "statsforecast"] +date-extras = ["holidays"] +dev = ["black", "dask", "fugue[ray] (>=0.8.7)", "holidays", "nbdev", "plotly", "pyspark", "python-dotenv", "ray[serve-grpc]", "statsforecast", "utilsforecast[plotting] (>=0.0.5)"] +distributed = ["dask", "fugue[ray] (>=0.8.7)", "pyspark", "ray[serve-grpc]"] +plotting = ["utilsforecast[plotting] (>=0.0.5)"] [[package]] name = "nltk" @@ -4880,13 +5019,13 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.4" +version = "6.5.6" description = "A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.7" files = [ - {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, + {file = "notebook-6.5.6-py3-none-any.whl", hash = "sha256:c1e2eb2e3b6079a0552a04974883a48d04c3c05792170d64a4b23d707d453181"}, + {file = "notebook-6.5.6.tar.gz", hash = "sha256:b4625a4b7a597839dd3156b140d5ba2c7123761f98245a3290f67a8b8ee048d9"}, ] [package.dependencies] @@ -4894,14 +5033,14 @@ argon2-cffi = "*" ipykernel = "*" ipython-genutils = "*" jinja2 = "*" -jupyter-client = ">=5.3.4" +jupyter-client = ">=5.3.4,<8" jupyter-core = ">=4.6.1" nbclassic = ">=0.4.7" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" prometheus-client = "*" -pyzmq = ">=17" +pyzmq = ">=17,<25" Send2Trash = ">=1.8.0" terminado = ">=0.8.3" tornado = ">=6.1" @@ -4914,13 +5053,13 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs [[package]] name = "notebook-shim" -version = "0.2.3" +version = "0.2.4" description = "A shim layer for notebook traits and config" optional = false python-versions = ">=3.7" files = [ - {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, - {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, ] [package.dependencies] @@ -4931,41 +5070,38 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numba" -version = "0.57.1" +version = "0.58.1" description = "compiling Python code using LLVM" optional = true python-versions = ">=3.8" files = [ - {file = "numba-0.57.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db8268eb5093cae2288942a8cbd69c9352f6fe6e0bfa0a9a27679436f92e4248"}, - {file = "numba-0.57.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:643cb09a9ba9e1bd8b060e910aeca455e9442361e80fce97690795ff9840e681"}, - {file = "numba-0.57.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:53e9fab973d9e82c9f8449f75994a898daaaf821d84f06fbb0b9de2293dd9306"}, - {file = "numba-0.57.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c0602e4f896e6a6d844517c3ab434bc978e7698a22a733cc8124465898c28fa8"}, - {file = "numba-0.57.1-cp310-cp310-win32.whl", hash = "sha256:3d6483c27520d16cf5d122868b79cad79e48056ecb721b52d70c126bed65431e"}, - {file = "numba-0.57.1-cp310-cp310-win_amd64.whl", hash = "sha256:a32ee263649aa3c3587b833d6311305379529570e6c20deb0c6f4fb5bc7020db"}, - {file = "numba-0.57.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c078f84b5529a7fdb8413bb33d5100f11ec7b44aa705857d9eb4e54a54ff505"}, - {file = "numba-0.57.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e447c4634d1cc99ab50d4faa68f680f1d88b06a2a05acf134aa6fcc0342adeca"}, - {file = "numba-0.57.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4838edef2df5f056cb8974670f3d66562e751040c448eb0b67c7e2fec1726649"}, - {file = "numba-0.57.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9b17fbe4a69dcd9a7cd49916b6463cd9a82af5f84911feeb40793b8bce00dfa7"}, - {file = "numba-0.57.1-cp311-cp311-win_amd64.whl", hash = "sha256:93df62304ada9b351818ba19b1cfbddaf72cd89348e81474326ca0b23bf0bae1"}, - {file = "numba-0.57.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8e00ca63c5d0ad2beeb78d77f087b3a88c45ea9b97e7622ab2ec411a868420ee"}, - {file = "numba-0.57.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff66d5b022af6c7d81ddbefa87768e78ed4f834ab2da6ca2fd0d60a9e69b94f5"}, - {file = "numba-0.57.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:60ec56386076e9eed106a87c96626d5686fbb16293b9834f0849cf78c9491779"}, - {file = "numba-0.57.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c057ccedca95df23802b6ccad86bb318be624af45b5a38bb8412882be57a681"}, - {file = "numba-0.57.1-cp38-cp38-win32.whl", hash = "sha256:5a82bf37444039c732485c072fda21a361790ed990f88db57fd6941cd5e5d307"}, - {file = "numba-0.57.1-cp38-cp38-win_amd64.whl", hash = "sha256:9bcc36478773ce838f38afd9a4dfafc328d4ffb1915381353d657da7f6473282"}, - {file = "numba-0.57.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae50c8c90c2ce8057f9618b589223e13faa8cbc037d8f15b4aad95a2c33a0582"}, - {file = "numba-0.57.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9a1b2b69448e510d672ff9a6b18d2db9355241d93c6a77677baa14bec67dc2a0"}, - {file = "numba-0.57.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3cf78d74ad9d289fbc1e5b1c9f2680fca7a788311eb620581893ab347ec37a7e"}, - {file = "numba-0.57.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f47dd214adc5dcd040fe9ad2adbd2192133c9075d2189ce1b3d5f9d72863ef05"}, - {file = "numba-0.57.1-cp39-cp39-win32.whl", hash = "sha256:a3eac19529956185677acb7f01864919761bfffbb9ae04bbbe5e84bbc06cfc2b"}, - {file = "numba-0.57.1-cp39-cp39-win_amd64.whl", hash = "sha256:9587ba1bf5f3035575e45562ada17737535c6d612df751e811d702693a72d95e"}, - {file = "numba-0.57.1.tar.gz", hash = "sha256:33c0500170d213e66d90558ad6aca57d3e03e97bb11da82e6d87ab793648cb17"}, + {file = "numba-0.58.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:07f2fa7e7144aa6f275f27260e73ce0d808d3c62b30cff8906ad1dec12d87bbe"}, + {file = "numba-0.58.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7bf1ddd4f7b9c2306de0384bf3854cac3edd7b4d8dffae2ec1b925e4c436233f"}, + {file = "numba-0.58.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bc2d904d0319d7a5857bd65062340bed627f5bfe9ae4a495aef342f072880d50"}, + {file = "numba-0.58.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e79b6cc0d2bf064a955934a2e02bf676bc7995ab2db929dbbc62e4c16551be6"}, + {file = "numba-0.58.1-cp310-cp310-win_amd64.whl", hash = "sha256:81fe5b51532478149b5081311b0fd4206959174e660c372b94ed5364cfb37c82"}, + {file = "numba-0.58.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bcecd3fb9df36554b342140a4d77d938a549be635d64caf8bd9ef6c47a47f8aa"}, + {file = "numba-0.58.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1eaa744f518bbd60e1f7ccddfb8002b3d06bd865b94a5d7eac25028efe0e0ff"}, + {file = "numba-0.58.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bf68df9c307fb0aa81cacd33faccd6e419496fdc621e83f1efce35cdc5e79cac"}, + {file = "numba-0.58.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:55a01e1881120e86d54efdff1be08381886fe9f04fc3006af309c602a72bc44d"}, + {file = "numba-0.58.1-cp311-cp311-win_amd64.whl", hash = "sha256:811305d5dc40ae43c3ace5b192c670c358a89a4d2ae4f86d1665003798ea7a1a"}, + {file = "numba-0.58.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea5bfcf7d641d351c6a80e8e1826eb4a145d619870016eeaf20bbd71ef5caa22"}, + {file = "numba-0.58.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e63d6aacaae1ba4ef3695f1c2122b30fa3d8ba039c8f517784668075856d79e2"}, + {file = "numba-0.58.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6fe7a9d8e3bd996fbe5eac0683227ccef26cba98dae6e5cee2c1894d4b9f16c1"}, + {file = "numba-0.58.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:898af055b03f09d33a587e9425500e5be84fc90cd2f80b3fb71c6a4a17a7e354"}, + {file = "numba-0.58.1-cp38-cp38-win_amd64.whl", hash = "sha256:d3e2fe81fe9a59fcd99cc572002101119059d64d31eb6324995ee8b0f144a306"}, + {file = "numba-0.58.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c765aef472a9406a97ea9782116335ad4f9ef5c9f93fc05fd44aab0db486954"}, + {file = "numba-0.58.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9356e943617f5e35a74bf56ff6e7cc83e6b1865d5e13cee535d79bf2cae954"}, + {file = "numba-0.58.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:240e7a1ae80eb6b14061dc91263b99dc8d6af9ea45d310751b780888097c1aaa"}, + {file = "numba-0.58.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:45698b995914003f890ad839cfc909eeb9c74921849c712a05405d1a79c50f68"}, + {file = "numba-0.58.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd3dda77955be03ff366eebbfdb39919ce7c2620d86c906203bed92124989032"}, + {file = "numba-0.58.1.tar.gz", hash = "sha256:487ded0633efccd9ca3a46364b40006dbdaca0f95e99b8b83e778d1195ebcbaa"}, ] [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -llvmlite = "==0.40.*" -numpy = ">=1.21,<1.25" +llvmlite = "==0.41.*" +numpy = ">=1.22,<1.27" [[package]] name = "numpy" @@ -5055,114 +5191,58 @@ files = [ [package.dependencies] et-xmlfile = "*" -[[package]] -name = "orjson" -version = "3.9.2" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = true -python-versions = ">=3.7" -files = [ - {file = "orjson-3.9.2-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7323e4ca8322b1ecb87562f1ec2491831c086d9faa9a6c6503f489dadbed37d7"}, - {file = "orjson-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1272688ea1865f711b01ba479dea2d53e037ea00892fd04196b5875f7021d9d3"}, - {file = "orjson-3.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b9a26f1d1427a9101a1e8910f2e2df1f44d3d18ad5480ba031b15d5c1cb282e"}, - {file = "orjson-3.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a5ca55b0d8f25f18b471e34abaee4b175924b6cd62f59992945b25963443141"}, - {file = "orjson-3.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:877872db2c0f41fbe21f852ff642ca842a43bc34895b70f71c9d575df31fffb4"}, - {file = "orjson-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a39c2529d75373b7167bf84c814ef9b8f3737a339c225ed6c0df40736df8748"}, - {file = "orjson-3.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:84ebd6fdf138eb0eb4280045442331ee71c0aab5e16397ba6645f32f911bfb37"}, - {file = "orjson-3.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a60a1cfcfe310547a1946506dd4f1ed0a7d5bd5b02c8697d9d5dcd8d2e9245e"}, - {file = "orjson-3.9.2-cp310-none-win32.whl", hash = "sha256:2ae61f5d544030a6379dbc23405df66fea0777c48a0216d2d83d3e08b69eb676"}, - {file = "orjson-3.9.2-cp310-none-win_amd64.whl", hash = "sha256:c290c4f81e8fd0c1683638802c11610b2f722b540f8e5e858b6914b495cf90c8"}, - {file = "orjson-3.9.2-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:02ef014f9a605e84b675060785e37ec9c0d2347a04f1307a9d6840ab8ecd6f55"}, - {file = "orjson-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:992af54265ada1c1579500d6594ed73fe333e726de70d64919cf37f93defdd06"}, - {file = "orjson-3.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a40958f7af7c6d992ee67b2da4098dca8b770fc3b4b3834d540477788bfa76d3"}, - {file = "orjson-3.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93864dec3e3dd058a2dbe488d11ac0345214a6a12697f53a63e34de7d28d4257"}, - {file = "orjson-3.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16fdf5a82df80c544c3c91516ab3882cd1ac4f1f84eefeafa642e05cef5f6699"}, - {file = "orjson-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275b5a18fd9ed60b2720543d3ddac170051c43d680e47d04ff5203d2c6d8ebf1"}, - {file = "orjson-3.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b9aea6dcb99fcbc9f6d1dd84fca92322fda261da7fb014514bb4689c7c2097a8"}, - {file = "orjson-3.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7d74ae0e101d17c22ef67b741ba356ab896fc0fa64b301c2bf2bb0a4d874b190"}, - {file = "orjson-3.9.2-cp311-none-win32.whl", hash = "sha256:a9a7d618f99b2d67365f2b3a588686195cb6e16666cd5471da603a01315c17cc"}, - {file = "orjson-3.9.2-cp311-none-win_amd64.whl", hash = "sha256:6320b28e7bdb58c3a3a5efffe04b9edad3318d82409e84670a9b24e8035a249d"}, - {file = "orjson-3.9.2-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:368e9cc91ecb7ac21f2aa475e1901204110cf3e714e98649c2502227d248f947"}, - {file = "orjson-3.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58e9e70f0dcd6a802c35887f306b555ff7a214840aad7de24901fc8bd9cf5dde"}, - {file = "orjson-3.9.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00c983896c2e01c94c0ef72fd7373b2aa06d0c0eed0342c4884559f812a6835b"}, - {file = "orjson-3.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ee743e8890b16c87a2f89733f983370672272b61ee77429c0a5899b2c98c1a7"}, - {file = "orjson-3.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7b065942d362aad4818ff599d2f104c35a565c2cbcbab8c09ec49edba91da75"}, - {file = "orjson-3.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e46e9c5b404bb9e41d5555762fd410d5466b7eb1ec170ad1b1609cbebe71df21"}, - {file = "orjson-3.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8170157288714678ffd64f5de33039e1164a73fd8b6be40a8a273f80093f5c4f"}, - {file = "orjson-3.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e3e2f087161947dafe8319ea2cfcb9cea4bb9d2172ecc60ac3c9738f72ef2909"}, - {file = "orjson-3.9.2-cp37-none-win32.whl", hash = "sha256:373b7b2ad11975d143556fdbd2c27e1150b535d2c07e0b48dc434211ce557fe6"}, - {file = "orjson-3.9.2-cp37-none-win_amd64.whl", hash = "sha256:d7de3dbbe74109ae598692113cec327fd30c5a30ebca819b21dfa4052f7b08ef"}, - {file = "orjson-3.9.2-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8cd4385c59bbc1433cad4a80aca65d2d9039646a9c57f8084897549b55913b17"}, - {file = "orjson-3.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a74036aab1a80c361039290cdbc51aa7adc7ea13f56e5ef94e9be536abd227bd"}, - {file = "orjson-3.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1aaa46d7d4ae55335f635eadc9be0bd9bcf742e6757209fc6dc697e390010adc"}, - {file = "orjson-3.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e52c67ed6bb368083aa2078ea3ccbd9721920b93d4b06c43eb4e20c4c860046"}, - {file = "orjson-3.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a6cdfcf9c7dd4026b2b01fdff56986251dc0cc1e980c690c79eec3ae07b36e7"}, - {file = "orjson-3.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1882a70bb69595b9ec5aac0040a819e94d2833fe54901e2b32f5e734bc259a8b"}, - {file = "orjson-3.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fc05e060d452145ab3c0b5420769e7356050ea311fc03cb9d79c481982917cca"}, - {file = "orjson-3.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f8bc2c40d9bb26efefb10949d261a47ca196772c308babc538dd9f4b73e8d386"}, - {file = "orjson-3.9.2-cp38-none-win32.whl", hash = "sha256:302d80198d8d5b658065627da3a356cbe5efa082b89b303f162f030c622e0a17"}, - {file = "orjson-3.9.2-cp38-none-win_amd64.whl", hash = "sha256:3164fc20a585ec30a9aff33ad5de3b20ce85702b2b2a456852c413e3f0d7ab09"}, - {file = "orjson-3.9.2-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7a6ccadf788531595ed4728aa746bc271955448d2460ff0ef8e21eb3f2a281ba"}, - {file = "orjson-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3245d230370f571c945f69aab823c279a868dc877352817e22e551de155cb06c"}, - {file = "orjson-3.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:205925b179550a4ee39b8418dd4c94ad6b777d165d7d22614771c771d44f57bd"}, - {file = "orjson-3.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0325fe2d69512187761f7368c8cda1959bcb75fc56b8e7a884e9569112320e57"}, - {file = "orjson-3.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:806704cd58708acc66a064a9a58e3be25cf1c3f9f159e8757bd3f515bfabdfa1"}, - {file = "orjson-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03fb36f187a0c19ff38f6289418863df8b9b7880cdbe279e920bef3a09d8dab1"}, - {file = "orjson-3.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:20925d07a97c49c6305bff1635318d9fc1804aa4ccacb5fb0deb8a910e57d97a"}, - {file = "orjson-3.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:eebfed53bec5674e981ebe8ed2cf00b3f7bcda62d634733ff779c264307ea505"}, - {file = "orjson-3.9.2-cp39-none-win32.whl", hash = "sha256:ba60f09d735f16593950c6adf033fbb526faa94d776925579a87b777db7d0838"}, - {file = "orjson-3.9.2-cp39-none-win_amd64.whl", hash = "sha256:869b961df5fcedf6c79f4096119b35679b63272362e9b745e668f0391a892d39"}, - {file = "orjson-3.9.2.tar.gz", hash = "sha256:24257c8f641979bf25ecd3e27251b5cc194cdd3a6e96004aac8446f5e63d9664"}, -] - [[package]] name = "osqp" -version = "0.6.3" +version = "0.6.5" description = "OSQP: The Operator Splitting QP Solver" optional = true python-versions = "*" files = [ - {file = "osqp-0.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b7d923c836f1d07115057e595245ccc1694ecae730a1affda78fc6f3c8d239"}, - {file = "osqp-0.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dfda08c38c3521012740a73ef782f97dfc54a41deae4b0bc4afd18d0e74da0"}, - {file = "osqp-0.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7eafa3f3e82dd36c52f3f4ef19a95142405c807c272c4b53c5971c53535d7804"}, - {file = "osqp-0.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:3cbb6efdaffb7387dc0037dfe3259d4803e5ad7217e6f20fb605c92953214b9d"}, - {file = "osqp-0.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b2049b2c42565dcaa63ddca1c4028b1fb20aab141453f5d77e8ff5b1a99a2cf"}, - {file = "osqp-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:146b89f2cfbf59eaeb2c47e3a312f2034138df78d80ce052364810dc0ef70fc4"}, - {file = "osqp-0.6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0084e3d733c75687d68bc133bc380ce471dfe6f7724af2718a43491782eec8d6"}, - {file = "osqp-0.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:1b573fe1cd0e82239a279c58817c1d365187ef862e928b2b9c828c3c516ad3c2"}, - {file = "osqp-0.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c3951ef505177b858c6cd34de980346014cae3d2234c93db960b12c5885f9a2"}, - {file = "osqp-0.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc18f87c9549032c163ce590a5e32079df94ee656c8fb357ba607aa9d78fab81"}, - {file = "osqp-0.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b1a4b538aab629b0fae69f644b7e76f81f94d65230014d482e296dacd046b"}, - {file = "osqp-0.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:60abec3593870990b16f00bd5017096a7091fb00b68d0db3383fc048ca8e55c9"}, - {file = "osqp-0.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b73bdd9589901841af83c5ed6a4092b4fac5a0beff9e32682d8526d1f16a728c"}, - {file = "osqp-0.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d9f611823af4a8b241c86805920e5382cd65c7f94fd3615b4eef999ed94c7c"}, - {file = "osqp-0.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30fbc3b3c028c06a6c5f1e66be7b7106ad48a29e0dc5bd82393f82dd68235ef8"}, - {file = "osqp-0.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fe57e4bde071b388518ecb068f26319506dd9cb107363d3d80c12d2e59fc1e81"}, - {file = "osqp-0.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41f304d1d7f91af07d8f0b01e5af29ec3bb8824f0102c7fd8b13b497be120da4"}, - {file = "osqp-0.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea7d8c92bcdf4fef98d777f13d39060d425ef2e8778ed487c96a6fa10848cdea"}, - {file = "osqp-0.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a3c6d2708868e5e3fe2da300d6523cbf68a3d8734ce9c5043db37391969f5"}, - {file = "osqp-0.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:1c548a0b3691850e7e22f3624a128d8af33416d70a9b5976a47d4d832028dcd8"}, - {file = "osqp-0.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:387e7abd737dfe32c9ec00ad74af25328cdd0d0f634d79530655c040a5cb9590"}, - {file = "osqp-0.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1445e10a94e01698e13c87a7debf6ac1a15f3acd1f8f6340cb1ad945db4732b"}, - {file = "osqp-0.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0441c10f7fe5f46692a9b44a57138977bb112ae3f8127151671968c5d9ec5dbb"}, - {file = "osqp-0.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:b15e65a307fbbabf60248bb9bc204e61d5d4ae64e00427a69e2dad9622f4c29d"}, - {file = "osqp-0.6.3.tar.gz", hash = "sha256:03e460e683ec2ce0f839353ddfa3c4c8ffa509ab8cf6a2b2afbb586fa453e180"}, + {file = "osqp-0.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e8024dba07281111af39e71bff6449fb22a37bf3358aa0c7fd1daa6bca692c99"}, + {file = "osqp-0.6.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a68e247f2bbb53e87f1c1ca80ff3fc86b781f771d6da2a2ecd2f6e7492c802f3"}, + {file = "osqp-0.6.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e81e299637eb2342e30eb2df0ec45dc243683af0a71676c9b45b9337bb05da97"}, + {file = "osqp-0.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:42425632927d983cbe935067783b944ebd4959e9eb6611da8401007b66a0c841"}, + {file = "osqp-0.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7b180db09be1c3e3cb4109396b894f481ca9c6e160a530acd71f1769610f96c"}, + {file = "osqp-0.6.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:648f4beff10c16620f3b95e86dee702052d587b847ddbd5d8f71ad39ac36db3a"}, + {file = "osqp-0.6.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7649d56d775662e0a5d1665ed220d585f904d14a49cc6931bf27725bb9c4b2e0"}, + {file = "osqp-0.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:b033b7aec973a655cfec4558e0c4fc92ee9f914bcb0a669e0156398d8ddbef8f"}, + {file = "osqp-0.6.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5c344619465e625aac6d13812d442dd31d4a9ab243e39abb5938c3f6116409b0"}, + {file = "osqp-0.6.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:000ad48aa071ecc4c75ebc39d1291752fe3a9937a30d00fff5dc61663ec67eeb"}, + {file = "osqp-0.6.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a36a40df69db5195fba613341663db2c7dcf977eb75b9578a8fd7682bbe02324"}, + {file = "osqp-0.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:3d8212db7c55af1961ccce4a32fd382bfe34e2198664ea3f81cc47eef8d0f288"}, + {file = "osqp-0.6.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ca7d80c0767b1350cd74e4f1446ec51661152690d38b1382ceccdfccd757afce"}, + {file = "osqp-0.6.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b15e2b96d4d9b2eff37a05405372c69cf17ada3d1e42c5e28cbdbd053189ab5"}, + {file = "osqp-0.6.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a41600e34ece7156606fd3620987fdf224b0a35c857540cb5bf45072f5c022b"}, + {file = "osqp-0.6.5-cp36-cp36m-win_amd64.whl", hash = "sha256:8c38574b35a3ddfb794aafee9bc5a74635160b9fc52bbc89ae6164fe207556de"}, + {file = "osqp-0.6.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d06f614e3be1b1f3cd68569b2dc3628c2fdef1e7c4b992672fe05efb1add9801"}, + {file = "osqp-0.6.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a6b995e0a022bd1c33d20d8846d9a068df89cec288b905b5cdfdb98a2ffae8"}, + {file = "osqp-0.6.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09de9b53e7513ee4ade3024ce9f36ef993d916118d0927cce740d086882ea92c"}, + {file = "osqp-0.6.5-cp37-cp37m-win_amd64.whl", hash = "sha256:1f80f85d515ef29b90fb34f137857e75d4fcf21a715d644f54d2cf9494567fab"}, + {file = "osqp-0.6.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de9b9e96001e8f0b2e474106ac75e220fd9279e1635b107b836a6035795e8d07"}, + {file = "osqp-0.6.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fe545d7a87a46cfc57dfb9f0aa2788d2f29e0c71dc1ac57e92f9c9d93064753"}, + {file = "osqp-0.6.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49ab020b5fd7abb5da99e01e47bf81f817ba1df6895e3d3ba4893722cc24d9b6"}, + {file = "osqp-0.6.5-cp38-cp38-win_amd64.whl", hash = "sha256:5d1b5ed6fc4faea94117a0abe140fefe980449b29d3907bd2e6ec1c18eca3d43"}, + {file = "osqp-0.6.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dca127b7a333ce53fb430fc441b2e0aee2df619693d967277a8f8fd095e95007"}, + {file = "osqp-0.6.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ec902844defedf7c5a5ed482b93286d1735a65b71bb27c93e18c929f313c93d"}, + {file = "osqp-0.6.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25a9e1e8f1db38094dc7ee544e603e31fe7bf1b2a3fc75c78c1d39a727e2540"}, + {file = "osqp-0.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:6dce90d8c4ad551489a452573ea819e089e1e1c3b23bbd8f155bb6059ce8ef36"}, + {file = "osqp-0.6.5.tar.gz", hash = "sha256:b2810aee7be2373add8b6c0be5ad99b810288774abca421751cb032d6a5aedef"}, ] [package.dependencies] numpy = ">=1.7" qdldl = "*" -scipy = ">=0.13.2" +scipy = ">=0.13.2,<1.12.0" [[package]] name = "packaging" -version = "23.1" +version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -5264,13 +5344,13 @@ test = ["ta-lib"] [[package]] name = "pandocfilters" -version = "1.5.0" +version = "1.5.1" description = "Utilities for writing pandoc filters in python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, - {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, ] [[package]] @@ -5308,39 +5388,39 @@ test = ["attrs (>=17.4.0)", "azure-datalake-store (>=0.0.30)", "azure-storage-bl [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "patsy" -version = "0.5.3" +version = "0.5.6" description = "A Python package for describing statistical models and for building design matrices." optional = false python-versions = "*" files = [ - {file = "patsy-0.5.3-py2.py3-none-any.whl", hash = "sha256:7eb5349754ed6aa982af81f636479b1b8db9d5b1a6e957a6016ec0534b5c86b7"}, - {file = "patsy-0.5.3.tar.gz", hash = "sha256:bdc18001875e319bc91c812c1eb6a10be4bb13cb81eb763f466179dca3b67277"}, + {file = "patsy-0.5.6-py2.py3-none-any.whl", hash = "sha256:19056886fd8fa71863fa32f0eb090267f21fb74be00f19f5c70b2e9d76c883c6"}, + {file = "patsy-0.5.6.tar.gz", hash = "sha256:95c6d47a7222535f84bff7f63d7303f2e297747a598db89cf5c67f0c0c7d2cdb"}, ] [package.dependencies] @@ -5352,23 +5432,23 @@ test = ["pytest", "pytest-cov", "scipy"] [[package]] name = "pbr" -version = "5.11.1" +version = "6.0.0" description = "Python Build Reasonableness" optional = false python-versions = ">=2.6" files = [ - {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, - {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, + {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, + {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, ] [[package]] name = "peewee" -version = "3.17.1" +version = "3.17.3" description = "a little orm" optional = false python-versions = "*" files = [ - {file = "peewee-3.17.1.tar.gz", hash = "sha256:e009ac4227c4fdc0058a56e822ad5987684f0a1fbb20fed577200785102581c3"}, + {file = "peewee-3.17.3.tar.gz", hash = "sha256:ef15f90b628e41a584be8306cdc3243c51f73ce88b06154d9572f6d0284a0169"}, ] [[package]] @@ -5384,13 +5464,13 @@ files = [ [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] @@ -5409,82 +5489,89 @@ files = [ [[package]] name = "pillow" -version = "9.5.0" +version = "10.3.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, - {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, - {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, - {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, - {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, - {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, - {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, - {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, - {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, - {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, - {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, - {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, - {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, - {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, - {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, - {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, - {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "pkgutil-resolve-name" @@ -5499,66 +5586,43 @@ files = [ [[package]] name = "platformdirs" -version = "3.9.1" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, - {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "plotly" -version = "5.15.0" +version = "5.21.0" description = "An open-source, interactive data visualization library for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "plotly-5.15.0-py2.py3-none-any.whl", hash = "sha256:3508876bbd6aefb8a692c21a7128ca87ce42498dd041efa5c933ee44b55aab24"}, - {file = "plotly-5.15.0.tar.gz", hash = "sha256:822eabe53997d5ebf23c77e1d1fcbf3bb6aa745eb05d532afd4b6f9a2e2ab02f"}, + {file = "plotly-5.21.0-py3-none-any.whl", hash = "sha256:a33f41fd5922e45b2b253f795b200d14452eb625790bb72d0a72cf1328a6abbf"}, + {file = "plotly-5.21.0.tar.gz", hash = "sha256:69243f8c165d4be26c0df1c6f0b7b258e2dfeefe032763404ad7e7fb7d7c2073"}, ] [package.dependencies] packaging = "*" tenacity = ">=6.2.0" -[[package]] -name = "plotly-resampler" -version = "0.8.3.2" -description = "Visualizing large time series with plotly" -optional = true -python-versions = ">=3.7.1,<4.0.0" -files = [ - {file = "plotly_resampler-0.8.3.2-cp310-cp310-manylinux_2_35_x86_64.whl", hash = "sha256:c3de2cef735e68fce5c64033cd725b650a9af25e56629bca81d12475c689e58b"}, - {file = "plotly_resampler-0.8.3.2.tar.gz", hash = "sha256:5cac870d6d269cdd71d28def4cae310c609c02aac636c0831176188f16021f44"}, -] - -[package.dependencies] -dash = ">=2.2.0,<3.0.0" -jupyter-dash = ">=0.4.2" -numpy = {version = ">=1.14", markers = "python_version < \"3.11\""} -orjson = ">=3.8.0,<4.0.0" -pandas = ">=1.3.5,<2.0.0" -plotly = ">=5.5.0,<6.0.0" -trace-updater = ">=0.0.8" - -[package.extras] -inline-persistent = ["Flask-Cors (>=3.0.10,<4.0.0)", "kaleido (==0.2.1)"] - [[package]] name = "pluggy" -version = "1.2.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -5582,42 +5646,48 @@ requests = "*" [[package]] name = "pmdarima" -version = "2.0.3" +version = "2.0.4" description = "Python's forecast::auto.arima equivalent" optional = true python-versions = ">=3.7" files = [ - {file = "pmdarima-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6091a48a9e7eb3e48fdcd748bb7bdfa90635cfde110c2a5fd1ebc0c30f6c8ef5"}, - {file = "pmdarima-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a9da525af80651e9d44e71c7483052e6bc68eb741768a15fb0142dbffdf50f42"}, - {file = "pmdarima-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14b606363f777b4ab17821c989637aa11f209ec8285d46666a7744236995798c"}, - {file = "pmdarima-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:68be6ce7f4f66247236c44f20ac27d7252a096bd61971cd766cd7b01c34f38b4"}, - {file = "pmdarima-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:95e2e4629932b7b657ea7e6f9db610a71cafce704d8f44d51b7643853a78c2fe"}, - {file = "pmdarima-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8749730e7911715de6e4087011c5d5bcd93b4b5f6ae150e6ff615d29ca0bf49d"}, - {file = "pmdarima-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fe5f3ed46eadb72f66fc295983331a8e25a84c7873f06b292ed0bad196007b56"}, - {file = "pmdarima-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d90729d8574966dbfc198ec1e3d7f30604e5b899fff0f8683b8160ee0bc24654"}, - {file = "pmdarima-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffa898354370612df043c9ea12b536cf31ef88eb9f2558a4a73983420362fd06"}, - {file = "pmdarima-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:d74124f5eac7a273bc03a04bdffe3ed59f4960b5ada85fdfc5c6d5fe4a56dcc2"}, - {file = "pmdarima-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e89c69b5908777789fb20efe9202ab8ea8a2c7a19b6a9d3f65102483bdb3e4a1"}, - {file = "pmdarima-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77258305437a235c890bacb0a847e1cfbbc670ca8f92a7feab67f03088d3d3ef"}, - {file = "pmdarima-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cce9784abe6b4742b6c557432342585de4236a29978df037d17a6c3116a16940"}, - {file = "pmdarima-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:076f4904865f43510f8a82b3bdcd9d5e0f54de67217a9898d633ef6f625825c4"}, - {file = "pmdarima-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4b0840080fbbbdc0eaaa988f268b8471087ca5f16047d3a95363418da1544b2"}, - {file = "pmdarima-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a9b0f49f36dc85b6b8fec2a8d1c56d5b6d2706ca478d1d90c95e37688bed4a01"}, - {file = "pmdarima-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47522b466e3894bfbbd58a39150a89ccf75ef0cb661e3ecb96c199e749e5f60b"}, - {file = "pmdarima-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0914aab1dfd840e49b67964c664db7439f2a59b10af3c8635eac32061707f436"}, - {file = "pmdarima-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:09d24b4bae78b04c496c9f99bd6bd050813bdda38e149b57bfa0fe1642613b93"}, - {file = "pmdarima-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d941ee5940f4a9796d7bd19e720b58a44eaa5331b28ccd7194f2bf6fc2d5ee1e"}, - {file = "pmdarima-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:849bc7d1ec929df538698f3eca752a5526090cbe5d625c11c28bf1885bd6509a"}, - {file = "pmdarima-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ba53a952e374747e5be1263d74e10c9f780503fbd1a1e6156417a7d8e67507"}, - {file = "pmdarima-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3cfaeaf31ff5c89ab60b4fc2e671c5ecd5d1bba99f3cd93c4a2bb19cba79d51"}, - {file = "pmdarima-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:e53685f08e971cdb1bf077418af55e7aae8397fcdefb3a335b7293d420245c62"}, - {file = "pmdarima-2.0.3.tar.gz", hash = "sha256:91acb3f7c12f3cfd6263efe323d3b8f94b58dcd242d68f11560a6c717001b01f"}, + {file = "pmdarima-2.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8e6c16672e0f122e63ab1d7282a362c762783264a07636bbc9d4ae3d58ac7605"}, + {file = "pmdarima-2.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c9a839a477100331c47aa8a841c198ecb0b3fab4aff958622d31fec86d2aea76"}, + {file = "pmdarima-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccd9e2186ba1ef45006f6c88dc9ecd6121ddb8914114bebcfa0d42899b40ced7"}, + {file = "pmdarima-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:165bdf787f5dafd5faab543d20524413b765d9cb6f020f0e1846551e7678414a"}, + {file = "pmdarima-2.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:cbde33812c37f441ba70d9e7b0479c758d56ad77a8dcbdead1fb8baad9aee806"}, + {file = "pmdarima-2.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d961c99b445e53eadf6627c61bf800f403bd247b7ec2f62c6dfe8a0b1bcbf0b"}, + {file = "pmdarima-2.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:78e815c51074411bbe8433a912af4cc8dac394d9330cfedf57dd5ce08efe4a65"}, + {file = "pmdarima-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8022484256492bc425f0053b3a0346ab0a877f0f668664be738fe07f6b423c08"}, + {file = "pmdarima-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46677b68efffde66aa1291799b39b91420961967fa2b6e041e26bb263782d38d"}, + {file = "pmdarima-2.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:bc594dd981bca5217b4448c96e82dbd60553b07263517a5cb0510b4bfe66ded1"}, + {file = "pmdarima-2.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62a4ff308fbb5074a66c0877ba6b472d0fc406cbc0b5a2dba7e8fa800c9dd8ca"}, + {file = "pmdarima-2.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7e215ec6130b917843d26e0698637f976e4a6cc9dbd521bf44547668d08f058a"}, + {file = "pmdarima-2.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d837bc00266a234d9292914f19a67e04ca8361d9c309b70fc8f16c1ed863551"}, + {file = "pmdarima-2.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8790bff665a5ebaa36ddbbfd0e8ea51ad2e5809270dc74d462d5c2498b26220f"}, + {file = "pmdarima-2.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:a8bf7913bdbd0e286489b2111080a0f51f5d9d3ee5e05b7011a691207047ddcf"}, + {file = "pmdarima-2.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5bce63dca165948a2311eff0c200e57370829855fce6e7d3fe930497f2f9fc04"}, + {file = "pmdarima-2.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c1ed01cbb399d9cdbe3f12f2ef505a144826769ec3ad75f6075cadbe8447a13"}, + {file = "pmdarima-2.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73060d28ffabeae7374ab48ba7882b29ae6998de3e3e34f5484c64e0baefda0d"}, + {file = "pmdarima-2.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:776e21e076393c6fe86895ffe71e6769c9b3fe0dffb92d6f6558657580cf0a42"}, + {file = "pmdarima-2.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec865e8fb07378c470f3e41a77d6705875a674cefbe6c0185e9bc070e642da5c"}, + {file = "pmdarima-2.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:670ca1f93ed4f8239e7fbd7d1dd156108899e15e8fb0717b2b3fa605fa6ace35"}, + {file = "pmdarima-2.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab1ee166f511d2497d6b357bf0cac84326efff25349eb777aea5b030ed6bf8bb"}, + {file = "pmdarima-2.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9ead43510adfe3c0d4000e37427bfcf11ba6cc3b26091368a847c5da010e052"}, + {file = "pmdarima-2.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c1213f3fa1e3ced9796f4092f9bd4be1881205f77bc2f5a1494695134a92000e"}, + {file = "pmdarima-2.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e0e3c90e7a91b44599f08cd9c62880466860e76bd1b0ca2d2ff8e72834a1a7f"}, + {file = "pmdarima-2.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fe612384e4989f010dacdefbff874231f5b7351dfb84bcbfe9ed8d718fc4115"}, + {file = "pmdarima-2.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db842d97905b171c867aae1a492b8c958ec1bae987c3ee41c561a06d99a19efd"}, + {file = "pmdarima-2.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a03936d681c720b0e44565d099de2619b762cb9d443f3043de9a78888aff6bb2"}, + {file = "pmdarima-2.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:13ba7061d4e9d48f21e1c393bfaa3d6b31f60a8c97ddbe8d455fa675c594f9e4"}, + {file = "pmdarima-2.0.4.tar.gz", hash = "sha256:b87f9d9f5b7dc2ddbd053687c2264e26ac98fd4118e843c7e9bc3dd7343e5c1a"}, ] [package.dependencies] Cython = ">=0.29,<0.29.18 || >0.29.18,<0.29.31 || >0.29.31" joblib = ">=0.11" numpy = ">=1.21.2" +packaging = ">=17.1" pandas = ">=0.19" scikit-learn = ">=0.22" scipy = ">=1.3.2" @@ -5627,13 +5697,13 @@ urllib3 = "*" [[package]] name = "posthog" -version = "3.0.1" +version = "3.5.0" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.0.1-py2.py3-none-any.whl", hash = "sha256:9c7f92fecc713257d4b2710d05b456569c9156fbdd3e85655ba7ba5ba6c7b3ae"}, - {file = "posthog-3.0.1.tar.gz", hash = "sha256:57d2791ff5752ce56ba0f9bb8876faf3ca9208f1c2c6ceaeb5a2504c34493767"}, + {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, + {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, ] [package.dependencies] @@ -5646,7 +5716,7 @@ six = ">=1.5" [package.extras] dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] sentry = ["django", "sentry-sdk"] -test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] [[package]] name = "praw" @@ -5673,13 +5743,13 @@ test = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.3.0,<0.5)", "pytest (>=2. [[package]] name = "prawcore" -version = "2.3.0" -description = "Low-level communication layer for PRAW 4+." +version = "2.4.0" +description = "\"Low-level communication layer for PRAW 4+." optional = false -python-versions = "~=3.6" +python-versions = "~=3.8" files = [ - {file = "prawcore-2.3.0-py3-none-any.whl", hash = "sha256:48c17db447fa06a13ca3e722201f443031437708daa736c05a1df895fbcceff5"}, - {file = "prawcore-2.3.0.tar.gz", hash = "sha256:daf1ccd4b7a80dc4e6567d48336d782e94a9a6dad83770fc2edf76dc9a84f56d"}, + {file = "prawcore-2.4.0-py3-none-any.whl", hash = "sha256:29af5da58d85704b439ad3c820873ad541f4535e00bb98c66f0fbcc8c603065a"}, + {file = "prawcore-2.4.0.tar.gz", hash = "sha256:b7b2b5a1d04406e086ab4e79988dc794df16059862f329f4c6a43ed09986c335"}, ] [package.dependencies] @@ -5687,9 +5757,9 @@ requests = ">=2.6.0,<3.0" [package.extras] ci = ["coveralls"] -dev = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.4.0,<0.5)", "betamax-serializers (>=0.2.0,<0.3)", "black", "flake8", "flynt", "mock (>=0.8)", "pre-commit", "pydocstyle", "pytest", "testfixtures (>4.13.2,<7)"] -lint = ["black", "flake8", "flynt", "pre-commit", "pydocstyle"] -test = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.4.0,<0.5)", "betamax-serializers (>=0.2.0,<0.3)", "mock (>=0.8)", "pytest", "testfixtures (>4.13.2,<7)"] +dev = ["packaging", "prawcore[lint]", "prawcore[test]"] +lint = ["pre-commit", "ruff (>=0.0.291)"] +test = ["betamax (>=0.8,<0.9)", "pytest (>=2.7.3)", "urllib3 (==1.26.*)"] [[package]] name = "pre-commit" @@ -5711,13 +5781,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.17.1" +version = "0.20.0" description = "Python client for the Prometheus monitoring system." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, - {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, + {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, + {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, ] [package.extras] @@ -5725,13 +5795,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.39" +version = "3.0.43" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, ] [package.dependencies] @@ -5813,25 +5883,27 @@ files = [ [[package]] name = "psutil" -version = "5.9.5" +version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, ] [package.extras] @@ -5875,125 +5947,149 @@ files = [ [[package]] name = "pyarrow" -version = "12.0.1" +version = "15.0.2" description = "Python library for Apache Arrow" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyarrow-12.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:6d288029a94a9bb5407ceebdd7110ba398a00412c5b0155ee9813a40d246c5df"}, - {file = "pyarrow-12.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345e1828efdbd9aa4d4de7d5676778aba384a2c3add896d995b23d368e60e5af"}, - {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d6009fdf8986332b2169314da482baed47ac053311c8934ac6651e614deacd6"}, - {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d3c4cbbf81e6dd23fe921bc91dc4619ea3b79bc58ef10bce0f49bdafb103daf"}, - {file = "pyarrow-12.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdacf515ec276709ac8042c7d9bd5be83b4f5f39c6c037a17a60d7ebfd92c890"}, - {file = "pyarrow-12.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:749be7fd2ff260683f9cc739cb862fb11be376de965a2a8ccbf2693b098db6c7"}, - {file = "pyarrow-12.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6895b5fb74289d055c43db3af0de6e16b07586c45763cb5e558d38b86a91e3a7"}, - {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1887bdae17ec3b4c046fcf19951e71b6a619f39fa674f9881216173566c8f718"}, - {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2c9cb8eeabbadf5fcfc3d1ddea616c7ce893db2ce4dcef0ac13b099ad7ca082"}, - {file = "pyarrow-12.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce4aebdf412bd0eeb800d8e47db854f9f9f7e2f5a0220440acf219ddfddd4f63"}, - {file = "pyarrow-12.0.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:e0d8730c7f6e893f6db5d5b86eda42c0a130842d101992b581e2138e4d5663d3"}, - {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43364daec02f69fec89d2315f7fbfbeec956e0d991cbbef471681bd77875c40f"}, - {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051f9f5ccf585f12d7de836e50965b3c235542cc896959320d9776ab93f3b33d"}, - {file = "pyarrow-12.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:be2757e9275875d2a9c6e6052ac7957fbbfc7bc7370e4a036a9b893e96fedaba"}, - {file = "pyarrow-12.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:cf812306d66f40f69e684300f7af5111c11f6e0d89d6b733e05a3de44961529d"}, - {file = "pyarrow-12.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:459a1c0ed2d68671188b2118c63bac91eaef6fc150c77ddd8a583e3c795737bf"}, - {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85e705e33eaf666bbe508a16fd5ba27ca061e177916b7a317ba5a51bee43384c"}, - {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9120c3eb2b1f6f516a3b7a9714ed860882d9ef98c4b17edcdc91d95b7528db60"}, - {file = "pyarrow-12.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:c780f4dc40460015d80fcd6a6140de80b615349ed68ef9adb653fe351778c9b3"}, - {file = "pyarrow-12.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a3c63124fc26bf5f95f508f5d04e1ece8cc23a8b0af2a1e6ab2b1ec3fdc91b24"}, - {file = "pyarrow-12.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b13329f79fa4472324f8d32dc1b1216616d09bd1e77cfb13104dec5463632c36"}, - {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb656150d3d12ec1396f6dde542db1675a95c0cc8366d507347b0beed96e87ca"}, - {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6251e38470da97a5b2e00de5c6a049149f7b2bd62f12fa5dbb9ac674119ba71a"}, - {file = "pyarrow-12.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3de26da901216149ce086920547dfff5cd22818c9eab67ebc41e863a5883bac7"}, - {file = "pyarrow-12.0.1.tar.gz", hash = "sha256:cce317fc96e5b71107bf1f9f184d5e54e2bd14bbf3f9a3d62819961f0af86fec"}, + {file = "pyarrow-15.0.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:88b340f0a1d05b5ccc3d2d986279045655b1fe8e41aba6ca44ea28da0d1455d8"}, + {file = "pyarrow-15.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eaa8f96cecf32da508e6c7f69bb8401f03745c050c1dd42ec2596f2e98deecac"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23c6753ed4f6adb8461e7c383e418391b8d8453c5d67e17f416c3a5d5709afbd"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f639c059035011db8c0497e541a8a45d98a58dbe34dc8fadd0ef128f2cee46e5"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:290e36a59a0993e9a5224ed2fb3e53375770f07379a0ea03ee2fce2e6d30b423"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06c2bb2a98bc792f040bef31ad3e9be6a63d0cb39189227c08a7d955db96816e"}, + {file = "pyarrow-15.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:f7a197f3670606a960ddc12adbe8075cea5f707ad7bf0dffa09637fdbb89f76c"}, + {file = "pyarrow-15.0.2-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:5f8bc839ea36b1f99984c78e06e7a06054693dc2af8920f6fb416b5bca9944e4"}, + {file = "pyarrow-15.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5e81dfb4e519baa6b4c80410421528c214427e77ca0ea9461eb4097c328fa33"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a4f240852b302a7af4646c8bfe9950c4691a419847001178662a98915fd7ee7"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e7d9cfb5a1e648e172428c7a42b744610956f3b70f524aa3a6c02a448ba853e"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2d4f905209de70c0eb5b2de6763104d5a9a37430f137678edfb9a675bac9cd98"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90adb99e8ce5f36fbecbbc422e7dcbcbed07d985eed6062e459e23f9e71fd197"}, + {file = "pyarrow-15.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:b116e7fd7889294cbd24eb90cd9bdd3850be3738d61297855a71ac3b8124ee38"}, + {file = "pyarrow-15.0.2-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:25335e6f1f07fdaa026a61c758ee7d19ce824a866b27bba744348fa73bb5a440"}, + {file = "pyarrow-15.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:90f19e976d9c3d8e73c80be84ddbe2f830b6304e4c576349d9360e335cd627fc"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a22366249bf5fd40ddacc4f03cd3160f2d7c247692945afb1899bab8a140ddfb"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2a335198f886b07e4b5ea16d08ee06557e07db54a8400cc0d03c7f6a22f785f"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e6d459c0c22f0b9c810a3917a1de3ee704b021a5fb8b3bacf968eece6df098f"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:033b7cad32198754d93465dcfb71d0ba7cb7cd5c9afd7052cab7214676eec38b"}, + {file = "pyarrow-15.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:29850d050379d6e8b5a693098f4de7fd6a2bea4365bfd073d7c57c57b95041ee"}, + {file = "pyarrow-15.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:7167107d7fb6dcadb375b4b691b7e316f4368f39f6f45405a05535d7ad5e5058"}, + {file = "pyarrow-15.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e85241b44cc3d365ef950432a1b3bd44ac54626f37b2e3a0cc89c20e45dfd8bf"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:248723e4ed3255fcd73edcecc209744d58a9ca852e4cf3d2577811b6d4b59818"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ff3bdfe6f1b81ca5b73b70a8d482d37a766433823e0c21e22d1d7dde76ca33f"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f3d77463dee7e9f284ef42d341689b459a63ff2e75cee2b9302058d0d98fe142"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:8c1faf2482fb89766e79745670cbca04e7018497d85be9242d5350cba21357e1"}, + {file = "pyarrow-15.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:28f3016958a8e45a1069303a4a4f6a7d4910643fc08adb1e2e4a7ff056272ad3"}, + {file = "pyarrow-15.0.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:89722cb64286ab3d4daf168386f6968c126057b8c7ec3ef96302e81d8cdb8ae4"}, + {file = "pyarrow-15.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd0ba387705044b3ac77b1b317165c0498299b08261d8122c96051024f953cd5"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2459bf1f22b6a5cdcc27ebfd99307d5526b62d217b984b9f5c974651398832"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58922e4bfece8b02abf7159f1f53a8f4d9f8e08f2d988109126c17c3bb261f22"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:adccc81d3dc0478ea0b498807b39a8d41628fa9210729b2f718b78cb997c7c91"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:8bd2baa5fe531571847983f36a30ddbf65261ef23e496862ece83bdceb70420d"}, + {file = "pyarrow-15.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6669799a1d4ca9da9c7e06ef48368320f5856f36f9a4dd31a11839dda3f6cc8c"}, + {file = "pyarrow-15.0.2.tar.gz", hash = "sha256:9c9bc803cb3b7bfacc1e96ffbfd923601065d9d3f911179d81e72d99fd74a3d9"}, ] [package.dependencies] -numpy = ">=1.16.6" +numpy = ">=1.16.6,<2" [[package]] name = "pyasn1" -version = "0.5.0" +version = "0.6.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.8" files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, + {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, + {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, ] [[package]] name = "pyasn1-modules" -version = "0.3.0" +version = "0.4.0" description = "A collection of ASN.1-based protocols modules" optional = true -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.8" files = [ - {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, - {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, + {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, + {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, ] [package.dependencies] -pyasn1 = ">=0.4.6,<0.6.0" +pyasn1 = ">=0.4.6,<0.7.0" + +[[package]] +name = "pybind11" +version = "2.12.0" +description = "Seamless operability between C++11 and Python" +optional = true +python-versions = ">=3.6" +files = [ + {file = "pybind11-2.12.0-py3-none-any.whl", hash = "sha256:df8d60b94f9e714d81013db233393d430ebf9f3551642b82291cf1b14d1afdbd"}, + {file = "pybind11-2.12.0.tar.gz", hash = "sha256:5e3c557a84b06b969247630407fc4d985bed157b4253b13153b8e8e165e0c3dc"}, +] + +[package.extras] +global = ["pybind11-global (==2.12.0)"] [[package]] name = "pycares" -version = "4.3.0" +version = "4.4.0" description = "Python interface for c-ares" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "pycares-4.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:19c9cdd3322d422931982939773e453e491dfc5c0b2e23d7266959315c7a0824"}, - {file = "pycares-4.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9e56e9cdf46a092970dc4b75bbabddea9f480be5eeadc3fcae3eb5c6807c4136"}, - {file = "pycares-4.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c75a6241c79b935048272cb77df498da64b8defc8c4b29fdf9870e43ba4cbb4"}, - {file = "pycares-4.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d8654fac3742791b8bef59d1fbb3e19ae6a5c48876a6d98659f7c66ee546c4"}, - {file = "pycares-4.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebf50b049a245880f1aa16a6f72c4408e0a65b49ea1d3bf13383a44a2cabd2bf"}, - {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:84daf560962763c0359fd79c750ef480f0fda40c08b57765088dbe362e8dc452"}, - {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:978d10da7ee74b9979c494afa8b646411119ad0186a29c7f13c72bb4295630c6"}, - {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c5b9d7fe52eb3d243f5ead58d5c0011884226d961df8360a34618c38c7515"}, - {file = "pycares-4.3.0-cp310-cp310-win32.whl", hash = "sha256:da7c7089ae617317d2cbe38baefd3821387b3bfef7b3ee5b797b871cb1257974"}, - {file = "pycares-4.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:7106dc683db30e1d851283b7b9df7a5ea4964d6bdd000d918d91d4b1f9bed329"}, - {file = "pycares-4.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4e7a24ecef0b1933f2a3fdbf328d1b529a76cda113f8364fa0742e5b3bd76566"}, - {file = "pycares-4.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7abccc2aa4771c06994e4d9ed596453061e2b8846f887d9c98a64ccdaf4790a"}, - {file = "pycares-4.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531fed46c5ed798a914c3207be4ae7b297c4d09e4183d3cf8fd9ee59a55d5080"}, - {file = "pycares-4.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c9335175af0c64a1e0ba67bdd349eb62d4eea0ad02c235ccdf0d535fd20f323"}, - {file = "pycares-4.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f0e95535027d2dcd51e780410632b0d3ed7e9e5ceb25dc0fe937f2c2960079"}, - {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3692179ce5fb96908ba342e1e5303608d0c976f0d5d4619fa9d3d6d9d5a9a1b4"}, - {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c4cb6cc7fe8e0606d30b60367f59fe26d1472e88555d61e202db70dea5c8edb"}, - {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3215445396c74103e2054e6b349d9e85883ceda2006d0039fc2d58c9b11818a2"}, - {file = "pycares-4.3.0-cp311-cp311-win32.whl", hash = "sha256:6a0c0c3a0adf490bba9dbb37dbd07ec81e4a6584f095036ac34f06a633710ffe"}, - {file = "pycares-4.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:995cb37cc39bd40ca87bb16555a0f7724f3be30d9f9059a4caab2fde45b1b903"}, - {file = "pycares-4.3.0-cp36-cp36m-win32.whl", hash = "sha256:4c9187be72449c975c11daa1d94d7ddcc494f8a4c37a6c18f977cd7024a531d9"}, - {file = "pycares-4.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d7405ba10a2903a58b8b0faedcb54994c9ee002ad01963587fabf93e7e479783"}, - {file = "pycares-4.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:40aaa12081495f879f11f4cfc95edfec1ea14711188563102f9e33fe98728fac"}, - {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4972cac24b66c5997f3a3e2cb608e408066d80103d443e36d626a88a287b9ae7"}, - {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35886dba7aa5b73affca8729aeb5a1f5e94d3d9a764adb1b7e75bafca44eeca5"}, - {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5cea6e1f3be016f155d60f27f16c1074d58b4d6e123228fdbc3326d076016af8"}, - {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3a9fd2665b053afb39226ac6f8137a60910ca7729358456df2fb94866f4297de"}, - {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e8e9195f869120e44e0aa0a6098bb5c19947f4753054365891f592e6f9eab3ef"}, - {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:674486ecf2afb25ee219171b07cdaba481a1aaa2dabb155779c7be9ded03eaa9"}, - {file = "pycares-4.3.0-cp37-cp37m-win32.whl", hash = "sha256:1b6cd3161851499b6894d1e23bfd633e7b775472f5af35ae35409c4a47a2d45e"}, - {file = "pycares-4.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:710120c97b9afdba443564350c3f5f72fd9aae74d95b73dc062ca8ac3d7f36d7"}, - {file = "pycares-4.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9103649bd29d84bc6bcfaf09def9c0592bbc766018fad19d76d09989608b915d"}, - {file = "pycares-4.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c072dbaf73cb5434279578dc35322867d8d5df053e14fdcdcc589994ba4804ae"}, - {file = "pycares-4.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008531733f9c7a976b59c7760a3672b191159fd69ae76c01ca051f20b5e44164"}, - {file = "pycares-4.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2aae02d97d77dcff840ab55f86cb8b99bf644acbca17e1edb7048408b9782088"}, - {file = "pycares-4.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:257953ae6d400a934fd9193aeb20990ac84a78648bdf5978e998bd007a4045cd"}, - {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c28d481efae26936ec08cb6beea305f4b145503b152cf2c4dc68cc4ad9644f0e"}, - {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:976249b39037dbfb709ccf7e1c40d2785905a0065536385d501b94570cfed96d"}, - {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:98568c30cfab6b327d94ae1acdf85bbba4cffd415980804985d34ca07e6f4791"}, - {file = "pycares-4.3.0-cp38-cp38-win32.whl", hash = "sha256:a2f3c4f49f43162f7e684419d9834c2c8ec165e54cb8dc47aa9dc0c2132701c0"}, - {file = "pycares-4.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:1730ef93e33e4682fbbf0e7fb19df2ed9822779d17de8ea6e20d5b0d71c1d2be"}, - {file = "pycares-4.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a26b3f1684557025da26ce65d076619890c82b95e38cc7284ce51c3539a1ce8"}, - {file = "pycares-4.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86112cce01655b9f63c5e53b74722084e88e784a7a8ad138d373440337c591c9"}, - {file = "pycares-4.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01465a191dc78e923884bb45cd63c7e012623e520cf7ed67e542413ee334804"}, - {file = "pycares-4.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9fd5d6012f3ee8c8038cbfe16e988bbd17b2f21eea86650874bf63757ee6161"}, - {file = "pycares-4.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa36b8ea91eae20b5c7205f3e6654423f066af24a1df02b274770a96cbcafaa7"}, - {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:61019151130557c1788cae52e4f2f388a7520c9d92574f3a0d61c974c6740db0"}, - {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:231962bb46274c52632469a1e686fab065dbd106dbef586de4f7fb101e297587"}, - {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6c979512fa51c7ccef5204fe10ed4e5c44c2bce5f335fe98a3e423f1672bd7d4"}, - {file = "pycares-4.3.0-cp39-cp39-win32.whl", hash = "sha256:655cf0df862ce3847a60e1a106dafa2ba2c14e6636bac49e874347acdc7312dc"}, - {file = "pycares-4.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:36f2251ad0f99a5ce13df45c94c3161d9734c9e9fa2b9b4cc163b853ca170dc5"}, - {file = "pycares-4.3.0.tar.gz", hash = "sha256:c542696f6dac978e9d99192384745a65f80a7d9450501151e4a7563e06010d45"}, + {file = "pycares-4.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:24da119850841d16996713d9c3374ca28a21deee056d609fbbed29065d17e1f6"}, + {file = "pycares-4.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8f64cb58729689d4d0e78f0bfb4c25ce2f851d0274c0273ac751795c04b8798a"}, + {file = "pycares-4.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33e2a1120887e89075f7f814ec144f66a6ce06a54f5722ccefc62fbeda83cff"}, + {file = "pycares-4.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c680fef1b502ee680f8f0b95a41af4ec2c234e50e16c0af5bbda31999d3584bd"}, + {file = "pycares-4.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fff16b09042ba077f7b8aa5868d1d22456f0002574d0ba43462b10a009331677"}, + {file = "pycares-4.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:229a1675eb33bc9afb1fc463e73ee334950ccc485bc83a43f6ae5839fb4d5fa3"}, + {file = "pycares-4.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3aebc73e5ad70464f998f77f2da2063aa617cbd8d3e8174dd7c5b4518f967153"}, + {file = "pycares-4.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ef64649eba56448f65e26546d85c860709844d2fc22ef14d324fe0b27f761a9"}, + {file = "pycares-4.4.0-cp310-cp310-win32.whl", hash = "sha256:4afc2644423f4eef97857a9fd61be9758ce5e336b4b0bd3d591238bb4b8b03e0"}, + {file = "pycares-4.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5ed4e04af4012f875b78219d34434a6d08a67175150ac1b79eb70ab585d4ba8c"}, + {file = "pycares-4.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bce8db2fc6f3174bd39b81405210b9b88d7b607d33e56a970c34a0c190da0490"}, + {file = "pycares-4.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a0303428d013ccf5c51de59c83f9127aba6200adb7fd4be57eddb432a1edd2a"}, + {file = "pycares-4.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afb91792f1556f97be7f7acb57dc7756d89c5a87bd8b90363a77dbf9ea653817"}, + {file = "pycares-4.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b61579cecf1f4d616e5ea31a6e423a16680ab0d3a24a2ffe7bb1d4ee162477ff"}, + {file = "pycares-4.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7af06968cbf6851566e806bf3e72825b0e6671832a2cbe840be1d2d65350710"}, + {file = "pycares-4.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ceb12974367b0a68a05d52f4162b29f575d241bd53de155efe632bf2c943c7f6"}, + {file = "pycares-4.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2eeec144bcf6a7b6f2d74d6e70cbba7886a84dd373c886f06cb137a07de4954c"}, + {file = "pycares-4.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3a6f7cfdfd11eb5493d6d632e582408c8f3b429f295f8799c584c108b28db6f"}, + {file = "pycares-4.4.0-cp311-cp311-win32.whl", hash = "sha256:34736a2ffaa9c08ca9c707011a2d7b69074bbf82d645d8138bba771479b2362f"}, + {file = "pycares-4.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:eb66c30eb11e877976b7ead13632082a8621df648c408b8e15cdb91a452dd502"}, + {file = "pycares-4.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fd644505a8cfd7f6584d33a9066d4e3d47700f050ef1490230c962de5dfb28c6"}, + {file = "pycares-4.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52084961262232ec04bd75f5043aed7e5d8d9695e542ff691dfef0110209f2d4"}, + {file = "pycares-4.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0c5368206057884cde18602580083aeaad9b860e2eac14fd253543158ce1e93"}, + {file = "pycares-4.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:112a4979c695b1c86f6782163d7dec58d57a3b9510536dcf4826550f9053dd9a"}, + {file = "pycares-4.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d186dafccdaa3409194c0f94db93c1a5d191145a275f19da6591f9499b8e7b8"}, + {file = "pycares-4.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:64965dc19c578a683ea73487a215a8897276224e004d50eeb21f0bc7a0b63c88"}, + {file = "pycares-4.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ed2a38e34bec6f2586435f6ff0bc5fe11d14bebd7ed492cf739a424e81681540"}, + {file = "pycares-4.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:94d6962db81541eb0396d2f0dfcbb18cdb8c8b251d165efc2d974ae652c547d4"}, + {file = "pycares-4.4.0-cp312-cp312-win32.whl", hash = "sha256:1168a48a834813aa80f412be2df4abaf630528a58d15c704857448b20b1675c0"}, + {file = "pycares-4.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:db24c4e7fea4a052c6e869cbf387dd85d53b9736cfe1ef5d8d568d1ca925e977"}, + {file = "pycares-4.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:21a5a0468861ec7df7befa69050f952da13db5427ae41ffe4713bc96291d1d95"}, + {file = "pycares-4.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22c00bf659a9fa44d7b405cf1cd69b68b9d37537899898d8cbe5dffa4016b273"}, + {file = "pycares-4.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23aa3993a352491a47fcf17867f61472f32f874df4adcbb486294bd9fbe8abee"}, + {file = "pycares-4.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:813d661cbe2e37d87da2d16b7110a6860e93ddb11735c6919c8a3545c7b9c8d8"}, + {file = "pycares-4.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77cf5a2fd5583c670de41a7f4a7b46e5cbabe7180d8029f728571f4d2e864084"}, + {file = "pycares-4.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3eaa6681c0a3e3f3868c77aca14b7760fed35fdfda2fe587e15c701950e7bc69"}, + {file = "pycares-4.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ad58e284a658a8a6a84af2e0b62f2f961f303cedfe551854d7bd40c3cbb61912"}, + {file = "pycares-4.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bfb89ca9e3d0a9b5332deeb666b2ede9d3469107742158f4aeda5ce032d003f4"}, + {file = "pycares-4.4.0-cp38-cp38-win32.whl", hash = "sha256:f36bdc1562142e3695555d2f4ac0cb69af165eddcefa98efc1c79495b533481f"}, + {file = "pycares-4.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:902461a92b6a80fd5041a2ec5235680c7cc35e43615639ec2a40e63fca2dfb51"}, + {file = "pycares-4.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7bddc6adba8f699728f7fc1c9ce8cef359817ad78e2ed52b9502cb5f8dc7f741"}, + {file = "pycares-4.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cb49d5805cd347c404f928c5ae7c35e86ba0c58ffa701dbe905365e77ce7d641"}, + {file = "pycares-4.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56cf3349fa3a2e67ed387a7974c11d233734636fe19facfcda261b411af14d80"}, + {file = "pycares-4.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bf2eaa83a5987e48fa63302f0fe7ce3275cfda87b34d40fef9ce703fb3ac002"}, + {file = "pycares-4.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82bba2ab77eb5addbf9758d514d9bdef3c1bfe7d1649a47bd9a0d55a23ef478b"}, + {file = "pycares-4.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c6a8bde63106f162fca736e842a916853cad3c8d9d137e11c9ffa37efa818b02"}, + {file = "pycares-4.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5f646eec041db6ffdbcaf3e0756fb92018f7af3266138c756bb09d2b5baadec"}, + {file = "pycares-4.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9dc04c54c6ea615210c1b9e803d0e2d2255f87a3d5d119b6482c8f0dfa15b26b"}, + {file = "pycares-4.4.0-cp39-cp39-win32.whl", hash = "sha256:97892cced5794d721fb4ff8765764aa4ea48fe8b2c3820677505b96b83d4ef47"}, + {file = "pycares-4.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:917f08f0b5d9324e9a34211e68d27447c552b50ab967044776bbab7e42a553a2"}, + {file = "pycares-4.4.0.tar.gz", hash = "sha256:f47579d508f2f56eddd16ce72045782ad3b1b3b678098699e2b6a1b30733e1c2"}, ] [package.dependencies] @@ -6004,13 +6100,13 @@ idna = ["idna (>=2.1)"] [[package]] name = "pycodestyle" -version = "2.10.0" +version = "2.11.1" description = "Python style guide checker" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, - {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, ] [[package]] @@ -6029,140 +6125,140 @@ requests = "*" [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pycryptodome" -version = "3.18.0" +version = "3.20.0" description = "Cryptographic library for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "pycryptodome-3.18.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-win32.whl", hash = "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-win_amd64.whl", hash = "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14"}, - {file = "pycryptodome-3.18.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1"}, - {file = "pycryptodome-3.18.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb"}, - {file = "pycryptodome-3.18.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6"}, - {file = "pycryptodome-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf"}, - {file = "pycryptodome-3.18.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4"}, - {file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2"}, - {file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e"}, - {file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f"}, - {file = "pycryptodome-3.18.0-cp35-abi3-win32.whl", hash = "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3"}, - {file = "pycryptodome-3.18.0-cp35-abi3-win_amd64.whl", hash = "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9"}, - {file = "pycryptodome-3.18.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec"}, - {file = "pycryptodome-3.18.0-pp27-pypy_73-win32.whl", hash = "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380"}, - {file = "pycryptodome-3.18.0.tar.gz", hash = "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f0e6d631bae3f231d3634f91ae4da7a960f7ff87f2865b2d2b831af1dfb04e9a"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:baee115a9ba6c5d2709a1e88ffe62b73ecc044852a925dcb67713a288c4ec70f"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:417a276aaa9cb3be91f9014e9d18d10e840a7a9b9a9be64a42f553c5b50b4d1d"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a1250b7ea809f752b68e3e6f3fd946b5939a52eaeea18c73bdab53e9ba3c2dd"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:d5954acfe9e00bc83ed9f5cb082ed22c592fbbef86dc48b907238be64ead5c33"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:06d6de87c19f967f03b4cf9b34e538ef46e99a337e9a61a77dbe44b2cbcf0690"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ec0bb1188c1d13426039af8ffcb4dbe3aad1d7680c35a62d8eaf2a529b5d3d4f"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5601c934c498cd267640b57569e73793cb9a83506f7c73a8ec57a516f5b0b091"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d29daa681517f4bc318cd8a23af87e1f2a7bad2fe361e8aa29c77d652a065de4"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3427d9e5310af6680678f4cce149f54e0bb4af60101c7f2c16fdf878b39ccccc"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:3cd3ef3aee1079ae44afaeee13393cf68b1058f70576b11439483e34f93cf818"}, + {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac1c7c0624a862f2e53438a15c9259d1655325fc2ec4392e66dc46cdae24d044"}, + {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76658f0d942051d12a9bd08ca1b6b34fd762a8ee4240984f7c06ddfb55eaf15a"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cb39afede7055127e35a444c1c041d2e8d2f1f9c121ecef573757ba4cd2c3c"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a4c4dc60b78ec41d2afa392491d788c2e06edf48580fbfb0dd0f828af49d25"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:acc2614e2e5346a4a4eab6e199203034924313626f9620b7b4b38e9ad74b7e0c"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:210ba1b647837bfc42dd5a813cdecb5b86193ae11a3f5d972b9a0ae2c7e9e4b4"}, + {file = "pycryptodome-3.20.0-cp35-abi3-win32.whl", hash = "sha256:8d6b98d0d83d21fb757a182d52940d028564efe8147baa9ce0f38d057104ae72"}, + {file = "pycryptodome-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:9b3ae153c89a480a0ec402e23db8d8d84a3833b65fa4b15b81b83be9d637aab9"}, + {file = "pycryptodome-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:4401564ebf37dfde45d096974c7a159b52eeabd9969135f0426907db367a652a"}, + {file = "pycryptodome-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:ec1f93feb3bb93380ab0ebf8b859e8e5678c0f010d2d78367cf6bc30bfeb148e"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:acae12b9ede49f38eb0ef76fdec2df2e94aad85ae46ec85be3648a57f0a7db04"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e0e4a987d38cfc2e71b4a1b591bae4891eeabe5fa0f56154f576e26287bfdea"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c18b381553638414b38705f07d1ef0a7cf301bc78a5f9bc17a957eb19446834b"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a60fedd2b37b4cb11ccb5d0399efe26db9e0dd149016c1cc6c8161974ceac2d6"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:405002eafad114a2f9a930f5db65feef7b53c4784495dd8758069b89baf68eab"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ab6ab0cb755154ad14e507d1df72de9897e99fd2d4922851a276ccc14f4f1a5"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acf6e43fa75aca2d33e93409f2dafe386fe051818ee79ee8a3e21de9caa2ac9e"}, + {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] [[package]] name = "pycryptodomex" -version = "3.18.0" +version = "3.20.0" description = "Cryptographic library for Python" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "pycryptodomex-3.18.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:160a39a708c36fa0b168ab79386dede588e62aec06eb505add870739329aecc6"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c2953afebf282a444c51bf4effe751706b4d0d63d7ca2cc51db21f902aa5b84e"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:ba95abd563b0d1b88401658665a260852a8e6c647026ee6a0a65589287681df8"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:192306cf881fe3467dda0e174a4f47bb3a8bb24b90c9cdfbdc248eec5fc0578c"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:f9ab5ef0718f6a8716695dea16d83b671b22c45e9c0c78fd807c32c0192e54b5"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-win32.whl", hash = "sha256:50308fcdbf8345e5ec224a5502b4215178bdb5e95456ead8ab1a69ffd94779cb"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-win_amd64.whl", hash = "sha256:4d9379c684efea80fdab02a3eb0169372bca7db13f9332cb67483b8dc8b67c37"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5594a125dae30d60e94f37797fc67ce3c744522de7992c7c360d02fdb34918f8"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8ff129a5a0eb5ff16e45ca4fa70a6051da7f3de303c33b259063c19be0c43d35"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:3d9314ac785a5b75d5aaf924c5f21d6ca7e8df442e5cf4f0fefad4f6e284d422"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:f237278836dda412a325e9340ba2e6a84cb0f56b9244781e5b61f10b3905de88"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac614363a86cc53d8ba44b6c469831d1555947e69ab3276ae8d6edc219f570f7"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:302a8f37c224e7b5d72017d462a2be058e28f7be627bdd854066e16722d0fc0c"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:6421d23d6a648e83ba2670a352bcd978542dad86829209f59d17a3f087f4afef"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84e105787f5e5d36ec6a581ff37a1048d12e638688074b2a00bcf402f9aa1c2"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6875eb8666f68ddbd39097867325bd22771f595b4e2b0149739b5623c8bf899b"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:27072a494ce621cc7a9096bbf60ed66826bb94db24b49b7359509e7951033e74"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:1949e09ea49b09c36d11a951b16ff2a05a0ffe969dda1846e4686ee342fe8646"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6ed3606832987018615f68e8ed716a7065c09a0fe94afd7c9ca1b6777f0ac6eb"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-win32.whl", hash = "sha256:d56c9ec41258fd3734db9f5e4d2faeabe48644ba9ca23b18e1839b3bdf093222"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-win_amd64.whl", hash = "sha256:e00a4bacb83a2627e8210cb353a2e31f04befc1155db2976e5e239dd66482278"}, - {file = "pycryptodomex-3.18.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:2dc4eab20f4f04a2d00220fdc9258717b82d31913552e766d5f00282c031b70a"}, - {file = "pycryptodomex-3.18.0-pp27-pypy_73-win32.whl", hash = "sha256:75672205148bdea34669173366df005dbd52be05115e919551ee97171083423d"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bec6c80994d4e7a38312072f89458903b65ec99bed2d65aa4de96d997a53ea7a"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d35a8ffdc8b05e4b353ba281217c8437f02c57d7233363824e9d794cf753c419"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f0a46bee539dae4b3dfe37216f678769349576b0080fdbe431d19a02da42ff"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:71687eed47df7e965f6e0bf3cadef98f368d5221f0fb89d2132effe1a3e6a194"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73d64b32d84cf48d9ec62106aa277dbe99ab5fbfd38c5100bc7bddd3beb569f7"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbdcce0a226d9205560a5936b05208c709b01d493ed8307792075dedfaaffa5f"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58fc0aceb9c961b9897facec9da24c6a94c5db04597ec832060f53d4d6a07196"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:215be2980a6b70704c10796dd7003eb4390e7be138ac6fb8344bf47e71a8d470"}, - {file = "pycryptodomex-3.18.0.tar.gz", hash = "sha256:3e3ecb5fe979e7c1bb0027e518340acf7ee60415d79295e5251d13c68dde576e"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8"}, + {file = "pycryptodomex-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079"}, + {file = "pycryptodomex-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win32.whl", hash = "sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e"}, + {file = "pycryptodomex-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458"}, + {file = "pycryptodomex-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781"}, + {file = "pycryptodomex-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc"}, + {file = "pycryptodomex-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427"}, + {file = "pycryptodomex-3.20.0.tar.gz", hash = "sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e"}, ] [[package]] name = "pydantic" -version = "1.10.11" +version = "1.10.15" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"}, - {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"}, - {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"}, - {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"}, - {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"}, - {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"}, - {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"}, - {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"}, - {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"}, - {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"}, + {file = "pydantic-1.10.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22ed12ee588b1df028a2aa5d66f07bf8f8b4c8579c2e96d5a9c1f96b77f3bb55"}, + {file = "pydantic-1.10.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:75279d3cac98186b6ebc2597b06bcbc7244744f6b0b44a23e4ef01e5683cc0d2"}, + {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50f1666a9940d3d68683c9d96e39640f709d7a72ff8702987dab1761036206bb"}, + {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82790d4753ee5d00739d6cb5cf56bceb186d9d6ce134aca3ba7befb1eedbc2c8"}, + {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d207d5b87f6cbefbdb1198154292faee8017d7495a54ae58db06762004500d00"}, + {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e49db944fad339b2ccb80128ffd3f8af076f9f287197a480bf1e4ca053a866f0"}, + {file = "pydantic-1.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:d3b5c4cbd0c9cb61bbbb19ce335e1f8ab87a811f6d589ed52b0254cf585d709c"}, + {file = "pydantic-1.10.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3d5731a120752248844676bf92f25a12f6e45425e63ce22e0849297a093b5b0"}, + {file = "pydantic-1.10.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c365ad9c394f9eeffcb30a82f4246c0006417f03a7c0f8315d6211f25f7cb654"}, + {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3287e1614393119c67bd4404f46e33ae3be3ed4cd10360b48d0a4459f420c6a3"}, + {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be51dd2c8596b25fe43c0a4a59c2bee4f18d88efb8031188f9e7ddc6b469cf44"}, + {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6a51a1dd4aa7b3f1317f65493a182d3cff708385327c1c82c81e4a9d6d65b2e4"}, + {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4e316e54b5775d1eb59187f9290aeb38acf620e10f7fd2f776d97bb788199e53"}, + {file = "pydantic-1.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:0d142fa1b8f2f0ae11ddd5e3e317dcac060b951d605fda26ca9b234b92214986"}, + {file = "pydantic-1.10.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7ea210336b891f5ea334f8fc9f8f862b87acd5d4a0cbc9e3e208e7aa1775dabf"}, + {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3453685ccd7140715e05f2193d64030101eaad26076fad4e246c1cc97e1bb30d"}, + {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bea1f03b8d4e8e86702c918ccfd5d947ac268f0f0cc6ed71782e4b09353b26f"}, + {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:005655cabc29081de8243126e036f2065bd7ea5b9dff95fde6d2c642d39755de"}, + {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:af9850d98fc21e5bc24ea9e35dd80a29faf6462c608728a110c0a30b595e58b7"}, + {file = "pydantic-1.10.15-cp37-cp37m-win_amd64.whl", hash = "sha256:d31ee5b14a82c9afe2bd26aaa405293d4237d0591527d9129ce36e58f19f95c1"}, + {file = "pydantic-1.10.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e09c19df304b8123938dc3c53d3d3be6ec74b9d7d0d80f4f4b5432ae16c2022"}, + {file = "pydantic-1.10.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7ac9237cd62947db00a0d16acf2f3e00d1ae9d3bd602b9c415f93e7a9fc10528"}, + {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:584f2d4c98ffec420e02305cf675857bae03c9d617fcfdc34946b1160213a948"}, + {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbc6989fad0c030bd70a0b6f626f98a862224bc2b1e36bfc531ea2facc0a340c"}, + {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d573082c6ef99336f2cb5b667b781d2f776d4af311574fb53d908517ba523c22"}, + {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6bd7030c9abc80134087d8b6e7aa957e43d35714daa116aced57269a445b8f7b"}, + {file = "pydantic-1.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:3350f527bb04138f8aff932dc828f154847fbdc7a1a44c240fbfff1b57f49a12"}, + {file = "pydantic-1.10.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:51d405b42f1b86703555797270e4970a9f9bd7953f3990142e69d1037f9d9e51"}, + {file = "pydantic-1.10.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a980a77c52723b0dc56640ced396b73a024d4b74f02bcb2d21dbbac1debbe9d0"}, + {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f1a1fb467d3f49e1708a3f632b11c69fccb4e748a325d5a491ddc7b5d22383"}, + {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:676ed48f2c5bbad835f1a8ed8a6d44c1cd5a21121116d2ac40bd1cd3619746ed"}, + {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:92229f73400b80c13afcd050687f4d7e88de9234d74b27e6728aa689abcf58cc"}, + {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2746189100c646682eff0bce95efa7d2e203420d8e1c613dc0c6b4c1d9c1fde4"}, + {file = "pydantic-1.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:394f08750bd8eaad714718812e7fab615f873b3cdd0b9d84e76e51ef3b50b6b7"}, + {file = "pydantic-1.10.15-py3-none-any.whl", hash = "sha256:28e552a060ba2740d0d2aabe35162652c1459a0b9069fe0db7f4ee0e18e74d58"}, + {file = "pydantic-1.10.15.tar.gz", hash = "sha256:ca832e124eda231a60a041da4f013e3ff24949d94a01154b137fc2f2a43c3ffb"}, ] [package.dependencies] @@ -6277,59 +6373,57 @@ test = ["pytest", "pytest-doctestplus (>=0.7)"] [[package]] name = "pyflakes" -version = "3.0.1" +version = "3.2.0" description = "passive checker of Python programs" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, - {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] [[package]] name = "pygls" -version = "1.0.2" -description = "a pythonic generic language server (pronounced like \"pie glass\")." +version = "1.3.1" +description = "A pythonic generic language server (pronounced like 'pie glass')" optional = true -python-versions = "<4,>=3.7" +python-versions = ">=3.8" files = [ - {file = "pygls-1.0.2-py3-none-any.whl", hash = "sha256:6d278d29fa6559b0f7a448263c85cb64ec6e9369548b02f1a7944060848b21f9"}, - {file = "pygls-1.0.2.tar.gz", hash = "sha256:888ed63d1f650b4fc64d603d73d37545386ec533c0caac921aed80f80ea946a4"}, + {file = "pygls-1.3.1-py3-none-any.whl", hash = "sha256:6e00f11efc56321bdeb6eac04f6d86131f654c7d49124344a9ebb968da3dd91e"}, + {file = "pygls-1.3.1.tar.gz", hash = "sha256:140edceefa0da0e9b3c533547c892a42a7d2fd9217ae848c330c53d266a55018"}, ] [package.dependencies] -lsprotocol = "*" -typeguard = ">=3,<4" +cattrs = ">=23.1.2" +lsprotocol = "2023.0.1" [package.extras] -dev = ["bandit (==1.7.4)", "flake8 (==4.0.1)", "mypy (==0.961)"] -docs = ["sphinx (==5.0.1)", "sphinx-rtd-theme (==1.0.0)"] -test = ["pytest (==7.1.2)", "pytest-asyncio (==0.18.3)"] -ws = ["websockets (==10.*)"] +ws = ["websockets (>=11.0.3)"] [[package]] name = "pygments" -version = "2.15.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyhdfe" -version = "0.1.2" +version = "0.2.0" description = "High dimensional fixed effect absorption with Python 3" optional = false python-versions = ">=3.6" files = [ - {file = "pyhdfe-0.1.2-py3-none-any.whl", hash = "sha256:569709e31320d899776bd00e3c9b2594baf602f30361e232ab034851855a20fe"}, - {file = "pyhdfe-0.1.2.tar.gz", hash = "sha256:a906e5d0922a65503333028e944d993ce15f4ee44e2b3ace2f79049623888432"}, + {file = "pyhdfe-0.2.0-py3-none-any.whl", hash = "sha256:5be73689101b97ff9e6e563874747257cdf86cb683159de8e16a5457130fb532"}, + {file = "pyhdfe-0.2.0.tar.gz", hash = "sha256:8cddc5f5a09148d3281fca3c787146a85ecc5a7517be3ae5762bfe507907b7fb"}, ] [package.dependencies] @@ -6374,15 +6468,20 @@ hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] [[package]] name = "pyinstaller-hooks-contrib" -version = "2023.6" +version = "2024.4" description = "Community maintained hooks for PyInstaller" optional = true python-versions = ">=3.7" files = [ - {file = "pyinstaller-hooks-contrib-2023.6.tar.gz", hash = "sha256:596a72009d8692b043e0acbf5e1b476d93149900142ba01845dded91a0770cb5"}, - {file = "pyinstaller_hooks_contrib-2023.6-py2.py3-none-any.whl", hash = "sha256:aa6d7d038814df6aa7bec7bdbebc7cb4c693d3398df858f6062957f0797d397b"}, + {file = "pyinstaller_hooks_contrib-2024.4-py2.py3-none-any.whl", hash = "sha256:3c521e3c710de74a4d6eeebf5b7b76c3e5b332fea8fa0baafa42c94b73908c0e"}, + {file = "pyinstaller_hooks_contrib-2024.4.tar.gz", hash = "sha256:3aad23ec9298ce675432397cda539e11a8bf77341a314e48b4da4c787ed67e8a"}, ] +[package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +packaging = ">=22.0" +setuptools = ">=42.0.0" + [[package]] name = "pylint" version = "2.17.0" @@ -6434,62 +6533,49 @@ files = [ {file = "PyMeeus-0.5.12.tar.gz", hash = "sha256:548f7186bd8b96cbc069cf649a8e8e377dce49ac74486709849fe63a99cad684"}, ] -[[package]] -name = "pympler" -version = "1.0.1" -description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Pympler-1.0.1-py3-none-any.whl", hash = "sha256:d260dda9ae781e1eab6ea15bacb84015849833ba5555f141d2d9b7b7473b307d"}, - {file = "Pympler-1.0.1.tar.gz", hash = "sha256:993f1a3599ca3f4fcd7160c7545ad06310c9e12f70174ae7ae8d4e25f6c5d3fa"}, -] - [[package]] name = "pyobjc-core" -version = "9.2" +version = "10.2" description = "Python<->ObjC Interoperability Module" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyobjc-core-9.2.tar.gz", hash = "sha256:d734b9291fec91ff4e3ae38b9c6839debf02b79c07314476e87da8e90b2c68c3"}, - {file = "pyobjc_core-9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fa674a39949f5cde8e5c7bbcd24496446bfc67592b028aedbec7f81dc5fc4daa"}, - {file = "pyobjc_core-9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bbc8de304ee322a1ee530b4d2daca135a49b4a49aa3cedc6b2c26c43885f4842"}, - {file = "pyobjc_core-9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0fa950f092673883b8bd28bc18397415cabb457bf410920762109b411789ade9"}, - {file = "pyobjc_core-9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:586e4cae966282eaa61b21cae66ccdcee9d69c036979def26eebdc08ddebe20f"}, - {file = "pyobjc_core-9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41189c2c680931c0395a55691763c481fc681f454f21bb4f1644f98c24a45954"}, - {file = "pyobjc_core-9.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:2d23ee539f2ba5e9f5653d75a13f575c7e36586fc0086792739e69e4c2617eda"}, - {file = "pyobjc_core-9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b9809cf96678797acb72a758f34932fe8e2602d5ab7abec15c5ac68ddb481720"}, + {file = "pyobjc-core-10.2.tar.gz", hash = "sha256:0153206e15d0e0d7abd53ee8a7fbaf5606602a032e177a028fc8589516a8771c"}, + {file = "pyobjc_core-10.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b8eab50ce7f17017a0f1d68c3b7e88bb1bb033415fdff62b8e0a9ee4ab72f242"}, + {file = "pyobjc_core-10.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f2115971463073426ab926416e17e5c16de5b90d1a1f2a2d8724637eb1c21308"}, + {file = "pyobjc_core-10.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a70546246177c23acb323c9324330e37638f1a0a3d13664abcba3bb75e43012c"}, + {file = "pyobjc_core-10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a9b5a215080d13bd7526031d21d5eb27a410780878d863f486053a0eba7ca9a5"}, + {file = "pyobjc_core-10.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:eb1ab700a44bcc4ceb125091dfaae0b998b767b49990df5fdc83eb58158d8e3f"}, + {file = "pyobjc_core-10.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9a7163aff9c47d654f835f80361c1b112886ec754800d34e75d1e02ff52c3d7"}, ] [[package]] name = "pyobjc-framework-cocoa" -version = "9.2" +version = "10.2" description = "Wrappers for the Cocoa frameworks on macOS" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyobjc-framework-Cocoa-9.2.tar.gz", hash = "sha256:efd78080872d8c8de6c2b97e0e4eac99d6203a5d1637aa135d071d464eb2db53"}, - {file = "pyobjc_framework_Cocoa-9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9e02d8a7cc4eb7685377c50ba4f17345701acf4c05b1e7480d421bff9e2f62a4"}, - {file = "pyobjc_framework_Cocoa-9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3b1e6287b3149e4c6679cdbccd8e9ef6557a4e492a892e80a77df143f40026d2"}, - {file = "pyobjc_framework_Cocoa-9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:312977ce2e3989073c6b324c69ba24283de206fe7acd6dbbbaf3e29238a22537"}, - {file = "pyobjc_framework_Cocoa-9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aae7841cf40c26dd915f4dd828f91c6616e6b7998630b72e704750c09e00f334"}, - {file = "pyobjc_framework_Cocoa-9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:739a421e14382a46cbeb9a883f192dceff368ad28ec34d895c48c0ad34cf2c1d"}, - {file = "pyobjc_framework_Cocoa-9.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:32d9ac1033fac1b821ddee8c68f972a7074ad8c50bec0bea9a719034c1c2fb94"}, - {file = "pyobjc_framework_Cocoa-9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b236bb965e41aeb2e215d4e98a5a230d4b63252c6d26e00924ea2e69540a59d6"}, + {file = "pyobjc-framework-Cocoa-10.2.tar.gz", hash = "sha256:6383141379636b13855dca1b39c032752862b829f93a49d7ddb35046abfdc035"}, + {file = "pyobjc_framework_Cocoa-10.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9227b4f271fda2250f5a88cbc686ff30ae02c0f923bb7854bb47972397496b2"}, + {file = "pyobjc_framework_Cocoa-10.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6a6042b7703bdc33b7491959c715c1e810a3f8c7a560c94b36e00ef321480797"}, + {file = "pyobjc_framework_Cocoa-10.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:18886d5013cd7dc7ecd6e0df5134c767569b5247fc10a5e293c72ee3937b217b"}, + {file = "pyobjc_framework_Cocoa-10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ecf01400ee698d2e0ff4c907bcf9608d9d710e97203fbb97b37d208507a9362"}, + {file = "pyobjc_framework_Cocoa-10.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:0def036a7b24e3ae37a244c77bec96b7c9c8384bf6bb4d33369f0a0c8807a70d"}, + {file = "pyobjc_framework_Cocoa-10.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f47ecc393bc1019c4b47e8653207188df784ac006ad54d8c2eb528906ff7013"}, ] [package.dependencies] -pyobjc-core = ">=9.2" +pyobjc-core = ">=10.2" [[package]] name = "pyod" -version = "1.1.0" +version = "1.1.3" description = "A Comprehensive and Scalable Python Library for Outlier Detection (Anomaly Detection)" optional = true python-versions = "*" files = [ - {file = "pyod-1.1.0.tar.gz", hash = "sha256:e4d948989c198e0b7dd0c3096db9b8bf63fc14e1a2b9c60785d04a006641c52a"}, + {file = "pyod-1.1.3.tar.gz", hash = "sha256:ae39808c8da04ce47eee3757ef641feb67e610bddb134b3362fd6f5cb2c6c7cd"}, ] [package.dependencies] @@ -6497,19 +6583,19 @@ joblib = "*" matplotlib = "*" numba = ">=0.51" numpy = ">=1.19" -scikit_learn = ">=0.20.0" +scikit_learn = ">=0.22.0" scipy = ">=1.5.1" six = "*" [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, ] [package.extras] @@ -6606,17 +6692,17 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-mock" -version = "3.11.1" +version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, - {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, ] [package.dependencies] -pytest = ">=5.0" +pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] @@ -6654,13 +6740,13 @@ vcrpy = ">=2.0.1" [[package]] name = "pytest-timeout" -version = "2.1.0" +version = "2.2.0" description = "pytest plugin to abort hanging tests" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pytest-timeout-2.1.0.tar.gz", hash = "sha256:c07ca07404c612f8abbe22294b23c368e2e5104b521c1790195561f37e1ac3d9"}, - {file = "pytest_timeout-2.1.0-py3-none-any.whl", hash = "sha256:f6f50101443ce70ad325ceb4473c4255e9d74e3c7cd0ef827309dfa4c0d975c6"}, + {file = "pytest-timeout-2.2.0.tar.gz", hash = "sha256:3b0b95dabf3cb50bac9ef5ca912fa0cfc286526af17afc806824df20c2f72c90"}, + {file = "pytest_timeout-2.2.0-py3-none-any.whl", hash = "sha256:bde531e096466f49398a59f2dde76fa78429a09a12411466f88a07213e220de2"}, ] [package.dependencies] @@ -6668,13 +6754,13 @@ pytest = ">=5.0.0" [[package]] name = "pytest-xdist" -version = "3.3.1" +version = "3.5.0" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"}, - {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"}, + {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, + {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, ] [package.dependencies] @@ -6713,13 +6799,13 @@ testing = ["aiodns", "aiohttp (>=3.7.4)", "backoff", "base58", "dnspython", "fla [[package]] name = "python-binance" -version = "1.0.17" +version = "1.0.19" description = "Binance REST API python implementation" optional = false python-versions = "*" files = [ - {file = "python-binance-1.0.17.tar.gz", hash = "sha256:364a0ff0d2892867d6851d90e8567c54a194fc62783f20da766a5c7655f57746"}, - {file = "python_binance-1.0.17-py2.py3-none-any.whl", hash = "sha256:c939ca15da1968df6290d14cd79c0f9521b1220c21fdfb75706aa47560a672ae"}, + {file = "python-binance-1.0.19.tar.gz", hash = "sha256:b58cb5313d4fafbcfab3afe6082fff8ba4ebf7261211e7a322c2137637825e82"}, + {file = "python_binance-1.0.19-py2.py3-none-any.whl", hash = "sha256:aabc86955e3f99d5e8b1d49796eb584127af4c44f3eaab64ef92b8ee8fa88bff"}, ] [package.dependencies] @@ -6745,13 +6831,13 @@ files = [ [[package]] name = "python-dateutil" -version = "2.8.2" +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.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {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] @@ -6759,13 +6845,13 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.0" +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.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, + {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] @@ -6872,30 +6958,15 @@ requests = ">=2.0" [[package]] name = "pytz" -version = "2023.3" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] -[[package]] -name = "pytz-deprecation-shim" -version = "0.1.0.post0" -description = "Shims to make deprecation of pytz easier" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, - {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"}, -] - -[package.dependencies] -"backports.zoneinfo" = {version = "*", markers = "python_version >= \"3.6\" and python_version < \"3.9\""} -tzdata = {version = "*", markers = "python_version >= \"3.6\""} - [[package]] name = "pywin32" version = "306" @@ -6932,29 +7003,30 @@ files = [ [[package]] name = "pywinpty" -version = "2.0.11" +version = "2.0.13" description = "Pseudo terminal support for Windows from Python." optional = false python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"}, - {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"}, - {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"}, - {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"}, - {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"}, + {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, + {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, + {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, + {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, + {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, + {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, ] [[package]] name = "pywry" -version = "0.6.1" +version = "0.6.2" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "pywry-0.6.1-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:ce0250bf88bd795bc2751daae162f03e9c3f64a2c0275edf4b376c180090154b"}, - {file = "pywry-0.6.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:8f7dba93babc10eb49682dc8811afe5a9f108772e6a09457173b9c2b30f00e41"}, - {file = "pywry-0.6.1-py3-none-win_amd64.whl", hash = "sha256:537381db5ec246a99e583260613f20a1a2b92829e53e2faa393537f1edc71476"}, - {file = "pywry-0.6.1.tar.gz", hash = "sha256:0ef6a303d1c90db15e9ac62c337fa0b050dd73d3ece5005a96a97576fdc524ed"}, + {file = "pywry-0.6.2-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:45d6bb827bf76b2532a9d70b539209d70f37dfb13e9862549b7bff8500ad2495"}, + {file = "pywry-0.6.2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:1d9ffd826a3a08c132843340e6d896efb7b972b301d045e3239a7dc08d9cac2f"}, + {file = "pywry-0.6.2-py3-none-win_amd64.whl", hash = "sha256:4f0e5b502555ee8b8e799baeaebe63243a84b7ce51df01a1c439dbc4e8227b9e"}, + {file = "pywry-0.6.2.tar.gz", hash = "sha256:9bd88c36ab0860728d9e64360010f8abcede43645656030e4a63e69e81a98c95"}, ] [package.dependencies] @@ -6988,6 +7060,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -7024,119 +7097,120 @@ files = [ [[package]] name = "pyzmq" -version = "25.1.0" +version = "24.0.1" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066"}, + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1"}, + {file = "pyzmq-24.0.1-cp310-cp310-win32.whl", hash = "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd"}, + {file = "pyzmq-24.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1"}, + {file = "pyzmq-24.0.1-cp311-cp311-win32.whl", hash = "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2"}, + {file = "pyzmq-24.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8"}, + {file = "pyzmq-24.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win32.whl", hash = "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be"}, + {file = "pyzmq-24.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win32.whl", hash = "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f"}, + {file = "pyzmq-24.0.1-cp38-cp38-win32.whl", hash = "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58"}, + {file = "pyzmq-24.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58"}, + {file = "pyzmq-24.0.1-cp39-cp39-win32.whl", hash = "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333"}, + {file = "pyzmq-24.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066"}, + {file = "pyzmq-24.0.1.tar.gz", hash = "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77"}, ] [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} +py = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "qdldl" -version = "0.1.7.post0" +version = "0.1.7.post2" description = "QDLDL, a free LDL factorization routine." optional = true python-versions = "*" files = [ - {file = "qdldl-0.1.7.post0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ab02e8b9ff86bd644a1935718387c82fbe04c31e3309cf9f7a121d02b1deda8"}, - {file = "qdldl-0.1.7.post0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e5d6753310377451ed4dc09b1ef28faf40108b713e7f55c8a8ae94d679a672"}, - {file = "qdldl-0.1.7.post0-cp310-cp310-win_amd64.whl", hash = "sha256:718d8e141832e96ba71ca1807a74813836c6403110faaa3d33a67de1af3b29c4"}, - {file = "qdldl-0.1.7.post0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e3f06e8a49ddd834b24fc3d7afbba4fec0923101045aa2666e18d2a9980e329"}, - {file = "qdldl-0.1.7.post0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a81c46522dd6b3042e2348fa98128bb5c0e466f42bce214e80cfb766ff40930"}, - {file = "qdldl-0.1.7.post0-cp311-cp311-win_amd64.whl", hash = "sha256:4a86155f3de66c5db0e21544b7a2421c671028fa20da407686d2a8d0e9b57e51"}, - {file = "qdldl-0.1.7.post0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:717cb1892b033c01a0aae84ededcfa1f05bcb97013095d779c497e6c32f90dac"}, - {file = "qdldl-0.1.7.post0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc35432913085d94b2327242cf51388467ef7a37ac0d71eb31b594b575dd498"}, - {file = "qdldl-0.1.7.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:fd5cfd8c50f33ddacb830594a63b8c1093a24aea45312b9d2ed826cea5ece08a"}, - {file = "qdldl-0.1.7.post0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:981ca8672e9506976c663552c1eb6f6daf9726d62650b3bf5900260946156166"}, - {file = "qdldl-0.1.7.post0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ec670d97cf756f9159dc0a11de5cf054e88aefe84bea1c7282f00334642843"}, - {file = "qdldl-0.1.7.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:aa208703b44337a7e77f6f2663f7a452144becb4421970d534ff8297b92e1e10"}, - {file = "qdldl-0.1.7.post0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b42649484f7c0d8ee659224ecaac0a3e97f12531018207f4d7323e4071320eb1"}, - {file = "qdldl-0.1.7.post0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26aa3d6f0da7779265d72e8f418094003e75fa53c515a53bc03fd8b9bcfbf7de"}, - {file = "qdldl-0.1.7.post0-cp38-cp38-win_amd64.whl", hash = "sha256:e55bcd6962178029faf543addd49db145302dd51e19855fefa71b5fd55840eea"}, - {file = "qdldl-0.1.7.post0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1dd0e570e65aaf35e10b7fb345f7ac763fd05a2227b9c06ce65e07993fc4984"}, - {file = "qdldl-0.1.7.post0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae161342529852b6248ace4642bc4ee371a7c1e0707b7bc43a43ef7e73c06ca3"}, - {file = "qdldl-0.1.7.post0-cp39-cp39-win_amd64.whl", hash = "sha256:092f6606690a2b9bd3c939f3147887e02de13bb068fbed5ffdc7459034def623"}, - {file = "qdldl-0.1.7.post0.tar.gz", hash = "sha256:f346a114c8342ee6d4dbd6471eef314199fb268d3bf7b95885ca351fde2b023f"}, + {file = "qdldl-0.1.7.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c8d39035a64fbe4dc8d73501a444374787c087b202e875f6f0cd7e7ca166e25"}, + {file = "qdldl-0.1.7.post2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f93cd0b3338ef53efa512168d32991bff00b292d6eaf5e35427ca84622158132"}, + {file = "qdldl-0.1.7.post2-cp310-cp310-win_amd64.whl", hash = "sha256:02d6b531fe669f8894f97f697da88fe3f1c3af0c7ef12f260bf1d20e8e70f0dc"}, + {file = "qdldl-0.1.7.post2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:25180228613c66a5af7d6a648920fb71122e1ed58daf09621ed6b939b7f9aa04"}, + {file = "qdldl-0.1.7.post2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa5cf2125dea734f8977df22859b3826fae8960b35caf75cf5b16306ff1d1dc3"}, + {file = "qdldl-0.1.7.post2-cp311-cp311-win_amd64.whl", hash = "sha256:f14cda7c484dbe78e333bb52849031081d37e7e3bf961ed7bb77ed11489f16f6"}, + {file = "qdldl-0.1.7.post2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90982ca5069077cfb8ba9ea7422c6e2a80a3af89266252d1e7a51ea5e87c8188"}, + {file = "qdldl-0.1.7.post2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e5572de51c7c86b6f30cd1b5a88dd5459d48e1c3432b1a04c2f4ad669f6e827"}, + {file = "qdldl-0.1.7.post2-cp312-cp312-win_amd64.whl", hash = "sha256:a612a4dfd94f977c5c9a4389363d4c661f54a6df59c75d462adb93922d92b45f"}, + {file = "qdldl-0.1.7.post2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:97929fd925833306e3c625c92813ac0dea9a53e6b9f680e2c5da9f0c1c641b19"}, + {file = "qdldl-0.1.7.post2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b833a64ee32d1e14a3acd59c3e62ea1dae551e6bf3265e42cb4197c4353ea02"}, + {file = "qdldl-0.1.7.post2-cp36-cp36m-win_amd64.whl", hash = "sha256:f686923c983f62fc7ccc7ebda6fd6ed5f623d299c211933896c7d396c88bb012"}, + {file = "qdldl-0.1.7.post2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8206013ec1fb4c6a396aeb0ef0c68f07d85eb5c22fe7e31cb8307f05787878b9"}, + {file = "qdldl-0.1.7.post2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24e01593cd46c86f5812f1362987bc8ab1080c493f4c7e436e144d2c10481b81"}, + {file = "qdldl-0.1.7.post2-cp37-cp37m-win_amd64.whl", hash = "sha256:06c2157ea1c2f691c956d92895722777eaf8c9ebf9c2c1af4a0b947eccc8b31e"}, + {file = "qdldl-0.1.7.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:77547f9e58522b2445b846ab6f0fd09a689f9fb2c0e72d44d14f631054d7dd55"}, + {file = "qdldl-0.1.7.post2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19825b998202dcd2579182a0a46350bdd95421ec65fd7579326083dc9f1c4d37"}, + {file = "qdldl-0.1.7.post2-cp38-cp38-win_amd64.whl", hash = "sha256:4c08e68cf7c051c0ce9c3846cda60a9c10aa53eb6b240998362dd6fd9410779b"}, + {file = "qdldl-0.1.7.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:edf202648cb0377fd78dd1e59816ccd92fabdee676eb3a7b618c66b393634d10"}, + {file = "qdldl-0.1.7.post2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22bc364e665ea8a2f8f661dbd22321ff365663b33b9ceaf429b94c2661cd11ac"}, + {file = "qdldl-0.1.7.post2-cp39-cp39-win_amd64.whl", hash = "sha256:b7dec0fba6204e83aa4b5e71e84ea2e89cfebeef5b47b70443f8cf9fa12a9752"}, + {file = "qdldl-0.1.7.post2.tar.gz", hash = "sha256:4b1539a5ec10cc757afd7156d7deb4006007cad86d774c9f0fdc3e34415557d3"}, ] [package.dependencies] @@ -7186,13 +7260,13 @@ six = "*" [[package]] name = "rdflib" -version = "6.3.2" +version = "7.0.0" description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." optional = false -python-versions = ">=3.7,<4.0" +python-versions = ">=3.8.1,<4.0.0" files = [ - {file = "rdflib-6.3.2-py3-none-any.whl", hash = "sha256:36b4e74a32aa1e4fa7b8719876fb192f19ecd45ff932ea5ebbd2e417a0247e63"}, - {file = "rdflib-6.3.2.tar.gz", hash = "sha256:72af591ff704f4caacea7ecc0c5a9056b8553e0489dd4f35a9bc52dbd41522e0"}, + {file = "rdflib-7.0.0-py3-none-any.whl", hash = "sha256:0438920912a642c866a513de6fe8a0001bd86ef975057d6962c79ce4771687cd"}, + {file = "rdflib-7.0.0.tar.gz", hash = "sha256:9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"}, ] [package.dependencies] @@ -7207,99 +7281,104 @@ networkx = ["networkx (>=2.0.0,<3.0.0)"] [[package]] name = "regex" -version = "2023.6.3" +version = "2024.4.16" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, + {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb83cc090eac63c006871fd24db5e30a1f282faa46328572661c0a24a2323a08"}, + {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c91e1763696c0eb66340c4df98623c2d4e77d0746b8f8f2bee2c6883fd1fe18"}, + {file = "regex-2024.4.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10188fe732dec829c7acca7422cdd1bf57d853c7199d5a9e96bb4d40db239c73"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:956b58d692f235cfbf5b4f3abd6d99bf102f161ccfe20d2fd0904f51c72c4c66"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a70b51f55fd954d1f194271695821dd62054d949efd6368d8be64edd37f55c86"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c02fcd2bf45162280613d2e4a1ca3ac558ff921ae4e308ecb307650d3a6ee51"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ed75ea6892a56896d78f11006161eea52c45a14994794bcfa1654430984b22"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd727ad276bb91928879f3aa6396c9a1d34e5e180dce40578421a691eeb77f47"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7cbc5d9e8a1781e7be17da67b92580d6ce4dcef5819c1b1b89f49d9678cc278c"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:78fddb22b9ef810b63ef341c9fcf6455232d97cfe03938cbc29e2672c436670e"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:445ca8d3c5a01309633a0c9db57150312a181146315693273e35d936472df912"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:95399831a206211d6bc40224af1c635cb8790ddd5c7493e0bd03b85711076a53"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7731728b6568fc286d86745f27f07266de49603a6fdc4d19c87e8c247be452af"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4facc913e10bdba42ec0aee76d029aedda628161a7ce4116b16680a0413f658a"}, + {file = "regex-2024.4.16-cp310-cp310-win32.whl", hash = "sha256:911742856ce98d879acbea33fcc03c1d8dc1106234c5e7d068932c945db209c0"}, + {file = "regex-2024.4.16-cp310-cp310-win_amd64.whl", hash = "sha256:e0a2df336d1135a0b3a67f3bbf78a75f69562c1199ed9935372b82215cddd6e2"}, + {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1210365faba7c2150451eb78ec5687871c796b0f1fa701bfd2a4a25420482d26"}, + {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ab40412f8cd6f615bfedea40c8bf0407d41bf83b96f6fc9ff34976d6b7037fd"}, + {file = "regex-2024.4.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd80d1280d473500d8086d104962a82d77bfbf2b118053824b7be28cd5a79ea5"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bb966fdd9217e53abf824f437a5a2d643a38d4fd5fd0ca711b9da683d452969"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20b7a68444f536365af42a75ccecb7ab41a896a04acf58432db9e206f4e525d6"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b74586dd0b039c62416034f811d7ee62810174bb70dffcca6439f5236249eb09"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c8290b44d8b0af4e77048646c10c6e3aa583c1ca67f3b5ffb6e06cf0c6f0f89"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2d80a6749724b37853ece57988b39c4e79d2b5fe2869a86e8aeae3bbeef9eb0"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3a1018e97aeb24e4f939afcd88211ace472ba566efc5bdf53fd8fd7f41fa7170"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8d015604ee6204e76569d2f44e5a210728fa917115bef0d102f4107e622b08d5"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:3d5ac5234fb5053850d79dd8eb1015cb0d7d9ed951fa37aa9e6249a19aa4f336"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0a38d151e2cdd66d16dab550c22f9521ba79761423b87c01dae0a6e9add79c0d"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:159dc4e59a159cb8e4e8f8961eb1fa5d58f93cb1acd1701d8aff38d45e1a84a6"}, + {file = "regex-2024.4.16-cp311-cp311-win32.whl", hash = "sha256:ba2336d6548dee3117520545cfe44dc28a250aa091f8281d28804aa8d707d93d"}, + {file = "regex-2024.4.16-cp311-cp311-win_amd64.whl", hash = "sha256:8f83b6fd3dc3ba94d2b22717f9c8b8512354fd95221ac661784df2769ea9bba9"}, + {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:80b696e8972b81edf0af2a259e1b2a4a661f818fae22e5fa4fa1a995fb4a40fd"}, + {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d61ae114d2a2311f61d90c2ef1358518e8f05eafda76eaf9c772a077e0b465ec"}, + {file = "regex-2024.4.16-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ba6745440b9a27336443b0c285d705ce73adb9ec90e2f2004c64d95ab5a7598"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295004b2dd37b0835ea5c14a33e00e8cfa3c4add4d587b77287825f3418d310"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aba818dcc7263852aabb172ec27b71d2abca02a593b95fa79351b2774eb1d2b"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0800631e565c47520aaa04ae38b96abc5196fe8b4aa9bd864445bd2b5848a7a"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08dea89f859c3df48a440dbdcd7b7155bc675f2fa2ec8c521d02dc69e877db70"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eeaa0b5328b785abc344acc6241cffde50dc394a0644a968add75fcefe15b9d4"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4e819a806420bc010489f4e741b3036071aba209f2e0989d4750b08b12a9343f"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:c2d0e7cbb6341e830adcbfa2479fdeebbfbb328f11edd6b5675674e7a1e37730"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:91797b98f5e34b6a49f54be33f72e2fb658018ae532be2f79f7c63b4ae225145"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:d2da13568eff02b30fd54fccd1e042a70fe920d816616fda4bf54ec705668d81"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:370c68dc5570b394cbaadff50e64d705f64debed30573e5c313c360689b6aadc"}, + {file = "regex-2024.4.16-cp312-cp312-win32.whl", hash = "sha256:904c883cf10a975b02ab3478bce652f0f5346a2c28d0a8521d97bb23c323cc8b"}, + {file = "regex-2024.4.16-cp312-cp312-win_amd64.whl", hash = "sha256:785c071c982dce54d44ea0b79cd6dfafddeccdd98cfa5f7b86ef69b381b457d9"}, + {file = "regex-2024.4.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2f142b45c6fed48166faeb4303b4b58c9fcd827da63f4cf0a123c3480ae11fb"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87ab229332ceb127a165612d839ab87795972102cb9830e5f12b8c9a5c1b508"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81500ed5af2090b4a9157a59dbc89873a25c33db1bb9a8cf123837dcc9765047"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b340cccad138ecb363324aa26893963dcabb02bb25e440ebdf42e30963f1a4e0"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c72608e70f053643437bd2be0608f7f1c46d4022e4104d76826f0839199347a"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01fe2305e6232ef3e8f40bfc0f0f3a04def9aab514910fa4203bafbc0bb4682"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:03576e3a423d19dda13e55598f0fd507b5d660d42c51b02df4e0d97824fdcae3"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:549c3584993772e25f02d0656ac48abdda73169fe347263948cf2b1cead622f3"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:34422d5a69a60b7e9a07a690094e824b66f5ddc662a5fc600d65b7c174a05f04"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5f580c651a72b75c39e311343fe6875d6f58cf51c471a97f15a938d9fe4e0d37"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3399dd8a7495bbb2bacd59b84840eef9057826c664472e86c91d675d007137f5"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d1f86f3f4e2388aa3310b50694ac44daefbd1681def26b4519bd050a398dc5a"}, + {file = "regex-2024.4.16-cp37-cp37m-win32.whl", hash = "sha256:dd5acc0a7d38fdc7a3a6fd3ad14c880819008ecb3379626e56b163165162cc46"}, + {file = "regex-2024.4.16-cp37-cp37m-win_amd64.whl", hash = "sha256:ba8122e3bb94ecda29a8de4cf889f600171424ea586847aa92c334772d200331"}, + {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:743deffdf3b3481da32e8a96887e2aa945ec6685af1cfe2bcc292638c9ba2f48"}, + {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7571f19f4a3fd00af9341c7801d1ad1967fc9c3f5e62402683047e7166b9f2b4"}, + {file = "regex-2024.4.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:df79012ebf6f4efb8d307b1328226aef24ca446b3ff8d0e30202d7ebcb977a8c"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e757d475953269fbf4b441207bb7dbdd1c43180711b6208e129b637792ac0b93"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4313ab9bf6a81206c8ac28fdfcddc0435299dc88cad12cc6305fd0e78b81f9e4"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d83c2bc678453646f1a18f8db1e927a2d3f4935031b9ad8a76e56760461105dd"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df1bfef97db938469ef0a7354b2d591a2d438bc497b2c489471bec0e6baf7c4"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62120ed0de69b3649cc68e2965376048793f466c5a6c4370fb27c16c1beac22d"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c2ef6f7990b6e8758fe48ad08f7e2f66c8f11dc66e24093304b87cae9037bb4a"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8fc6976a3395fe4d1fbeb984adaa8ec652a1e12f36b56ec8c236e5117b585427"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:03e68f44340528111067cecf12721c3df4811c67268b897fbe695c95f860ac42"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ec7e0043b91115f427998febaa2beb82c82df708168b35ece3accb610b91fac1"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c21fc21a4c7480479d12fd8e679b699f744f76bb05f53a1d14182b31f55aac76"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:12f6a3f2f58bb7344751919a1876ee1b976fe08b9ffccb4bbea66f26af6017b9"}, + {file = "regex-2024.4.16-cp38-cp38-win32.whl", hash = "sha256:479595a4fbe9ed8f8f72c59717e8cf222da2e4c07b6ae5b65411e6302af9708e"}, + {file = "regex-2024.4.16-cp38-cp38-win_amd64.whl", hash = "sha256:0534b034fba6101611968fae8e856c1698da97ce2efb5c2b895fc8b9e23a5834"}, + {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a7ccdd1c4a3472a7533b0a7aa9ee34c9a2bef859ba86deec07aff2ad7e0c3b94"}, + {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f2f017c5be19984fbbf55f8af6caba25e62c71293213f044da3ada7091a4455"}, + {file = "regex-2024.4.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:803b8905b52de78b173d3c1e83df0efb929621e7b7c5766c0843704d5332682f"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:684008ec44ad275832a5a152f6e764bbe1914bea10968017b6feaecdad5736e0"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65436dce9fdc0aeeb0a0effe0839cb3d6a05f45aa45a4d9f9c60989beca78b9c"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea355eb43b11764cf799dda62c658c4d2fdb16af41f59bb1ccfec517b60bcb07"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c1165f3809ce7774f05cb74e5408cd3aa93ee8573ae959a97a53db3ca3180d"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cccc79a9be9b64c881f18305a7c715ba199e471a3973faeb7ba84172abb3f317"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00169caa125f35d1bca6045d65a662af0202704489fada95346cfa092ec23f39"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6cc38067209354e16c5609b66285af17a2863a47585bcf75285cab33d4c3b8df"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:23cff1b267038501b179ccbbd74a821ac4a7192a1852d1d558e562b507d46013"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d320b3bf82a39f248769fc7f188e00f93526cc0fe739cfa197868633d44701"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:89ec7f2c08937421bbbb8b48c54096fa4f88347946d4747021ad85f1b3021b3c"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4918fd5f8b43aa7ec031e0fef1ee02deb80b6afd49c85f0790be1dc4ce34cb50"}, + {file = "regex-2024.4.16-cp39-cp39-win32.whl", hash = "sha256:684e52023aec43bdf0250e843e1fdd6febbe831bd9d52da72333fa201aaa2335"}, + {file = "regex-2024.4.16-cp39-cp39-win_amd64.whl", hash = "sha256:e697e1c0238133589e00c244a8b676bc2cfc3ab4961318d902040d099fec7483"}, + {file = "regex-2024.4.16.tar.gz", hash = "sha256:fa454d26f2e87ad661c4f0c5a5fe4cf6aab1e307d1b94f16ffdfcb089ba685c0"}, ] [[package]] @@ -7403,13 +7482,13 @@ dev = ["black (>=22.3.0)", "build (>=0.7.0)", "isort (>=5.11.4)", "pyflakes (>=2 [[package]] name = "requests-oauthlib" -version = "1.3.1" +version = "2.0.0" description = "OAuthlib authentication support for Requests." optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.4" files = [ - {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, - {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, + {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, + {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, ] [package.dependencies] @@ -7517,66 +7596,79 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruamel-yaml" -version = "0.17.32" +version = "0.17.40" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false python-versions = ">=3" files = [ - {file = "ruamel.yaml-0.17.32-py3-none-any.whl", hash = "sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447"}, - {file = "ruamel.yaml-0.17.32.tar.gz", hash = "sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2"}, + {file = "ruamel.yaml-0.17.40-py3-none-any.whl", hash = "sha256:b16b6c3816dff0a93dca12acf5e70afd089fa5acb80604afd1ffa8b465b7722c"}, + {file = "ruamel.yaml-0.17.40.tar.gz", hash = "sha256:6024b986f06765d482b5b07e086cc4b4cd05dd22ddcbc758fa23d54873cf313d"}, ] [package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} [package.extras] -docs = ["ryd"] +docs = ["mercurial (>5.7)", "ryd"] jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [[package]] name = "ruamel-yaml-clib" -version = "0.2.7" +version = "0.2.8" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, ] [[package]] @@ -7607,37 +7699,42 @@ files = [ [[package]] name = "scikit-learn" -version = "1.3.0" +version = "1.3.2" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111"}, - {file = "scikit_learn-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369"}, - {file = "scikit_learn-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612"}, - {file = "scikit_learn-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718"}, - {file = "scikit_learn-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd"}, + {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"}, + {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"}, + {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"}, + {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"}, + {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"}, + {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"}, ] [package.dependencies] joblib = ">=1.1.1" -numpy = ">=1.17.3" +numpy = ">=1.17.3,<2.0" scipy = ">=1.5.0" threadpoolctl = ">=2.0.0" @@ -7701,32 +7798,36 @@ pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""} [[package]] name = "scs" -version = "3.2.3" -description = "scs: splitting conic solver" +version = "3.2.4.post1" +description = "Splitting conic solver" optional = true -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "scs-3.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d7f7fd2d2cd88938c159b15e8915d9536610e50a9c34ecf36ce0290807afe55"}, - {file = "scs-3.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368194620918301bf5309a35a7cd0444f1b1992b182c0a29033c26eb97b3dcb2"}, - {file = "scs-3.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:2d835a74c283be73bff6e1978d3ae77a60d9e87db1fdd12916464fa2a1dda517"}, - {file = "scs-3.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81511fda3254c0d29089443dcd2305e81d203509e4d77afd160e9174b15ad75a"}, - {file = "scs-3.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715ca4532de39b462bd393f9e8b4bf57be4122e20f0780d00db3cab1450a585d"}, - {file = "scs-3.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:fcf4b985a787135b3e83682a4c5b9bce9c6290cfead1d7225c38f34f5ead7187"}, - {file = "scs-3.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91f5194cfabe354c9b1f0ea1de82114028d81c5a4a633177b8da2fe36f301758"}, - {file = "scs-3.2.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0d15f21e9053c5df37dab0d700da55fcc71f2f454748f364b9de594988b2ab3"}, - {file = "scs-3.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:6a80727167ad73151ced202a1ac6c0c7644b00b2e2607edec8a8807fc0443ac8"}, - {file = "scs-3.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79d7d6c42ee636821460d317b8250945ce04363a47a63aef6b1eae0bd7a418fc"}, - {file = "scs-3.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6f64d23247797cfa289095fb5ddea6eeff5adf98961e953da90233278827e0c"}, - {file = "scs-3.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:9a14a7c80efb34b469eb4dbaf26a9104dd2ca93e477985f948d8f28cd4b1a2ba"}, - {file = "scs-3.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3eb601738b260e3dcad117f3e02aceaca5d1e8eac2be225be1c0f9cbf83e75cb"}, - {file = "scs-3.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1b24176de97ecedf698596086f85da6dad472fe38a4b21cf4b460f87cae2c37"}, - {file = "scs-3.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:ddaa5af34a0e1f636d312eb1901bd407383f0b04dda50fba7242d56e618c0966"}, - {file = "scs-3.2.3.tar.gz", hash = "sha256:e3bd779e7e977e3ae5a2f2035aa4c2a309e29082d59a722d5d6592edc4bdb4b3"}, + {file = "scs-3.2.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51fed30d2a4a1e6fbfc1e52b4cb3adeecbe89d7c47f3539b49afbb852415fe19"}, + {file = "scs-3.2.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0524c0b9c3ed0d65dae161475accf3efa8e170938eb93251a60e9709b156ee"}, + {file = "scs-3.2.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:534519819eea96f18902a9fce15c4ec562b99d23b38dc843a48cb137b5641613"}, + {file = "scs-3.2.4.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d04ee4d19ac6d0f5053663bc48fcd5c5faed534272f13b10a4e173c814eea69"}, + {file = "scs-3.2.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c23b4299ab77ff5f654573d5667dc982292a8ef2b979053b38c40663919f13"}, + {file = "scs-3.2.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:ae4624938d3e3a8b7e508029275c6ad7a978fd48c158d0818f69f4ae764bf945"}, + {file = "scs-3.2.4.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:40294e22bfe509bdf7fd65a6b77c38cec22dcb3567ff5a75f3c41a1faf2ef1d5"}, + {file = "scs-3.2.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a2337acb0604770b6df1473254065a51c210ff9c82fc7c4490595510287a337"}, + {file = "scs-3.2.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:8689e75a57e59846e65d1c4b9d57e9964b00fcbb8e67fc77f98cf6e0a0530abd"}, + {file = "scs-3.2.4.post1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ad991b00d0a87c85db57bf2f1863c21bdc4e2f13837f6c35e809f5936bc6f165"}, + {file = "scs-3.2.4.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28af160a44268e726a59d6cf340629b82940c1a643c4c87fe777e9cbe550d75"}, + {file = "scs-3.2.4.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:f6283f725f3fee63d4631c2532d01a5b2ea65883b04d3da3be06084b1c60171b"}, + {file = "scs-3.2.4.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b3a622cf2120ae765f0f3ad5c6f4f86796d317e29132bab2ad4af3c14d9bf4d"}, + {file = "scs-3.2.4.post1-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:4b5259137c263304effa2b28d0125437ac23569e6e7753c115ae1206ec5033fd"}, + {file = "scs-3.2.4.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424710bc19b0506feee7e05e6d2b7af98acf09af5bd5353126164cbd46ac923f"}, + {file = "scs-3.2.4.post1-cp38-cp38-win_amd64.whl", hash = "sha256:e21bdc8046648846e2c204a6c5cf24eaaedd2b8f5e0a2ab41a647b0247b8d592"}, + {file = "scs-3.2.4.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cea0f7e9473f43f7edf1641d020ead7e39653a81c540fbdba8f3b7b8480038c9"}, + {file = "scs-3.2.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6126f1d7ed5ff368cb8c1836715b17a50074314579eefc6d511995a3ab93d70"}, + {file = "scs-3.2.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:18788befa5284bb1f49149bac7f813703de60ef5b6bf7698a9f1c3a5a49b78e4"}, + {file = "scs-3.2.4.post1.tar.gz", hash = "sha256:7015d7a56d1d5b53264fd277289ea169949309e26101677ff88cd0e5030d032f"}, ] [package.dependencies] -numpy = ">=1.7" -scipy = ">=0.13.2" +numpy = "*" +scipy = "*" [[package]] name = "seaborn" @@ -7762,13 +7863,13 @@ doc = ["Sphinx", "sphinx-rtd-theme"] [[package]] name = "send2trash" -version = "1.8.2" +version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, ] [package.extras] @@ -7778,83 +7879,99 @@ win32 = ["pywin32"] [[package]] name = "setproctitle" -version = "1.3.2" +version = "1.3.3" description = "A Python module to customize the process title" optional = false python-versions = ">=3.7" files = [ - {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:288943dec88e178bb2fd868adf491197cc0fc8b6810416b1c6775e686bab87fe"}, - {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:630f6fe5e24a619ccf970c78e084319ee8be5be253ecc9b5b216b0f474f5ef18"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c877691b90026670e5a70adfbcc735460a9f4c274d35ec5e8a43ce3f8443005"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a55fe05f15c10e8c705038777656fe45e3bd676d49ad9ac8370b75c66dd7cd7"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab45146c71ca6592c9cc8b354a2cc9cc4843c33efcbe1d245d7d37ce9696552d"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c9d5c541a2713ba0e657e0303bf96ddddc412ef4761676adc35df35d7c246"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:265ecbe2c6eafe82e104f994ddd7c811520acdd0647b73f65c24f51374cf9494"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c2c46200656280a064073447ebd363937562debef329482fd7e570c8d498f806"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:fa2f50678f04fda7a75d0fe5dd02bbdd3b13cbe6ed4cf626e4472a7ccf47ae94"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f2719a398e1a2c01c2a63bf30377a34d0b6ef61946ab9cf4d550733af8f1ef1"}, - {file = "setproctitle-1.3.2-cp310-cp310-win32.whl", hash = "sha256:e425be62524dc0c593985da794ee73eb8a17abb10fe692ee43bb39e201d7a099"}, - {file = "setproctitle-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:e85e50b9c67854f89635a86247412f3ad66b132a4d8534ac017547197c88f27d"}, - {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a97d51c17d438cf5be284775a322d57b7ca9505bb7e118c28b1824ecaf8aeaa"}, - {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:587c7d6780109fbd8a627758063d08ab0421377c0853780e5c356873cdf0f077"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d17c8bd073cbf8d141993db45145a70b307385b69171d6b54bcf23e5d644de"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e932089c35a396dc31a5a1fc49889dd559548d14cb2237adae260382a090382e"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e4f8f12258a8739c565292a551c3db62cca4ed4f6b6126664e2381acb4931bf"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:570d255fd99c7f14d8f91363c3ea96bd54f8742275796bca67e1414aeca7d8c3"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a8e0881568c5e6beff91ef73c0ec8ac2a9d3ecc9edd6bd83c31ca34f770910c4"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4bba3be4c1fabf170595b71f3af46c6d482fbe7d9e0563999b49999a31876f77"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:37ece938110cab2bb3957e3910af8152ca15f2b6efdf4f2612e3f6b7e5459b80"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db684d6bbb735a80bcbc3737856385b55d53f8a44ce9b46e9a5682c5133a9bf7"}, - {file = "setproctitle-1.3.2-cp311-cp311-win32.whl", hash = "sha256:ca58cd260ea02759238d994cfae844fc8b1e206c684beb8f38877dcab8451dfc"}, - {file = "setproctitle-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:88486e6cce2a18a033013d17b30a594f1c5cb42520c49c19e6ade40b864bb7ff"}, - {file = "setproctitle-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:92c626edc66169a1b09e9541b9c0c9f10488447d8a2b1d87c8f0672e771bc927"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710e16fa3bade3b026907e4a5e841124983620046166f355bbb84be364bf2a02"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f29b75e86260b0ab59adb12661ef9f113d2f93a59951373eb6d68a852b13e83"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c8d9650154afaa86a44ff195b7b10d683c73509d085339d174e394a22cccbb9"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0452282258dfcc01697026a8841258dd2057c4438b43914b611bccbcd048f10"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e49ae693306d7624015f31cb3e82708916759d592c2e5f72a35c8f4cc8aef258"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1ff863a20d1ff6ba2c24e22436a3daa3cd80be1dfb26891aae73f61b54b04aca"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:55ce1e9925ce1765865442ede9dca0ba9bde10593fcd570b1f0fa25d3ec6b31c"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7fe9df7aeb8c64db6c34fc3b13271a363475d77bc157d3f00275a53910cb1989"}, - {file = "setproctitle-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:e5c50e164cd2459bc5137c15288a9ef57160fd5cbf293265ea3c45efe7870865"}, - {file = "setproctitle-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a499fff50387c1520c085a07578a000123f519e5f3eee61dd68e1d301659651f"}, - {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b932c3041aa924163f4aab970c2f0e6b4d9d773f4d50326e0ea1cd69240e5c5"}, - {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4bfc89bd33ebb8e4c0e9846a09b1f5a4a86f5cb7a317e75cc42fee1131b4f4f"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd3cf4286a60fdc95451d8d14e0389a6b4f5cebe02c7f2609325eb016535963"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fb4f769c02f63fac90989711a3fee83919f47ae9afd4758ced5d86596318c65"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5194b4969f82ea842a4f6af2f82cd16ebdc3f1771fb2771796e6add9835c1973"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cde41857a644b7353a0060b5f94f7ba7cf593ebde5a1094da1be581ac9a31"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9124bedd8006b0e04d4e8a71a0945da9b67e7a4ab88fdad7b1440dc5b6122c42"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8a09d570b39517de10ee5b718730e171251ce63bbb890c430c725c8c53d4484"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8ff3c8cb26afaed25e8bca7b9dd0c1e36de71f35a3a0706b5c0d5172587a3827"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:589be87172b238f839e19f146b9ea47c71e413e951ef0dc6db4218ddacf3c202"}, - {file = "setproctitle-1.3.2-cp38-cp38-win32.whl", hash = "sha256:4749a2b0c9ac52f864d13cee94546606f92b981b50e46226f7f830a56a9dc8e1"}, - {file = "setproctitle-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:e43f315c68aa61cbdef522a2272c5a5b9b8fd03c301d3167b5e1343ef50c676c"}, - {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de3a540cd1817ede31f530d20e6a4935bbc1b145fd8f8cf393903b1e02f1ae76"}, - {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4058564195b975ddc3f0462375c533cce310ccdd41b80ac9aed641c296c3eff4"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c5d5dad7c28bdd1ec4187d818e43796f58a845aa892bb4481587010dc4d362b"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffc61a388a5834a97953d6444a2888c24a05f2e333f9ed49f977a87bb1ad4761"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fa1a0fbee72b47dc339c87c890d3c03a72ea65c061ade3204f285582f2da30f"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8a988c7220c002c45347430993830666e55bc350179d91fcee0feafe64e1d4"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bae283e85fc084b18ffeb92e061ff7ac5af9e183c9d1345c93e178c3e5069cbe"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fed18e44711c5af4b681c2b3b18f85e6f0f1b2370a28854c645d636d5305ccd8"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b34baef93bfb20a8ecb930e395ccd2ae3268050d8cf4fe187de5e2bd806fd796"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7f0bed90a216ef28b9d227d8d73e28a8c9b88c0f48a082d13ab3fa83c581488f"}, - {file = "setproctitle-1.3.2-cp39-cp39-win32.whl", hash = "sha256:4d8938249a7cea45ab7e1e48b77685d0f2bab1ebfa9dde23e94ab97968996a7c"}, - {file = "setproctitle-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a47d97a75fd2d10c37410b180f67a5835cb1d8fdea2648fd7f359d4277f180b9"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dad42e676c5261eb50fdb16bdf3e2771cf8f99a79ef69ba88729aeb3472d8575"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c91b9bc8985d00239f7dc08a49927a7ca1ca8a6af2c3890feec3ed9665b6f91e"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8579a43eafd246e285eb3a5b939e7158073d5087aacdd2308f23200eac2458b"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:2fbd8187948284293f43533c150cd69a0e4192c83c377da837dbcd29f6b83084"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:faec934cfe5fd6ac1151c02e67156c3f526e82f96b24d550b5d51efa4a5527c6"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1aafc91cbdacc9e5fe712c52077369168e6b6c346f3a9d51bf600b53eae56bb"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b617f12c9be61e8f4b2857be4a4319754756845dbbbd9c3718f468bbb1e17bcb"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b2c9cb2705fc84cb8798f1ba74194f4c080aaef19d9dae843591c09b97678e98"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a149a5f7f2c5a065d4e63cb0d7a4b6d3b66e6e80f12e3f8827c4f63974cbf122"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e3ac25bfc4a0f29d2409650c7532d5ddfdbf29f16f8a256fc31c47d0dc05172"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d884e22037b23fa25b2baf1a3316602ed5c5971eb3e9d771a38c3a69ce6e13"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7aa0aac1711fadffc1d51e9d00a3bea61f68443d6ac0241a224e4d622489d665"}, - {file = "setproctitle-1.3.2.tar.gz", hash = "sha256:b9fb97907c830d260fa0658ed58afd48a86b2b88aac521135c352ff7fd3477fd"}, + {file = "setproctitle-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:897a73208da48db41e687225f355ce993167079eda1260ba5e13c4e53be7f754"}, + {file = "setproctitle-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c331e91a14ba4076f88c29c777ad6b58639530ed5b24b5564b5ed2fd7a95452"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbbd6c7de0771c84b4aa30e70b409565eb1fc13627a723ca6be774ed6b9d9fa3"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c05ac48ef16ee013b8a326c63e4610e2430dbec037ec5c5b58fcced550382b74"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1342f4fdb37f89d3e3c1c0a59d6ddbedbde838fff5c51178a7982993d238fe4f"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc74e84fdfa96821580fb5e9c0b0777c1c4779434ce16d3d62a9c4d8c710df39"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9617b676b95adb412bb69645d5b077d664b6882bb0d37bfdafbbb1b999568d85"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6a249415f5bb88b5e9e8c4db47f609e0bf0e20a75e8d744ea787f3092ba1f2d0"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:38da436a0aaace9add67b999eb6abe4b84397edf4a78ec28f264e5b4c9d53cd5"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:da0d57edd4c95bf221b2ebbaa061e65b1788f1544977288bdf95831b6e44e44d"}, + {file = "setproctitle-1.3.3-cp310-cp310-win32.whl", hash = "sha256:a1fcac43918b836ace25f69b1dca8c9395253ad8152b625064415b1d2f9be4fb"}, + {file = "setproctitle-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:200620c3b15388d7f3f97e0ae26599c0c378fdf07ae9ac5a13616e933cbd2086"}, + {file = "setproctitle-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:334f7ed39895d692f753a443102dd5fed180c571eb6a48b2a5b7f5b3564908c8"}, + {file = "setproctitle-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:950f6476d56ff7817a8fed4ab207727fc5260af83481b2a4b125f32844df513a"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:195c961f54a09eb2acabbfc90c413955cf16c6e2f8caa2adbf2237d1019c7dd8"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f05e66746bf9fe6a3397ec246fe481096664a9c97eb3fea6004735a4daf867fd"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b5901a31012a40ec913265b64e48c2a4059278d9f4e6be628441482dd13fb8b5"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64286f8a995f2cd934082b398fc63fca7d5ffe31f0e27e75b3ca6b4efda4e353"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:184239903bbc6b813b1a8fc86394dc6ca7d20e2ebe6f69f716bec301e4b0199d"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:664698ae0013f986118064b6676d7dcd28fefd0d7d5a5ae9497cbc10cba48fa5"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e5119a211c2e98ff18b9908ba62a3bd0e3fabb02a29277a7232a6fb4b2560aa0"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:417de6b2e214e837827067048f61841f5d7fc27926f2e43954567094051aff18"}, + {file = "setproctitle-1.3.3-cp311-cp311-win32.whl", hash = "sha256:6a143b31d758296dc2f440175f6c8e0b5301ced3b0f477b84ca43cdcf7f2f476"}, + {file = "setproctitle-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a680d62c399fa4b44899094027ec9a1bdaf6f31c650e44183b50d4c4d0ccc085"}, + {file = "setproctitle-1.3.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d4460795a8a7a391e3567b902ec5bdf6c60a47d791c3b1d27080fc203d11c9dc"}, + {file = "setproctitle-1.3.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bdfd7254745bb737ca1384dee57e6523651892f0ea2a7344490e9caefcc35e64"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477d3da48e216d7fc04bddab67b0dcde633e19f484a146fd2a34bb0e9dbb4a1e"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ab2900d111e93aff5df9fddc64cf51ca4ef2c9f98702ce26524f1acc5a786ae7"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088b9efc62d5aa5d6edf6cba1cf0c81f4488b5ce1c0342a8b67ae39d64001120"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6d50252377db62d6a0bb82cc898089916457f2db2041e1d03ce7fadd4a07381"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:87e668f9561fd3a457ba189edfc9e37709261287b52293c115ae3487a24b92f6"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:287490eb90e7a0ddd22e74c89a92cc922389daa95babc833c08cf80c84c4df0a"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe1c49486109f72d502f8be569972e27f385fe632bd8895f4730df3c87d5ac8"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4a6ba2494a6449b1f477bd3e67935c2b7b0274f2f6dcd0f7c6aceae10c6c6ba3"}, + {file = "setproctitle-1.3.3-cp312-cp312-win32.whl", hash = "sha256:2df2b67e4b1d7498632e18c56722851ba4db5d6a0c91aaf0fd395111e51cdcf4"}, + {file = "setproctitle-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:f38d48abc121263f3b62943f84cbaede05749047e428409c2c199664feb6abc7"}, + {file = "setproctitle-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:816330675e3504ae4d9a2185c46b573105d2310c20b19ea2b4596a9460a4f674"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f960bc22d8d8e4ac886d1e2e21ccbd283adcf3c43136161c1ba0fa509088e0"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e6e7adff74796ef12753ff399491b8827f84f6c77659d71bd0b35870a17d8f"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53bc0d2358507596c22b02db079618451f3bd720755d88e3cccd840bafb4c41c"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad6d20f9541f5f6ac63df553b6d7a04f313947f550eab6a61aa758b45f0d5657"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c1c84beab776b0becaa368254801e57692ed749d935469ac10e2b9b825dbdd8e"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:507e8dc2891021350eaea40a44ddd887c9f006e6b599af8d64a505c0f718f170"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b1067647ac7aba0b44b591936118a22847bda3c507b0a42d74272256a7a798e9"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2e71f6365744bf53714e8bd2522b3c9c1d83f52ffa6324bd7cbb4da707312cd8"}, + {file = "setproctitle-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:7f1d36a1e15a46e8ede4e953abb104fdbc0845a266ec0e99cc0492a4364f8c44"}, + {file = "setproctitle-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9a402881ec269d0cc9c354b149fc29f9ec1a1939a777f1c858cdb09c7a261df"}, + {file = "setproctitle-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ff814dea1e5c492a4980e3e7d094286077054e7ea116cbeda138819db194b2cd"}, + {file = "setproctitle-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:accb66d7b3ccb00d5cd11d8c6e07055a4568a24c95cf86109894dcc0c134cc89"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554eae5a5b28f02705b83a230e9d163d645c9a08914c0ad921df363a07cf39b1"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a911b26264dbe9e8066c7531c0591cfab27b464459c74385b276fe487ca91c12"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2982efe7640c4835f7355fdb4da313ad37fb3b40f5c69069912f8048f77b28c8"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df3f4274b80709d8bcab2f9a862973d453b308b97a0b423a501bcd93582852e3"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:af2c67ae4c795d1674a8d3ac1988676fa306bcfa1e23fddb5e0bd5f5635309ca"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af4061f67fd7ec01624c5e3c21f6b7af2ef0e6bab7fbb43f209e6506c9ce0092"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:37a62cbe16d4c6294e84670b59cf7adcc73faafe6af07f8cb9adaf1f0e775b19"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a83ca086fbb017f0d87f240a8f9bbcf0809f3b754ee01cec928fff926542c450"}, + {file = "setproctitle-1.3.3-cp38-cp38-win32.whl", hash = "sha256:059f4ce86f8cc92e5860abfc43a1dceb21137b26a02373618d88f6b4b86ba9b2"}, + {file = "setproctitle-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:ab92e51cd4a218208efee4c6d37db7368fdf182f6e7ff148fb295ecddf264287"}, + {file = "setproctitle-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c7951820b77abe03d88b114b998867c0f99da03859e5ab2623d94690848d3e45"}, + {file = "setproctitle-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc94cf128676e8fac6503b37763adb378e2b6be1249d207630f83fc325d9b11"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f5d9027eeda64d353cf21a3ceb74bb1760bd534526c9214e19f052424b37e42"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e4a8104db15d3462e29d9946f26bed817a5b1d7a47eabca2d9dc2b995991503"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c32c41ace41f344d317399efff4cffb133e709cec2ef09c99e7a13e9f3b9483c"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf16381c7bf7f963b58fb4daaa65684e10966ee14d26f5cc90f07049bfd8c1e"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e18b7bd0898398cc97ce2dfc83bb192a13a087ef6b2d5a8a36460311cb09e775"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69d565d20efe527bd8a9b92e7f299ae5e73b6c0470f3719bd66f3cd821e0d5bd"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ddedd300cd690a3b06e7eac90ed4452348b1348635777ce23d460d913b5b63c3"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:415bfcfd01d1fbf5cbd75004599ef167a533395955305f42220a585f64036081"}, + {file = "setproctitle-1.3.3-cp39-cp39-win32.whl", hash = "sha256:21112fcd2195d48f25760f0eafa7a76510871bbb3b750219310cf88b04456ae3"}, + {file = "setproctitle-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:5a740f05d0968a5a17da3d676ce6afefebeeeb5ce137510901bf6306ba8ee002"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6b9e62ddb3db4b5205c0321dd69a406d8af9ee1693529d144e86bd43bcb4b6c0"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e3b99b338598de0bd6b2643bf8c343cf5ff70db3627af3ca427a5e1a1a90dd9"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ae9a02766dad331deb06855fb7a6ca15daea333b3967e214de12cfae8f0ef5"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:200ede6fd11233085ba9b764eb055a2a191fb4ffb950c68675ac53c874c22e20"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0d3a953c50776751e80fe755a380a64cb14d61e8762bd43041ab3f8cc436092f"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e08e232b78ba3ac6bc0d23ce9e2bee8fad2be391b7e2da834fc9a45129eb87"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1da82c3e11284da4fcbf54957dafbf0655d2389cd3d54e4eaba636faf6d117a"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:aeaa71fb9568ebe9b911ddb490c644fbd2006e8c940f21cb9a1e9425bd709574"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:59335d000c6250c35989394661eb6287187854e94ac79ea22315469ee4f4c244"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3ba57029c9c50ecaf0c92bb127224cc2ea9fda057b5d99d3f348c9ec2855ad3"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d876d355c53d975c2ef9c4f2487c8f83dad6aeaaee1b6571453cb0ee992f55f6"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:224602f0939e6fb9d5dd881be1229d485f3257b540f8a900d4271a2c2aa4e5f4"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d7f27e0268af2d7503386e0e6be87fb9b6657afd96f5726b733837121146750d"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5e7266498cd31a4572378c61920af9f6b4676a73c299fce8ba93afd694f8ae7"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33c5609ad51cd99d388e55651b19148ea99727516132fb44680e1f28dd0d1de9"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:eae8988e78192fd1a3245a6f4f382390b61bce6cfcc93f3809726e4c885fa68d"}, + {file = "setproctitle-1.3.3.tar.gz", hash = "sha256:c913e151e7ea01567837ff037a23ca8740192880198b7fbb90b16d181607caae"}, ] [package.extras] @@ -7878,43 +7995,41 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( [[package]] name = "setuptools-rust" -version = "1.6.0" +version = "1.9.0" description = "Setuptools Rust extension plugin" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-rust-1.6.0.tar.gz", hash = "sha256:c86e734deac330597998bfbc08da45187e6b27837e23bd91eadb320732392262"}, - {file = "setuptools_rust-1.6.0-py3-none-any.whl", hash = "sha256:e28ae09fb7167c44ab34434eb49279307d611547cb56cb9789955cdb54a1aed9"}, + {file = "setuptools-rust-1.9.0.tar.gz", hash = "sha256:704df0948f2e4cc60c2596ad6e840ea679f4f43e58ed4ad0c1857807240eab96"}, + {file = "setuptools_rust-1.9.0-py3-none-any.whl", hash = "sha256:409caf49dcf7ad9bd510b4bf4011fbad504e745fae98f57fe1c06f3a97719638"}, ] [package.dependencies] semantic-version = ">=2.8.2,<3" setuptools = ">=62.4" -typing-extensions = ">=3.7.4.3" +tomli = {version = ">=1.2.1", markers = "python_version < \"3.11\""} [[package]] name = "setuptools-scm" -version = "7.1.0" +version = "8.0.4" description = "the blessed package to manage your versions by scm tags" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools_scm-7.1.0-py3-none-any.whl", hash = "sha256:73988b6d848709e2af142aa48c986ea29592bbcfca5375678064708205253d8e"}, - {file = "setuptools_scm-7.1.0.tar.gz", hash = "sha256:6c508345a771aad7d56ebff0e70628bf2b0ec7573762be9960214730de278f27"}, + {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, + {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, ] [package.dependencies] -packaging = ">=20.0" -setuptools = [ - {version = "*"}, - {version = ">=42", optional = true, markers = "extra == \"toml\""}, -] -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +packaging = ">=20" +setuptools = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} typing-extensions = "*" [package.extras] -test = ["pytest (>=6.2)", "virtualenv (>20)"] -toml = ["setuptools (>=42)"] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["build", "pytest", "rich", "wheel"] [[package]] name = "sgmllib3k" @@ -7928,36 +8043,35 @@ files = [ [[package]] name = "shap" -version = "0.42.1" +version = "0.44.1" description = "A unified approach to explain the output of any machine learning model." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "shap-0.42.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c6106e59dbd446114bb5f7f0762ae0fa4ffa28bdf79a860d287e37ac5233d48"}, - {file = "shap-0.42.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46cf52ce701eeee554d7b773b09ff907838f1210013c1cee5ddbee021a7f2c72"}, - {file = "shap-0.42.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5d4e6c8d63a1e3535c2f3fc64f47f09862d1cc437ad434e9cdc50225d360266"}, - {file = "shap-0.42.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60d272e133f28cce322049dadec8909d2912c12c31ba38cb2eb861c01e3d16b8"}, - {file = "shap-0.42.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6d1b381a365a4a8582ac0fe1800282a89479757e20fb5f8d8db2ec8e853461c"}, - {file = "shap-0.42.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b6bfe78edf8478c5f0bc2ae1f4150ab1ae3065b5655fcce580fd99ef30601db7"}, - {file = "shap-0.42.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:53f6b6ab79f67dabb6fbc6613b373ebd726c200f8136f1f7e43d8a8068edcad1"}, - {file = "shap-0.42.1-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce0fc9654ab62c6edeaf375c235a781bb280a40ffbbdbce35102d3b2d1a323a4"}, - {file = "shap-0.42.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c570de5b91e26d26c93e6c028d13636845ef86619a3559145de98b7ec1148f1"}, - {file = "shap-0.42.1-cp311-cp311-win_amd64.whl", hash = "sha256:b32b13a5a5fc089594b676f32565d5c5ea3abf5f0755b0fa0d25ffc9d53cb6ea"}, - {file = "shap-0.42.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34bc359b7c60f873d589133a54640929f76ead7cbe036d5faa35ddb96d2a8168"}, - {file = "shap-0.42.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14bcad9dcc3b48082c3b9a93ca3577610d110a768674b1ce209ada18619c133"}, - {file = "shap-0.42.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56b1d4aa0c9bba4050279a2bfcc3efcabb1af45cb1657e6c57d629810b4b360f"}, - {file = "shap-0.42.1-cp37-cp37m-win_amd64.whl", hash = "sha256:26a3c8321852f12c650f685973159fbdcef75aae47405c4ceb702e3dbf49dcac"}, - {file = "shap-0.42.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:93c97525068868bd84a13a68f853b6286fafc035bbc308291e3a6497677c5d89"}, - {file = "shap-0.42.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8d9b55b34e9027157f02f996bab71cc5e286ed246c031112a700461a1e2acb4f"}, - {file = "shap-0.42.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6acc29bd3e1bd8eebf94d22ec35421a791fce62d35260e34468e6e6cf008a7c5"}, - {file = "shap-0.42.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6bb4e3044240b300690d7e0282b512d4ffa4def49816e03fe0d6a06dcbde957"}, - {file = "shap-0.42.1-cp38-cp38-win_amd64.whl", hash = "sha256:00cf2878c4a5fa5a6fcb72520ace9d17a027d64dd49272bd2072c20f2f97121d"}, - {file = "shap-0.42.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:48511486c568a09d469381278bb40982cb0f74c1cf8a391dfb79d81e53843beb"}, - {file = "shap-0.42.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d43d31adeae9b1f628f49917179777580c7deceefa6156b5cf488a298287eabd"}, - {file = "shap-0.42.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d0b2e82bb3a5938b41fa640bb86894dc14b4935d419597d33b7d04392cd6ad0"}, - {file = "shap-0.42.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de4bf0035265cbc127b39ad8ecd1272acb5619e89cae666808d87d17cf6a0b28"}, - {file = "shap-0.42.1-cp39-cp39-win_amd64.whl", hash = "sha256:dfc77a2a4c37ac1c74c54af60d92732991386bd60da8763660846225384fe592"}, - {file = "shap-0.42.1.tar.gz", hash = "sha256:64403915e4a07d2951e7eee4af0e835b1b519367b11806fe1aa4bd6d81adb626"}, + {file = "shap-0.44.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:93a94961a355249855f13f1ed564466afa1c5fae84f868dd56e50e936f4f9b57"}, + {file = "shap-0.44.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2919f2b255e31363182afb1627b374eb6c4724c90b0318719cbe90a316682f5"}, + {file = "shap-0.44.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ad3192026a0e4c3e399ef499da4f726ab01d62f388e03c804d8e10c4e61c8d1"}, + {file = "shap-0.44.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4ba4f3e84c3adf2c5a55e6d2becb7a4bb83e5784f7aa373316099a105ad593f"}, + {file = "shap-0.44.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1f19a3c531c6ceb0d7adea8262385580b52ef187981606342cd03288fc48cbfa"}, + {file = "shap-0.44.1-cp310-cp310-win_amd64.whl", hash = "sha256:d65a21a64f3c1e76e1fb5277a0cfbcce447c08a26eaef311b1cbae9a6efe0ea0"}, + {file = "shap-0.44.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44ed7a80ae30ed3927f1bc7911f6f04bb32bb2d938a9e8a5794b2bb99e3b99cc"}, + {file = "shap-0.44.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e98bb13dc351317ad2420dfe2dbca5361237ab9bef511fbe28ce6c1dfb40ff8c"}, + {file = "shap-0.44.1-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe63f1f4acf6bdfa3c85db85067d0fda2a29fe38be2d14a2811844f35290f43"}, + {file = "shap-0.44.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fa67a8810a042aa2366224afa612ded8a2a77b5a5a0d89ea60eba5eff3a0c1b"}, + {file = "shap-0.44.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dda26c39ac0ef17233deba09b0f313ceb4d5fa663dced2a1b77a494d48db96b8"}, + {file = "shap-0.44.1-cp311-cp311-win_amd64.whl", hash = "sha256:e1c3de8747fb451e59768dca11b054e395a2a1601c7482738897616a70679419"}, + {file = "shap-0.44.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c82efde41d2b2c65d707b678a0d057d77436faf72331a623545aa742ffe5b9f5"}, + {file = "shap-0.44.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:89f4492b406ec9908750560281c4616aff2a28c61f3ad2f6ac511270f44a0c5a"}, + {file = "shap-0.44.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497bde2083b2a27e0a4b8ded09927c11c8803e80e76cb2e87e2136c49f1c93b2"}, + {file = "shap-0.44.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a466d8a9bb12e7e07f13e68ea2859e4deb1dc6d3953c3a88310bd77484943cd6"}, + {file = "shap-0.44.1-cp38-cp38-win_amd64.whl", hash = "sha256:6aede800f0ec9efa8acd35913d791304d46376d444e8c6e1be905606e626c5e2"}, + {file = "shap-0.44.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ab36e2aecd0c1ba3df58f2452aa4aa24832ec766cbb2a794e2411897eb728b30"}, + {file = "shap-0.44.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:668ebe97c60a12bdffe254dfb2c8598cf24416e202b4b662076846b12d10b4b7"}, + {file = "shap-0.44.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:947c7e25b96d37763948ef2edd1711c6b3098a161de8e97fa0d1fdad6e49848c"}, + {file = "shap-0.44.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62bb07b4748db004c78802494c29e5e70a2efff967a5c4d50209d2ee2ace16db"}, + {file = "shap-0.44.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:febd7f0ad6ac27f999ed857a897f0f9963d4a4d9eeb003ee2505cf6164590d9c"}, + {file = "shap-0.44.1-cp39-cp39-win_amd64.whl", hash = "sha256:3c873d26e4fdcdb9e6a83a1e05c1e9c8c8b48ac4365b0259d6e138afb3729c32"}, + {file = "shap-0.44.1.tar.gz", hash = "sha256:a21d5a622e12e7c3b4a58d6e93b70133b7e09b6342b19746071a0dc2d190b432"}, ] [package.dependencies] @@ -7972,11 +8086,12 @@ slicer = "0.0.7" tqdm = ">=4.27.0" [package.extras] -docs = ["ipython", "matplotlib", "nbsphinx", "numpydoc", "sphinx", "sphinx-rtd-theme"] +docs = ["ipython", "matplotlib", "myst-parser (==2.0.0)", "nbsphinx (==0.9.3)", "numpydoc", "requests", "sphinx (==7.2.6)", "sphinx-github-changelog (==1.2.1)", "sphinx-rtd-theme (==2.0.0)"] others = ["lime"] plots = ["ipython", "matplotlib"] -test = ["catboost", "lightgbm", "opencv-python", "protobuf (==3.20.3)", "pyod", "pyspark", "pytest", "pytest-cov", "pytest-mpl", "sentencepiece", "tensorflow", "torch", "torchvision", "transformers", "xgboost"] +test = ["catboost", "gpboost", "lightgbm", "ngboost", "opencv-python", "protobuf (==3.20.3)", "pyod", "pyspark", "pytest", "pytest-cov", "pytest-mpl", "sentencepiece", "tensorflow", "torch", "torchvision", "transformers", "xgboost"] test-core = ["pytest", "pytest-cov", "pytest-mpl"] +test-notebooks = ["datasets", "jupyter", "keras", "nbconvert", "nbformat", "nlp", "transformers"] [[package]] name = "six" @@ -8002,24 +8117,24 @@ files = [ [[package]] name = "smmap" -version = "5.0.0" +version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] [[package]] name = "sniffio" -version = "1.3.0" +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.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] @@ -8035,13 +8150,13 @@ files = [ [[package]] name = "soupsieve" -version = "2.4.1" +version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, - {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] [[package]] @@ -8190,17 +8305,18 @@ test = ["pytest"] [[package]] name = "sqlglot" -version = "17.6.0" +version = "23.10.0" description = "An easily customizable SQL parser and transpiler" optional = true -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "sqlglot-17.6.0-py3-none-any.whl", hash = "sha256:0d4a88c69576f53d8cb47bfc42b9e25bd935cb797308c3b40e41ee5bbd494dd8"}, - {file = "sqlglot-17.6.0.tar.gz", hash = "sha256:b03189744635013d4a8f673c7558edb6c480221cd1a47b8d7d00a10ed0c5713a"}, + {file = "sqlglot-23.10.0-py3-none-any.whl", hash = "sha256:519ea26007688bbc831939c0c6125762ad5c71339df1ac8184a64d762f75684c"}, + {file = "sqlglot-23.10.0.tar.gz", hash = "sha256:b80a35de7716464de89cc77678d0a7f972e4a8acaaa7cefcdc6db05ffeb6c951"}, ] [package.extras] -dev = ["autoflake", "black", "duckdb (>=0.6)", "isort", "mypy (>=0.990)", "pandas", "pdoc", "pre-commit", "pyspark", "python-dateutil"] +dev = ["duckdb (>=0.6)", "maturin (>=1.4,<2.0)", "mypy", "pandas", "pandas-stubs", "pdoc", "pre-commit", "pyspark", "python-dateutil", "ruff (==0.3.2)", "types-python-dateutil", "typing-extensions"] +rs = ["sqlglotrs (==0.2.0)"] [[package]] name = "squarify" @@ -8215,13 +8331,13 @@ files = [ [[package]] name = "stack-data" -version = "0.6.2" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" files = [ - {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, - {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] [package.dependencies] @@ -8233,31 +8349,54 @@ pure-eval = "*" tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] -name = "statsforecast" -version = "1.5.0" -description = "Time series forecasting suite using statistical models" +name = "stanio" +version = "0.5.0" +description = "Utilities for preparing Stan inputs and processing Stan outputs" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "statsforecast-1.5.0-py3-none-any.whl", hash = "sha256:fafe3c7170af59b51d720b67b6c8046ed95a474242d07bdd44070dfdde28e9c4"}, - {file = "statsforecast-1.5.0.tar.gz", hash = "sha256:3196e52908d8a2439d732dc49f4d3f0ae9c5993be23622ccedd152b1671be802"}, + {file = "stanio-0.5.0-py3-none-any.whl", hash = "sha256:412f8ede127968be51e074be6a6ca1e66d5a8ed50805e2fed89b76868e7332ae"}, + {file = "stanio-0.5.0.tar.gz", hash = "sha256:dee429314d965f390181afa8ff7ff8144446eeb58cc2547ccc108ba73e6744e2"}, ] [package.dependencies] +numpy = "*" + +[package.extras] +test = ["pandas", "pytest", "pytest-cov"] +ujson = ["ujson (>=5.5.0)"] + +[[package]] +name = "statsforecast" +version = "1.7.4" +description = "Time series forecasting suite using statistical models" +optional = true +python-versions = ">=3.8" +files = [ + {file = "statsforecast-1.7.4-py3-none-any.whl", hash = "sha256:0863d371e87fdfaf0e157bfee5d242e9899365a50c558a30331ec0d965c0cc64"}, + {file = "statsforecast-1.7.4.tar.gz", hash = "sha256:eaea757f0a8835bea5a710df02c3248c0bc0eff940ae8d83a46fc339abb52280"}, +] + +[package.dependencies] +cloudpickle = "*" +coreforecast = ">=0.0.7" fugue = ">=0.8.1" -matplotlib = "*" numba = ">=0.55.0" numpy = ">=1.21.6" pandas = ">=1.3.5" -plotly = "*" -plotly-resampler = "*" scipy = ">=1.7.3" statsmodels = ">=0.13.2" +threadpoolctl = "*" tqdm = "*" +utilsforecast = ">=0.0.24" [package.extras] -dev = ["black", "datasetsforecast", "flake8", "fugue (>=0.7.0)", "fugue[dask] (>=0.8.1)", "matplotlib", "mypy", "nbdev", "neuralforecast", "pmdarima", "prophet", "protobuf (>=3.15.3,<4.0.0)", "ray", "scikit-learn"] -ray = ["fugue[ray] (>=0.8.1)", "protobuf (>=3.15.3,<4.0.0)"] +dask = ["fugue[dask] (>=0.8.1)"] +dev = ["black", "datasetsforecast", "flake8", "fugue[dask] (>=0.8.1)", "fugue[ray] (>=0.8.1)", "fugue[spark] (>=0.8.1)", "mypy", "nbdev", "nbdev-plotly", "pandas[plot]", "plotly", "plotly-resampler", "pmdarima", "polars", "prophet", "protobuf (>=3.15.3,<4.0.0)", "pyarrow", "ray (<2.8)", "scikit-learn", "supersmoother"] +plotly = ["plotly", "plotly-resampler"] +polars = ["polars"] +ray = ["fugue[ray] (>=0.8.1)", "protobuf (>=3.15.3,<4.0.0)", "ray (<2.8)"] +spark = ["fugue[spark] (>=0.8.1)"] [[package]] name = "statsmodels" @@ -8354,13 +8493,13 @@ docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "n [[package]] name = "stevedore" -version = "5.1.0" +version = "5.2.0" description = "Manage dynamic plugins for Python applications" optional = false python-versions = ">=3.8" files = [ - {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, - {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, + {file = "stevedore-5.2.0-py3-none-any.whl", hash = "sha256:1c15d95766ca0569cad14cb6272d4d31dae66b011a929d7c18219c176ea1b5c9"}, + {file = "stevedore-5.2.0.tar.gz", hash = "sha256:46b93ca40e1114cea93d738a6c1e365396981bb6bb78c27045b7587c9473544d"}, ] [package.dependencies] @@ -8368,13 +8507,13 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0" [[package]] name = "streamlit" -version = "1.24.1" +version = "1.33.0" description = "A faster way to build and share data apps" optional = false -python-versions = ">=3.8, !=3.9.7" +python-versions = "!=3.9.7,>=3.8" files = [ - {file = "streamlit-1.24.1-py2.py3-none-any.whl", hash = "sha256:569211b426ca078c0c2959a6c9a1413c2e81eca23e769fbf12308ba5bffd1f49"}, - {file = "streamlit-1.24.1.tar.gz", hash = "sha256:fd5f0b64798e9706364408fb589b77595314a6315d13b2d750b963c7ae97f362"}, + {file = "streamlit-1.33.0-py2.py3-none-any.whl", hash = "sha256:bfacb5d1edefcf803c2040b051a21b4c81317a9865448e6767d0a0c6aae7edae"}, + {file = "streamlit-1.33.0.tar.gz", hash = "sha256:a8da8ff46f5b948c56d2dc7aca7a61cf8d995f4f21744cf82258ae75e63004ba"}, ] [package.dependencies] @@ -8382,29 +8521,24 @@ altair = ">=4.0,<6" blinker = ">=1.0.0,<2" cachetools = ">=4.0,<6" click = ">=7.0,<9" -gitpython = ">=3,<3.1.19 || >3.1.19,<4" -importlib-metadata = ">=1.4,<7" -numpy = ">=1,<2" -packaging = ">=14.1,<24" -pandas = ">=0.25,<3" -pillow = ">=6.2.0,<10" +gitpython = ">=3.0.7,<3.1.19 || >3.1.19,<4" +numpy = ">=1.19.3,<2" +packaging = ">=16.8,<25" +pandas = ">=1.3.0,<3" +pillow = ">=7.1.0,<11" protobuf = ">=3.20,<5" -pyarrow = ">=4.0" -pydeck = ">=0.1.dev5,<1" -pympler = ">=0.9,<2" -python-dateutil = ">=2,<3" -requests = ">=2.4,<3" -rich = ">=10.11.0,<14" -tenacity = ">=8.0.0,<9" -toml = "<2" +pyarrow = ">=7.0" +pydeck = ">=0.8.0b4,<1" +requests = ">=2.27,<3" +rich = ">=10.14.0,<14" +tenacity = ">=8.1.0,<9" +toml = ">=0.10.1,<2" tornado = ">=6.0.3,<7" -typing-extensions = ">=4.0.1,<5" -tzlocal = ">=1.1,<5" -validators = ">=0.2,<1" -watchdog = {version = "*", markers = "platform_system != \"Darwin\""} +typing-extensions = ">=4.3.0,<5" +watchdog = {version = ">=2.1.5", markers = "platform_system != \"Darwin\""} [package.extras] -snowflake = ["snowflake-snowpark-python"] +snowflake = ["snowflake-connector-python (>=2.8.0)", "snowflake-snowpark-python (>=0.9.0)"] [[package]] name = "svglib" @@ -8458,13 +8592,13 @@ dev = ["pip-tools", "pytest", "rpy2"] [[package]] name = "tenacity" -version = "8.2.2" +version = "8.2.3" description = "Retry code until it succeeds" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, - {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, + {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, + {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, ] [package.extras] @@ -8472,12 +8606,12 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "tensorboard" -version = "2.13.0" +version = "2.14.0" description = "TensorBoard lets you watch Tensors Flow" optional = true python-versions = ">=3.8" files = [ - {file = "tensorboard-2.13.0-py3-none-any.whl", hash = "sha256:ab69961ebddbddc83f5fa2ff9233572bdad5b883778c35e4fe94bf1798bd8481"}, + {file = "tensorboard-2.14.0-py3-none-any.whl", hash = "sha256:3667f9745d99280836ad673022362c840f60ed8fefd5a3e30bf071f5a8fd0017"}, ] [package.dependencies] @@ -8496,25 +8630,25 @@ wheel = ">=0.26" [[package]] name = "tensorboard-data-server" -version = "0.7.1" +version = "0.7.2" description = "Fast data loading for TensorBoard" optional = true python-versions = ">=3.7" files = [ - {file = "tensorboard_data_server-0.7.1-py3-none-any.whl", hash = "sha256:9938bd39f5041797b33921066fba0eab03a0dd10d1887a05e62ae58841ad4c3f"}, - {file = "tensorboard_data_server-0.7.1-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:be8d016a1aa394e6198280d4a3dc37898f56467310c5f5e617cac10a783e055a"}, - {file = "tensorboard_data_server-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:255c02b7f5b03dd5c0a88c928e563441ff39e1d4b4a234cdbe09f016e53d9594"}, + {file = "tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb"}, + {file = "tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60"}, + {file = "tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530"}, ] [[package]] name = "terminado" -version = "0.17.1" +version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, ] [package.dependencies] @@ -8525,6 +8659,7 @@ tornado = ">=6.1.0" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "textwrap3" @@ -8539,67 +8674,78 @@ files = [ [[package]] name = "threadpoolctl" -version = "3.2.0" +version = "3.4.0" description = "threadpoolctl" optional = false python-versions = ">=3.8" files = [ - {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"}, - {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, + {file = "threadpoolctl-3.4.0-py3-none-any.whl", hash = "sha256:8f4c689a65b23e5ed825c8436a92b818aac005e0f3715f6a1664d7c7ee29d262"}, + {file = "threadpoolctl-3.4.0.tar.gz", hash = "sha256:f11b491a03661d6dd7ef692dd422ab34185d982466c49c8f98c8f716b5c93196"}, ] [[package]] name = "time-machine" -version = "2.11.0" +version = "2.14.1" description = "Travel through time in your tests." optional = false python-versions = ">=3.8" files = [ - {file = "time_machine-2.11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a6c25f03b634ff9389d2ff78f2f0168421a1be692cb8ab135202a8fda3e7b30a"}, - {file = "time_machine-2.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4cbeac9003319a4e84540c794e9be9cc2fa69abe5d0005091419a16b8e199ded"}, - {file = "time_machine-2.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8cb21faf0192e9c7776921cec70dc36c54e69e3544effe2a3360700cc21b4ab"}, - {file = "time_machine-2.11.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a41e6be04a8290e353218827d288dd5070b02758eb69bb58b8c4a823115b4e9"}, - {file = "time_machine-2.11.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcccab530ff39935f62c325004f55958e3349d8dfc693bc6a96dffe692b6ef1b"}, - {file = "time_machine-2.11.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:13502936af3e58396327fcff6228f113c06d94dd9965070d8c8d1b6a8ef20167"}, - {file = "time_machine-2.11.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bdbf92b1a479356b97a277ed229d6b592f1fb14e71d3534b32346208eb7eff50"}, - {file = "time_machine-2.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:863c7e74539741737fedc5fff8b0db4de53db9c9a9e5428c2b977f34daa97bad"}, - {file = "time_machine-2.11.0-cp310-cp310-win32.whl", hash = "sha256:575342fbebceddf42a0d1cb3855db8d1bde26ac6fe969c6dc457ff227e63df2d"}, - {file = "time_machine-2.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:e26d26a318a609d3471ffb307c218ddb5c1514de65cb896bea0b230833340018"}, - {file = "time_machine-2.11.0-cp310-cp310-win_arm64.whl", hash = "sha256:c48c7705880608086dd9919173dd63985837e1b1db56ee048ff4797aed99018b"}, - {file = "time_machine-2.11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f1b1c0cd878b432d724cca59f9fe57acf29c3d4a9cb1e6c70278b77c55b23523"}, - {file = "time_machine-2.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:628c2eb2037eff591ac8abefce20488930d6227158c080b3d3256a0855436431"}, - {file = "time_machine-2.11.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:945bb190b1f1a1d1b642cbe77c4bc3598c8085840a539904aed2b28790cca5d2"}, - {file = "time_machine-2.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98dff4645fddc1c7cddd2d22d56c10f87d23fd5091fbf03d65aa523de4f5de08"}, - {file = "time_machine-2.11.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b773c16427714b9f70a96e75834d47e4105450a9dcd75025b11f22a4e6b16c65"}, - {file = "time_machine-2.11.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ddd6a83a4a86de62e125ed4431934602a1074a946b9243eae8cd76ebab78b73"}, - {file = "time_machine-2.11.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c29cb7f7358b34722c3f005aa3ca34cee22c057a642e648af82aada30a2281a9"}, - {file = "time_machine-2.11.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:86207d54f1b4f4eab78b55d120a686d8cb55da77131ba5c1fc5d593e74e58e62"}, - {file = "time_machine-2.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ee1d6ac1d292953dc90d1a39aef3f727ea02cce4426f025bc55d4c1553006044"}, - {file = "time_machine-2.11.0-cp311-cp311-win32.whl", hash = "sha256:c6395911dad8c5ed138f143941ae4d40fd5da383649ac0ffe4c2f2a1ee88911a"}, - {file = "time_machine-2.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:e883660a606e696085fcc25833ed31a5227e201314c4e238c8abdaf937cd472f"}, - {file = "time_machine-2.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:6a76908586b8d79cf4d38393f7b8164cedd9fad5e2100014351aff885d1ef5af"}, - {file = "time_machine-2.11.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:995de1e3d631be23c1ac340db75680cb04419205f652155fe5c40367a8810e6e"}, - {file = "time_machine-2.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1406a9487224d68e7e756093b8009a1946c8899d414676740d934b09f7e12f40"}, - {file = "time_machine-2.11.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72fa4edd05fbadd77ccb77e184414cff3137f7ff80c610146481c88080a2848c"}, - {file = "time_machine-2.11.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fd4ab2f4a056c17e75e22cafd0461fcf94ae824d3140f7f0e9d513548ca6b6c"}, - {file = "time_machine-2.11.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8843a705cbd44971b39d25e24140c4922a836afb7a66311aa4fc437c0113a89"}, - {file = "time_machine-2.11.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d876570c26ffce923032d1d9544a14fb48d764581fa96baa44cd3a40a9eab8a7"}, - {file = "time_machine-2.11.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60ad90d8a4437c961be3b3de616fe12852eab802b87b086ac621b6a96eca125e"}, - {file = "time_machine-2.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:01c9732d7f396210fa384ec43c86395a94cb22f4687e9fdb972ecc05bb1b1570"}, - {file = "time_machine-2.11.0-cp38-cp38-win32.whl", hash = "sha256:855b6911ca20f6d4f118593ab79c5b45ee2311739944f8d1ddfdcc755f131c8e"}, - {file = "time_machine-2.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:2c99bdd61d83fdd65ee61ad0b7d1e5cd8c85143ed6a4d0a4acb445a99e3646f9"}, - {file = "time_machine-2.11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cc801788d230a55927f8dededff534014c8023ccd4baf89558d234a9e8bed3c7"}, - {file = "time_machine-2.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e0cd973d829a09c1eb9292270141b319606bca16e427ff8fcf0df69982c987a6"}, - {file = "time_machine-2.11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2714a00be7fcd2fd2c0cd430470693a7914f936f5218c5d1f1c7632ad6b003cf"}, - {file = "time_machine-2.11.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64940b7f70d808c766f893c8f62d5fc1b2ec9217eebfbd50ad9cc4000325867d"}, - {file = "time_machine-2.11.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b53b29895addca43a065d66af6e632b165299e8b4b514b4f62870b71af9aff"}, - {file = "time_machine-2.11.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b140c434c81331df16c3ca1654c7892aecf2fdfd4dc7b7136ca757a9847c1bf3"}, - {file = "time_machine-2.11.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:be037615c9f0b81a9d101a44c8d88a34c6a202b5eb60a4dcacfba183d48ae0d2"}, - {file = "time_machine-2.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49da9ad3eda905534de6188e4040c857b9393d225ef1ce93d8ad477ba15b4714"}, - {file = "time_machine-2.11.0-cp39-cp39-win32.whl", hash = "sha256:defaed86af4fc06cee02a5e4ef7ae26ec17131f5e43d7820c559c95f28173710"}, - {file = "time_machine-2.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c518ea79f443f93f7e164b1ed8763c49685759b38b94bd436386cc216bf52103"}, - {file = "time_machine-2.11.0-cp39-cp39-win_arm64.whl", hash = "sha256:a80ae2c92735b01bd1cac7fa433a13a499c23748adb2399acab2b3c6f50d3742"}, - {file = "time_machine-2.11.0.tar.gz", hash = "sha256:6c08a0f9ef8b53ca8b69c0be3f9ddb85a587a784fc239b74c35e6c47bf359515"}, + {file = "time-machine-2.14.1.tar.gz", hash = "sha256:57dc7efc1dde4331902d1bdefd34e8ee890a5c28533157e3b14a429c86b39533"}, + {file = "time_machine-2.14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:528d588d1e8ba83e45319a74acab4be0569eb141113fdf50368045d0a7d79cee"}, + {file = "time_machine-2.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06e913d570d7ee3e199e3316f10f10c8046287049141b0a101197712b4eac106"}, + {file = "time_machine-2.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddbbba954e9a409e7d66d60df2b6b8daeb897f8338f909a92d9d20e431ec70d1"}, + {file = "time_machine-2.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72a153b085b4aee652d6b3bf9019ca897f1597ba9869b640b06f28736b267182"}, + {file = "time_machine-2.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b94274abe24b6a90d8a5c042167a9a7af2d3438b42ac8eb5ede50fbc73c08db"}, + {file = "time_machine-2.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:364353858708628655bf9fa4c2825febd679c729d9e1dd424ff86845828bac05"}, + {file = "time_machine-2.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b951b6f4b8a752ab8c441df422e21954a721a0a5276aa3814ce8cf7205aeb6da"}, + {file = "time_machine-2.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:be215eb63d74a3d580f7924bb4209c783fabcfb3253073f4dcb3424d57d0f518"}, + {file = "time_machine-2.14.1-cp310-cp310-win32.whl", hash = "sha256:0e120f95c17bf8e0c097fd8863a8eb24054f9b17d9b17c465694be50f8348a3a"}, + {file = "time_machine-2.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:fb467d6c9e9ab615c8cf22d751d34296dacf801be323a57adeb4ff345cf72473"}, + {file = "time_machine-2.14.1-cp310-cp310-win_arm64.whl", hash = "sha256:19db257117739b2dda1d57e149bb715a593313899b3902a7e6d752c5f1d22542"}, + {file = "time_machine-2.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:442d42f1b0ef006f03a5a34905829a1d3ac569a5bcda64d29706e6dc60832f94"}, + {file = "time_machine-2.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0312b47f220e46f1bbfaded7fc1469882d9c2a27c6daf44e119aea7006b595cc"}, + {file = "time_machine-2.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a39dba3033d9c28347d2db16bcb16041bbf4e9032e2b70023686b6f95deac9d"}, + {file = "time_machine-2.14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e030d2051bb515251d7f6edd9bbcf79b2b47811e2c402aba9c126af713843d26"}, + {file = "time_machine-2.14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:993ab140eb5678d1ee7f1197f08e4499dc8ea883ad6b8858737de70d509ec5b5"}, + {file = "time_machine-2.14.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:90725f936ad8b123149bc82a46394dd7057e63157ee11ba878164053fa5bd8ad"}, + {file = "time_machine-2.14.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:59a02c3d3b3b29e2dc3a708e775c5d6b951b0024c4013fed883f0d2205305c9e"}, + {file = "time_machine-2.14.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f00f67d532da82538c4dfbbddc587e70c82664f168c11e1c2915d0c85ec2fc8"}, + {file = "time_machine-2.14.1-cp311-cp311-win32.whl", hash = "sha256:27f735cba4c6352ad7bc53ce2d86b715379261a634e690b79fac329081e26fb6"}, + {file = "time_machine-2.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee68597bd3fa5ab94633c8a9d3ebd4032091559610e078381818a732910002bc"}, + {file = "time_machine-2.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ced9de5eff1fb37efb12984ab7b63f31f0aeadeedec4be6d0404ec4fa91f2e7"}, + {file = "time_machine-2.14.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:30a4a18357fa6cf089eeefcb37e9549b42523aebb5933894770a8919e6c398e1"}, + {file = "time_machine-2.14.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d45bd60bea85869615b117667f10a821e3b0d3603c47bfd105b45d1f67156fc8"}, + {file = "time_machine-2.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:39de6d37a14ff8882d4f1cbd50c53268b54e1cf4ef9be2bfe590d10a51ccd314"}, + {file = "time_machine-2.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fd7d188b4f9d358c6bd477daf93b460d9b244a4c296ddd065945f2b6193c2bd"}, + {file = "time_machine-2.14.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99e6f013e67c4f74a9d8f57e34173b2047f2ad48f764e44c38f3ee5344a38c01"}, + {file = "time_machine-2.14.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a927d87501da8b053a27e80f5d0e1e58fbde4b50d70df2d3853ed67e89a731cf"}, + {file = "time_machine-2.14.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c77a616561dd4c7c442e9eee8cbb915750496e9a5a7fca6bcb11a9860226d2d0"}, + {file = "time_machine-2.14.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e7fa70a6bdca40cc4a8386fd85bc1bae0a23ab11e49604ef853ab3ce92be127f"}, + {file = "time_machine-2.14.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d63ef00d389fa6d2c76c863af580b3e4a8f0ccc6a9aea8e64590588e37f13c00"}, + {file = "time_machine-2.14.1-cp312-cp312-win32.whl", hash = "sha256:6706eb06487354a5e219cacea709fb3ec44dec3842c6218237d5069fa5f1ad64"}, + {file = "time_machine-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:36aa4f17adcd73a6064bf4991a29126cac93521f0690805edb91db837c4e1453"}, + {file = "time_machine-2.14.1-cp312-cp312-win_arm64.whl", hash = "sha256:edea570f3835a036e8860bb8d6eb8d08473c59313db86e36e3b207f796fd7b14"}, + {file = "time_machine-2.14.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e80408e6b6670e9ce33f94b1cc6b72b1a9b646f5e19f586908129871f74b40"}, + {file = "time_machine-2.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c69c0cb498c86ef843cd15964714e76465cc25d64464da57d5d1318f499de099"}, + {file = "time_machine-2.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc48d3934109b0bdbbdc5e9ce577213f7148a92fed378420ee13453503fe4db9"}, + {file = "time_machine-2.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7161cea2ff3244cc6075e365fab89000df70ead63a3da9d473983d580558d2de"}, + {file = "time_machine-2.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39fceeb131e6c07b386de042ce1016be771576e9516124b78e75cbab94ae5041"}, + {file = "time_machine-2.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fe508a6c43fb72fa4f66b50b14684cf58d3db95fed617177ec197a7a90427bae"}, + {file = "time_machine-2.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5f3d5c21884aee10e13b00ef45fab893a43db9d59ec27271573528bd359b0ef5"}, + {file = "time_machine-2.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a75e24e59f58059bbbc50e7f97aa6d126bbc2f603a8a5cd1e884beffcf130d8f"}, + {file = "time_machine-2.14.1-cp38-cp38-win32.whl", hash = "sha256:b0f8ba70fbb71d7fbc6d6adb90bed72a83db15b3318c7af0060467539b2f1b63"}, + {file = "time_machine-2.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:15cf3623a4ba2bb4fce4529295570acd5f6c6b44bcbfd1b8d0756ce56c38fe82"}, + {file = "time_machine-2.14.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bb3a2518c52aa944989b541e5297b833388eb3fe72d91eb875b21fe771597b04"}, + {file = "time_machine-2.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:416d94eab7723c7d8a37fe6b3b1882046fdbf3c31b9abec3cac87cf35dbb8230"}, + {file = "time_machine-2.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adfbfa796dd96383400b44681eacc5ab06d3cbfad39c30878e5ead0bfdca808a"}, + {file = "time_machine-2.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31e6e9bff89b7c6e4cbc169ba1d00d6c107b3abc43173b2799352b6995cf7cb2"}, + {file = "time_machine-2.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107caed387438d689180b692e8d84aa1ebe8918790df83dc5e2146e60e5e0859"}, + {file = "time_machine-2.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cab4abf4d1490a7da35db5a321ff8a4d4a2195f4832a792c75b626ffc4a5584c"}, + {file = "time_machine-2.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fd8645b820f7895fdafbc4412d1ce376956e36ad4fd05a43269aa06c3132afc3"}, + {file = "time_machine-2.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dd26039a9ffea2d5ee1309f2ec9b656d4925371c65563822d52e4037a4186eca"}, + {file = "time_machine-2.14.1-cp39-cp39-win32.whl", hash = "sha256:5e19b19d20bfbff8c97949e06e150998cf9d0a676e1641fb90597e59a9d7d5e2"}, + {file = "time_machine-2.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:f5d371a5218318121a6b44c21438258b6408b8bfe7ccccb754cf8eb880505576"}, + {file = "time_machine-2.14.1-cp39-cp39-win_arm64.whl", hash = "sha256:2c774f4b603a36ca2611327c57aa8ce0d5042298da008238ee5234b31ce7b22c"}, ] [package.dependencies] @@ -8715,24 +8861,24 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.8" +version = "0.12.4" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, - {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, + {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, + {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, ] [[package]] name = "toolz" -version = "0.12.0" +version = "0.12.1" description = "List processing tools and functional utilities" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, - {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, + {file = "toolz-0.12.1-py3-none-any.whl", hash = "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85"}, + {file = "toolz-0.12.1.tar.gz", hash = "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d"}, ] [[package]] @@ -8768,84 +8914,73 @@ typing-extensions = "*" [[package]] name = "torchmetrics" -version = "1.0.1" +version = "1.3.2" description = "PyTorch native Metrics" optional = true python-versions = ">=3.8" files = [ - {file = "torchmetrics-1.0.1-py3-none-any.whl", hash = "sha256:5278ebdf4ecc168d88d87d3f02045ceee6a4a4ae24d8bf09d616ab67441dde0a"}, + {file = "torchmetrics-1.3.2-py3-none-any.whl", hash = "sha256:44ca3a9f86dc050cb3f554836ef291698ea797778457195b4f685fce8e2e64a3"}, + {file = "torchmetrics-1.3.2.tar.gz", hash = "sha256:0a67694a4c4265eeb54cda741eaf5cb1f3a71da74b7e7e6215ad156c9f2379f6"}, ] [package.dependencies] -lightning-utilities = ">=0.7.0" +lightning-utilities = ">=0.8.0" numpy = ">1.20.0" -packaging = "*" -torch = ">=1.8.1" +packaging = ">17.1" +torch = ">=1.10.0" typing-extensions = {version = "*", markers = "python_version < \"3.9\""} [package.extras] -all = ["SciencePlots (>=2.0.0)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mypy (==1.4.1)", "nltk (>=3.6)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "regex (>=2021.9.24)", "scipy (>1.0.0)", "torch-fidelity (<=0.3.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +all = ["SciencePlots (>=2.0.0)", "ipadic (>=1.0.0)", "matplotlib (>=3.3.0)", "mecab-ko (>=1.0.0)", "mecab-ko-dic (>=1.0.0)", "mecab-python3 (>=1.0.6)", "mypy (==1.8.0)", "nltk (>=3.6)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "regex (>=2021.9.24)", "scipy (>1.0.0)", "sentencepiece (>=0.2.0)", "torch (==2.2.1)", "torch-fidelity (<=0.4.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] audio = ["pystoi (>=0.3.0)", "torchaudio (>=0.10.0)"] detection = ["pycocotools (>2.0.0)", "torchvision (>=0.8)"] -dev = ["SciencePlots (>=2.0.0)", "bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.2.7)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "fire (<=0.5.0)", "huggingface-hub (<0.16)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mir-eval (>=0.6)", "mypy (==1.4.1)", "netcal (>1.0.0)", "nltk (>=3.6)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "psutil (<=5.9.5)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==0.13.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)", "torch-fidelity (<=0.3.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] -image = ["lpips (<=0.1.4)", "scipy (>1.0.0)", "torch-fidelity (<=0.3.0)", "torchvision (>=0.8)"] -multimodal = ["transformers (>=4.10.0)"] -test = ["bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.2.7)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "fire (<=0.5.0)", "huggingface-hub (<0.16)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "mir-eval (>=0.6)", "netcal (>1.0.0)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "psutil (<=5.9.5)", "pytest (==7.4.0)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==0.13.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)", "transformers (>4.4.0)"] -text = ["nltk (>=3.6)", "regex (>=2021.9.24)", "tqdm (>=4.41.0)"] -typing = ["mypy (==1.4.1)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] -visual = ["SciencePlots (>=2.0.0)", "matplotlib (>=3.2.0)"] +dev = ["SciencePlots (>=2.0.0)", "bert-score (==0.3.13)", "dython (<=0.7.5)", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.3.3)", "huggingface-hub (<0.22)", "ipadic (>=1.0.0)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "lpips (<=0.1.4)", "matplotlib (>=3.3.0)", "mecab-ko (>=1.0.0)", "mecab-ko-dic (>=1.0.0)", "mecab-python3 (>=1.0.6)", "mir-eval (>=0.6)", "monai (==1.3.0)", "mypy (==1.8.0)", "netcal (>1.0.0)", "nltk (>=3.6)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "rouge-score (>0.1.0)", "sacrebleu (>=2.3.0)", "scikit-image (>=0.19.0)", "scipy (>1.0.0)", "sentencepiece (>=0.2.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch (==2.2.1)", "torch-complex (<=0.4.3)", "torch-fidelity (<=0.4.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +image = ["scipy (>1.0.0)", "torch-fidelity (<=0.4.0)", "torchvision (>=0.8)"] +multimodal = ["piq (<=0.8.0)", "transformers (>=4.10.0)"] +text = ["ipadic (>=1.0.0)", "mecab-ko (>=1.0.0)", "mecab-ko-dic (>=1.0.0)", "mecab-python3 (>=1.0.6)", "nltk (>=3.6)", "regex (>=2021.9.24)", "sentencepiece (>=0.2.0)", "tqdm (>=4.41.0)", "transformers (>4.4.0)"] +typing = ["mypy (==1.8.0)", "torch (==2.2.1)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +visual = ["SciencePlots (>=2.0.0)", "matplotlib (>=3.3.0)"] [[package]] name = "tornado" -version = "6.3.2" +version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, ] [[package]] name = "tqdm" -version = "4.65.0" +version = "4.66.2" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, + {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, + {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] -[[package]] -name = "trace-updater" -version = "0.0.9.1" -description = "Dash component which allows to update a dcc.Graph its traces. This component is data efficient as it (1) only sends the to-be-updated traces (and not the whole) from the back-end to the client-side and (2) only updates the traces that have changed (and does not redraw the whole figure)." -optional = true -python-versions = "*" -files = [ - {file = "trace_updater-0.0.9.1-py3-none-any.whl", hash = "sha256:14e34b6d037e59a0f28d40e811833f892e788e075bc7cfeabda474d90e754e72"}, - {file = "trace_updater-0.0.9.1.tar.gz", hash = "sha256:04960a062addf58131da39df9f5755a1d8f5fff9b5fbabd0839801e2431d9a20"}, -] - [[package]] name = "tradingview-ta" version = "3.3.0" @@ -8862,18 +8997,18 @@ requests = "*" [[package]] name = "traitlets" -version = "5.9.0" +version = "5.14.3" description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "transformers" @@ -8944,54 +9079,35 @@ vision = ["Pillow"] [[package]] name = "triad" -version = "0.9.1" +version = "0.9.6" description = "A collection of python utils for Fugue projects" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "triad-0.9.1-py3-none-any.whl", hash = "sha256:29084e7e17bfb12c00ca4812af2c9d5876462c1fda326293a12eb0f638829dea"}, - {file = "triad-0.9.1.tar.gz", hash = "sha256:afc3fd9f225247974fd1170f97448d8111ef011d2d8cb17a3503c3fc795cf594"}, + {file = "triad-0.9.6-py3-none-any.whl", hash = "sha256:5c7391f2e5e14a705d75fe3794bf13640f44522f381b542c2c553f99f012da03"}, + {file = "triad-0.9.6.tar.gz", hash = "sha256:4a54f3ccb23b47eb7df940ab1aac209c0e056417a086029f4d2adb38502ac451"}, ] [package.dependencies] fs = "*" -fsspec = "*" +fsspec = ">=2022.5.0" numpy = "*" -pandas = ">=1.2.0" -pyarrow = "*" +pandas = ">=1.3.5" +pyarrow = ">=6.0.1" six = "*" [package.extras] ciso8601 = ["ciso8601"] -[[package]] -name = "typeguard" -version = "3.0.2" -description = "Run-time type checker for Python" -optional = true -python-versions = ">=3.7.4" -files = [ - {file = "typeguard-3.0.2-py3-none-any.whl", hash = "sha256:bbe993854385284ab42fd5bd3bee6f6556577ce8b50696d6cb956d704f286c8e"}, - {file = "typeguard-3.0.2.tar.gz", hash = "sha256:fee5297fdb28f8e9efcb8142b5ee219e02375509cd77ea9d270b5af826358d5a"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["mypy (>=0.991)", "pytest (>=7)"] - [[package]] name = "types-python-dateutil" -version = "2.8.19.14" +version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, - {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, ] [[package]] @@ -9007,28 +9123,28 @@ files = [ [[package]] name = "types-pyyaml" -version = "6.0.12.11" +version = "6.0.12.20240311" description = "Typing stubs for PyYAML" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, - {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, + {file = "types-PyYAML-6.0.12.20240311.tar.gz", hash = "sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342"}, + {file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"}, ] [[package]] name = "types-requests" -version = "2.31.0.2" +version = "2.31.0.20240406" description = "Typing stubs for requests" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"}, - {file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"}, + {file = "types-requests-2.31.0.20240406.tar.gz", hash = "sha256:4428df33c5503945c74b3f42e82b181e86ec7b724620419a2966e2de604ce1a1"}, + {file = "types_requests-2.31.0.20240406-py3-none-any.whl", hash = "sha256:6216cdac377c6b9a040ac1c0404f7284bd13199c0e1bb235f4324627e8898cf5"}, ] [package.dependencies] -types-urllib3 = "*" +urllib3 = ">=2" [[package]] name = "types-setuptools" @@ -9043,66 +9159,54 @@ files = [ [[package]] name = "types-six" -version = "1.16.21.9" +version = "1.16.21.20240311" description = "Typing stubs for six" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-six-1.16.21.9.tar.gz", hash = "sha256:746e6c25b8c48b3c8ab9efe7f68022839111de423d35ba4b206b88b12d75f233"}, - {file = "types_six-1.16.21.9-py3-none-any.whl", hash = "sha256:1591a09430a3035326da5fdb71692d0b3cc36b25a440cc5929ca6241f3984705"}, -] - -[[package]] -name = "types-urllib3" -version = "1.26.25.14" -description = "Typing stubs for urllib3" -optional = false -python-versions = "*" -files = [ - {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, - {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, + {file = "types-six-1.16.21.20240311.tar.gz", hash = "sha256:b5a117193ba0dc7a66507925e95e140b2af52731402cdd71ef9f2a4348e01f60"}, + {file = "types_six-1.16.21.20240311-py3-none-any.whl", hash = "sha256:abc0377990d38e9b37b3333dd115ec960ca9788d78f3d9c7eb3f778cfc6c925c"}, ] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.11.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] name = "tzdata" -version = "2023.3" +version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] [[package]] name = "tzlocal" -version = "4.3.1" +version = "5.2" description = "tzinfo object for the local timezone" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tzlocal-4.3.1-py3-none-any.whl", hash = "sha256:67d7e7f4ce0a98e9dfde2e02474c60fe846ed032d78b555c554c2e9cba472d84"}, - {file = "tzlocal-4.3.1.tar.gz", hash = "sha256:ee32ef8c20803c19a96ed366addd3d4a729ef6309cb5c7359a0cc2eeeb7fa46a"}, + {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, + {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, ] [package.dependencies] "backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} -pytz-deprecation-shim = "*" tzdata = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -devenv = ["black", "check-manifest", "flake8", "pyroma", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] +devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] [[package]] name = "u8darts" @@ -9146,72 +9250,76 @@ torch = ["pytorch-lightning (>=1.5.0)", "torch (>=1.8.0)"] [[package]] name = "ujson" -version = "5.8.0" +version = "5.9.0" description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" files = [ - {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, - {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, - {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, - {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, - {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, - {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, - {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, - {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, - {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, - {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, - {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, - {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, - {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, + {file = "ujson-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa"}, + {file = "ujson-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106"}, + {file = "ujson-5.9.0-cp310-cp310-win32.whl", hash = "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c"}, + {file = "ujson-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d"}, + {file = "ujson-5.9.0-cp311-cp311-win32.whl", hash = "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120"}, + {file = "ujson-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c"}, + {file = "ujson-5.9.0-cp312-cp312-win32.whl", hash = "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437"}, + {file = "ujson-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b"}, + {file = "ujson-5.9.0-cp38-cp38-win32.whl", hash = "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d"}, + {file = "ujson-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844"}, + {file = "ujson-5.9.0-cp39-cp39-win32.whl", hash = "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34"}, + {file = "ujson-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd"}, + {file = "ujson-5.9.0.tar.gz", hash = "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532"}, ] [[package]] @@ -9249,19 +9357,20 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "1.26.16" +version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.8" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +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 = "user-agent" @@ -9276,6 +9385,28 @@ files = [ [package.dependencies] six = "*" +[[package]] +name = "utilsforecast" +version = "0.1.4" +description = "Forecasting utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "utilsforecast-0.1.4-py3-none-any.whl", hash = "sha256:0b7daf492f2e01020b4e65065bea18ee6fda4297ae3251266227d57696b865ec"}, + {file = "utilsforecast-0.1.4.tar.gz", hash = "sha256:692d838cc8937415134dd886169d5399fecd794b7bb154c7bf98b1104368958c"}, +] + +[package.dependencies] +numpy = "*" +packaging = "*" +pandas = ">=1.1.1" + +[package.extras] +dev = ["datasetsforecast (==0.0.8)", "nbdev", "numba", "pandas[plot]", "plotly", "plotly-resampler", "polars", "pyarrow", "scipy"] +plotting = ["pandas[plot]", "plotly", "plotly-resampler"] +polars = ["polars"] +scalers = ["numba", "scipy"] + [[package]] name = "vadersentiment" version = "3.3.2" @@ -9290,22 +9421,6 @@ files = [ [package.dependencies] requests = "*" -[[package]] -name = "validators" -version = "0.20.0" -description = "Python Data Validation for Humans™." -optional = false -python-versions = ">=3.4" -files = [ - {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, -] - -[package.dependencies] -decorator = ">=3.4.0" - -[package.extras] -test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] - [[package]] name = "valinvest" version = "0.0.2" @@ -9319,41 +9434,40 @@ files = [ [[package]] name = "vcrpy" -version = "4.4.0" +version = "4.3.0" description = "Automatically mock your HTTP interactions to simplify and speed up testing" optional = false python-versions = ">=3.7" files = [ - {file = "vcrpy-4.4.0-py2.py3-none-any.whl", hash = "sha256:560c9d0d8436ced29223ceefb513c3ac3f2e2a60d51a9830f236a1e63167905a"}, - {file = "vcrpy-4.4.0.tar.gz", hash = "sha256:d1109ae93dbc2e7fcbc485849a7600d5dea510d3bef070eec4419c9a72ca2639"}, + {file = "vcrpy-4.3.0-py2.py3-none-any.whl", hash = "sha256:8fbd4be412e8a7f35f623dd61034e6380a1c8dbd0edf6e87277a3289f6e98093"}, + {file = "vcrpy-4.3.0.tar.gz", hash = "sha256:49c270ce67e826dba027d83e20d25b67a5885487697e97bca6dbdf53d750a0ac"}, ] [package.dependencies] PyYAML = "*" six = ">=1.5" -urllib3 = {version = "<2", markers = "python_version < \"3.10\""} wrapt = "*" yarl = "*" [[package]] name = "virtualenv" -version = "20.24.1" +version = "20.25.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.1-py3-none-any.whl", hash = "sha256:01aacf8decd346cf9a865ae85c0cdc7f64c8caa07ff0d8b1dfc1733d10677442"}, - {file = "virtualenv-20.24.1.tar.gz", hash = "sha256:2ef6a237c31629da6442b0bcaa3999748108c7166318d1f55cc9f8d7294e97bd"}, + {file = "virtualenv-20.25.3-py3-none-any.whl", hash = "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e"}, + {file = "virtualenv-20.25.3.tar.gz", hash = "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be"}, ] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.12,<4" -platformdirs = ">=3.5.1,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "watchdog" @@ -9397,13 +9511,13 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] [[package]] @@ -9434,108 +9548,110 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.1" +version = "1.7.0" description = "WebSocket client for Python with low level API options" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] [[package]] name = "websockets" -version = "11.0.3" +version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, ] [[package]] name = "werkzeug" -version = "2.3.6" +version = "3.0.2" description = "The comprehensive WSGI web application library." optional = true python-versions = ">=3.8" files = [ - {file = "Werkzeug-2.3.6-py3-none-any.whl", hash = "sha256:935539fa1413afbb9195b24880778422ed620c0fc09670945185cce4d91a8890"}, - {file = "Werkzeug-2.3.6.tar.gz", hash = "sha256:98c774df2f91b05550078891dee5f0eb0cb797a522c757a2452b9cee5b202330"}, + {file = "werkzeug-3.0.2-py3-none-any.whl", hash = "sha256:3aac3f5da756f93030740bc235d3e09449efcf65f2f55e3602e1d851b8f48795"}, + {file = "werkzeug-3.0.2.tar.gz", hash = "sha256:e39b645a6ac92822588e7b39a692e7828724ceae0b0d702ef96701f90e70128d"}, ] [package.dependencies] @@ -9546,27 +9662,27 @@ watchdog = ["watchdog (>=2.3)"] [[package]] name = "wheel" -version = "0.40.0" +version = "0.43.0" description = "A built-package format for Python" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"}, - {file = "wheel-0.40.0.tar.gz", hash = "sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873"}, + {file = "wheel-0.43.0-py3-none-any.whl", hash = "sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81"}, + {file = "wheel-0.43.0.tar.gz", hash = "sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85"}, ] [package.extras] -test = ["pytest (>=6.0.0)"] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "widgetsnbextension" -version = "4.0.8" +version = "4.0.10" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" files = [ - {file = "widgetsnbextension-4.0.8-py3-none-any.whl", hash = "sha256:2e37f0ce9da11651056280c7efe96f2db052fe8fc269508e3724f5cbd6c93018"}, - {file = "widgetsnbextension-4.0.8.tar.gz", hash = "sha256:9ec291ba87c2dfad42c3d5b6f68713fa18be1acd7476569516b2431682315c17"}, + {file = "widgetsnbextension-4.0.10-py3-none-any.whl", hash = "sha256:d37c3724ec32d8c48400a435ecfa7d3e259995201fbefa37163124a9fcb393cc"}, + {file = "widgetsnbextension-4.0.10.tar.gz", hash = "sha256:64196c5ff3b9a9183a8e699a4227fb0b7002f252c814098e66c4d1cd0644688f"}, ] [[package]] @@ -9585,86 +9701,81 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [[package]] name = "wrapt" -version = "1.15.0" +version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [[package]] @@ -9693,17 +9804,17 @@ viz = ["matplotlib", "nc-time-axis", "seaborn"] [[package]] name = "xgboost" -version = "1.7.6" +version = "2.0.3" description = "XGBoost Python Package" optional = true python-versions = ">=3.8" files = [ - {file = "xgboost-1.7.6-py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.macosx_12_0_x86_64.whl", hash = "sha256:4c34675b4d2678c624ddde5d45361e7e16046923e362e4e609b88353e6b87124"}, - {file = "xgboost-1.7.6-py3-none-macosx_12_0_arm64.whl", hash = "sha256:59b4b366d2cafc7f645e87d897983a5b59be02876194b1d213bd8d8b811d8ce8"}, - {file = "xgboost-1.7.6-py3-none-manylinux2014_aarch64.whl", hash = "sha256:281c3c6f4fbed2d36bf95cd02a641afa95e72e9abde70064056da5e76233e8df"}, - {file = "xgboost-1.7.6-py3-none-manylinux2014_x86_64.whl", hash = "sha256:b1d5db49b199152d62bd9217c98760207d3de86d2b9d243260c573ffe638f80a"}, - {file = "xgboost-1.7.6-py3-none-win_amd64.whl", hash = "sha256:127cf1f5e2ec25cd41429394c6719b87af1456ce583e89f0bffd35d02ad18bcb"}, - {file = "xgboost-1.7.6.tar.gz", hash = "sha256:1c527554a400445e0c38186039ba1a00425dcdb4e40b37eed0e74cb39a159c47"}, + {file = "xgboost-2.0.3-py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.macosx_12_0_x86_64.whl", hash = "sha256:b21b2bb188b162c615fce468db93e3f995f3690e6184aadc7743b58466dc7f13"}, + {file = "xgboost-2.0.3-py3-none-macosx_12_0_arm64.whl", hash = "sha256:722d5b9351dfdf61973490dfd28abd42844db1cc469d07ed9b0cde9d1ffcdb32"}, + {file = "xgboost-2.0.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:2315a57b1883221e2f78dd514559aa9797e6c272d995d22e45495a04adac93cc"}, + {file = "xgboost-2.0.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:30bd5f789fad467fd49e04e5d19e04238b931682c3951a514da5c2410b3bf59c"}, + {file = "xgboost-2.0.3-py3-none-win_amd64.whl", hash = "sha256:462f131d7bfb1bc42f67c57fa5aa3e57d2b5755b1573a6e0d2c7e8895164e0fc"}, + {file = "xgboost-2.0.3.tar.gz", hash = "sha256:505955b5d770f8217a049beecce79e04a93787371c06dfb4b2414fec9d496bf3"}, ] [package.dependencies] @@ -9720,88 +9831,96 @@ scikit-learn = ["scikit-learn"] [[package]] name = "xlsxwriter" -version = "3.1.2" +version = "3.2.0" description = "A Python module for creating Excel XLSX files." optional = true python-versions = ">=3.6" files = [ - {file = "XlsxWriter-3.1.2-py3-none-any.whl", hash = "sha256:331508ff39d610ecdaf979e458840bc1eab6e6a02cfd5d08f044f0f73636236f"}, - {file = "XlsxWriter-3.1.2.tar.gz", hash = "sha256:78751099a770273f1c98b8d6643351f68f98ae8e6acf9d09d37dc6798f8cd3de"}, + {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"}, + {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"}, ] [[package]] name = "y-py" -version = "0.6.0" +version = "0.6.2" description = "Python bindings for the Y-CRDT built from yrs (Rust)" optional = false python-versions = "*" files = [ - {file = "y_py-0.6.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ebbebc4f6a9e0c89c7b57035f91043b038e804dd1953845d8a66066f4526c853"}, - {file = "y_py-0.6.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2c230bc01b96081550b7583b77d00404fd39825657f4064b919a10515f660cdf"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f5975c1a8c2ca99980571b8811d151db8590de9cc96346572a81e0f6f1e30e"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f89cf9ef1daf12f438a075415a02f227594e4b0494c78d3b83cb83651631f5"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb3225b58dc67152c004da3c26ae5bad0afebbb3c7509d853bdd87eaa655137"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaaec9718f8a23924c95294d41d87829b113bc9a606a3667dfb995afc45c9920"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb03947937b0fcb09eb2b94eb08d8e8030ef0ed70af777684ab670bd369bc3c"}, - {file = "y_py-0.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f79ef7303e332e91d738e66e9bb7fce0243d0407a02631a58ebc0bf2fb8743d0"}, - {file = "y_py-0.6.0-cp310-none-win32.whl", hash = "sha256:1667b8a67ace756c04f03778e86fc359028c98905212f8686afb48c26c252bda"}, - {file = "y_py-0.6.0-cp310-none-win_amd64.whl", hash = "sha256:cca539c3804a580992304b18a33f1980282d9097a723f0bd01971477cb365b28"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:5743e94c982585f05e02d9a3345dd9b1f28d90fa128df9f60b0eb357a76d2c32"}, - {file = "y_py-0.6.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:281535bb4f18fe09e5517a63b8206dd6f26ad6fb7e7c25c62bf785e594adab4d"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69e05e01594e99c934562124b159720533b7ad887dde7762d460916aac47a8e4"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a752ba8875ed2038dfc7d62738536cb22b4e308951cb925a7fe8fef782c6db08"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea7d796bb55d08dd1a60736beb724004f2cbdc207592b5f301a5ff314b17137"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5126786f914ff53ea2f04f9da790db168db172521cc4f114d5501badd2f6b96"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b71cd495d322da25a53a6a830b591a2c0c46db22bb0b3556fca0bbdb1d45a18e"}, - {file = "y_py-0.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0624a5adf29d29330a336eecdf15874871f559d50944d542012665e1c3a18265"}, - {file = "y_py-0.6.0-cp311-none-win32.whl", hash = "sha256:374ffef1939c42286ea18e2a413c9974430226227f8f1480bbee469933aa675b"}, - {file = "y_py-0.6.0-cp311-none-win_amd64.whl", hash = "sha256:9242f3a5c6293e634817d9984c60523ffb34cf5b41501c5958681a75745946e6"}, - {file = "y_py-0.6.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9dad6af2d83a2b0618ba3c1a2fc6657c5303cf4e9f1a65cc3fea40ffbcc552e2"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d5ebb5f9ef0c4c1f7bdd9ab5e53b9d8be4c7464905f39761b22b6ce0d327d3"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a027c39296c925f0b81e28a0fefab8c5964a0ea2b50fa05cbddf5e5ab167a380"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49adf7e25c3b3bac9f19bee181ef5253659ebe5747a7141860692015222b2007"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47b3604c874d25616a097adaaabcad6e77729e23c5d029092b8149af1a08b2a5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5a882591c8e1b1d6fbdb7ab43884907cef2b6a18e36c7ae85589e5f55371e5"}, - {file = "y_py-0.6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b9337e4f3d541879a8187af121be1bd42ea110372a21895a1a3f800a6bd1c3"}, - {file = "y_py-0.6.0-cp37-none-win32.whl", hash = "sha256:ef0f08edb2094869e4d12346ee68d5154cb3d23bc3b1e7679222fae12228261c"}, - {file = "y_py-0.6.0-cp37-none-win_amd64.whl", hash = "sha256:391a232c328c2be1de4cb152ed3e9427826e4cbd9d645feacb3dbb344b122e10"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:eb60fe68774117378efdbd368ef83cf1417e61d4bc39c6be8e7f4ee91fb7428a"}, - {file = "y_py-0.6.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4f025c50301d9ddbbc2384f98d3ff1dbfe43606146b747e23a17774a02faffe9"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4181b28f736cae3bb4517090ae5eeca318c075c0106466f13a4ed6682265fc8a"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6273d84605ee55b3ac52742018f94602dab9b0457f29e6f787021c473b02fed"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eefb6371cd6e072cf467b897f85bd0d7575f3a3e944fb8675f84fb59aedd071"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75c2199a125ef8926f3216fb324c3bcd8b1b4b6c0b428888cc753ee4c85f81f"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035ba7ce31bb87bd7b5977eee71ee2ff71e54d347a35e2079362b1c23731dccd"}, - {file = "y_py-0.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:418aaa796a22b0102de09b36b6c6294d0a485f04bc8866c3b28f17e7022c44ba"}, - {file = "y_py-0.6.0-cp38-none-win32.whl", hash = "sha256:fc48db294d327a5cc10ee49f73f1fa1478240cc827c9029e0871106e327353ac"}, - {file = "y_py-0.6.0-cp38-none-win_amd64.whl", hash = "sha256:d1301bfeaa26f78f4b0e5f96e0f22761b38cc407713f70550a1be490945fd6d7"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e48b5b30242c7d517be85b48246b21e4e26540505a1ffe4fe473e239a8ec56d3"}, - {file = "y_py-0.6.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:479da40ef1205de52d87209534bf8e713a782e01eeed3df8dff44d21085e3f63"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7c3eaf65b162e59486a48bea5dd2035937952f15e008a14813e8cb7c24d7b"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a20a4d10c8f0ee2b6df265d182d0be0ecd2ba7348c0a20b9df7d4d39df895801"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:304e88a3deaff9906faa7ba514cf82f4ca4bad1ea88728206ff906e66179abd3"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6377e3cbab8f5b8b918130e9f924358f98ca1bea12a8096d3fadea191f7137f1"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44fdd64598e9ed4008158e5e60be5e1e2daeed6fae0ab2bf0002461e960709d"}, - {file = "y_py-0.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51f1997dae6d77b12b50502871c7a9aae22e84048e83b64fe6d4f18dec2e4700"}, - {file = "y_py-0.6.0-cp39-none-win32.whl", hash = "sha256:9f56888aeb07ca76a5cd552581bb3735fcd2d8c18165b946fdb6e4507b10e76c"}, - {file = "y_py-0.6.0-cp39-none-win_amd64.whl", hash = "sha256:11345294820908d5b8af9c6616ea908dda8b3e554ee6f6d50be6a2e15940f63e"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4c16d50d0728abd915bd9e2e0c3ce982005ba78b60e4b6666aadc592d9982c79"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:eccf67d09a4df42a7be2a5427c1b2e0b89bec862f519ded754bd452df516b380"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:513a2fe1318c247fc3b3c3ad208488e870a216784f2a3e6dbe2688c92f671c86"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76e2b14004cadb237499a8a068fd7a8b805b5c1fd0508530473e087c7dd25163"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c276a7eb3ae3360f5a2fc503f1e4535d4a2f1c8cfc22af4595ad752e9a94fd77"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71f7689c25bd7608e1e7a76a13138cb202455fac165018693a3e8e5675f54b82"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0505e2ca36408b754774a2bb20d93b5c7def3873406c13e1855de6f007f8a94"}, - {file = "y_py-0.6.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f143fdcda7a6a89bf96d9b359142a7ca3315e8a9018aa46b0abbdeb47d7192e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:9a920bf096d1eecb0f30afc38ee56bfcb9e2c863c33db96fc9d30d4ac0dbee58"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:97812f9443fd846012d60ecacffa2a11992d02ad9f8618d4faae8e596736c646"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83115cbbd4f6d3b38ebe06d80b1d0dbf1b10e53947f71df16f6145a4f0d14716"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cac9259839b32706336b3f521cacfd16fc7cefee609bd9c2b5123099328d696"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e76be7258010ce8cbb93a841f78f52901bba1253a51213d3535972d13aa4e89e"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b488be17d83173acb7f07c7e3430d2c66d0bd55b821683089311699562b58b"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b9f24b00972e5685d0b9bbd01413d9c33d124145343fb92667f0e076f040ad"}, - {file = "y_py-0.6.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:95083c4cdbd593497a695e841b2ad050c0b9a8a9e374f8496aa478cebfcf9cc9"}, - {file = "y_py-0.6.0.tar.gz", hash = "sha256:46836169f7dc2957df8513cfe4bc2009175b3a473e630af421a8e75ee1c48f98"}, + {file = "y_py-0.6.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c26bada6cd109095139237a46f50fc4308f861f0d304bc9e70acbc6c4503d158"}, + {file = "y_py-0.6.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:bae1b1ad8d2b8cf938a60313f8f7461de609621c5dcae491b6e54975f76f83c5"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e794e44fa260300b8850246c6371d94014753c73528f97f6ccb42f5e7ce698ae"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2686d7d8ca31531458a48e08b0344a8eec6c402405446ce7d838e2a7e43355a"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d917f5bc27b85611ceee4eb85f0e4088b0a03b4eed22c472409933a94ee953cf"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f6071328aad06fdcc0a4acc2dc4839396d645f5916de07584af807eb7c08407"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:266ec46ab9f9cb40fbb5e649f55c329fc4620fa0b1a8117bdeefe91595e182dc"}, + {file = "y_py-0.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce15a842c2a0bf46180ae136743b561fa276300dd7fa61fe76daf00ec7dc0c2d"}, + {file = "y_py-0.6.2-cp310-none-win32.whl", hash = "sha256:1d5b544e79ace93fdbd0b36ed329c86e346898153ac7ba2ec62bc9b4c6b745c9"}, + {file = "y_py-0.6.2-cp310-none-win_amd64.whl", hash = "sha256:80a827e173372682959a57e6b8cc4f6468b1a4495b4bc7a775ef6ca05ae3e8e8"}, + {file = "y_py-0.6.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:a21148b8ea09a631b752d975f9410ee2a31c0e16796fdc113422a6d244be10e5"}, + {file = "y_py-0.6.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:898fede446ca1926b8406bdd711617c2aebba8227ee8ec1f0c2f8568047116f7"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce7c20b9395696d3b5425dccf2706d374e61ccf8f3656bff9423093a6df488f5"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3932f53418b408fa03bd002e6dc573a74075c2c092926dde80657c39aa2e054"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:df35ea436592eb7e30e59c5403ec08ec3a5e7759e270cf226df73c47b3e739f5"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26cb1307c3ca9e21a3e307ab2c2099677e071ae9c26ec10ddffb3faceddd76b3"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:863e175ce5585f9ff3eba2aa16626928387e2a576157f02c8eb247a218ecdeae"}, + {file = "y_py-0.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:35fcb9def6ce137540fdc0e91b08729677548b9c393c0151a6359fd199da3bd7"}, + {file = "y_py-0.6.2-cp311-none-win32.whl", hash = "sha256:86422c6090f34906c062fd3e4fdfdccf3934f2922021e979573ae315050b4288"}, + {file = "y_py-0.6.2-cp311-none-win_amd64.whl", hash = "sha256:6c2f2831c5733b404d2f2da4bfd02bb4612ae18d0822e14ae79b0b92436b816d"}, + {file = "y_py-0.6.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:7cbefd4f1060f05768227ddf83be126397b1d430b026c64e0eb25d3cf50c5734"}, + {file = "y_py-0.6.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:032365dfe932bfab8e80937ad6093b4c22e67d63ad880096b5fa8768f8d829ba"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a70aee572da3994238c974694767365f237fc5949a550bee78a650fe16f83184"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae80d505aee7b3172cdcc2620ca6e2f85586337371138bb2b71aa377d2c31e9a"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a497ebe617bec6a420fc47378856caae40ab0652e756f3ed40c5f1fe2a12220"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e8638355ae2f996356f7f281e03a3e3ce31f1259510f9d551465356532e0302c"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8448da4092265142662bbd3fc46cb8b0796b1e259189c020bc8f738899abd0b5"}, + {file = "y_py-0.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:69cfbcbe0a05f43e780e6a198080ba28034bf2bb4804d7d28f71a0379bfd1b19"}, + {file = "y_py-0.6.2-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:1f798165158b76365a463a4f8aa2e3c2a12eb89b1fc092e7020e93713f2ad4dc"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92878cc05e844c8da937204bc34c2e6caf66709ce5936802fbfb35f04132892"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9b8822a5c0fd9a8cffcabfcc0cd7326bad537ee614fc3654e413a03137b6da1a"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e13cba03c7af8c8a846c4495875a09d64362cc4caeed495ada5390644411bbe7"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82f2e5b31678065e7a7fa089ed974af5a4f076673cf4f414219bdadfc3246a21"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1935d12e503780b859d343161a80df65205d23cad7b4f6c3df6e50321e188a3"}, + {file = "y_py-0.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd302c6d46a3be57664571a5f0d4224646804be9890a01d73a0b294f2d3bbff1"}, + {file = "y_py-0.6.2-cp37-none-win32.whl", hash = "sha256:5415083f7f10eac25e1c434c87f07cb9bfa58909a6cad6649166fdad21119fc5"}, + {file = "y_py-0.6.2-cp37-none-win_amd64.whl", hash = "sha256:376c5cc0c177f03267340f36aec23e5eaf19520d41428d87605ca2ca3235d845"}, + {file = "y_py-0.6.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:3c011303eb2b360695d2bd4bd7ca85f42373ae89fcea48e7fa5b8dc6fc254a98"}, + {file = "y_py-0.6.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:c08311db17647a47d4898fc6f8d9c1f0e58b927752c894877ff0c38b3db0d6e1"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7cafbe946b4cafc1e5709957e6dd5c6259d241d48ed75713ded42a5e8a4663"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ba99d0bdbd9cabd65f914cd07b4fb2e939ce199b54ae5ace1639ce1edf8e0a2"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dab84c52f64e10adc79011a08673eb80286c159b14e8fb455524bf2994f0cb38"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72875641a907523d37f4619eb4b303611d17e0a76f2ffc423b62dd1ca67eef41"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c31240e30d5636ded02a54b7280aa129344fe8e964fd63885e85d9a8a83db206"}, + {file = "y_py-0.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c28d977f516d4928f6bc0cd44561f6d0fdd661d76bac7cdc4b73e3c209441d9"}, + {file = "y_py-0.6.2-cp38-none-win32.whl", hash = "sha256:c011997f62d0c3b40a617e61b7faaaf6078e4eeff2e95ce4c45838db537816eb"}, + {file = "y_py-0.6.2-cp38-none-win_amd64.whl", hash = "sha256:ce0ae49879d10610cf3c40f4f376bb3cc425b18d939966ac63a2a9c73eb6f32a"}, + {file = "y_py-0.6.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:47fcc19158150dc4a6ae9a970c5bc12f40b0298a2b7d0c573a510a7b6bead3f3"}, + {file = "y_py-0.6.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2d2b054a1a5f4004967532a4b82c6d1a45421ef2a5b41d35b6a8d41c7142aabe"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0787e85645bb4986c27e271715bc5ce21bba428a17964e5ec527368ed64669bc"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:17bce637a89f6e75f0013be68becac3e38dc082e7aefaf38935e89215f0aa64a"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:beea5ad9bd9e56aa77a6583b6f4e347d66f1fe7b1a2cb196fff53b7634f9dc84"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1dca48687f41efd862355e58b0aa31150586219324901dbea2989a506e291d4"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17edd21eef863d230ea00004ebc6d582cc91d325e7132deb93f0a90eb368c855"}, + {file = "y_py-0.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:de9cfafe97c75cd3ea052a24cd4aabf9fb0cfc3c0f9f810f00121cdf123db9e4"}, + {file = "y_py-0.6.2-cp39-none-win32.whl", hash = "sha256:82f5ca62bedbf35aaf5a75d1f53b4457a1d9b6ff033497ca346e2a0cedf13d14"}, + {file = "y_py-0.6.2-cp39-none-win_amd64.whl", hash = "sha256:7227f232f2daf130ba786f6834548f2cfcfa45b7ec4f0d449e72560ac298186c"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0649a41cd3c98e290c16592c082dbe42c7ffec747b596172eebcafb7fd8767b0"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:bf6020560584671e76375b7a0539e0d5388fc70fa183c99dc769895f7ef90233"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf817a72ffec4295def5c5be615dd8f1e954cdf449d72ebac579ff427951328"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c7302619fc962e53093ba4a94559281491c045c925e5c4defec5dac358e0568"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cd6213c3cf2b9eee6f2c9867f198c39124c557f4b3b77d04a73f30fd1277a59"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b4fac4ea2ce27b86d173ae45765ced7f159120687d4410bb6d0846cbdb170a3"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:932abb560fe739416b50716a72ba6c6c20b219edded4389d1fc93266f3505d4b"}, + {file = "y_py-0.6.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e42258f66ad9f16d9b62e9c9642742982acb1f30b90f5061522048c1cb99814f"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cfc8381df1f0f873da8969729974f90111cfb61a725ef0a2e0e6215408fe1217"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:613f83713714972886e81d71685403098a83ffdacf616f12344b52bc73705107"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:316e5e1c40259d482883d1926fd33fa558dc87b2bd2ca53ce237a6fe8a34e473"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:015f7f6c1ce8a83d57955d1dc7ddd57cb633ae00576741a4fc9a0f72ed70007d"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff32548e45e45bf3280ac1d28b3148337a5c6714c28db23aeb0693e33eba257e"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0f2d881f0f8bf5674f8fe4774a438c545501e40fa27320c73be4f22463af4b05"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3bbe2f925cc587545c8d01587b4523177408edd252a32ce6d61b97113fe234d"}, + {file = "y_py-0.6.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f5c14d25611b263b876e9ada1701415a13c3e9f02ea397224fbe4ca9703992b"}, + {file = "y_py-0.6.2.tar.gz", hash = "sha256:4757a82a50406a0b3a333aa0122019a331bd6f16e49fed67dca423f928b3fd4d"}, ] [[package]] @@ -9828,85 +9947,101 @@ test = ["coverage (==5.2.1)", "pytest (==6.0.2)", "pytest-cov (==2.10.1)", "sele [[package]] name = "yarl" -version = "1.9.2" +version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] @@ -9915,13 +10050,13 @@ multidict = ">=4.0" [[package]] name = "yfinance" -version = "0.2.37" +version = "0.2.38" description = "Download market data from Yahoo! Finance API" optional = false python-versions = "*" files = [ - {file = "yfinance-0.2.37-py2.py3-none-any.whl", hash = "sha256:3ac75fa1cd3496ee76b6df5d63d29679487ea9447123c5b935d1593240737a8f"}, - {file = "yfinance-0.2.37.tar.gz", hash = "sha256:e5f78c9bd27bae7abfd0af9b7996620eaa9aba759d67f957296634d7d54f0cef"}, + {file = "yfinance-0.2.38-py2.py3-none-any.whl", hash = "sha256:07525cf84414272723a3e2b9d4c0a2898ddb60cc0828aa190de26664fac6f676"}, + {file = "yfinance-0.2.38.tar.gz", hash = "sha256:483eecae0743d829fc337f21d80da4612f5257d5c1f35570efc4a5e98e4401a7"}, ] [package.dependencies] @@ -9962,82 +10097,90 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] [[package]] name = "yt-dlp" -version = "2023.7.6" +version = "2023.12.30" description = "A youtube-dl fork with additional features and patches" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "yt-dlp-2023.7.6.tar.gz", hash = "sha256:cb58373869c8ccb5034746f91cfccd6d25ea697090dfd6f93e9034d51eb4aed2"}, - {file = "yt_dlp-2023.7.6-py2.py3-none-any.whl", hash = "sha256:b33b3f68751f33dd8290f1f61f7a011679b3b512aa223df3bff496688bc0bd19"}, + {file = "yt-dlp-2023.12.30.tar.gz", hash = "sha256:a11862e57721b0a0f0883dfeb5a4d79ba213a2d4c45e1880e9fd70f8e6570c38"}, + {file = "yt_dlp-2023.12.30-py2.py3-none-any.whl", hash = "sha256:c00d9a71d64472ad441bcaa1ec0c3797d6e60c9f934f270096a96fe51657e7b3"}, ] [package.dependencies] -brotli = {version = "*", markers = "platform_python_implementation == \"CPython\""} -brotlicffi = {version = "*", markers = "platform_python_implementation != \"CPython\""} +brotli = {version = "*", markers = "implementation_name == \"cpython\""} +brotlicffi = {version = "*", markers = "implementation_name != \"cpython\""} certifi = "*" mutagen = "*" pycryptodomex = "*" -websockets = "*" +requests = ">=2.31.0,<3" +urllib3 = ">=1.26.17,<3" +websockets = ">=12.0" [[package]] name = "zipp" -version = "3.16.2" +version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [[package]] name = "zope-interface" -version = "6.0" +version = "6.3" description = "Interfaces for Python" optional = false python-versions = ">=3.7" files = [ - {file = "zope.interface-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990"}, - {file = "zope.interface-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f"}, - {file = "zope.interface-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518"}, - {file = "zope.interface-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb"}, - {file = "zope.interface-6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc"}, - {file = "zope.interface-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f"}, - {file = "zope.interface-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2"}, - {file = "zope.interface-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5"}, - {file = "zope.interface-6.0.tar.gz", hash = "sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d"}, + {file = "zope.interface-6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f32010ffb87759c6a3ad1c65ed4d2e38e51f6b430a1ca11cee901ec2b42e021"}, + {file = "zope.interface-6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e78a183a3c2f555c2ad6aaa1ab572d1c435ba42f1dc3a7e8c82982306a19b785"}, + {file = "zope.interface-6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa0491a9f154cf8519a02026dc85a416192f4cb1efbbf32db4a173ba28b289a"}, + {file = "zope.interface-6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e32f02b3f26204d9c02c3539c802afc3eefb19d601a0987836ed126efb1f21"}, + {file = "zope.interface-6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c40df4aea777be321b7e68facb901bc67317e94b65d9ab20fb96e0eb3c0b60a1"}, + {file = "zope.interface-6.3-cp310-cp310-win_amd64.whl", hash = "sha256:46034be614d1f75f06e7dcfefba21d609b16b38c21fc912b01a99cb29e58febb"}, + {file = "zope.interface-6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:600101f43a7582d5b9504a7c629a1185a849ce65e60fca0f6968dfc4b76b6d39"}, + {file = "zope.interface-6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4d6b229f5e1a6375f206455cc0a63a8e502ed190fe7eb15e94a312dc69d40299"}, + {file = "zope.interface-6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10cde8dc6b2fd6a1d0b5ca4be820063e46ddba417ab82bcf55afe2227337b130"}, + {file = "zope.interface-6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40aa8c8e964d47d713b226c5baf5f13cdf3a3169c7a2653163b17ff2e2334d10"}, + {file = "zope.interface-6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d165d7774d558ea971cb867739fb334faf68fc4756a784e689e11efa3becd59e"}, + {file = "zope.interface-6.3-cp311-cp311-win_amd64.whl", hash = "sha256:69dedb790530c7ca5345899a1b4cb837cc53ba669051ea51e8c18f82f9389061"}, + {file = "zope.interface-6.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8d407e0fd8015f6d5dfad481309638e1968d70e6644e0753f229154667dd6cd5"}, + {file = "zope.interface-6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:72d5efecad16c619a97744a4f0b67ce1bcc88115aa82fcf1dc5be9bb403bcc0b"}, + {file = "zope.interface-6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:567d54c06306f9c5b6826190628d66753b9f2b0422f4c02d7c6d2b97ebf0a24e"}, + {file = "zope.interface-6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483e118b1e075f1819b3c6ace082b9d7d3a6a5eb14b2b375f1b80a0868117920"}, + {file = "zope.interface-6.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb78c12c1ad3a20c0d981a043d133299117b6854f2e14893b156979ed4e1d2c"}, + {file = "zope.interface-6.3-cp312-cp312-win_amd64.whl", hash = "sha256:ad4524289d8dbd6fb5aa17aedb18f5643e7d48358f42c007a5ee51a2afc2a7c5"}, + {file = "zope.interface-6.3-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:a56fe1261230093bfeedc1c1a6cd6f3ec568f9b07f031c9a09f46b201f793a85"}, + {file = "zope.interface-6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:014bb94fe6bf1786da1aa044eadf65bc6437bcb81c451592987e5be91e70a91e"}, + {file = "zope.interface-6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e8a218e8e2d87d4d9342aa973b7915297a08efbebea5b25900c73e78ed468e"}, + {file = "zope.interface-6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95bebd0afe86b2adc074df29edb6848fc4d474ff24075e2c263d698774e108d"}, + {file = "zope.interface-6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:d0e7321557c702bd92dac3c66a2f22b963155fdb4600133b6b29597f62b71b12"}, + {file = "zope.interface-6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:187f7900b63845dcdef1be320a523dbbdba94d89cae570edc2781eb55f8c2f86"}, + {file = "zope.interface-6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a058e6cf8d68a5a19cb5449f42a404f0d6c2778b897e6ce8fadda9cea308b1b0"}, + {file = "zope.interface-6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8fa0fb05083a1a4216b4b881fdefa71c5d9a106e9b094cd4399af6b52873e91"}, + {file = "zope.interface-6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26c9a37fb395a703e39b11b00b9e921c48f82b6e32cc5851ad5d0618cd8876b5"}, + {file = "zope.interface-6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b0c4c90e5eefca2c3e045d9f9ed9f1e2cdbe70eb906bff6b247e17119ad89a1"}, + {file = "zope.interface-6.3-cp38-cp38-win_amd64.whl", hash = "sha256:5683aa8f2639016fd2b421df44301f10820e28a9b96382a6e438e5c6427253af"}, + {file = "zope.interface-6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c3cfb272bcb83650e6695d49ae0d14dd06dc694789a3d929f23758557a23d92"}, + {file = "zope.interface-6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:01a0b3dd012f584afcf03ed814bce0fc40ed10e47396578621509ac031be98bf"}, + {file = "zope.interface-6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4137025731e824eee8d263b20682b28a0bdc0508de9c11d6c6be54163e5b7c83"}, + {file = "zope.interface-6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c8731596198198746f7ce2a4487a0edcbc9ea5e5918f0ab23c4859bce56055c"}, + {file = "zope.interface-6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf34840e102d1d0b2d39b1465918d90b312b1119552cebb61a242c42079817b9"}, + {file = "zope.interface-6.3-cp39-cp39-win_amd64.whl", hash = "sha256:a1adc14a2a9d5e95f76df625a9b39f4709267a483962a572e3f3001ef90ea6e6"}, + {file = "zope.interface-6.3.tar.gz", hash = "sha256:f83d6b4b22262d9a826c3bd4b2fbfafe1d0000f085ef8e44cd1328eea274ae6a"}, ] [package.dependencies] setuptools = "*" [package.extras] -docs = ["Sphinx", "repoze.sphinx.autointerface"] +docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] diff --git a/website/.gitignore b/website/.gitignore index 04ebeaf5138..b2d6de30624 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -18,8 +18,3 @@ npm-debug.log* yarn-debug.log* yarn-error.log* - -# Reference files -content/excel/reference/* -content/platform/data_models/* -content/platform/reference/* diff --git a/website/content/excel/functions.json b/website/content/excel/functions.json index 1cebe7a1928..e93a51521c4 100644 --- a/website/content/excel/functions.json +++ b/website/content/excel/functions.json @@ -79,7 +79,7 @@ "name": "CRYPTO.PRICE.HISTORICAL", "parameters": [ { - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon.", + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): fmp, polygon.", "name": "symbol", "type": "string" }, @@ -96,19 +96,25 @@ "type": "string" }, { - "description": "Options: fmp, polygon, defaults to fmp.", + "description": "Options: fmp, polygon, tiingo, defaults to fmp.", "name": "provider", "optional": true, "type": "string" }, { - "description": "Time interval of the data to return. (provider: fmp);\nTime interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y (provider: polygon)", + "description": "Number of days to look back. (provider: fmp)", + "name": "timeseries", + "optional": true, + "type": "number" + }, + { + "description": "Data granularity. (provider: fmp, polygon, tiingo)", "name": "interval", "optional": true, "type": "string" }, { - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", + "description": "Sort order of the data. (provider: polygon)", "name": "sort", "optional": true, "type": "string" @@ -118,6 +124,13 @@ "name": "limit", "optional": true, "type": "number" + }, + { + "description": "To limit the query to a subset of exchanges e.g. ['POLONIEX', 'GDAX'] (provider: tiingo)", + "dimensionality": "matrix", + "name": "exchanges", + "optional": true, + "type": "any" } ], "result": { @@ -154,7 +167,7 @@ "name": "CURRENCY.PRICE.HISTORICAL", "parameters": [ { - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon.", + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): polygon.", "name": "symbol", "type": "string" }, @@ -171,19 +184,19 @@ "type": "string" }, { - "description": "Options: fmp, polygon, defaults to fmp.", + "description": "Options: fmp, polygon, tiingo, defaults to fmp.", "name": "provider", "optional": true, "type": "string" }, { - "description": "Time interval of the data to return. (provider: fmp);\nTime interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y (provider: polygon)", + "description": "Data granularity. (provider: fmp, polygon, tiingo)", "name": "interval", "optional": true, "type": "string" }, { - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", + "description": "Sort order of the data. (provider: polygon)", "name": "sort", "optional": true, "type": "string" @@ -275,41 +288,6 @@ "dimensionality": "matrix" } }, - { - "description": "Snapshots of currency exchange rates from an indirect or direct perspective of a base currency.", - "helpUrl": "https://docs.openbb.co/excel/reference/currency/snapshots", - "id": "CURRENCY.SNAPSHOTS", - "name": "CURRENCY.SNAPSHOTS", - "parameters": [ - { - "description": "The base currency symbol. Multiple comma separated items allowed for provider(s): fmp.", - "name": "base", - "optional": true, - "type": "string" - }, - { - "description": "Whether the quote is direct or indirect. Selecting 'direct' will return the exchange rate as the amount of domestic currency required to buy one unit of the foreign currency. Selecting 'indirect' (default) will return the exchange rate as the amount of foreign currency required to buy one unit of the domestic currency.", - "name": "quote_type", - "optional": true, - "type": "string" - }, - { - "description": "An optional list of counter currency symbols to filter for. None returns all.", - "name": "counter_currencies", - "optional": true, - "type": "any" - }, - { - "description": "Options: fmp, defaults to fmp.", - "name": "provider", - "optional": true, - "type": "string" - } - ], - "result": { - "dimensionality": "matrix" - } - }, { "description": "Get the complete options chain for a ticker.", "helpUrl": "https://docs.openbb.co/excel/reference/derivatives/options/chains", @@ -356,48 +334,6 @@ "optional": true, "type": "string" }, - { - "description": "Start date of the data, in YYYY-MM-DD format. If no symbol is supplied, requests are only allowed for a single date. Use the start_date for the target date. Intrinio appears to have data beginning Feb/2022, but is unclear when it actually began. (provider: intrinio)", - "name": "start_date", - "optional": true, - "type": "string" - }, - { - "description": "End date of the data, in YYYY-MM-DD format. If a symbol is not supplied, do not include an end date. (provider: intrinio)", - "name": "end_date", - "optional": true, - "type": "string" - }, - { - "description": "The type of unusual activity to query for. (provider: intrinio)", - "name": "trade_type", - "optional": true, - "type": "string" - }, - { - "description": "The sentiment type to query for. (provider: intrinio)", - "name": "sentiment", - "optional": true, - "type": "string" - }, - { - "description": "The inclusive minimum total value for the unusual activity. (provider: intrinio)", - "name": "min_value", - "optional": true, - "type": "number" - }, - { - "description": "The inclusive maximum total value for the unusual activity. (provider: intrinio)", - "name": "max_value", - "optional": true, - "type": "number" - }, - { - "description": "The number of data entries to return. A typical day for all symbols will yield 50-80K records. The API will paginate at 1000 records. The high default limit (100K) is to be able to reliably capture the most days. The high absolute limit (1.25M) is to allow for outlier days. Queries at the absolute limit will take a long time, and might be unreliable. Apply filters to improve performance. (provider: intrinio)", - "name": "limit", - "optional": true, - "type": "number" - }, { "description": "The source of the data. Either realtime or delayed. (provider: intrinio)", "name": "source", @@ -469,7 +405,7 @@ "type": "string" }, { - "description": "Country of the event. Multiple comma separated items allowed. (provider: tradingeconomics)", + "description": "Country of the event. Multiple items allowed. (provider: tradingeconomics)", "name": "country", "optional": true, "type": "string" @@ -533,7 +469,7 @@ "name": "ECONOMY.CPI", "parameters": [ { - "description": "The country to get data. Multiple comma separated items allowed for provider(s): fred.", + "description": "The country to get data. Multiple items allowed for provider(s): fred.", "name": "country", "type": "string" }, @@ -585,7 +521,7 @@ "name": "ECONOMY.FRED_REGIONAL", "parameters": [ { - "description": "Symbol to get data for.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fred.", "name": "symbol", "type": "string" }, @@ -744,7 +680,7 @@ "name": "ECONOMY.FRED_SERIES", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fred.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fred.", "name": "symbol", "type": "string" }, @@ -1351,13 +1287,13 @@ "name": "EQUITY.ESTIMATES.ANALYST_SEARCH", "parameters": [ { - "description": "Analyst names to return. Omitting will return all available analysts. Multiple comma separated items allowed for provider(s): benzinga.", + "description": "A comma separated list of analyst names to bring back. Omitting will bring back all available analysts.", "name": "analyst_name", "optional": true, "type": "string" }, { - "description": "Firm names to return. Omitting will return all available firms. Multiple comma separated items allowed for provider(s): benzinga.", + "description": "A comma separated list of firm names to bring back. Omitting will bring back all available firms.", "name": "firm_name", "optional": true, "type": "string" @@ -1369,16 +1305,16 @@ "type": "string" }, { - "description": "List of analyst IDs to return. Multiple comma separated items allowed. (provider: benzinga)", + "description": "A comma separated list of analyst IDs to bring back. (provider: benzinga)", "name": "analyst_ids", "optional": true, - "type": "string" + "type": "any" }, { - "description": "Firm IDs to return. Multiple comma separated items allowed. (provider: benzinga)", + "description": "A comma separated list of firm IDs to bring back. (provider: benzinga)", "name": "firm_ids", "optional": true, - "type": "string" + "type": "any" }, { "description": "Number of results returned. Limit 1000. (provider: benzinga)", @@ -1393,10 +1329,10 @@ "type": "number" }, { - "description": "Fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple comma separated items allowed. (provider: benzinga)", + "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. (provider: benzinga)", "name": "fields", "optional": true, - "type": "string" + "type": "any" } ], "result": { @@ -1410,7 +1346,7 @@ "name": "EQUITY.ESTIMATES.CONSENSUS", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for.", "name": "symbol", "type": "string" }, @@ -1432,27 +1368,27 @@ "name": "EQUITY.ESTIMATES.HISTORICAL", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for.", "name": "symbol", "type": "string" }, + { + "description": "Time period of the data to return.", + "name": "period", + "optional": true, + "type": "string" + }, + { + "description": "The number of data entries to return.", + "name": "limit", + "optional": true, + "type": "number" + }, { "description": "Options: fmp, defaults to fmp.", "name": "provider", "optional": true, "type": "string" - }, - { - "description": "Time period of the data to return. (provider: fmp)", - "name": "period", - "optional": true, - "type": "string" - }, - { - "description": "The number of data entries to return. (provider: fmp)", - "name": "limit", - "optional": true, - "type": "number" } ], "result": { @@ -1466,7 +1402,7 @@ "name": "EQUITY.ESTIMATES.PRICE_TARGET", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): benzinga.", "name": "symbol", "optional": true, "type": "string" @@ -1526,19 +1462,19 @@ "type": "string" }, { - "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts. Multiple comma separated items allowed. (provider: benzinga)", + "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts. Multiple items allowed. (provider: benzinga)", "name": "analyst_ids", "optional": true, "type": "any" }, { - "description": "Comma-separated list of firm IDs. Multiple comma separated items allowed. (provider: benzinga)", + "description": "Comma-separated list of firm IDs. Multiple items allowed. (provider: benzinga)", "name": "firm_ids", "optional": true, "type": "any" }, { - "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple comma separated items allowed. (provider: benzinga)", + "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple items allowed. (provider: benzinga)", "name": "fields", "optional": true, "type": "any" @@ -1938,6 +1874,12 @@ "optional": true, "type": "number" }, + { + "description": "Sort the data in ascending or descending order. (provider: fmp)", + "name": "sort", + "optional": true, + "type": "string" + }, { "description": "Start date of the data, in YYYY-MM-DD format. (provider: intrinio)", "name": "start_date", @@ -1980,12 +1922,12 @@ "name": "EQUITY.FUNDAMENTAL.HISTORICAL_ATTRIBUTES", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", "name": "symbol", "type": "string" }, { - "description": "Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", "name": "tag", "type": "string" }, @@ -2245,12 +2187,12 @@ "name": "EQUITY.FUNDAMENTAL.LATEST_ATTRIBUTES", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", "name": "symbol", "type": "string" }, { - "description": "Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", "name": "tag", "type": "string" }, @@ -2294,21 +2236,27 @@ "name": "EQUITY.FUNDAMENTAL.MANAGEMENT_COMPENSATION", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, + { + "description": "Start date of the data, in YYYY-MM-DD format.", + "name": "start_date", + "optional": true, + "type": "string" + }, + { + "description": "End date of the data, in YYYY-MM-DD format.", + "name": "end_date", + "optional": true, + "type": "string" + }, { "description": "Options: fmp, defaults to fmp.", "name": "provider", "optional": true, "type": "string" - }, - { - "description": "Year of the compensation. (provider: fmp)", - "name": "year", - "optional": true, - "type": "number" } ], "result": { @@ -2322,7 +2270,7 @@ "name": "EQUITY.FUNDAMENTAL.METRICS", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, @@ -2362,7 +2310,7 @@ "name": "EQUITY.FUNDAMENTAL.MULTIPLES", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, @@ -2406,7 +2354,7 @@ "name": "EQUITY.FUNDAMENTAL.RATIOS", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio.", "name": "symbol", "type": "string" }, @@ -2429,7 +2377,7 @@ "type": "string" }, { - "description": "Include trailing twelve months (TTM) data. (provider: fmp)", + "description": "Include trailing twelve months (TTM) data. (provider: fmp, intrinio)", "name": "with_ttm", "optional": true, "type": "boolean" @@ -2587,6 +2535,35 @@ "dimensionality": "matrix" } }, + { + "description": "Get the 1 year trailing dividend yield for a given company over time.", + "helpUrl": "https://docs.openbb.co/excel/reference/equity/fundamental/trailing_dividend_yield", + "id": "EQUITY.FUNDAMENTAL.TRAILING_DIVIDEND_YIELD", + "name": "EQUITY.FUNDAMENTAL.TRAILING_DIVIDEND_YIELD", + "parameters": [ + { + "description": "Symbol to get data for.", + "name": "symbol", + "optional": true, + "type": "string" + }, + { + "description": "The number of data entries to return. Default is 252, the number of trading days in a year.", + "name": "limit", + "optional": true, + "type": "number" + }, + { + "description": "Options: tiingo, defaults to tiingo.", + "name": "provider", + "optional": true, + "type": "string" + } + ], + "result": { + "dimensionality": "matrix" + } + }, { "description": "Get earnings call transcripts for a given company.", "helpUrl": "https://docs.openbb.co/excel/reference/equity/fundamental/transcript", @@ -2601,6 +2578,7 @@ { "description": "Year of the earnings call transcript.", "name": "year", + "optional": true, "type": "number" }, { @@ -2608,6 +2586,12 @@ "name": "provider", "optional": true, "type": "string" + }, + { + "description": "Date of the earnings call transcript. (provider: fmp)", + "name": "earnings_date", + "optional": true, + "type": "string" } ], "result": { @@ -2621,7 +2605,7 @@ "name": "EQUITY.MARKET_SNAPSHOTS", "parameters": [ { - "description": "Options: fmp, intrinio, polygon, defaults to fmp.", + "description": "Options: fmp, polygon, defaults to fmp.", "name": "provider", "optional": true, "type": "string" @@ -2631,46 +2615,6 @@ "name": "market", "optional": true, "type": "string" - }, - { - "description": "The date of the data. Can be a datetime or an ISO datetime string. Historical data appears to go back to mid-June 2022. Example: '2024-03-08T12:15:00+0400' (provider: intrinio)", - "name": "date", - "optional": true, - "type": "string" - } - ], - "result": { - "dimensionality": "matrix" - } - }, - { - "description": "The Securities and Exchange Commission's (SEC) Form 13F is a quarterly report\nthat is required to be filed by all institutional investment managers with at least\n$100 million in assets under management.\nManagers are required to file Form 13F within 45 days after the last day of the calendar quarter.\nMost funds wait until the end of this period in order to conceal\ntheir investment strategy from competitors and the public.", - "helpUrl": "https://docs.openbb.co/excel/reference/equity/ownership/form_13f", - "id": "EQUITY.OWNERSHIP.FORM_13F", - "name": "EQUITY.OWNERSHIP.FORM_13F", - "parameters": [ - { - "description": "Symbol to get data for. A CIK or Symbol can be used.", - "name": "symbol", - "type": "string" - }, - { - "description": "A specific date to get data for. The date represents the end of the reporting period. All form 13F-HR filings are based on the calendar year and are reported quarterly. If a date is not supplied, the most recent filing is returned. Submissions beginning 2013-06-30 are supported.", - "name": "date", - "optional": true, - "type": "string" - }, - { - "description": "The number of data entries to return. The number of previous filings to return. The date parameter takes priority over this parameter.", - "name": "limit", - "optional": true, - "type": "number" - }, - { - "description": "Options: sec, defaults to sec.", - "name": "provider", - "optional": true, - "type": "string" } ], "result": { @@ -2747,7 +2691,7 @@ "type": "string" }, { - "description": "Options: fmp, defaults to fmp.", + "description": "Options: fmp, intrinio, defaults to fmp.", "name": "provider", "optional": true, "type": "string" @@ -2763,6 +2707,12 @@ "name": "date", "optional": true, "type": "string" + }, + { + "description": "The number of data entries to return. (provider: intrinio)", + "name": "page_size", + "optional": true, + "type": "number" } ], "result": { @@ -2797,6 +2747,12 @@ "name": "provider", "optional": true, "type": "string" + }, + { + "description": "Number of records to return. (Ignores page if set. Default: None) (provider: fmp)", + "name": "limit", + "optional": true, + "type": "number" } ], "result": { @@ -2832,7 +2788,7 @@ "name": "EQUITY.PRICE.HISTORICAL", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, polygon, tiingo.", "name": "symbol", "type": "string" }, @@ -2855,11 +2811,23 @@ "type": "string" }, { - "description": "Options: fmp, intrinio, polygon, defaults to fmp.", + "description": "Options: fmp, intrinio, polygon, tiingo, defaults to fmp.", "name": "provider", "optional": true, "type": "string" }, + { + "description": "Number of days to look back (Only for interval 1d). (provider: fmp);\nThe number of results to return per page. (provider: intrinio);\nThe number of data entries to return. (provider: polygon)", + "name": "limit", + "optional": true, + "type": "number" + }, + { + "description": "Sort the data in ascending or descending order. (provider: fmp);\nSort order of the data. (provider: polygon)", + "name": "sort", + "optional": true, + "type": "string" + }, { "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'. (provider: intrinio)", "name": "start_time", @@ -2885,28 +2853,16 @@ "type": "string" }, { - "description": "The adjustment factor to apply. Default is splits only. (provider: polygon)", - "name": "adjustment", - "optional": true, - "type": "string" - }, - { - "description": "Include Pre and Post market data. (provider: polygon)", - "name": "extended_hours", - "optional": true, - "type": "boolean" - }, - { - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "name": "sort", - "optional": true, - "type": "string" - }, - { - "description": "The number of data entries to return. (provider: polygon)", - "name": "limit", + "description": "Time to sleep between requests to avoid rate limiting. (provider: intrinio)", + "name": "sleep", "optional": true, "type": "number" + }, + { + "description": "Output time series is adjusted by historical split and dividend events. (provider: polygon)", + "name": "adjusted", + "optional": true, + "type": "boolean" } ], "result": { @@ -2943,25 +2899,25 @@ "type": "string" }, { - "description": "Query by datetime, less than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)", + "description": "Query by datetime, less than. Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\nYYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n(provider: polygon)", "name": "timestamp_lt", "optional": true, "type": "string" }, { - "description": "Query by datetime, greater than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)", + "description": "Query by datetime, greater than. Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\nYYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n(provider: polygon)", "name": "timestamp_gt", "optional": true, "type": "string" }, { - "description": "Query by datetime, less than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)", + "description": "Query by datetime, less than or equal to.\nEither a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\nYYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n(provider: polygon)", "name": "timestamp_lte", "optional": true, "type": "string" }, { - "description": "Query by datetime, greater than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)", + "description": "Query by datetime, greater than or equal to.\nEither a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\nYYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n(provider: polygon)", "name": "timestamp_gte", "optional": true, "type": "string" @@ -2978,7 +2934,7 @@ "name": "EQUITY.PRICE.PERFORMANCE", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, @@ -3000,7 +2956,7 @@ "name": "EQUITY.PRICE.QUOTE", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. This endpoint will accept multiple symbols separated by commas. Multiple items allowed for provider(s): fmp, intrinio.", "name": "symbol", "type": "string" }, @@ -3028,7 +2984,7 @@ "name": "EQUITY.PROFILE", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio.", "name": "symbol", "type": "string" }, @@ -3256,7 +3212,7 @@ "name": "ETF.COUNTRIES", "parameters": [ { - "description": "Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, @@ -3278,7 +3234,7 @@ "name": "ETF.EQUITY_EXPOSURE", "parameters": [ { - "description": "Symbol to get data for. (Stock) Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. (Stock) Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, @@ -3293,94 +3249,6 @@ "dimensionality": "matrix" } }, - { - "description": "ETF Historical Market Price.", - "helpUrl": "https://docs.openbb.co/excel/reference/etf/historical", - "id": "ETF.HISTORICAL", - "name": "ETF.HISTORICAL", - "parameters": [ - { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon.", - "name": "symbol", - "type": "string" - }, - { - "description": "Time interval of the data to return.", - "name": "interval", - "optional": true, - "type": "string" - }, - { - "description": "Start date of the data, in YYYY-MM-DD format.", - "name": "start_date", - "optional": true, - "type": "string" - }, - { - "description": "End date of the data, in YYYY-MM-DD format.", - "name": "end_date", - "optional": true, - "type": "string" - }, - { - "description": "Options: fmp, intrinio, polygon, defaults to fmp.", - "name": "provider", - "optional": true, - "type": "string" - }, - { - "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'. (provider: intrinio)", - "name": "start_time", - "optional": true, - "type": "string" - }, - { - "description": "Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'. (provider: intrinio)", - "name": "end_time", - "optional": true, - "type": "string" - }, - { - "description": "Timezone of the data, in the IANA format (Continent/City). (provider: intrinio)", - "name": "timezone", - "optional": true, - "type": "string" - }, - { - "description": "The source of the data. (provider: intrinio)", - "name": "source", - "optional": true, - "type": "string" - }, - { - "description": "The adjustment factor to apply. Default is splits only. (provider: polygon)", - "name": "adjustment", - "optional": true, - "type": "string" - }, - { - "description": "Include Pre and Post market data. (provider: polygon)", - "name": "extended_hours", - "optional": true, - "type": "boolean" - }, - { - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "name": "sort", - "optional": true, - "type": "string" - }, - { - "description": "The number of data entries to return. (provider: polygon)", - "name": "limit", - "optional": true, - "type": "number" - } - ], - "result": { - "dimensionality": "matrix" - } - }, { "description": "Get the holdings for an individual ETF.", "helpUrl": "https://docs.openbb.co/excel/reference/etf/holdings", @@ -3393,13 +3261,13 @@ "type": "string" }, { - "description": "Options: fmp, intrinio, sec, defaults to fmp.", + "description": "Options: fmp, sec, defaults to fmp.", "name": "provider", "optional": true, "type": "string" }, { - "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF. (provider: fmp);\nA specific date to get data for. The date represents the period ending. The date entered will return the closest filing. (provider: sec)", + "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF. (provider: fmp);\nA specific date to get data for. The date represents the period ending. The date entered will return the closest filing. (provider: sec)", "name": "date", "optional": true, "type": "string" @@ -3456,7 +3324,7 @@ "name": "ETF.HOLDINGS_PERFORMANCE", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, @@ -3478,12 +3346,12 @@ "name": "ETF.INFO", "parameters": [ { - "description": "Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, { - "description": "Options: fmp, intrinio, defaults to fmp.", + "description": "Options: fmp, defaults to fmp.", "name": "provider", "optional": true, "type": "string" @@ -3494,33 +3362,21 @@ } }, { - "description": "Price performance as a return, over different periods.", + "description": "Price performance as a return, over different periods. This is a proxy for `equity.price.performance`.", "helpUrl": "https://docs.openbb.co/excel/reference/etf/price_performance", "id": "ETF.PRICE_PERFORMANCE", "name": "ETF.PRICE_PERFORMANCE", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "name": "symbol", "type": "string" }, { - "description": "Options: fmp, intrinio, defaults to fmp.", + "description": "Options: fmp, defaults to fmp.", "name": "provider", "optional": true, "type": "string" - }, - { - "description": "The type of returns to return, a trailing or calendar window. (provider: intrinio)", - "name": "return_type", - "optional": true, - "type": "string" - }, - { - "description": "The adjustment factor, 'splits_only' will return pure price performance. (provider: intrinio)", - "name": "adjustment", - "optional": true, - "type": "string" } ], "result": { @@ -3540,13 +3396,13 @@ "type": "string" }, { - "description": "Options: fmp, intrinio, defaults to fmp.", + "description": "Options: fmp, defaults to fmp.", "name": "provider", "optional": true, "type": "string" }, { - "description": "The exchange code the ETF trades on. (provider: fmp);\nTarget a specific exchange by providing the MIC code. (provider: intrinio)", + "description": "The exchange code the ETF trades on. (provider: fmp)", "name": "exchange", "optional": true, "type": "string" @@ -3779,16 +3635,18 @@ "type": "string" }, { - "description": "Maturities in years. Multiple comma separated items allowed for provider(s): fred.", + "description": "The maturities in years.", + "dimensionality": "matrix", "name": "maturity", "optional": true, "type": "any" }, { - "description": "Rate category. Options: spot_rate, par_yield. Multiple comma separated items allowed for provider(s): fred.", + "description": "The category.", + "dimensionality": "matrix", "name": "category", "optional": true, - "type": "string" + "type": "any" }, { "description": "Options: fred, defaults to fred.", @@ -4342,7 +4200,7 @@ "name": "INDEX.MARKET", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, polygon.", + "description": "Symbol to get data for.", "name": "symbol", "type": "string" }, @@ -4359,14 +4217,38 @@ "type": "string" }, { - "description": "Time interval of the data to return.", + "description": "Options: fmp, intrinio, polygon, defaults to fmp.", + "name": "provider", + "optional": true, + "type": "string" + }, + { + "description": "Number of days to look back. (provider: fmp)", + "name": "timeseries", + "optional": true, + "type": "number" + }, + { + "description": "Data granularity. (provider: fmp)", "name": "interval", "optional": true, "type": "string" }, { - "description": "Options: fmp, intrinio, polygon, defaults to fmp.", - "name": "provider", + "description": "Sort the data in ascending or descending order. (provider: fmp);\nSort order. (provider: intrinio);\nSort order of the data. (provider: polygon)", + "name": "sort", + "optional": true, + "type": "string" + }, + { + "description": "Index tag. (provider: intrinio)", + "name": "tag", + "optional": true, + "type": "string" + }, + { + "description": "Index type. (provider: intrinio)", + "name": "type", "optional": true, "type": "string" }, @@ -4377,10 +4259,28 @@ "type": "number" }, { - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "name": "sort", + "description": "Time to sleep between requests to avoid rate limiting. (provider: intrinio)", + "name": "sleep", + "optional": true, + "type": "number" + }, + { + "description": "Timespan of the data. (provider: polygon)", + "name": "timespan", "optional": true, "type": "string" + }, + { + "description": "Whether the data is adjusted. (provider: polygon)", + "name": "adjusted", + "optional": true, + "type": "boolean" + }, + { + "description": "Multiplier of the timespan. (provider: polygon)", + "name": "multiplier", + "optional": true, + "type": "number" } ], "result": { @@ -4394,7 +4294,7 @@ "name": "INDEX.PRICE.HISTORICAL", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, polygon.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio, polygon.", "name": "symbol", "type": "string" }, @@ -4416,6 +4316,18 @@ "optional": true, "type": "string" }, + { + "description": "The number of data entries to return.", + "name": "limit", + "optional": true, + "type": "number" + }, + { + "description": "Sort the data in ascending or descending order.", + "name": "sort", + "optional": true, + "type": "string" + }, { "description": "Options: fmp, intrinio, polygon, defaults to fmp.", "name": "provider", @@ -4423,16 +4335,10 @@ "type": "string" }, { - "description": "The number of data entries to return. (provider: intrinio, polygon)", - "name": "limit", + "description": "Number of days to look back. (provider: fmp)", + "name": "timeseries", "optional": true, "type": "number" - }, - { - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "name": "sort", - "optional": true, - "type": "string" } ], "result": { @@ -4446,7 +4352,7 @@ "name": "NEWS.COMPANY", "parameters": [ { - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp, intrinio, polygon.", + "description": "Symbol to get data for. This endpoint will accept multiple symbols separated by commas. Multiple items allowed for provider(s): benzinga, fmp, intrinio, polygon, tiingo.", "name": "symbol", "optional": true, "type": "string" @@ -4470,7 +4376,7 @@ "type": "number" }, { - "description": "Options: benzinga, fmp, intrinio, polygon, defaults to benzinga.", + "description": "Options: benzinga, fmp, intrinio, polygon, tiingo, defaults to benzinga.", "name": "provider", "optional": true, "type": "string" @@ -4552,6 +4458,18 @@ "name": "page", "optional": true, "type": "number" + }, + { + "description": "Page offset, used in conjunction with limit. (provider: tiingo)", + "name": "offset", + "optional": true, + "type": "number" + }, + { + "description": "A comma-separated list of the domains requested. (provider: tiingo)", + "name": "source", + "optional": true, + "type": "string" } ], "result": { @@ -4583,7 +4501,7 @@ "type": "string" }, { - "description": "Options: benzinga, fmp, intrinio, defaults to benzinga.", + "description": "Options: benzinga, fmp, intrinio, tiingo, defaults to benzinga.", "name": "provider", "optional": true, "type": "string" @@ -4659,6 +4577,18 @@ "name": "content_types", "optional": true, "type": "string" + }, + { + "description": "Page offset, used in conjunction with limit. (provider: tiingo)", + "name": "offset", + "optional": true, + "type": "number" + }, + { + "description": "A comma-separated list of the domains requested. (provider: tiingo)", + "name": "source", + "optional": true, + "type": "string" } ], "result": { @@ -4806,6 +4736,7 @@ { "description": "Search query.", "name": "query", + "optional": true, "type": "string" }, { diff --git a/website/content/excel/openapi.json b/website/content/excel/openapi.json index 7185ffd852e..f986aefdd43 100644 --- a/website/content/excel/openapi.json +++ b/website/content/excel/openapi.json @@ -13,7 +13,7 @@ "name": "MIT", "url": "https://github.com/OpenBB-finance/OpenBBTerminal/blob/develop/LICENSE" }, - "version": "4.1.6" + "version": "1" }, "paths": { "/api/v1/crypto/price/historical": { @@ -37,7 +37,8 @@ "schema": { "enum": [ "fmp", - "polygon" + "polygon", + "tiingo" ], "type": "string", "title": "Provider" @@ -49,14 +50,14 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon.", + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): fmp, polygon.", "multiple_items_allowed": [ "fmp", "polygon" ], "title": "Symbol" }, - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon." + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): fmp, polygon." }, { "name": "start_date", @@ -96,6 +97,25 @@ }, "description": "End date of the data, in YYYY-MM-DD format." }, + { + "name": "timeseries", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "null" + } + ], + "title": "fmp", + "description": "Number of days to look back. (provider: fmp)" + }, + "description": "Number of days to look back. (provider: fmp)" + }, { "name": "interval", "in": "query", @@ -104,13 +124,13 @@ "anyOf": [ { "enum": [ - "1m", - "5m", - "15m", - "30m", - "1h", - "4h", - "1d" + "1min", + "5min", + "15min", + "30min", + "1hour", + "4hour", + "1day" ], "type": "string" }, @@ -118,11 +138,11 @@ "type": "string" } ], - "title": "fmp,polygon", - "description": "Time interval of the data to return. (provider: fmp);\n Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y (provider: polygon)", - "default": "1d" + "title": "fmp,polygon,tiingo", + "description": "Data granularity. (provider: fmp, polygon, tiingo)", + "default": "1day" }, - "description": "Time interval of the data to return. (provider: fmp);\n Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y (provider: polygon)" + "description": "Data granularity. (provider: fmp, polygon, tiingo)" }, { "name": "sort", @@ -135,10 +155,10 @@ ], "type": "string", "title": "polygon", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "default": "asc" + "description": "Sort order of the data. (provider: polygon)", + "default": "desc" }, - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)" + "description": "Sort order of the data. (provider: polygon)" }, { "name": "limit", @@ -151,6 +171,27 @@ "default": 49999 }, "description": "The number of data entries to return. (provider: polygon)" + }, + { + "name": "exchanges", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "title": "tiingo", + "description": "To limit the query to a subset of exchanges e.g. ['POLONIEX', 'GDAX'] (provider: tiingo)" + }, + "description": "To limit the query to a subset of exchanges e.g. ['POLONIEX', 'GDAX'] (provider: tiingo)" } ], "responses": { @@ -200,34 +241,11 @@ }, "model": "CryptoHistorical", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "BTCUSD", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "BTCUSD", - "start_date": "2024-01-01", - "end_date": "2024-01-31", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "BTCUSD,ETHUSD", - "start_date": "2024-01-01", - "end_date": "2024-01-31", - "provider": "polygon" - }, - "provider": "polygon" - } + "obb.crypto.price.historical(symbol=\"BTCUSD\")", + "obb.crypto.price.historical(\"BTCUSD\", start_date=\"2024-01-01\", end_date=\"2024-01-31\")", + "obb.crypto.price.historical(\"ETH-USD\", provider=\"yfinance\", interval=\"1mo\", start_date=\"2024-01-01\", end_date=\"2024-12-31\")", + "obb.crypto.price.historical(\"BTCUSD,ETH-USD\", provider=\"yfinance\", interval=\"1d\", start_date=\"2024-01-01\", end_date=\"2024-01-31\")", + "obb.crypto.price.historical([\"BTCUSD\", \"ETH-USD\"], start_date=\"2024-01-01\", end_date=\"2024-01-31\")" ] } }, @@ -250,11 +268,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -325,21 +339,9 @@ }, "model": "CryptoSearch", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "query": "BTCUSD", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.crypto.search()", + "obb.crypto.search(\"BTCUSD\")", + "obb.crypto.search(\"ETH-USD\")" ] } }, @@ -364,7 +366,8 @@ "schema": { "enum": [ "fmp", - "polygon" + "polygon", + "tiingo" ], "type": "string", "title": "Provider" @@ -376,14 +379,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon.", + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): polygon.", "multiple_items_allowed": [ - "fmp", "polygon" ], "title": "Symbol" }, - "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple comma separated items allowed for provider(s): fmp, polygon." + "description": "Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. Multiple items allowed for provider(s): polygon." }, { "name": "start_date", @@ -431,13 +433,13 @@ "anyOf": [ { "enum": [ - "1m", - "5m", - "15m", - "30m", - "1h", - "4h", - "1d" + "1min", + "5min", + "15min", + "30min", + "1hour", + "4hour", + "1day" ], "type": "string" }, @@ -445,11 +447,11 @@ "type": "string" } ], - "title": "fmp,polygon", - "description": "Time interval of the data to return. (provider: fmp);\n Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y (provider: polygon)", - "default": "1d" + "title": "fmp,polygon,tiingo", + "description": "Data granularity. (provider: fmp, polygon, tiingo)", + "default": "1day" }, - "description": "Time interval of the data to return. (provider: fmp);\n Time interval of the data to return. The numeric portion of the interval can be any positive integer. The letter portion can be one of the following: s, m, h, d, W, M, Q, Y (provider: polygon)" + "description": "Data granularity. (provider: fmp, polygon, tiingo)" }, { "name": "sort", @@ -462,10 +464,10 @@ ], "type": "string", "title": "polygon", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "default": "asc" + "description": "Sort order of the data. (provider: polygon)", + "default": "desc" }, - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)" + "description": "Sort order of the data. (provider: polygon)" }, { "name": "limit", @@ -527,35 +529,11 @@ }, "model": "CurrencyHistorical", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "EURUSD", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Filter historical data with specific start and end date.", - "parameters": { - "symbol": "EURUSD", - "start_date": "2023-01-01", - "end_date": "2023-12-31", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Get data with different granularity.", - "parameters": { - "symbol": "EURUSD", - "provider": "polygon", - "interval": "15m" - }, - "provider": "polygon" - } + "obb.currency.price.historical(symbol=\"EURUSD\")", + "# Filter historical data with specific start and end date.", + "obb.currency.price.historical(symbol='EURUSD', start_date='2023-01-01', end_date='20213-12-31')", + "# Get data with different granularity.", + "obb.currency.price.historical(symbol='EURUSD', interval='15m', provider='polygon')" ] } }, @@ -784,41 +762,13 @@ }, "model": "CurrencyPairs", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Search for 'EURUSD' currency pair using 'intrinio' as provider.", - "parameters": { - "provider": "intrinio", - "symbol": "EURUSD" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Search for actively traded currency pairs on the queried date using 'polygon' as provider.", - "parameters": { - "provider": "polygon", - "date": "2024-01-02", - "active": 1.0 - }, - "provider": "polygon" - }, - { - "scope": "api", - "description": "Search for terms using 'polygon' as provider.", - "parameters": { - "provider": "polygon", - "search": "Euro zone" - }, - "provider": "polygon" - } + "obb.currency.search()", + "# Search for 'EURUSD' currency pair using 'polygon' as provider.", + "obb.currency.search(provider='polygon', symbol='EURUSD')", + "# Search for terms using 'polygon' as provider.", + "obb.currency.search(provider='polygon', search='Euro zone')", + "# Search for actively traded currency pairs on the queried date using 'polygon' as provider.", + "obb.currency.search(provider='polygon', date='2024-01-02', active=True)" ] } }, @@ -841,11 +791,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "ecb" - ], "const": "ecb", - "type": "string", "default": "ecb", "title": "Provider" } @@ -898,165 +844,7 @@ }, "model": "CurrencyReferenceRates", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "ecb" - }, - "provider": "ecb" - } - ] - } - }, - "/api/v1/currency/snapshots": { - "get": { - "tags": [ - "currency" - ], - "summary": "Snapshots", - "description": "Snapshots of currency exchange rates from an indirect or direct perspective of a base currency.", - "operationId": "currency_snapshots", - "security": [ - { - "OAuth2PasswordBearer": [] - } - ], - "parameters": [ - { - "name": "provider", - "in": "query", - "required": false, - "schema": { - "enum": [ - "fmp" - ], - "const": "fmp", - "type": "string", - "default": "fmp", - "title": "Provider" - } - }, - { - "name": "base", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "The base currency symbol. Multiple comma separated items allowed for provider(s): fmp.", - "multiple_items_allowed": [ - "fmp" - ], - "default": "usd", - "title": "Base" - }, - "description": "The base currency symbol. Multiple comma separated items allowed for provider(s): fmp." - }, - { - "name": "quote_type", - "in": "query", - "required": false, - "schema": { - "enum": [ - "direct", - "indirect" - ], - "type": "string", - "description": "Whether the quote is direct or indirect. Selecting 'direct' will return the exchange rate as the amount of domestic currency required to buy one unit of the foreign currency. Selecting 'indirect' (default) will return the exchange rate as the amount of foreign currency required to buy one unit of the domestic currency.", - "default": "indirect", - "title": "Quote Type" - }, - "description": "Whether the quote is direct or indirect. Selecting 'direct' will return the exchange rate as the amount of domestic currency required to buy one unit of the foreign currency. Selecting 'indirect' (default) will return the exchange rate as the amount of foreign currency required to buy one unit of the domestic currency." - }, - { - "name": "counter_currencies", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "An optional list of counter currency symbols to filter for. None returns all.", - "title": "Counter Currencies" - }, - "description": "An optional list of counter currency symbols to filter for. None returns all." - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OBBject_CurrencySnapshots" - } - } - } - }, - "404": { - "description": "Not found" - }, - "400": { - "description": "No Results Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenBBErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenBBErrorResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "model": "CurrencySnapshots", - "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Get exchange rates from USD and XAU to EUR, JPY, and GBP using 'fmp' as provider.", - "parameters": { - "provider": "fmp", - "base": "USD,XAU", - "counter_currencies": "EUR,JPY,GBP", - "quote_type": "indirect" - }, - "provider": "fmp" - } + "obb.currency.reference_rates()" ] } }, @@ -1079,11 +867,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "intrinio" - ], "const": "intrinio", - "type": "string", "default": "intrinio", "title": "Provider" } @@ -1166,24 +950,9 @@ }, "model": "OptionsChains", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Use the \"date\" parameter to get the end-of-day-data for a specific date, where supported.", - "parameters": { - "symbol": "AAPL", - "date": "2023-01-25", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "chains = obb.derivatives.options.chains(symbol=\"AAPL\", provider=\"intrinio\").to_df()", + "#### Use the \"date\" parameter to get the end-of-day-data for a specific date, where supported. ####", + "eod_chains = obb.derivatives.options.chains(symbol=\"AAPL\", date=\"2023-01-25\", provider=\"intrinio\").to_df()" ] } }, @@ -1206,11 +975,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "intrinio" - ], "const": "intrinio", - "type": "string", "default": "intrinio", "title": "Provider" } @@ -1233,144 +998,6 @@ }, "description": "Symbol to get data for. (the underlying symbol)" }, - { - "name": "start_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "Start date of the data, in YYYY-MM-DD format. If no symbol is supplied, requests are only allowed for a single date. Use the start_date for the target date. Intrinio appears to have data beginning Feb/2022, but is unclear when it actually began. (provider: intrinio)" - }, - "description": "Start date of the data, in YYYY-MM-DD format. If no symbol is supplied, requests are only allowed for a single date. Use the start_date for the target date. Intrinio appears to have data beginning Feb/2022, but is unclear when it actually began. (provider: intrinio)" - }, - { - "name": "end_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "End date of the data, in YYYY-MM-DD format. If a symbol is not supplied, do not include an end date. (provider: intrinio)" - }, - "description": "End date of the data, in YYYY-MM-DD format. If a symbol is not supplied, do not include an end date. (provider: intrinio)" - }, - { - "name": "trade_type", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "enum": [ - "block", - "sweep", - "large" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "The type of unusual activity to query for. (provider: intrinio)" - }, - "description": "The type of unusual activity to query for. (provider: intrinio)" - }, - { - "name": "sentiment", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "enum": [ - "bullish", - "bearish", - "neutral" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "The sentiment type to query for. (provider: intrinio)" - }, - "description": "The sentiment type to query for. (provider: intrinio)" - }, - { - "name": "min_value", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "The inclusive minimum total value for the unusual activity. (provider: intrinio)" - }, - "description": "The inclusive minimum total value for the unusual activity. (provider: intrinio)" - }, - { - "name": "max_value", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "The inclusive maximum total value for the unusual activity. (provider: intrinio)" - }, - "description": "The inclusive maximum total value for the unusual activity. (provider: intrinio)" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "title": "intrinio", - "description": "The number of data entries to return. A typical day for all symbols will yield 50-80K records. The API will paginate at 1000 records. The high default limit (100K) is to be able to reliably capture the most days. The high absolute limit (1.25M) is to allow for outlier days. Queries at the absolute limit will take a long time, and might be unreliable. Apply filters to improve performance. (provider: intrinio)", - "default": 100000 - }, - "description": "The number of data entries to return. A typical day for all symbols will yield 50-80K records. The API will paginate at 1000 records. The high default limit (100K) is to be able to reliably capture the most days. The high absolute limit (1.25M) is to allow for outlier days. Queries at the absolute limit will take a long time, and might be unreliable. Apply filters to improve performance. (provider: intrinio)" - }, { "name": "source", "in": "query", @@ -1435,22 +1062,9 @@ }, "model": "OptionsUnusual", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Use the 'symbol' parameter to get the most recent activity for a specific symbol.", - "parameters": { - "symbol": "TSLA", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "options = obb.derivatives.options.unusual().to_df()", + "#### Use the \"symbol\" parameter to get the most recent activity for a specific symbol. ####", + "options = obb.derivatives.options.unusual(symbol=\"TSLA\").to_df()" ] } }, @@ -1473,11 +1087,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "oecd" - ], "const": "oecd", - "type": "string", "default": "oecd", "title": "Provider" } @@ -1668,22 +1278,7 @@ }, "model": "GdpForecast", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "parameters": { - "period": "annual", - "type": "real", - "provider": "oecd" - }, - "provider": "oecd" - } + "obb.economy.gdp.forecast(period=\"annual\", type=\"real\")" ] } }, @@ -1706,11 +1301,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "oecd" - ], "const": "oecd", - "type": "string", "default": "oecd", "title": "Provider" } @@ -1818,8 +1409,7 @@ "switzerland", "turkey", "united_kingdom", - "united_states", - "all" + "united_states" ], "type": "string", "title": "oecd", @@ -1876,21 +1466,7 @@ }, "model": "GdpNominal", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "parameters": { - "units": "usd", - "provider": "oecd" - }, - "provider": "oecd" - } + "obb.economy.gdp.nominal(units=\"usd\")" ] } }, @@ -1913,11 +1489,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "oecd" - ], "const": "oecd", - "type": "string", "default": "oecd", "title": "Provider" } @@ -2037,8 +1609,7 @@ "switzerland", "turkey", "united_kingdom", - "united_states", - "all" + "united_states" ], "type": "string", "title": "oecd", @@ -2095,21 +1666,7 @@ }, "model": "GdpReal", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "parameters": { - "units": "yoy", - "provider": "oecd" - }, - "provider": "oecd" - } + "obb.economy.gdp.real(units=\"yoy\")" ] } }, @@ -2192,12 +1749,12 @@ } ], "title": "tradingeconomics", - "description": "Country of the event. Multiple comma separated items allowed. (provider: tradingeconomics)", + "description": "Country of the event. Multiple items allowed. (provider: tradingeconomics)", "multiple_items_allowed": [ "tradingeconomics" ] }, - "description": "Country of the event. Multiple comma separated items allowed. (provider: tradingeconomics)" + "description": "Country of the event. Multiple items allowed. (provider: tradingeconomics)" }, { "name": "importance", @@ -2303,23 +1860,9 @@ }, "model": "EconomicCalendar", "examples": [ - { - "scope": "api", - "description": "By default, the calendar will be forward-looking.", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "provider": "fmp", - "start_date": "2020-03-01", - "end_date": "2020-03-31" - }, - "provider": "fmp" - } + "obb.economy.calendar(provider=\"fmp\", start_date=\"2020-03-01\", end_date=\"2020-03-31\")", + "#### By default, the calendar will be forward-looking. ####", + "obb.economy.calendar(provider=\"nasdaq\")" ] } }, @@ -2342,11 +1885,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -2357,64 +1896,13 @@ "required": true, "schema": { "type": "string", - "description": "The country to get data. Multiple comma separated items allowed for provider(s): fred.", - "choices": [ - "australia", - "austria", - "belgium", - "brazil", - "bulgaria", - "canada", - "chile", - "china", - "croatia", - "cyprus", - "czech_republic", - "denmark", - "estonia", - "euro_area", - "finland", - "france", - "germany", - "greece", - "hungary", - "iceland", - "india", - "indonesia", - "ireland", - "israel", - "italy", - "japan", - "korea", - "latvia", - "lithuania", - "luxembourg", - "malta", - "mexico", - "netherlands", - "new_zealand", - "norway", - "poland", - "portugal", - "romania", - "russian_federation", - "slovak_republic", - "slovakia", - "slovenia", - "south_africa", - "spain", - "sweden", - "switzerland", - "turkey", - "united_kingdom", - "united_states" - ], + "description": "The country to get data. Multiple items allowed for provider(s): fred.", "multiple_items_allowed": [ "fred" ], "title": "Country" }, - "description": "The country to get data. Multiple comma separated items allowed for provider(s): fred." + "description": "The country to get data. Multiple items allowed for provider(s): fred." }, { "name": "units", @@ -2548,24 +2036,9 @@ }, "model": "ConsumerPriceIndex", "examples": [ - { - "scope": "api", - "parameters": { - "country": "japan,china,turkey", - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "description": "Use the `units` parameter to define the reference period for the change in values.", - "parameters": { - "country": "united_states,united_kingdom", - "units": "growth_previous", - "provider": "fred" - }, - "provider": "fred" - } + "obb.economy.cpi(countries=[\"japan\", \"china\", \"turkey\"]).to_df()", + "#### Use the `units` parameter to define the reference period for the change in values. ####", + "obb.economy.cpi(countries=[\"united_states\", \"united_kingdom\"], units=\"growth_previous\").to_df()" ] } }, @@ -2588,11 +2061,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -2645,13 +2114,7 @@ }, "model": "RiskPremium", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.economy.risk_premium().to_df()" ] } }, @@ -2674,11 +2137,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "ecb" - ], "const": "ecb", - "type": "string", "default": "ecb", "title": "Provider" } @@ -2793,30 +2252,9 @@ }, "model": "BalanceOfPayments", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "ecb" - }, - "provider": "ecb" - }, - { - "scope": "api", - "parameters": { - "report_type": "summary", - "provider": "ecb" - }, - "provider": "ecb" - }, - { - "scope": "api", - "description": "The `country` parameter will override the `report_type`.", - "parameters": { - "country": "united_states", - "provider": "ecb" - }, - "provider": "ecb" - } + "obb.economy.balance_of_payments(report_type=\"summary\").to_df().set_index(\"period\").T", + "#### The `country` parameter will override the `report_type`. ####", + "obb.economy.balance_of_payments(country=\"united_states\", provider=\"ecb\").to_df().set_index(\"period\").T" ] } }, @@ -2839,11 +2277,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -3080,13 +2514,7 @@ }, "model": "FredSearch", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - } + "obb.economy.fred_search()" ] } }, @@ -3123,13 +2551,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fred.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fred.", "multiple_items_allowed": [ "fred" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fred." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fred." }, { "name": "start_date", @@ -3339,33 +2767,11 @@ }, "model": "FredSeries", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "NFCI", - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "description": "Multiple series can be passed in as a list.", - "parameters": { - "symbol": "NFCI,STLFSI4", - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "description": "Use the `transform` parameter to transform the data as change, log, or percent change.", - "parameters": { - "symbol": "CBBTCUSD", - "transform": "pc1", - "provider": "fred" - }, - "provider": "fred" - } + "obb.economy.fred_series(\"NFCI\").to_df()", + "#### Multiple series can be passed in as a list. ####", + "obb.economy.fred_series([\"NFCI\",\"STLFSI4\"]).to_df()", + "#### Use the `transform` parameter to transform the data as change, log, or percent change. ####", + "obb.economy.fred_series(\"CBBTCUSD\", transform=\"pc1\").to_df()" ] } }, @@ -3388,11 +2794,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "federal_reserve" - ], "const": "federal_reserve", - "type": "string", "default": "federal_reserve", "title": "Provider" } @@ -3502,21 +2904,7 @@ }, "model": "MoneyMeasures", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "federal_reserve" - }, - "provider": "federal_reserve" - }, - { - "scope": "api", - "parameters": { - "adjusted": 0.0, - "provider": "federal_reserve" - }, - "provider": "federal_reserve" - } + "obb.economy.money_measures(adjusted=False).to_df()" ] } }, @@ -3539,11 +2927,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "oecd" - ], "const": "oecd", - "type": "string", "default": "oecd", "title": "Provider" } @@ -3760,33 +3144,11 @@ }, "model": "Unemployment", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "parameters": { - "country": "all", - "frequency": "quarterly", - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "description": "Demographics for the statistics are selected with the `age` parameter.", - "parameters": { - "country": "all", - "frequency": "quarterly", - "age": "25-54", - "provider": "oecd" - }, - "provider": "oecd" - } + "obb.economy.unemployment(country=\"all\", frequency=\"quarterly\")", + "#### Demographics for the statistics are selected with the `age` and `sex` parameters. ####", + "obb.economy.unemployment(", + "country=\"all\", frequency=\"quarterly\", age=\"25-54\"", + ").to_df().pivot(columns=\"country\", values=\"value\")" ] } }, @@ -3809,11 +3171,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "oecd" - ], "const": "oecd", - "type": "string", "default": "oecd", "title": "Provider" } @@ -3938,21 +3296,7 @@ }, "model": "CLI", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "parameters": { - "country": "all", - "provider": "oecd" - }, - "provider": "oecd" - } + "obb.economy.composite_leading_indicator(country=\"all\").to_df()" ] } }, @@ -3975,11 +3319,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "oecd" - ], "const": "oecd", - "type": "string", "default": "oecd", "title": "Provider" } @@ -4147,22 +3487,7 @@ }, "model": "STIR", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "parameters": { - "country": "all", - "frequency": "quarterly", - "provider": "oecd" - }, - "provider": "oecd" - } + "obb.economy.short_term_interest_rate(country=\"all\", frequency=\"quarterly\").to_df()" ] } }, @@ -4185,11 +3510,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "oecd" - ], "const": "oecd", - "type": "string", "default": "oecd", "title": "Provider" } @@ -4357,22 +3678,7 @@ }, "model": "LTIR", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "oecd" - }, - "provider": "oecd" - }, - { - "scope": "api", - "parameters": { - "country": "all", - "frequency": "quarterly", - "provider": "oecd" - }, - "provider": "oecd" - } + "obb.economy.long_term_interest_rate(country=\"all\", frequency=\"quarterly\").to_df()" ] } }, @@ -4395,11 +3701,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -4410,10 +3712,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fred.", + "multiple_items_allowed": [ + "fred" + ], "title": "Symbol" }, - "description": "Symbol to get data for." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fred." }, { "name": "start_date", @@ -4678,26 +3983,10 @@ }, "model": "FredRegional", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "NYICLAIMS", - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "description": "With a date, time series data is returned.", - "parameters": { - "symbol": "NYICLAIMS", - "start_date": "2021-01-01", - "end_date": "2021-12-31", - "limit": 10, - "provider": "fred" - }, - "provider": "fred" - } + "#### With no date, the most recent report is returned. ####", + "obb.economy.fred_regional(\"NYICLAIMS\")", + "#### With a date, time series data is returned. ####", + "obb.economy.fred_regional(\"NYICLAIMS\", start_date=\"2021-01-01\")" ] } }, @@ -4720,11 +4009,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "intrinio" - ], "const": "intrinio", - "type": "string", "default": "intrinio", "title": "Provider" } @@ -4911,21 +4196,11 @@ }, "model": "CalendarIpo", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Get all IPOs available.", - "parameters": { - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.calendar.ipo(limit=100)", + "# Get all IPOs available.", + "obb.equity.calendar.ipo()", + "# Get IPOs for specific dates.", + "obb.equity.calendar.ipo(start_date='2024-02-01', end_date='2024-02-07')" ] } }, @@ -4948,11 +4223,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -5043,13 +4314,9 @@ }, "model": "CalendarDividend", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.calendar.dividend()", + "# Get dividend calendar for specific dates.", + "obb.equity.calendar.dividend(start_date='2024-02-01', end_date='2024-02-07')" ] } }, @@ -5072,11 +4339,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -5167,23 +4430,9 @@ }, "model": "CalendarSplits", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Get stock splits calendar for specific dates.", - "parameters": { - "start_date": "2024-02-01", - "end_date": "2024-02-07", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.calendar.splits()", + "# Get stock splits calendar for specific dates.", + "obb.equity.calendar.splits(start_date='2024-02-01', end_date='2024-02-07')" ] } }, @@ -5206,11 +4455,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -5301,23 +4546,9 @@ }, "model": "CalendarEarnings", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Get earnings calendar for specific dates.", - "parameters": { - "start_date": "2024-02-01", - "end_date": "2024-02-07", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.calendar.earnings()", + "# Get earnings calendar for specific dates.", + "obb.equity.calendar.earnings(start_date='2024-02-01', end_date='2024-02-07')" ] } }, @@ -5340,11 +4571,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -5408,14 +4635,7 @@ }, "model": "EquityPeers", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.compare.peers(symbol=\"AAPL\")" ] } }, @@ -5459,14 +4679,13 @@ "type": "null" } ], - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): benzinga.", "multiple_items_allowed": [ - "benzinga", - "fmp" + "benzinga" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp." + "description": "Symbol to get data for. Multiple items allowed for provider(s): benzinga." }, { "name": "limit", @@ -5633,26 +4852,26 @@ "required": false, "schema": { "anyOf": [ + { + "type": "string" + }, { "type": "array", "items": { "type": "string" } }, - { - "type": "string" - }, { "type": "null" } ], "title": "benzinga", - "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts. Multiple comma separated items allowed. (provider: benzinga)", + "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts. Multiple items allowed. (provider: benzinga)", "multiple_items_allowed": [ "benzinga" ] }, - "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts. Multiple comma separated items allowed. (provider: benzinga)" + "description": "Comma-separated list of analyst (person) IDs. Omitting will bring back all available analysts. Multiple items allowed. (provider: benzinga)" }, { "name": "firm_ids", @@ -5660,26 +4879,26 @@ "required": false, "schema": { "anyOf": [ + { + "type": "string" + }, { "type": "array", "items": { "type": "string" } }, - { - "type": "string" - }, { "type": "null" } ], "title": "benzinga", - "description": "Comma-separated list of firm IDs. Multiple comma separated items allowed. (provider: benzinga)", + "description": "Comma-separated list of firm IDs. Multiple items allowed. (provider: benzinga)", "multiple_items_allowed": [ "benzinga" ] }, - "description": "Comma-separated list of firm IDs. Multiple comma separated items allowed. (provider: benzinga)" + "description": "Comma-separated list of firm IDs. Multiple items allowed. (provider: benzinga)" }, { "name": "fields", @@ -5687,26 +4906,26 @@ "required": false, "schema": { "anyOf": [ + { + "type": "string" + }, { "type": "array", "items": { "type": "string" } }, - { - "type": "string" - }, { "type": "null" } ], "title": "benzinga", - "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple comma separated items allowed. (provider: benzinga)", + "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple items allowed. (provider: benzinga)", "multiple_items_allowed": [ "benzinga" ] }, - "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple comma separated items allowed. (provider: benzinga)" + "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple items allowed. (provider: benzinga)" }, { "name": "with_grade", @@ -5768,26 +4987,7 @@ }, "model": "PriceTarget", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "benzinga" - }, - "provider": "benzinga" - }, - { - "scope": "api", - "description": "Get price targets for Microsoft using 'benzinga' as provider.", - "parameters": { - "start_date": "2020-01-01", - "end_date": "2024-02-16", - "limit": 10, - "symbol": "msft", - "provider": "benzinga", - "action": "downgrades" - }, - "provider": "benzinga" - } + "obb.equity.estimates.price_target(start_date=\"2020-01-01\", end_date=\"2024-02-16\",limit=10, symbol=\"msft\", provider=\"benzinga\",action=\"downgrades\").to_df()" ] } }, @@ -5810,11 +5010,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -5825,13 +5021,10 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", - "multiple_items_allowed": [ - "fmp" - ], + "description": "Symbol to get data for.", "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for." }, { "name": "period", @@ -5843,29 +5036,23 @@ "annual" ], "type": "string", - "title": "fmp", - "description": "Time period of the data to return. (provider: fmp)", - "default": "annual" + "description": "Time period of the data to return.", + "default": "annual", + "title": "Period" }, - "description": "Time period of the data to return. (provider: fmp)" + "description": "Time period of the data to return." }, { "name": "limit", "in": "query", "required": false, "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "fmp", - "description": "The number of data entries to return. (provider: fmp)" + "type": "integer", + "description": "The number of data entries to return.", + "default": 30, + "title": "Limit" }, - "description": "The number of data entries to return. (provider: fmp)" + "description": "The number of data entries to return." } ], "responses": { @@ -5915,14 +5102,7 @@ }, "model": "AnalystEstimates", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.estimates.historical(\"AAPL\", period=\"quarter\", provider=\"fmp\").to_df()" ] } }, @@ -5945,11 +5125,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -5960,13 +5136,10 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", - "multiple_items_allowed": [ - "fmp" - ], + "description": "Symbol to get data for.", "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for." } ], "responses": { @@ -6016,14 +5189,7 @@ }, "model": "PriceTargetConsensus", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.estimates.consensus(\"AAPL,MSFT\", provider=\"yfinance\").to_df()" ] } }, @@ -6046,11 +5212,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "benzinga" - ], "const": "benzinga", - "type": "string", "default": "benzinga", "title": "Provider" } @@ -6068,13 +5230,10 @@ "type": "null" } ], - "description": "Analyst names to return. Omitting will return all available analysts. Multiple comma separated items allowed for provider(s): benzinga.", - "multiple_items_allowed": [ - "benzinga" - ], + "description": "A comma separated list of analyst names to bring back. Omitting will bring back all available analysts.", "title": "Analyst Name" }, - "description": "Analyst names to return. Omitting will return all available analysts. Multiple comma separated items allowed for provider(s): benzinga." + "description": "A comma separated list of analyst names to bring back. Omitting will bring back all available analysts." }, { "name": "firm_name", @@ -6089,13 +5248,10 @@ "type": "null" } ], - "description": "Firm names to return. Omitting will return all available firms. Multiple comma separated items allowed for provider(s): benzinga.", - "multiple_items_allowed": [ - "benzinga" - ], + "description": "A comma separated list of firm names to bring back. Omitting will bring back all available firms.", "title": "Firm Name" }, - "description": "Firm names to return. Omitting will return all available firms. Multiple comma separated items allowed for provider(s): benzinga." + "description": "A comma separated list of firm names to bring back. Omitting will bring back all available firms." }, { "name": "analyst_ids", @@ -6106,17 +5262,20 @@ { "type": "string" }, + { + "type": "array", + "items": { + "type": "string" + } + }, { "type": "null" } ], "title": "benzinga", - "description": "List of analyst IDs to return. Multiple comma separated items allowed. (provider: benzinga)", - "multiple_items_allowed": [ - "benzinga" - ] + "description": "A comma separated list of analyst IDs to bring back. (provider: benzinga)" }, - "description": "List of analyst IDs to return. Multiple comma separated items allowed. (provider: benzinga)" + "description": "A comma separated list of analyst IDs to bring back. (provider: benzinga)" }, { "name": "firm_ids", @@ -6127,17 +5286,20 @@ { "type": "string" }, + { + "type": "array", + "items": { + "type": "string" + } + }, { "type": "null" } ], "title": "benzinga", - "description": "Firm IDs to return. Multiple comma separated items allowed. (provider: benzinga)", - "multiple_items_allowed": [ - "benzinga" - ] + "description": "A comma separated list of firm IDs to bring back. (provider: benzinga)" }, - "description": "Firm IDs to return. Multiple comma separated items allowed. (provider: benzinga)" + "description": "A comma separated list of firm IDs to bring back. (provider: benzinga)" }, { "name": "limit", @@ -6186,17 +5348,20 @@ { "type": "string" }, + { + "type": "array", + "items": { + "type": "string" + } + }, { "type": "null" } ], "title": "benzinga", - "description": "Fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple comma separated items allowed. (provider: benzinga)", - "multiple_items_allowed": [ - "benzinga" - ] + "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. (provider: benzinga)" }, - "description": "Fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. Multiple comma separated items allowed. (provider: benzinga)" + "description": "Comma-separated list of fields to include in the response. See https://docs.benzinga.io/benzinga-apis/calendar/get-ratings to learn about the available fields. (provider: benzinga)" } ], "responses": { @@ -6246,21 +5411,7 @@ }, "model": "AnalystSearch", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "benzinga" - }, - "provider": "benzinga" - }, - { - "scope": "api", - "parameters": { - "firm_name": "Wedbush", - "provider": "benzinga" - }, - "provider": "benzinga" - } + "obb.equity.estimates.analyst_search(firm_name=\"Wedbush\", provider=\"benzinga\").to_df()" ] } }, @@ -6283,11 +5434,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -6426,24 +5573,9 @@ }, "model": "DiscoveryFilings", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Get filings for the year 2023, limited to 100 results", - "parameters": { - "start_date": "2023-01-01", - "end_date": "2023-12-31", - "limit": 100, - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.discovery.filings(limit=100)", + "# Get filings for the year 2023, limited to 100 results", + "obb.equity.discovery.filings(start_date='2023-01-01', end_date='2023-12-31')" ] } }, @@ -6466,11 +5598,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -6481,13 +5609,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp." } ], "responses": { @@ -6537,14 +5665,7 @@ }, "model": "EquityValuationMultiples", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.multiples(symbol=\"AAPL\")" ] } }, @@ -6931,24 +6052,7 @@ }, "model": "BalanceSheet", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "limit": 5, - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.balance(symbol=\"AAPL\", period=\"annual\", limit=5)" ] } }, @@ -6971,11 +6075,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -7051,23 +6151,7 @@ }, "model": "BalanceSheetGrowth", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "limit": 10, - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.balance_growth(symbol=\"AAPL\", limit=10)" ] } }, @@ -7440,24 +6524,7 @@ }, "model": "CashFlowStatement", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "limit": 5, - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.cash(symbol=\"AAPL\", period=\"annual\", limit=5)" ] } }, @@ -7480,11 +6547,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "intrinio" - ], "const": "intrinio", - "type": "string", "default": "intrinio", "title": "Provider" } @@ -7609,46 +6672,11 @@ }, "model": "ReportedFinancials", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Get AAPL balance sheet with a limit of 10 items.", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "statement_type": "balance", - "limit": 10, - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Get reported income statement", - "parameters": { - "symbol": "AAPL", - "statement_type": "income", - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Get reported cash flow statement", - "parameters": { - "symbol": "AAPL", - "statement_type": "cash", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.reported_financials(symbol=\"AAPL\", period=\"annual\", statement_type=\"balance\", limit=100)", + "# Get reported income statement", + "obb.equity.fundamental.reported_financials(symbol='AAPL', statement_type='income)", + "# Get reported cash flow statement", + "obb.equity.fundamental.reported_financials(symbol='AAPL', statement_type='cash')" ] } }, @@ -7671,11 +6699,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -7751,23 +6775,7 @@ }, "model": "CashFlowStatementGrowth", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "limit": 10, - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.cash_growth(symbol=\"AAPL\", limit=10)" ] } }, @@ -7914,14 +6922,7 @@ }, "model": "HistoricalDividends", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.dividends(symbol=\"AAPL\")" ] } }, @@ -7944,11 +6945,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -8030,14 +7027,7 @@ }, "model": "HistoricalEps", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.historical_eps(symbol=\"AAPL\")" ] } }, @@ -8060,11 +7050,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -8128,14 +7114,7 @@ }, "model": "HistoricalEmployees", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.employee_count(symbol=\"AAPL\")" ] } }, @@ -8158,11 +7137,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "intrinio" - ], "const": "intrinio", - "type": "string", "default": "intrinio", "title": "Provider" } @@ -8245,14 +7220,7 @@ }, "model": "SearchAttributes", "examples": [ - { - "scope": "api", - "parameters": { - "query": "ebitda", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.search_attributes(query='ebitda')" ] } }, @@ -8275,11 +7243,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "intrinio" - ], "const": "intrinio", - "type": "string", "default": "intrinio", "title": "Provider" } @@ -8290,13 +7254,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", "multiple_items_allowed": [ "intrinio" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio." + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio." }, { "name": "tag", @@ -8304,13 +7268,13 @@ "required": true, "schema": { "type": "string", - "description": "Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", "multiple_items_allowed": [ "intrinio" ], "title": "Tag" }, - "description": "Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio." + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio." } ], "responses": { @@ -8360,15 +7324,7 @@ }, "model": "LatestAttributes", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "tag": "ceo", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.latest_attributes(tag='ceo')" ] } }, @@ -8391,11 +7347,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "intrinio" - ], "const": "intrinio", - "type": "string", "default": "intrinio", "title": "Provider" } @@ -8406,13 +7358,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio.", "multiple_items_allowed": [ "intrinio" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): intrinio." + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio." }, { "name": "tag", @@ -8420,13 +7372,13 @@ "required": true, "schema": { "type": "string", - "description": "Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio.", + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio.", "multiple_items_allowed": [ "intrinio" ], "title": "Tag" }, - "description": "Intrinio data tag ID or code. Multiple comma separated items allowed for provider(s): intrinio." + "description": "Intrinio data tag ID or code. Multiple items allowed for provider(s): intrinio." }, { "name": "start_date", @@ -8600,15 +7552,7 @@ }, "model": "HistoricalAttributes", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "tag": "ebitda", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.historical_attributes(tag='ebitda')" ] } }, @@ -9001,24 +7945,7 @@ }, "model": "IncomeStatement", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "limit": 5, - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.income(symbol=\"AAPL\", period=\"annual\", limit=5)" ] } }, @@ -9041,11 +7968,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -9137,24 +8060,7 @@ }, "model": "IncomeStatementGrowth", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "limit": 10, - "period": "annual", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.income_growth(symbol=\"AAPL\", limit=10, period=\"annual\")" ] } }, @@ -9191,32 +8097,24 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ - "fmp", - "intrinio" + "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp." }, { "name": "period", "in": "query", "required": false, "schema": { - "anyOf": [ - { - "enum": [ - "annual", - "quarter" - ], - "type": "string" - }, - { - "type": "null" - } + "enum": [ + "annual", + "quarter" ], + "type": "string", "description": "Time period of the data to return.", "default": "annual", "title": "Period" @@ -9309,24 +8207,7 @@ }, "model": "KeyMetrics", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "limit": 100, - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.metrics(symbol=\"AAPL\", period=\"annual\", limit=100)" ] } }, @@ -9349,11 +8230,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -9417,14 +8294,7 @@ }, "model": "KeyExecutives", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.management(symbol=\"AAPL\")" ] } }, @@ -9447,11 +8317,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -9462,31 +8328,51 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp." }, { - "name": "year", + "name": "start_date", "in": "query", "required": false, "schema": { "anyOf": [ { - "type": "integer" + "type": "string", + "format": "date" }, { "type": "null" } ], - "title": "fmp", - "description": "Year of the compensation. (provider: fmp)" + "description": "Start date of the data, in YYYY-MM-DD format.", + "title": "Start Date" }, - "description": "Year of the compensation. (provider: fmp)" + "description": "Start date of the data, in YYYY-MM-DD format." + }, + { + "name": "end_date", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "description": "End date of the data, in YYYY-MM-DD format.", + "title": "End Date" + }, + "description": "End date of the data, in YYYY-MM-DD format." } ], "responses": { @@ -9536,14 +8422,7 @@ }, "model": "ExecutiveCompensation", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.management_compensation(symbol=\"AAPL\")" ] } }, @@ -9567,11 +8446,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -9635,14 +8510,7 @@ }, "model": "CompanyOverview", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.overview(symbol=\"AAPL\")" ] } }, @@ -9679,13 +8547,14 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio.", "multiple_items_allowed": [ - "fmp" + "fmp", + "intrinio" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio." }, { "name": "period", @@ -9724,11 +8593,11 @@ "type": "null" } ], - "title": "fmp", - "description": "Include trailing twelve months (TTM) data. (provider: fmp)", + "title": "fmp,intrinio", + "description": "Include trailing twelve months (TTM) data. (provider: fmp, intrinio)", "default": false }, - "description": "Include trailing twelve months (TTM) data. (provider: fmp)" + "description": "Include trailing twelve months (TTM) data. (provider: fmp, intrinio)" }, { "name": "fiscal_year", @@ -9796,24 +8665,7 @@ }, "model": "FinancialRatios", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "limit": 12, - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.fundamental.ratios(symbol=\"AAPL\", period=\"annual\", limit=12)" ] } }, @@ -9836,11 +8688,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -9936,24 +8784,7 @@ }, "model": "RevenueGeographic", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "structure": "flat", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.revenue_per_geography(symbol=\"AAPL\", period=\"annual\", structure=\"flat\")" ] } }, @@ -9976,11 +8807,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -10076,24 +8903,7 @@ }, "model": "RevenueBusinessLine", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "period": "annual", - "structure": "flat", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.revenue_per_segment(symbol=\"AAPL\", period=\"annual\", structure=\"flat\")" ] } }, @@ -10537,6 +9347,22 @@ }, "description": "The number of data entries to return." }, + { + "name": "sort", + "in": "query", + "required": false, + "schema": { + "enum": [ + "asc", + "desc" + ], + "type": "string", + "title": "fmp", + "description": "Sort the data in ascending or descending order. (provider: fmp)", + "default": "desc" + }, + "description": "Sort the data in ascending or descending order. (provider: fmp)" + }, { "name": "start_date", "in": "query", @@ -10674,21 +9500,7 @@ }, "model": "CompanyFilings", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "limit": 100, - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.filings(limit=100)" ] } }, @@ -10711,11 +9523,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -10779,14 +9587,7 @@ }, "model": "HistoricalSplits", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.fundamental.historical_splits(symbol=\"AAPL\")" ] } }, @@ -10809,11 +9610,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -10832,13 +9629,39 @@ { "name": "year", "in": "query", - "required": true, + "required": false, "schema": { - "type": "integer", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], "description": "Year of the earnings call transcript.", "title": "Year" }, "description": "Year of the earnings call transcript." + }, + { + "name": "earnings_date", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "fmp", + "description": "Date of the earnings call transcript. (provider: fmp)" + }, + "description": "Date of the earnings call transcript. (provider: fmp)" } ], "responses": { @@ -10888,15 +9711,120 @@ }, "model": "EarningsCallTranscript", "examples": [ + "obb.equity.fundamental.transcript(symbol='AAPL', year=2020)" + ] + } + }, + "/api/v1/equity/fundamental/trailing_dividend_yield": { + "get": { + "tags": [ + "equity" + ], + "summary": "Trailing Dividend Yield", + "description": "Get the 1 year trailing dividend yield for a given company over time.", + "operationId": "equity_fundamental_trailing_dividend_yield", + "security": [ { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "year": 2020, - "provider": "fmp" - }, - "provider": "fmp" + "OAuth2PasswordBearer": [] } + ], + "parameters": [ + { + "name": "provider", + "in": "query", + "required": false, + "schema": { + "const": "tiingo", + "default": "tiingo", + "title": "Provider" + } + }, + { + "name": "symbol", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Symbol to get data for.", + "title": "Symbol" + }, + "description": "Symbol to get data for." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "The number of data entries to return. Default is 252, the number of trading days in a year.", + "default": 252, + "title": "Limit" + }, + "description": "The number of data entries to return. Default is 252, the number of trading days in a year." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OBBject_TrailingDividendYield" + } + } + } + }, + "404": { + "description": "Not found" + }, + "400": { + "description": "No Results Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenBBErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenBBErrorResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "model": "TrailingDividendYield", + "examples": [ + "obb.equity.fundamental.trailing_dividend_yield(limit=252)" ] } }, @@ -10919,11 +9847,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -10976,6 +9900,24 @@ "title": "Page" }, "description": "Page number of the data to fetch." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "fmp", + "description": "Number of records to return. (Ignores page if set. Default: None) (provider: fmp)" + }, + "description": "Number of records to return. (Ignores page if set. Default: None) (provider: fmp)" } ], "responses": { @@ -11025,23 +9967,7 @@ }, "model": "EquityOwnership", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "page": 0, - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.ownership.major_holders(symbol=\"AAPL\", page=0)" ] } }, @@ -11062,14 +9988,13 @@ { "name": "provider", "in": "query", - "required": false, + "required": true, "schema": { "enum": [ - "fmp" + "fmp", + "intrinio" ], - "const": "fmp", "type": "string", - "default": "fmp", "title": "Provider" } }, @@ -11121,6 +10046,25 @@ "description": "A specific date to get data for. (provider: fmp)" }, "description": "A specific date to get data for. (provider: fmp)" + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "intrinio", + "description": "The number of data entries to return. (provider: intrinio)", + "default": 100 + }, + "description": "The number of data entries to return. (provider: intrinio)" } ], "responses": { @@ -11170,14 +10114,7 @@ }, "model": "InstitutionalOwnership", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.ownership.institutional(symbol=\"AAPL\")" ] } }, @@ -11393,23 +10330,7 @@ }, "model": "InsiderTrading", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "limit": 500, - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.ownership.insider_trading(symbol=\"AAPL\", limit=500)" ] } }, @@ -11499,169 +10420,7 @@ }, "model": "ShareStatistics", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } - ] - } - }, - "/api/v1/equity/ownership/form_13f": { - "get": { - "tags": [ - "equity" - ], - "summary": "Form 13F", - "description": "The Securities and Exchange Commission's (SEC) Form 13F is a quarterly report\nthat is required to be filed by all institutional investment managers with at least\n$100 million in assets under management.\nManagers are required to file Form 13F within 45 days after the last day of the calendar quarter.\nMost funds wait until the end of this period in order to conceal\ntheir investment strategy from competitors and the public.", - "operationId": "equity_ownership_form_13f", - "security": [ - { - "OAuth2PasswordBearer": [] - } - ], - "parameters": [ - { - "name": "provider", - "in": "query", - "required": false, - "schema": { - "enum": [ - "sec" - ], - "const": "sec", - "type": "string", - "default": "sec", - "title": "Provider" - } - }, - { - "name": "symbol", - "in": "query", - "required": true, - "schema": { - "type": "string", - "description": "Symbol to get data for. A CIK or Symbol can be used.", - "title": "Symbol" - }, - "description": "Symbol to get data for. A CIK or Symbol can be used." - }, - { - "name": "date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "description": "A specific date to get data for. The date represents the end of the reporting period. All form 13F-HR filings are based on the calendar year and are reported quarterly. If a date is not supplied, the most recent filing is returned. Submissions beginning 2013-06-30 are supported.", - "title": "Date" - }, - "description": "A specific date to get data for. The date represents the end of the reporting period. All form 13F-HR filings are based on the calendar year and are reported quarterly. If a date is not supplied, the most recent filing is returned. Submissions beginning 2013-06-30 are supported." - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The number of data entries to return. The number of previous filings to return. The date parameter takes priority over this parameter.", - "default": 1, - "title": "Limit" - }, - "description": "The number of data entries to return. The number of previous filings to return. The date parameter takes priority over this parameter." - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OBBject_Form13FHR" - } - } - } - }, - "404": { - "description": "Not found" - }, - "400": { - "description": "No Results Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenBBErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenBBErrorResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "model": "Form13FHR", - "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "NVDA", - "provider": "sec" - }, - "provider": "sec" - }, - { - "scope": "api", - "description": "Enter a date (calendar quarter ending) for a specific report.", - "parameters": { - "symbol": "BRK-A", - "date": "2016-09-30", - "provider": "sec" - }, - "provider": "sec" - }, - { - "scope": "python", - "description": "Example finding Michael Burry's filings.", - "code": [ - "cik = obb.regulators.sec.institutions_search(\"Scion Asset Management\").results[0].cik", - "# Use the `limit` parameter to return N number of reports from the most recent.", - "obb.equity.ownership.form_13f(cik, limit=2).to_df()" - ] - } + "obb.equity.ownership.share_statistics(symbol=\"AAPL\")" ] } }, @@ -11698,14 +10457,14 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. This endpoint will accept multiple symbols separated by commas. Multiple items allowed for provider(s): fmp, intrinio.", "multiple_items_allowed": [ "fmp", "intrinio" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio." + "description": "Symbol to get data for. This endpoint will accept multiple symbols separated by commas. Multiple items allowed for provider(s): fmp, intrinio." }, { "name": "source", @@ -11778,14 +10537,7 @@ }, "model": "EquityQuote", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.price.quote(symbol=\"AAPL\")" ] } }, @@ -11808,11 +10560,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "polygon" - ], "const": "polygon", - "type": "string", "default": "polygon", "title": "Provider" } @@ -11877,9 +10625,9 @@ } ], "title": "polygon", - "description": "Query by datetime, less than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, less than. Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" }, - "description": "Query by datetime, less than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, less than. Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" }, { "name": "timestamp_gt", @@ -11899,9 +10647,9 @@ } ], "title": "polygon", - "description": "Query by datetime, greater than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, greater than. Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" }, - "description": "Query by datetime, greater than. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, greater than. Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" }, { "name": "timestamp_lte", @@ -11921,9 +10669,9 @@ } ], "title": "polygon", - "description": "Query by datetime, less than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, less than or equal to.\n Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" }, - "description": "Query by datetime, less than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, less than or equal to.\n Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" }, { "name": "timestamp_gte", @@ -11943,9 +10691,9 @@ } ], "title": "polygon", - "description": "Query by datetime, greater than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, greater than or equal to.\n Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" }, - "description": "Query by datetime, greater than or equal to. Either a date with the format 'YYYY-MM-DD' or a TZ-aware timestamp string, 'YYYY-MM-DDTH:M:S.000000000-04:00'. Include all nanoseconds and the 'T' between the day and hour. (provider: polygon)" + "description": "\n Query by datetime, greater than or equal to.\n Either a date with the format YYYY-MM-DD or a TZ-aware timestamp string,\n YYYY-MM-DDTH:M:S.000000000-04:00\". Include all nanoseconds and the 'T' between the day and hour.\n (provider: polygon)" } ], "responses": { @@ -11995,14 +10743,7 @@ }, "model": "EquityNBBO", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "polygon" - }, - "provider": "polygon" - } + "obb.equity.price.nbbo(symbol=\"AAPL\")" ] } }, @@ -12028,7 +10769,8 @@ "enum": [ "fmp", "intrinio", - "polygon" + "polygon", + "tiingo" ], "type": "string", "title": "Provider" @@ -12040,14 +10782,15 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, polygon, tiingo.", "multiple_items_allowed": [ "fmp", - "polygon" + "polygon", + "tiingo" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, polygon, tiingo." }, { "name": "interval", @@ -12106,6 +10849,44 @@ }, "description": "End date of the data, in YYYY-MM-DD format." }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "fmp,intrinio,polygon", + "description": "Number of days to look back (Only for interval 1d). (provider: fmp);\n The number of results to return per page. (provider: intrinio);\n The number of data entries to return. (provider: polygon)" + }, + "description": "Number of days to look back (Only for interval 1d). (provider: fmp);\n The number of results to return per page. (provider: intrinio);\n The number of data entries to return. (provider: polygon)" + }, + { + "name": "sort", + "in": "query", + "required": false, + "schema": { + "enum": [ + "asc", + "desc" + ], + "type": "string", + "title": "fmp,polygon", + "description": "Sort the data in ascending or descending order. (provider: fmp);\n Sort order of the data. (provider: polygon)", + "default": "desc" + }, + "description": "Sort the data in ascending or descending order. (provider: fmp);\n Sort order of the data. (provider: polygon)" + }, { "name": "start_time", "in": "query", @@ -12149,17 +10930,10 @@ "in": "query", "required": false, "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], + "type": "string", "title": "intrinio", "description": "Timezone of the data, in the IANA format (Continent/City). (provider: intrinio)", - "default": "America/New_York" + "default": "UTC" }, "description": "Timezone of the data, in the IANA format (Continent/City). (provider: intrinio)" }, @@ -12181,60 +10955,35 @@ "description": "The source of the data. (provider: intrinio)" }, { - "name": "adjustment", + "name": "sleep", "in": "query", "required": false, "schema": { - "enum": [ - "splits_only", - "unadjusted" + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } ], - "type": "string", - "title": "polygon", - "description": "The adjustment factor to apply. Default is splits only. (provider: polygon)", - "default": "splits_only" + "title": "intrinio", + "description": "Time to sleep between requests to avoid rate limiting. (provider: intrinio)", + "default": 1.0 }, - "description": "The adjustment factor to apply. Default is splits only. (provider: polygon)" + "description": "Time to sleep between requests to avoid rate limiting. (provider: intrinio)" }, { - "name": "extended_hours", + "name": "adjusted", "in": "query", "required": false, "schema": { "type": "boolean", "title": "polygon", - "description": "Include Pre and Post market data. (provider: polygon)", - "default": false + "description": "Output time series is adjusted by historical split and dividend events. (provider: polygon)", + "default": true }, - "description": "Include Pre and Post market data. (provider: polygon)" - }, - { - "name": "sort", - "in": "query", - "required": false, - "schema": { - "enum": [ - "asc", - "desc" - ], - "type": "string", - "title": "polygon", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "default": "asc" - }, - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "title": "polygon", - "description": "The number of data entries to return. (provider: polygon)", - "default": 49999 - }, - "description": "The number of data entries to return. (provider: polygon)" + "description": "Output time series is adjusted by historical split and dividend events. (provider: polygon)" } ], "responses": { @@ -12284,23 +11033,7 @@ }, "model": "EquityHistorical", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "interval": "1d", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.price.historical(symbol=\"AAPL\", interval=\"1d\")" ] } }, @@ -12323,11 +11056,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -12338,13 +11067,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp." } ], "responses": { @@ -12394,14 +11123,7 @@ }, "model": "PricePerformance", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.price.performance(symbol=\"AAPL\")" ] } }, @@ -12424,11 +11146,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "sec" - ], "const": "sec", - "type": "string", "default": "sec", "title": "Provider" } @@ -12530,14 +11248,7 @@ }, "model": "EquityFTD", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "sec" - }, - "provider": "sec" - } + "obb.equity.shorts.fails_to_deliver(symbol='AAPL')" ] } }, @@ -12709,13 +11420,7 @@ }, "model": "EquitySearch", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.equity.search(query=\"AAPL\", is_symbol=False, use_cache=True)" ] } }, @@ -12738,11 +11443,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -13045,7 +11746,6 @@ { "enum": [ "amex", - "ams", "ase", "asx", "ath", @@ -13074,7 +11774,6 @@ "kuw", "lse", "mex", - "mutual_fund", "nasdaq", "neo", "nse", @@ -13179,13 +11878,7 @@ }, "model": "EquityScreener", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.screener()" ] } }, @@ -13222,14 +11915,14 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio.", "multiple_items_allowed": [ "fmp", "intrinio" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp, intrinio." } ], "responses": { @@ -13279,14 +11972,7 @@ }, "model": "EquityInfo", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.profile(symbol=\"AAPL\")" ] } }, @@ -13311,7 +11997,6 @@ "schema": { "enum": [ "fmp", - "intrinio", "polygon" ], "type": "string", @@ -13324,95 +12009,71 @@ "required": false, "schema": { "enum": [ - "amex", - "ams", - "ase", - "asx", - "ath", - "bme", - "bru", - "bud", - "bue", - "cai", - "cnq", - "cph", - "dfm", - "doh", - "etf", - "euronext", - "hel", - "hkse", - "ice", - "iob", - "ist", - "jkt", - "jnb", - "jpx", - "kls", - "koe", - "ksc", - "kuw", - "lse", - "mex", - "mutual_fund", - "nasdaq", - "neo", - "nse", - "nyse", - "nze", - "osl", - "otc", - "pnk", - "pra", - "ris", - "sao", - "sau", - "set", - "sgo", - "shh", - "shz", - "six", - "sto", - "tai", - "tlv", - "tsx", - "two", - "vie", - "wse", - "xetra" + "AMEX", + "AMS", + "ASE", + "ASX", + "ATH", + "BME", + "BRU", + "BUD", + "BUE", + "CAI", + "CNQ", + "CPH", + "DFM", + "DOH", + "DUS", + "ETF", + "EURONEXT", + "HEL", + "HKSE", + "ICE", + "IOB", + "IST", + "JKT", + "JNB", + "JPX", + "KLS", + "KOE", + "KSC", + "KUW", + "LSE", + "MEX", + "MIL", + "NASDAQ", + "NEO", + "NSE", + "NYSE", + "NZE", + "OSL", + "OTC", + "PNK", + "PRA", + "RIS", + "SAO", + "SAU", + "SES", + "SET", + "SGO", + "SHH", + "SHZ", + "SIX", + "STO", + "TAI", + "TLV", + "TSX", + "TWO", + "VIE", + "WSE", + "XETRA" ], "type": "string", "title": "fmp", "description": "The market to fetch data for. (provider: fmp)", - "default": "nasdaq" + "default": "NASDAQ" }, "description": "The market to fetch data for. (provider: fmp)" - }, - { - "name": "date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "string", - "format": "date-time" - }, - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "The date of the data. Can be a datetime or an ISO datetime string. Historical data appears to go back to mid-June 2022. Example: '2024-03-08T12:15:00+0400' (provider: intrinio)" - }, - "description": "The date of the data. Can be a datetime or an ISO datetime string. Historical data appears to go back to mid-June 2022. Example: '2024-03-08T12:15:00+0400' (provider: intrinio)" } ], "responses": { @@ -13462,13 +12123,7 @@ }, "model": "MarketSnapshots", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.equity.market_snapshots()" ] } }, @@ -13489,13 +12144,10 @@ { "name": "provider", "in": "query", - "required": true, + "required": false, "schema": { - "enum": [ - "fmp", - "intrinio" - ], - "type": "string", + "const": "fmp", + "default": "fmp", "title": "Provider" } }, @@ -13535,39 +12187,14 @@ ], "type": "string" }, - { - "enum": [ - "xnas", - "arcx", - "bats", - "xnys", - "bvmf", - "xshg", - "xshe", - "xhkg", - "xbom", - "xnse", - "xidx", - "tase", - "xkrx", - "xkls", - "xmex", - "xses", - "roco", - "xtai", - "xbkk", - "xist" - ], - "type": "string" - }, { "type": "null" } ], - "title": "fmp,intrinio", - "description": "The exchange code the ETF trades on. (provider: fmp);\n Target a specific exchange by providing the MIC code. (provider: intrinio)" + "title": "fmp", + "description": "The exchange code the ETF trades on. (provider: fmp)" }, - "description": "The exchange code the ETF trades on. (provider: fmp);\n Target a specific exchange by providing the MIC code. (provider: intrinio)" + "description": "The exchange code the ETF trades on. (provider: fmp)" }, { "name": "is_active", @@ -13639,312 +12266,9 @@ }, "model": "EtfSearch", "examples": [ - { - "scope": "api", - "description": "An empty query returns the full list of ETFs from the provider.", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "The query will return results from text-based fields containing the term.", - "parameters": { - "query": "commercial real estate", - "provider": "fmp" - }, - "provider": "fmp" - } - ] - } - }, - "/api/v1/etf/historical": { - "get": { - "tags": [ - "etf" - ], - "summary": "Historical", - "description": "ETF Historical Market Price.", - "operationId": "etf_historical", - "security": [ - { - "OAuth2PasswordBearer": [] - } - ], - "parameters": [ - { - "name": "provider", - "in": "query", - "required": true, - "schema": { - "enum": [ - "fmp", - "intrinio", - "polygon" - ], - "type": "string", - "title": "Provider" - } - }, - { - "name": "symbol", - "in": "query", - "required": true, - "schema": { - "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon.", - "multiple_items_allowed": [ - "fmp", - "polygon" - ], - "title": "Symbol" - }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, polygon." - }, - { - "name": "interval", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Time interval of the data to return.", - "default": "1d", - "title": "Interval" - }, - "description": "Time interval of the data to return." - }, - { - "name": "start_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "description": "Start date of the data, in YYYY-MM-DD format.", - "title": "Start Date" - }, - "description": "Start date of the data, in YYYY-MM-DD format." - }, - { - "name": "end_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "description": "End date of the data, in YYYY-MM-DD format.", - "title": "End Date" - }, - "description": "End date of the data, in YYYY-MM-DD format." - }, - { - "name": "start_time", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "time" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'. (provider: intrinio)" - }, - "description": "Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'. (provider: intrinio)" - }, - { - "name": "end_time", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "time" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'. (provider: intrinio)" - }, - "description": "Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'. (provider: intrinio)" - }, - { - "name": "timezone", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "intrinio", - "description": "Timezone of the data, in the IANA format (Continent/City). (provider: intrinio)", - "default": "America/New_York" - }, - "description": "Timezone of the data, in the IANA format (Continent/City). (provider: intrinio)" - }, - { - "name": "source", - "in": "query", - "required": false, - "schema": { - "enum": [ - "realtime", - "delayed", - "nasdaq_basic" - ], - "type": "string", - "title": "intrinio", - "description": "The source of the data. (provider: intrinio)", - "default": "realtime" - }, - "description": "The source of the data. (provider: intrinio)" - }, - { - "name": "adjustment", - "in": "query", - "required": false, - "schema": { - "enum": [ - "splits_only", - "unadjusted" - ], - "type": "string", - "title": "polygon", - "description": "The adjustment factor to apply. Default is splits only. (provider: polygon)", - "default": "splits_only" - }, - "description": "The adjustment factor to apply. Default is splits only. (provider: polygon)" - }, - { - "name": "extended_hours", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "title": "polygon", - "description": "Include Pre and Post market data. (provider: polygon)", - "default": false - }, - "description": "Include Pre and Post market data. (provider: polygon)" - }, - { - "name": "sort", - "in": "query", - "required": false, - "schema": { - "enum": [ - "asc", - "desc" - ], - "type": "string", - "title": "polygon", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "default": "asc" - }, - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "title": "polygon", - "description": "The number of data entries to return. (provider: polygon)", - "default": 49999 - }, - "description": "The number of data entries to return. (provider: polygon)" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OBBject_EtfHistorical" - } - } - } - }, - "404": { - "description": "Not found" - }, - "400": { - "description": "No Results Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenBBErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenBBErrorResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "model": "EtfHistorical", - "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "SPY", - "provider": "fmp" - }, - "provider": "fmp" - } + "### An empty query returns the full list of ETFs from the provider. ###", + "obb.etf.search(\"\", provider=\"fmp\")", + "#### The query will return results from text-based fields containing the term. ####obb.etf.search(\"commercial real estate\", provider=\"fmp\")" ] } }, @@ -13965,13 +12289,10 @@ { "name": "provider", "in": "query", - "required": true, + "required": false, "schema": { - "enum": [ - "fmp", - "intrinio" - ], - "type": "string", + "const": "fmp", + "default": "fmp", "title": "Provider" } }, @@ -13981,14 +12302,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ - "fmp", - "intrinio" + "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp, intrinio." + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp." } ], "responses": { @@ -14038,23 +12358,9 @@ }, "model": "EtfInfo", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "SPY", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "This function accepts multiple tickers.", - "parameters": { - "symbol": "SPY,IWM,QQQ,DJIA", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.etf.info(\"SPY\", provider=\"fmp\")", + "#### This function accepts multiple tickers. ####", + "obb.etf.info(\"SPY,IWM,QQQ,DJIA\", provider=\"fmp\")" ] } }, @@ -14077,11 +12383,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -14145,14 +12447,7 @@ }, "model": "EtfSectors", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "SPY", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.etf.sectors(\"SPY\", provider=\"fmp\")" ] } }, @@ -14175,11 +12470,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -14190,13 +12481,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. (ETF) Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for. (ETF) Multiple items allowed for provider(s): fmp." } ], "responses": { @@ -14246,14 +12537,7 @@ }, "model": "EtfCountries", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "VT", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.etf.countries(\"VT\", provider=\"fmp\")" ] } }, @@ -14263,7 +12547,7 @@ "etf" ], "summary": "Price Performance", - "description": "Price performance as a return, over different periods.", + "description": "Price performance as a return, over different periods. This is a proxy for `equity.price.performance`.", "operationId": "etf_price_performance", "security": [ { @@ -14274,13 +12558,10 @@ { "name": "provider", "in": "query", - "required": true, + "required": false, "schema": { - "enum": [ - "fmp", - "intrinio" - ], - "type": "string", + "const": "fmp", + "default": "fmp", "title": "Provider" } }, @@ -14290,46 +12571,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ - "fmp", - "intrinio" + "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio." - }, - { - "name": "return_type", - "in": "query", - "required": false, - "schema": { - "enum": [ - "trailing", - "calendar" - ], - "type": "string", - "title": "intrinio", - "description": "The type of returns to return, a trailing or calendar window. (provider: intrinio)", - "default": "trailing" - }, - "description": "The type of returns to return, a trailing or calendar window. (provider: intrinio)" - }, - { - "name": "adjustment", - "in": "query", - "required": false, - "schema": { - "enum": [ - "splits_only", - "splits_and_dividends" - ], - "type": "string", - "title": "intrinio", - "description": "The adjustment factor, 'splits_only' will return pure price performance. (provider: intrinio)", - "default": "splits_and_dividends" - }, - "description": "The adjustment factor, 'splits_only' will return pure price performance. (provider: intrinio)" + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp." } ], "responses": { @@ -14338,7 +12586,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OBBject_EtfPricePerformance" + "$ref": "#/components/schemas/OBBject_PricePerformance" } } } @@ -14377,24 +12625,9 @@ } } }, - "model": "EtfPricePerformance", + "model": "PricePerformance", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "QQQ", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "symbol": "SPY,QQQ,IWM,DJIA", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.etf.price_performance(\"SPY,QQQ,IWM,DJIA\", provider=\"fmp\")" ] } }, @@ -14419,7 +12652,6 @@ "schema": { "enum": [ "fmp", - "intrinio", "sec" ], "type": "string", @@ -14455,9 +12687,9 @@ } ], "title": "fmp,sec", - "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF. (provider: fmp);\n A specific date to get data for. The date represents the period ending. The date entered will return the closest filing. (provider: sec)" + "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF. (provider: fmp);\n A specific date to get data for. The date represents the period ending. The date entered will return the closest filing. (provider: sec)" }, - "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF. (provider: fmp);\n A specific date to get data for. The date represents the period ending. The date entered will return the closest filing. (provider: sec)" + "description": "A specific date to get data for. Entering a date will attempt to return the NPORT-P filing for the entered date. This needs to be _exactly_ the date of the filing. Use the holdings_date command/endpoint to find available filing dates for the ETF. (provider: fmp);\n A specific date to get data for. The date represents the period ending. The date entered will return the closest filing. (provider: sec)" }, { "name": "cik", @@ -14537,34 +12769,11 @@ }, "model": "EtfHoldings", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "XLK", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Including a date (FMP, SEC) will return the holdings as per NPORT-P filings.", - "parameters": { - "symbol": "XLK", - "date": "2022-03-31", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "The same data can be returned from the SEC directly.", - "parameters": { - "symbol": "XLK", - "date": "2022-03-31", - "provider": "sec" - }, - "provider": "sec" - } + "obb.etf.holdings(\"XLK\", provider=\"fmp\").to_df()", + "#### Including a date (FMP, SEC) will return the holdings as per NPORT-P filings. ####", + "obb.etf.holdings(\"XLK\", date=\"2022-03-31\",provider=\"fmp\").to_df()", + "#### The same data can be returned from the SEC directly. ####", + "obb.etf.holdings(\"XLK\", date=\"2022-03-31\",provider=\"sec\").to_df()" ] } }, @@ -14587,11 +12796,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -14673,14 +12878,7 @@ }, "model": "EtfHoldingsDate", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "XLK", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.etf.holdings_date(\"XLK\", provider=\"fmp\").results" ] } }, @@ -14703,11 +12901,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -14718,13 +12912,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for. Multiple items allowed for provider(s): fmp." } ], "responses": { @@ -14774,14 +12968,7 @@ }, "model": "EtfHoldingsPerformance", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "XLK", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.etf.holdings_performance(\"XLK\", provider=\"fmp\")" ] } }, @@ -14804,11 +12991,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -14819,13 +13002,13 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. (Stock) Multiple comma separated items allowed for provider(s): fmp.", + "description": "Symbol to get data for. (Stock) Multiple items allowed for provider(s): fmp.", "multiple_items_allowed": [ "fmp" ], "title": "Symbol" }, - "description": "Symbol to get data for. (Stock) Multiple comma separated items allowed for provider(s): fmp." + "description": "Symbol to get data for. (Stock) Multiple items allowed for provider(s): fmp." } ], "responses": { @@ -14875,23 +13058,9 @@ }, "model": "EtfEquityExposure", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "MSFT", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "This function accepts multiple tickers.", - "parameters": { - "symbol": "MSFT,AAPL", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.etf.equity_exposure(\"MSFT\", provider=\"fmp\")", + "#### This function accepts multiple tickers. ####", + "obb.etf.equity_exposure(\"MSFT,AAPL\", provider=\"fmp\")" ] } }, @@ -14914,11 +13083,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -15034,21 +13199,7 @@ }, "model": "AMERIBOR", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "parameter": "30_day_ma", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.ameribor(parameter=\"30_day_ma\").to_df()" ] } }, @@ -15071,11 +13222,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -15187,21 +13334,7 @@ }, "model": "SONIA", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "parameter": "total_nominal_value", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.sonia(parameter=\"total_nominal_value\")" ] } }, @@ -15224,11 +13357,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -15319,13 +13448,7 @@ }, "model": "IORB", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.iorb()" ] } }, @@ -15463,21 +13586,7 @@ }, "model": "FEDFUNDS", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "parameter": "daily", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.effr(parameter=\"daily\", provider=\"fred\").to_df()" ] } }, @@ -15500,11 +13609,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -15569,21 +13674,7 @@ }, "model": "PROJECTIONS", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "long_run": 1.0, - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.effr_forecast(long_run=True)" ] } }, @@ -15606,11 +13697,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -15722,21 +13809,7 @@ }, "model": "ESTR", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "parameter": "number_of_active_banks", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.estr(parameter=\"number_of_active_banks\")" ] } }, @@ -15759,11 +13832,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -15871,21 +13940,7 @@ }, "model": "EuropeanCentralBankInterestRates", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "interest_rate_type": "refinancing", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.ecb(interest_rate_type=\"refinancing\")" ] } }, @@ -15908,11 +13963,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -16022,22 +14073,7 @@ }, "model": "DiscountWindowPrimaryCreditRate", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "start_date": "2023-02-01", - "end_date": "2023-05-01", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.rate.dpcredit(start_date=\"2023-02-01\", end_date=\"2023-05-01\").to_df()" ] } }, @@ -16060,11 +14096,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -16178,21 +14210,7 @@ }, "model": "TreasuryConstantMaturity", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "maturity": "2y", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.fixedincome.spreads.tcm(maturity=\"2y\")" ] } }, @@ -16215,11 +14233,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -16336,21 +14350,7 @@ }, "model": "SelectedTreasuryConstantMaturity", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "maturity": "10y", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.fixedincome.spreads.tcm_effr(maturity=\"10y\")" ] } }, @@ -16373,11 +14373,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -16491,21 +14487,7 @@ }, "model": "SelectedTreasuryBill", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "maturity": "6m", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.fixedincome.spreads.treasury_effr(maturity=\"6m\")" ] } }, @@ -16528,11 +14510,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -16623,21 +14601,7 @@ }, "model": "USYieldCurve", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "inflation_adjusted": 1.0, - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.government.us_yield_curve(inflation_adjusted=True)" ] } }, @@ -16660,11 +14624,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "ecb" - ], "const": "ecb", - "type": "string", "default": "ecb", "title": "Provider" } @@ -16769,21 +14729,7 @@ }, "model": "EUYieldCurve", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "ecb" - }, - "provider": "ecb" - }, - { - "scope": "api", - "parameters": { - "yield_curve_type": "spot_rate", - "provider": "ecb" - }, - "provider": "ecb" - } + "obb.fixedincome.government.eu_yield_curve(yield_curve_type=\"spot_rate\")" ] } }, @@ -16900,13 +14846,7 @@ }, "model": "TreasuryRates", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.fixedincome.government.treasury_rates(provider=\"federal_reserve\")" ] } }, @@ -16929,11 +14869,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -17120,21 +15056,7 @@ }, "model": "ICEBofA", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "index_type": "yield_to_worst", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.corporate.ice_bofa(index_type=\"yield_to_worst\")" ] } }, @@ -17157,11 +15079,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -17290,21 +15208,7 @@ }, "model": "MoodyCorporateBondIndex", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "index_type": "baa", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.corporate.moody(index_type=\"baa\")" ] } }, @@ -17327,11 +15231,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -17419,21 +15319,7 @@ }, "model": "HighQualityMarketCorporateBond", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "yield_curve": "par", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.corporate.hqm(yield_curve=\"par\")" ] } }, @@ -17456,11 +15342,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -17508,41 +15390,38 @@ "in": "query", "required": false, "schema": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } + "type": "array", + "items": { + "type": "number" + }, + "description": "The maturities in years.", + "default": [ + 10.0 ], - "description": "Maturities in years. Multiple comma separated items allowed for provider(s): fred.", - "multiple_items_allowed": [ - "fred" - ], - "default": 10.0, "title": "Maturity" }, - "description": "Maturities in years. Multiple comma separated items allowed for provider(s): fred." + "description": "The maturities in years." }, { "name": "category", "in": "query", "required": false, "schema": { - "type": "string", - "description": "Rate category. Options: spot_rate, par_yield. Multiple comma separated items allowed for provider(s): fred.", - "choices": [ - "par_yield", + "type": "array", + "items": { + "enum": [ + "par_yield", + "spot_rate" + ], + "type": "string" + }, + "description": "The category.", + "default": [ "spot_rate" ], - "multiple_items_allowed": [ - "fred" - ], - "default": "spot_rate", "title": "Category" }, - "description": "Rate category. Options: spot_rate, par_yield. Multiple comma separated items allowed for provider(s): fred." + "description": "The category." } ], "responses": { @@ -17592,21 +15471,7 @@ }, "model": "SpotRate", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "maturity": "10,20,30,50", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.corporate.spot_rates(maturity=[10,20,30,50])" ] } }, @@ -17629,11 +15494,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -17777,21 +15638,7 @@ }, "model": "CommercialPaper", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "maturity": "15d", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.corporate.commercial_paper(maturity=\"15d\")" ] } }, @@ -17814,11 +15661,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fred" - ], "const": "fred", - "type": "string", "default": "fred", "title": "Provider" } @@ -17928,21 +15771,7 @@ }, "model": "SOFR", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fred" - }, - "provider": "fred" - }, - { - "scope": "api", - "parameters": { - "period": "overnight", - "provider": "fred" - }, - "provider": "fred" - } + "obb.fixedincome.fixedincome.sofr(period=\"overnight\")" ] } }, @@ -17980,15 +15809,14 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, polygon.", + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio, polygon.", "multiple_items_allowed": [ - "fmp", "intrinio", "polygon" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, polygon." + "description": "Symbol to get data for. Multiple items allowed for provider(s): intrinio, polygon." }, { "name": "start_date", @@ -18054,33 +15882,60 @@ "schema": { "anyOf": [ { - "type": "integer" + "type": "integer", + "exclusiveMinimum": 0 }, { "type": "null" } ], - "title": "intrinio,polygon", - "description": "The number of data entries to return. (provider: intrinio, polygon)", - "default": 10000 + "description": "The number of data entries to return.", + "default": 10000, + "title": "Limit" }, - "description": "The number of data entries to return. (provider: intrinio, polygon)" + "description": "The number of data entries to return." }, { "name": "sort", "in": "query", "required": false, "schema": { - "enum": [ - "asc", - "desc" + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } ], - "type": "string", - "title": "polygon", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "default": "asc" + "description": "Sort the data in ascending or descending order.", + "default": "asc", + "title": "Sort" }, - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)" + "description": "Sort the data in ascending or descending order." + }, + { + "name": "timeseries", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "null" + } + ], + "title": "fmp", + "description": "Number of days to look back. (provider: fmp)" + }, + "description": "Number of days to look back. (provider: fmp)" } ], "responses": { @@ -18130,23 +15985,9 @@ }, "model": "IndexHistorical", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "^GSPC", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Not all providers have the same symbols.", - "parameters": { - "symbol": "SPX", - "provider": "intrinio" - }, - "provider": "intrinio" - } + "obb.index.price.historical(\"^GSPC\", provider=\"fmp\").to_df()", + "#### Not all providers have the same symbols. ####", + "obb.index.price.historical(\"SPX\", provider=\"intrinio\").to_df()" ] } }, @@ -18185,15 +16026,10 @@ "required": true, "schema": { "type": "string", - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, polygon.", - "multiple_items_allowed": [ - "fmp", - "intrinio", - "polygon" - ], + "description": "Symbol to get data for.", "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp, intrinio, polygon." + "description": "Symbol to get data for." }, { "name": "start_date", @@ -18233,43 +16069,45 @@ }, "description": "End date of the data, in YYYY-MM-DD format." }, + { + "name": "timeseries", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "null" + } + ], + "title": "fmp", + "description": "Number of days to look back. (provider: fmp)" + }, + "description": "Number of days to look back. (provider: fmp)" + }, { "name": "interval", "in": "query", "required": false, "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "enum": [ + "1min", + "5min", + "15min", + "30min", + "1hour", + "4hour", + "1day" ], - "description": "Time interval of the data to return.", - "default": "1d", - "title": "Interval" + "type": "string", + "title": "fmp", + "description": "Data granularity. (provider: fmp)", + "default": "1day" }, - "description": "Time interval of the data to return." - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "intrinio,polygon", - "description": "The number of data entries to return. (provider: intrinio, polygon)", - "default": 10000 - }, - "description": "The number of data entries to return. (provider: intrinio, polygon)" + "description": "Data granularity. (provider: fmp)" }, { "name": "sort", @@ -18281,11 +16119,124 @@ "desc" ], "type": "string", - "title": "polygon", - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)", - "default": "asc" + "title": "fmp,intrinio,polygon", + "description": "Sort the data in ascending or descending order. (provider: fmp);\n Sort order. (provider: intrinio);\n Sort order of the data. (provider: polygon)", + "default": "desc" }, - "description": "Sort order of the data. This impacts the results in combination with the 'limit' parameter. The results are always returned in ascending order by date. (provider: polygon)" + "description": "Sort the data in ascending or descending order. (provider: fmp);\n Sort order. (provider: intrinio);\n Sort order of the data. (provider: polygon)" + }, + { + "name": "tag", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "intrinio", + "description": "Index tag. (provider: intrinio)", + "default": "level" + }, + "description": "Index tag. (provider: intrinio)" + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "intrinio", + "description": "Index type. (provider: intrinio)" + }, + "description": "Index type. (provider: intrinio)" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "title": "intrinio,polygon", + "description": "The number of data entries to return. (provider: intrinio, polygon)", + "default": 1000 + }, + "description": "The number of data entries to return. (provider: intrinio, polygon)" + }, + { + "name": "sleep", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "intrinio", + "description": "Time to sleep between requests to avoid rate limiting. (provider: intrinio)", + "default": 1.0 + }, + "description": "Time to sleep between requests to avoid rate limiting. (provider: intrinio)" + }, + { + "name": "timespan", + "in": "query", + "required": false, + "schema": { + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string", + "title": "polygon", + "description": "Timespan of the data. (provider: polygon)", + "default": "day" + }, + "description": "Timespan of the data. (provider: polygon)" + }, + { + "name": "adjusted", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "title": "polygon", + "description": "Whether the data is adjusted. (provider: polygon)", + "default": true + }, + "description": "Whether the data is adjusted. (provider: polygon)" + }, + { + "name": "multiplier", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "title": "polygon", + "description": "Multiplier of the timespan. (provider: polygon)", + "default": 1 + }, + "description": "Multiplier of the timespan. (provider: polygon)" } ], "responses": { @@ -18335,14 +16286,7 @@ }, "model": "MarketIndices", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "^IBEX", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.index.market(symbol=\"SPX\")" ] } }, @@ -18365,11 +16309,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -18433,14 +16373,9 @@ }, "model": "IndexConstituents", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "dowjones", - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.index.constituents(\"dowjones\", provider=\"fmp\").to_df()", + "#### Providers other than FMP will use the ticker symbol. ####", + "obb.index.constituents(\"BEP50P\", provider=\"cboe\").to_df()" ] } }, @@ -18463,11 +16398,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "fmp" - ], "const": "fmp", - "type": "string", "default": "fmp", "title": "Provider" } @@ -18520,13 +16451,7 @@ }, "model": "AvailableIndices", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - } + "obb.index.available(provider=\"yfinance\").to_df()" ] } }, @@ -18552,7 +16477,8 @@ "enum": [ "benzinga", "fmp", - "intrinio" + "intrinio", + "tiingo" ], "type": "string", "title": "Provider" @@ -18820,6 +16746,43 @@ "description": "Content types of the news to retrieve. (provider: benzinga)" }, "description": "Content types of the news to retrieve. (provider: benzinga)" + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "tiingo", + "description": "Page offset, used in conjunction with limit. (provider: tiingo)", + "default": 0 + }, + "description": "Page offset, used in conjunction with limit. (provider: tiingo)" + }, + { + "name": "source", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "tiingo", + "description": "A comma-separated list of the domains requested. (provider: tiingo)" + }, + "description": "A comma-separated list of the domains requested. (provider: tiingo)" } ], "responses": { @@ -18869,49 +16832,17 @@ }, "model": "WorldNews", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "parameters": { - "limit": 100, - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Get news on the specified dates.", - "parameters": { - "start_date": "2024-02-01", - "end_date": "2024-02-07", - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Display the headlines of the news.", - "parameters": { - "display": "headline", - "provider": "benzinga" - }, - "provider": "benzinga" - }, - { - "scope": "api", - "description": "Get news by topics.", - "parameters": { - "topics": "finance", - "provider": "benzinga" - }, - "provider": "benzinga" - } + "obb.news.world(limit=2500)", + "# Get news on the specified dates.", + "obb.news.world(start_date='2024-02-01', end_date='2024-02-07')", + "# Display the headlines of the news.", + "obb.news.world(display='headline', provider='benzinga')", + "# Get news by topics.", + "obb.news.world(topics='finance', provider='benzinga')", + "# Get news by source using 'tingo' as provider.", + "obb.news.world(provider='tiingo', source='bloomberg')", + "# Filter aticles by term using 'biztoc' as provider.", + "obb.news.world(provider='biztoc', term='apple')" ] } }, @@ -18938,7 +16869,8 @@ "benzinga", "fmp", "intrinio", - "polygon" + "polygon", + "tiingo" ], "type": "string", "title": "Provider" @@ -18957,16 +16889,17 @@ "type": "null" } ], - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp, intrinio, polygon.", + "description": "Symbol to get data for. This endpoint will accept multiple symbols separated by commas. Multiple items allowed for provider(s): benzinga, fmp, intrinio, polygon, tiingo.", "multiple_items_allowed": [ "benzinga", "fmp", "intrinio", - "polygon" + "polygon", + "tiingo" ], "title": "Symbol" }, - "description": "Symbol to get data for. Multiple comma separated items allowed for provider(s): benzinga, fmp, intrinio, polygon." + "description": "Symbol to get data for. This endpoint will accept multiple symbols separated by commas. Multiple items allowed for provider(s): benzinga, fmp, intrinio, polygon, tiingo." }, { "name": "start_date", @@ -19264,6 +17197,43 @@ "default": 0 }, "description": "Page number of the results. Use in combination with limit. (provider: fmp)" + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "tiingo", + "description": "Page offset, used in conjunction with limit. (provider: tiingo)", + "default": 0 + }, + "description": "Page offset, used in conjunction with limit. (provider: tiingo)" + }, + { + "name": "source", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "tiingo", + "description": "A comma-separated list of the domains requested. (provider: tiingo)" + }, + "description": "A comma-separated list of the domains requested. (provider: tiingo)" } ], "responses": { @@ -19313,61 +17283,15 @@ }, "model": "CompanyNews", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "benzinga" - }, - "provider": "benzinga" - }, - { - "scope": "api", - "parameters": { - "limit": 100, - "provider": "benzinga" - }, - "provider": "benzinga" - }, - { - "scope": "api", - "description": "Get news on the specified dates.", - "parameters": { - "symbol": "AAPL", - "start_date": "2024-02-01", - "end_date": "2024-02-07", - "provider": "intrinio" - }, - "provider": "intrinio" - }, - { - "scope": "api", - "description": "Display the headlines of the news.", - "parameters": { - "symbol": "AAPL", - "display": "headline", - "provider": "benzinga" - }, - "provider": "benzinga" - }, - { - "scope": "api", - "description": "Get news for multiple symbols.", - "parameters": { - "symbol": "aapl,tsla", - "provider": "fmp" - }, - "provider": "fmp" - }, - { - "scope": "api", - "description": "Get news company's ISIN.", - "parameters": { - "symbol": "NVDA", - "isin": "US0378331005", - "provider": "benzinga" - }, - "provider": "benzinga" - } + "obb.news.company(limit=2500)", + "# Get news on the specified dates.", + "obb.news.company(symbol='AAPL', start_date='2024-02-01', end_date='2024-02-07')", + "# Display the headlines of the news.", + "obb.news.company(symbol='AAPL', display='headline', provider='benzinga')", + "# Get news for multiple symbols.", + "obb.news.company(symbol='aapl,tsla')", + "# Get news company's ISIN.", + "obb.news.company(symbol='NVDA', isin='US0378331005')" ] } }, @@ -19390,11 +17314,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "sec" - ], "const": "sec", - "type": "string", "default": "sec", "title": "Provider" } @@ -19458,14 +17378,8 @@ }, "model": "CikMap", "examples": [ - { - "scope": "api", - "parameters": { - "symbol": "MSFT", - "provider": "sec" - }, - "provider": "sec" - } + "obb.regulators.sec.cik_map(symbol=\"MSFT\").results.cik", + " 0000789019" ] } }, @@ -19488,11 +17402,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "sec" - ], "const": "sec", - "type": "string", "default": "sec", "title": "Provider" } @@ -19576,21 +17486,7 @@ }, "model": "InstitutionsSearch", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "sec" - }, - "provider": "sec" - }, - { - "scope": "api", - "parameters": { - "query": "blackstone real estate", - "provider": "sec" - }, - "provider": "sec" - } + "obb.regulators.sec.institutions_search(query=\"blackstone real estate\").to_df()" ] } }, @@ -19613,11 +17509,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "sec" - ], "const": "sec", - "type": "string", "default": "sec", "title": "Provider" } @@ -19719,36 +17611,23 @@ }, "model": "SchemaFiles", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "sec" - }, - "provider": "sec" - }, - { - "scope": "python", - "description": "Get a list of schema files.", - "code": [ - "data = obb.regulators.sec.schema_files().results", - "data.files[0]", - "'https://xbrl.fasb.org/us-gaap/'", - "# The directory structure can be navigated by constructing a URL from the 'results' list.", - "url = data.files[0]+data.files[-1]", - "# The URL base will always be the 0 position in the list, feed the URL back in as a parameter.", - "obb.regulators.sec.schema_files(url=url).results.files", - "['https://xbrl.fasb.org/us-gaap/2024/'", - "'USGAAP2024FileList.xml'", - "'dis/'", - "'dqcrules/'", - "'ebp/'", - "'elts/'", - "'entire/'", - "'meta/'", - "'stm/'", - "'us-gaap-2024.zip']" - ] - } + "data = obb.regulators.sec.schema_files()", + "data.files[0]", + " https://xbrl.fasb.org/us-gaap/", + "#### The directory structure can be navigated by constructing a URL from the 'results' list. ####", + "url = data.files[0]+data.files[-1]", + "#### The URL base will always be the 0 position in the list, feed the URL back in as a parameter. ####", + "obb.regulators.sec.schema_files(url=url).results.files", + " ['https://xbrl.fasb.org/us-gaap/2024/'", + " 'USGAAP2024FileList.xml'", + " 'dis/'", + " 'dqcrules/'", + " 'ebp/'", + " 'elts/'", + " 'entire/'", + " 'meta/'", + " 'stm/'", + " 'us-gaap-2024.zip']" ] } }, @@ -19771,11 +17650,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "sec" - ], "const": "sec", - "type": "string", "default": "sec", "title": "Provider" } @@ -19783,10 +17658,11 @@ { "name": "query", "in": "query", - "required": true, + "required": false, "schema": { "type": "string", "description": "Search query.", + "default": "", "title": "Query" }, "description": "Search query." @@ -19858,14 +17734,8 @@ }, "model": "SymbolMap", "examples": [ - { - "scope": "api", - "parameters": { - "query": "0000789019", - "provider": "sec" - }, - "provider": "sec" - } + "obb.regulators.sec.symbol_map(\"0000789019\").results.symbol", + " MSFT" ] } }, @@ -19888,11 +17758,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "sec" - ], "const": "sec", - "type": "string", "default": "sec", "title": "Provider" } @@ -19945,13 +17811,7 @@ }, "model": "RssLitigation", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "sec" - }, - "provider": "sec" - } + "obb.regulators.sec.rss_litigation().to_dict(\"records\")[0]" ] } }, @@ -19974,11 +17834,7 @@ "in": "query", "required": false, "schema": { - "enum": [ - "sec" - ], "const": "sec", - "type": "string", "default": "sec", "title": "Provider" } @@ -20062,21 +17918,7 @@ }, "model": "SicSearch", "examples": [ - { - "scope": "api", - "parameters": { - "provider": "sec" - }, - "provider": "sec" - }, - { - "scope": "api", - "parameters": { - "query": "real estate investment trusts", - "provider": "sec" - }, - "provider": "sec" - } + "obb.regulators.sec.sic_search(\"real estate investment trusts\").results" ] } }, @@ -20103,7 +17945,6 @@ } ], "description": "Get information on a symbol, or a comma separated list of symbols.", - "default": "", "title": "Q" }, "description": "Get information on a symbol, or a comma separated list of symbols." @@ -20115,16 +17956,23 @@ "schema": { "anyOf": [ { - "type": "string" + "enum": [ + "stock", + "etf", + "index", + "indices", + "all", + null + ] }, { "type": "null" } ], - "description": "Filter by type(s). (stock, etf, index, indices, all) can be a comma separated list.", + "description": "Filter by type.", "title": "Type" }, - "description": "Filter by type(s). (stock, etf, index, indices, all) can be a comma separated list." + "description": "Filter by type." }, { "name": "ignore_type", @@ -20133,7 +17981,13 @@ "schema": { "anyOf": [ { - "type": "string" + "enum": [ + "stock", + "etf", + "index", + "indices", + null + ] }, { "type": "null" @@ -20169,32 +18023,6 @@ } } }, - "/search/currencies": { - "get": { - "tags": [ - "search" - ], - "summary": "Currencies", - "description": "Get supported tickers from the OpenBB SDK API.", - "operationId": "unique_currencies", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Response Unique Currencies" - } - } - } - } - } - } - }, "/search/fred": { "get": { "tags": [ @@ -20388,7 +18216,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UDFSearchResult" + "$ref": "#/components/schemas/UDFSymbolSearch" }, "title": "Response Query Udf Search" } @@ -20407,6 +18235,28 @@ } } } + }, + "/": { + "get": { + "summary": "Root", + "operationId": "root__get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Response Root Get" + } + } + } + } + } + } } }, "components": { @@ -20514,8 +18364,8 @@ ], "title": "Overall Success Rate", "description": "The percentage (normalized) of gain/loss ratings that resulted in a gain overall.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "overall_avg_return_percentile": { "anyOf": [ @@ -20528,8 +18378,8 @@ ], "title": "Overall Avg Return Percentile", "description": "The percentile (normalized) of this analyst's overall average return per rating in comparison to other analysts' overall average returns per rating.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "total_ratings_percentile": { "anyOf": [ @@ -20542,8 +18392,8 @@ ], "title": "Total Ratings Percentile", "description": "The percentile (normalized) of this analyst's total number of ratings in comparison to the total number of ratings published by all other analysts", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "total_ratings": { "anyOf": [ @@ -20592,8 +18442,8 @@ ], "title": "Overall Average Return", "description": "The average percent (normalized) price difference per rating since the date of recommendation", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "overall_std_dev": { "anyOf": [ @@ -20606,8 +18456,8 @@ ], "title": "Overall Std Dev", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings since the date of recommendation", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "gain_count_1m": { "anyOf": [ @@ -20644,8 +18494,8 @@ ], "title": "Average Return 1M", "description": "The average percent (normalized) price difference per rating over the last month", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "std_dev_1m": { "anyOf": [ @@ -20658,8 +18508,8 @@ ], "title": "Std Dev 1M", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last month", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "gain_count_3m": { "anyOf": [ @@ -20696,8 +18546,8 @@ ], "title": "Average Return 3M", "description": "The average percent (normalized) price difference per rating over the last 3 months", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "std_dev_3m": { "anyOf": [ @@ -20710,8 +18560,8 @@ ], "title": "Std Dev 3M", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 months", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "gain_count_6m": { "anyOf": [ @@ -20748,8 +18598,8 @@ ], "title": "Average Return 6M", "description": "The average percent (normalized) price difference per rating over the last 6 months", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "std_dev_6m": { "anyOf": [ @@ -20762,8 +18612,8 @@ ], "title": "Std Dev 6M", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 6 months", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "gain_count_9m": { "anyOf": [ @@ -20800,8 +18650,8 @@ ], "title": "Average Return 9M", "description": "The average percent (normalized) price difference per rating over the last 9 months", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "std_dev_9m": { "anyOf": [ @@ -20814,8 +18664,8 @@ ], "title": "Std Dev 9M", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 9 months", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "gain_count_1y": { "anyOf": [ @@ -20852,8 +18702,8 @@ ], "title": "Average Return 1Y", "description": "The average percent (normalized) price difference per rating over the last 1 year", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "std_dev_1y": { "anyOf": [ @@ -20866,8 +18716,8 @@ ], "title": "Std Dev 1Y", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 1 year", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "gain_count_2y": { "anyOf": [ @@ -20904,8 +18754,8 @@ ], "title": "Average Return 2Y", "description": "The average percent (normalized) price difference per rating over the last 2 years", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "std_dev_2y": { "anyOf": [ @@ -20918,8 +18768,8 @@ ], "title": "Std Dev 2Y", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 2 years", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "gain_count_3y": { "anyOf": [ @@ -20956,8 +18806,8 @@ ], "title": "Average Return 3Y", "description": "The average percent (normalized) price difference per rating over the last 3 years", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "std_dev_3y": { "anyOf": [ @@ -20970,8 +18820,8 @@ ], "title": "Std Dev 3Y", "description": "The standard deviation in percent (normalized) price difference in the analyst's ratings over the last 3 years", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" } }, "additionalProperties": true, @@ -21487,7 +19337,7 @@ } ], "title": "Images", - "description": "Images associated with the article." + "description": "Images associated with the news." }, "text": { "anyOf": [ @@ -21645,9 +19495,6 @@ }, "ChartFormat": { "type": "string", - "enum": [ - "plotly" - ], "const": "plotly", "title": "ChartFormat" }, @@ -23363,8 +21210,8 @@ ], "title": "Rate", "description": "Yield curve rate, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent." } }, "additionalProperties": true, @@ -23386,242 +21233,102 @@ "description": "The date of the data." }, "estimated_revenue_low": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Revenue Low", "description": "Estimated revenue low." }, "estimated_revenue_high": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Revenue High", "description": "Estimated revenue high." }, "estimated_revenue_avg": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Revenue Avg", "description": "Estimated revenue average." }, - "estimated_sga_expense_low": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Estimated Sga Expense Low", - "description": "Estimated SGA expense low." - }, - "estimated_sga_expense_high": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Estimated Sga Expense High", - "description": "Estimated SGA expense high." - }, - "estimated_sga_expense_avg": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Estimated Sga Expense Avg", - "description": "Estimated SGA expense average." - }, "estimated_ebitda_low": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Ebitda Low", "description": "Estimated EBITDA low." }, "estimated_ebitda_high": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Ebitda High", "description": "Estimated EBITDA high." }, "estimated_ebitda_avg": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Ebitda Avg", "description": "Estimated EBITDA average." }, "estimated_ebit_low": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Ebit Low", "description": "Estimated EBIT low." }, "estimated_ebit_high": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Ebit High", "description": "Estimated EBIT high." }, "estimated_ebit_avg": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Ebit Avg", "description": "Estimated EBIT average." }, "estimated_net_income_low": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Net Income Low", "description": "Estimated net income low." }, "estimated_net_income_high": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Net Income High", "description": "Estimated net income high." }, "estimated_net_income_avg": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Estimated Net Income Avg", "description": "Estimated net income average." }, + "estimated_sga_expense_low": { + "type": "integer", + "title": "Estimated Sga Expense Low", + "description": "Estimated SGA expense low." + }, + "estimated_sga_expense_high": { + "type": "integer", + "title": "Estimated Sga Expense High", + "description": "Estimated SGA expense high." + }, + "estimated_sga_expense_avg": { + "type": "integer", + "title": "Estimated Sga Expense Avg", + "description": "Estimated SGA expense average." + }, "estimated_eps_avg": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], + "type": "number", "title": "Estimated Eps Avg", "description": "Estimated EPS average." }, "estimated_eps_high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], + "type": "number", "title": "Estimated Eps High", "description": "Estimated EPS high." }, "estimated_eps_low": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], + "type": "number", "title": "Estimated Eps Low", "description": "Estimated EPS low." }, "number_analyst_estimated_revenue": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Number Analyst Estimated Revenue", "description": "Number of analysts who estimated revenue." }, "number_analysts_estimated_eps": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], + "type": "integer", "title": "Number Analysts Estimated Eps", "description": "Number of analysts who estimated EPS." } @@ -23630,7 +21337,27 @@ "type": "object", "required": [ "symbol", - "date" + "date", + "estimated_revenue_low", + "estimated_revenue_high", + "estimated_revenue_avg", + "estimated_ebitda_low", + "estimated_ebitda_high", + "estimated_ebitda_avg", + "estimated_ebit_low", + "estimated_ebit_high", + "estimated_ebit_avg", + "estimated_net_income_low", + "estimated_net_income_high", + "estimated_net_income_avg", + "estimated_sga_expense_low", + "estimated_sga_expense_high", + "estimated_sga_expense_avg", + "estimated_eps_avg", + "estimated_eps_high", + "estimated_eps_low", + "number_analyst_estimated_revenue", + "number_analysts_estimated_eps" ], "title": "FMPAnalystEstimates", "description": "FMP Analyst Estimates Data." @@ -25304,7 +23031,8 @@ "type": "null" } ], - "title": "Free Cash Flow" + "title": "Free Cash Flow", + "description": "Free cash flow." }, "link": { "anyOf": [ @@ -26192,6 +23920,18 @@ "title": "Adj Close", "description": "The adjusted close price." }, + "unadjusted_volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Unadjusted Volume", + "description": "Unadjusted volume of the symbol." + }, "change": { "anyOf": [ { @@ -26202,7 +23942,7 @@ } ], "title": "Change", - "description": "Change in the price from the previous close." + "description": "Change in the price of the symbol from the previous day." }, "change_percent": { "anyOf": [ @@ -26214,9 +23954,31 @@ } ], "title": "Change Percent", - "description": "Change in the price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "description": "Change % in the price of the symbol." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "Human readable format of the date." + }, + "change_over_time": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change Over Time", + "description": "Change % in the price of the symbol over a period of time." } }, "additionalProperties": true, @@ -26351,8 +24113,7 @@ "vwap": { "anyOf": [ { - "type": "number", - "exclusiveMinimum": 0.0 + "type": "number" }, { "type": "null" @@ -26373,6 +24134,18 @@ "title": "Adj Close", "description": "The adjusted close price." }, + "unadjusted_volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Unadjusted Volume", + "description": "Unadjusted volume of the symbol." + }, "change": { "anyOf": [ { @@ -26383,7 +24156,7 @@ } ], "title": "Change", - "description": "Change in the price from the previous close." + "description": "Change in the price of the symbol from the previous day." }, "change_percent": { "anyOf": [ @@ -26395,9 +24168,31 @@ } ], "title": "Change Percent", - "description": "Change in the price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "description": "Change % in the price of the symbol." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "Human readable format of the date." + }, + "change_over_time": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change Over Time", + "description": "Change % in the price of the symbol over a period of time." } }, "additionalProperties": true, @@ -26464,193 +24259,6 @@ "title": "FMPCurrencyPairs", "description": "FMP Currency Available Pairs Data." }, - "FMPCurrencySnapshots": { - "properties": { - "base_currency": { - "type": "string", - "title": "Base Currency", - "description": "The base, or domestic, currency." - }, - "counter_currency": { - "type": "string", - "title": "Counter Currency", - "description": "The counter, or foreign, currency." - }, - "last_rate": { - "type": "number", - "title": "Last Rate", - "description": "The exchange rate, relative to the base currency. Rates are expressed as the amount of foreign currency received from selling one unit of the base currency, or the quantity of foreign currency required to purchase one unit of the domestic currency. To inverse the perspective, set the 'quote_type' parameter as 'direct'." - }, - "open": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Open", - "description": "The open price." - }, - "high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "High", - "description": "The high price." - }, - "low": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Low", - "description": "The low price." - }, - "close": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Close", - "description": "The close price." - }, - "volume": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Volume", - "description": "The trading volume." - }, - "prev_close": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Prev Close", - "description": "The previous close price." - }, - "change": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Change", - "description": "The change in the price from the previous close." - }, - "change_percent": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Change Percent", - "description": "The change in the price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "ma_50": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ma 50", - "description": "The 50-day moving average." - }, - "ma_200": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ma 200", - "description": "The 200-day moving average." - }, - "year_high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Year High", - "description": "The 52-week high." - }, - "year_low": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Year Low", - "description": "The 52-week low." - }, - "last_rate_timestamp": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Last Rate Timestamp", - "description": "The timestamp of the last rate." - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "base_currency", - "counter_currency", - "last_rate" - ], - "title": "FMPCurrencySnapshots", - "description": "FMP Currency Snapshots Data." - }, "FMPDiscoveryFilings": { "properties": { "symbol": { @@ -27060,7 +24668,19 @@ } ], "title": "Symbol", - "description": "Symbol of the equity." + "description": "Symbol representing the entity requested in the data." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "Human readable format of the date." }, "adj_close": { "anyOf": [ @@ -27096,7 +24716,7 @@ } ], "title": "Change", - "description": "Change in the price from the previous close." + "description": "Change in the price of the symbol from the previous day." }, "change_percent": { "anyOf": [ @@ -27108,9 +24728,19 @@ } ], "title": "Change Percent", - "description": "Change in the price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "description": "Change % in the price of the symbol." + }, + "change_over_time": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change Over Time", + "description": "Change % in the price of the symbol over a period of time." } }, "additionalProperties": true, @@ -28381,7 +26011,7 @@ } ], "title": "Prev Close", - "description": "The previous close price." + "description": "The closing price of the previous trading day." }, "change": { "anyOf": [ @@ -28522,6 +26152,9 @@ "type": "string", "format": "date-time" }, + { + "type": "string" + }, { "type": "null" } @@ -29479,7 +27112,7 @@ "shares": { "anyOf": [ { - "type": "number" + "type": "integer" }, { "type": "null" @@ -29500,7 +27133,7 @@ "title": "Weight", "description": "The weight of the equity in the ETF, as a normalized percent.", "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "x-units_measurement": "percent" }, "market_value": { "anyOf": [ @@ -29840,11 +27473,6 @@ }, "FMPEtfHoldingsPerformance": { "properties": { - "symbol": { - "type": "string", - "title": "Symbol", - "description": "The ticker symbol." - }, "one_day": { "anyOf": [ { @@ -29985,20 +27613,6 @@ "x-frontend_multiply": 100, "x-unit_measurement": "percent" }, - "two_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Two Year", - "description": "Two-year return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, "three_year": { "anyOf": [ { @@ -30013,20 +27627,6 @@ "x-frontend_multiply": 100, "x-unit_measurement": "percent" }, - "four_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Four Year", - "description": "Four-year", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, "five_year": { "anyOf": [ { @@ -30068,6 +27668,11 @@ "description": "Return from the beginning of the time series.", "x-frontend_multiply": 100, "x-unit_measurement": "percent" + }, + "symbol": { + "type": "string", + "title": "Symbol", + "description": "The ticker symbol." } }, "additionalProperties": true, @@ -30490,175 +28095,85 @@ "title": "Cik", "description": "Central Index Key (CIK) for the requested entity." }, - "company_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Company Name", - "description": "The name of the company." - }, - "industry": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Industry", - "description": "The industry of the company." - }, - "year": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Year", - "description": "Year of the compensation." - }, - "name_and_position": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name And Position", - "description": "Name and position." - }, - "salary": { - "anyOf": [ - { - "type": "number", - "minimum": 0.0 - }, - { - "type": "null" - } - ], - "title": "Salary", - "description": "Salary." - }, - "bonus": { - "anyOf": [ - { - "type": "number", - "minimum": 0.0 - }, - { - "type": "null" - } - ], - "title": "Bonus", - "description": "Bonus payments." - }, - "stock_award": { - "anyOf": [ - { - "type": "number", - "minimum": 0.0 - }, - { - "type": "null" - } - ], - "title": "Stock Award", - "description": "Stock awards." - }, - "incentive_plan_compensation": { - "anyOf": [ - { - "type": "number", - "minimum": 0.0 - }, - { - "type": "null" - } - ], - "title": "Incentive Plan Compensation", - "description": "Incentive plan compensation." - }, - "all_other_compensation": { - "anyOf": [ - { - "type": "number", - "minimum": 0.0 - }, - { - "type": "null" - } - ], - "title": "All Other Compensation", - "description": "All other compensation." - }, - "total": { - "anyOf": [ - { - "type": "number", - "minimum": 0.0 - }, - { - "type": "null" - } - ], - "title": "Total", - "description": "Total compensation." - }, "filing_date": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], + "type": "string", + "format": "date", "title": "Filing Date", "description": "Date of the filing." }, "accepted_date": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], + "type": "string", + "format": "date-time", "title": "Accepted Date", "description": "Date the filing was accepted." }, + "name_and_position": { + "type": "string", + "title": "Name And Position", + "description": "Name and position of the executive." + }, + "year": { + "type": "integer", + "title": "Year", + "description": "Year of the compensation." + }, + "salary": { + "type": "number", + "minimum": 0.0, + "title": "Salary", + "description": "Salary of the executive." + }, + "bonus": { + "type": "number", + "minimum": 0.0, + "title": "Bonus", + "description": "Bonus of the executive." + }, + "stock_award": { + "type": "number", + "minimum": 0.0, + "title": "Stock Award", + "description": "Stock award of the executive." + }, + "incentive_plan_compensation": { + "type": "number", + "minimum": 0.0, + "title": "Incentive Plan Compensation", + "description": "Incentive plan compensation of the executive." + }, + "all_other_compensation": { + "type": "number", + "minimum": 0.0, + "title": "All Other Compensation", + "description": "All other compensation of the executive." + }, + "total": { + "type": "number", + "minimum": 0.0, + "title": "Total", + "description": "Total compensation of the executive." + }, "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], + "type": "string", "title": "Url", - "description": "URL to the filing data." + "description": "URL of the filing data." } }, "additionalProperties": true, "type": "object", "required": [ - "symbol" + "symbol", + "filing_date", + "accepted_date", + "name_and_position", + "year", + "salary", + "bonus", + "stock_award", + "incentive_plan_compensation", + "all_other_compensation", + "total", + "url" ], "title": "FMPExecutiveCompensation", "description": "FMP Executive Compensation Data." @@ -31650,47 +29165,29 @@ "title": "Date", "description": "The date of the data." }, + "label": { + "type": "string", + "title": "Label", + "description": "Label of the historical stock splits." + }, "numerator": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], + "type": "number", "title": "Numerator", - "description": "Numerator of the split." + "description": "Numerator of the historical stock splits." }, "denominator": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], + "type": "number", "title": "Denominator", - "description": "Denominator of the split." - }, - "split_ratio": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Split Ratio", - "description": "Split ratio." + "description": "Denominator of the historical stock splits." } }, "additionalProperties": true, "type": "object", "required": [ - "date" + "date", + "label", + "numerator", + "denominator" ], "title": "FMPHistoricalSplits", "description": "FMP Historical Splits Data." @@ -31727,6 +29224,18 @@ "title": "Fiscal Year", "description": "The fiscal year of the fiscal period." }, + "symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Symbol", + "description": "Symbol representing the entity requested in the data." + }, "filing_date": { "anyOf": [ { @@ -32503,7 +30012,7 @@ "title": "Volume", "description": "The trading volume." }, - "vwap": { + "adj_close": { "anyOf": [ { "type": "number" @@ -32512,8 +30021,20 @@ "type": "null" } ], - "title": "Vwap", - "description": "Volume Weighted Average Price over the period." + "title": "Adj Close", + "description": "The adjusted close price." + }, + "unadjusted_volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Unadjusted Volume", + "description": "Unadjusted volume of the symbol." }, "change": { "anyOf": [ @@ -32525,7 +30046,7 @@ } ], "title": "Change", - "description": "Change in the price from the previous close." + "description": "Change in the price of the symbol from the previous day." }, "change_percent": { "anyOf": [ @@ -32537,9 +30058,31 @@ } ], "title": "Change Percent", - "description": "Change in the price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "description": "Change % in the price of the symbol." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "Human readable format of the date." + }, + "change_over_time": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change Over Time", + "description": "Change % in the price of the symbol over a period of time." } }, "additionalProperties": true, @@ -33791,12 +31334,13 @@ "title": "FMPKeyMetrics", "description": "FMP Key Metrics Data." }, - "FMPMarketSnapshots": { + "FMPMarketIndices": { "properties": { - "symbol": { + "date": { "type": "string", - "title": "Symbol", - "description": "Symbol representing the entity requested in the data." + "format": "date-time", + "title": "Date", + "description": "The date of the data." }, "open": { "anyOf": [ @@ -33858,6 +31402,142 @@ "title": "Volume", "description": "The trading volume." }, + "adj_close": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Close", + "description": "The adjusted close price." + }, + "unadjusted_volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Unadjusted Volume", + "description": "Unadjusted volume of the symbol." + }, + "change": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change", + "description": "Change in the price of the symbol from the previous day." + }, + "change_percent": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change Percent", + "description": "Change % in the price of the symbol." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Label", + "description": "Human readable format of the date." + }, + "change_over_time": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change Over Time", + "description": "Change % in the price of the symbol over a period of time." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "date" + ], + "title": "FMPMarketIndices", + "description": "FMP Market Indices Data." + }, + "FMPMarketSnapshots": { + "properties": { + "symbol": { + "type": "string", + "title": "Symbol", + "description": "Symbol representing the entity requested in the data." + }, + "open": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Open", + "description": "The open price." + }, + "high": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "High", + "description": "The high price." + }, + "low": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Low", + "description": "The low price." + }, + "close": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Close", + "description": "The close price." + }, "prev_close": { "anyOf": [ { @@ -33880,7 +31560,7 @@ } ], "title": "Change", - "description": "The change in price from the previous close." + "description": "The change in price." }, "change_percent": { "anyOf": [ @@ -33892,11 +31572,21 @@ } ], "title": "Change Percent", - "description": "The change in price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "description": "The change, as a percent." }, - "last_price": { + "volume": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Volume", + "description": "The trading volume." + }, + "price": { "anyOf": [ { "type": "number" @@ -33905,25 +31595,20 @@ "type": "null" } ], - "title": "Last Price", + "title": "Price", "description": "The last price of the stock." }, - "last_price_timestamp": { + "avg_volume": { "anyOf": [ { - "type": "string", - "format": "date" - }, - { - "type": "string", - "format": "date-time" + "type": "integer" }, { "type": "null" } ], - "title": "Last Price Timestamp", - "description": "The timestamp of the last price." + "title": "Avg Volume", + "description": "Average volume of the stock." }, "ma50": { "anyOf": [ @@ -33973,22 +31658,10 @@ "title": "Year Low", "description": "The 52-week low." }, - "volume_avg": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Volume Avg", - "description": "Average daily trading volume." - }, "market_cap": { "anyOf": [ { - "type": "integer" + "type": "number" }, { "type": "null" @@ -33997,6 +31670,18 @@ "title": "Market Cap", "description": "Market cap of the stock." }, + "shares_outstanding": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Shares Outstanding", + "description": "Number of shares outstanding." + }, "eps": { "anyOf": [ { @@ -34021,30 +31706,6 @@ "title": "Pe", "description": "Price to earnings ratio." }, - "shares_outstanding": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Shares Outstanding", - "description": "Number of shares outstanding." - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name", - "description": "The company name associated with the symbol." - }, "exchange": { "anyOf": [ { @@ -34057,22 +31718,44 @@ "title": "Exchange", "description": "The exchange of the stock." }, - "earnings_date": { + "timestamp": { "anyOf": [ { - "type": "string", - "format": "date" + "type": "number" }, { - "type": "string", - "format": "date-time" + "type": "integer" }, { "type": "null" } ], - "title": "Earnings Date", - "description": "The upcoming earnings announcement date." + "title": "Timestamp", + "description": "The timestamp of the data." + }, + "earnings_announcement": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Earnings Announcement", + "description": "The earnings announcement of the stock." + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "The name associated with the stock symbol." } }, "additionalProperties": true, @@ -34085,11 +31768,6 @@ }, "FMPPricePerformance": { "properties": { - "symbol": { - "type": "string", - "title": "Symbol", - "description": "The ticker symbol." - }, "one_day": { "anyOf": [ { @@ -34230,20 +31908,6 @@ "x-frontend_multiply": 100, "x-unit_measurement": "percent" }, - "two_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Two Year", - "description": "Two-year return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, "three_year": { "anyOf": [ { @@ -34258,20 +31922,6 @@ "x-frontend_multiply": 100, "x-unit_measurement": "percent" }, - "four_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Four Year", - "description": "Four-year", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, "five_year": { "anyOf": [ { @@ -34313,6 +31963,11 @@ "description": "Return from the beginning of the time series.", "x-frontend_multiply": 100, "x-unit_measurement": "percent" + }, + "symbol": { + "type": "string", + "title": "Symbol", + "description": "The ticker symbol." } }, "additionalProperties": true, @@ -34927,83 +32582,6 @@ ], "title": "Exchange" }, - "currency": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Currency" - }, - "industry": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Industry" - }, - "sector": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Sector" - }, - "country": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Country" - }, - "cik": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Cik" - }, - "isin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Isin" - }, - "cusip": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Cusip" - }, "type": { "anyOf": [ { @@ -35068,8 +32646,8 @@ ], "title": "Week 4", "description": "4 week Treasury bills rate (secondary market).", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_1": { "anyOf": [ @@ -35082,8 +32660,8 @@ ], "title": "Month 1", "description": "1 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_2": { "anyOf": [ @@ -35096,8 +32674,8 @@ ], "title": "Month 2", "description": "2 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_3": { "anyOf": [ @@ -35110,8 +32688,8 @@ ], "title": "Month 3", "description": "3 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_6": { "anyOf": [ @@ -35124,8 +32702,8 @@ ], "title": "Month 6", "description": "6 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_1": { "anyOf": [ @@ -35138,8 +32716,8 @@ ], "title": "Year 1", "description": "1 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_2": { "anyOf": [ @@ -35152,8 +32730,8 @@ ], "title": "Year 2", "description": "2 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_3": { "anyOf": [ @@ -35166,8 +32744,8 @@ ], "title": "Year 3", "description": "3 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_5": { "anyOf": [ @@ -35180,8 +32758,8 @@ ], "title": "Year 5", "description": "5 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_7": { "anyOf": [ @@ -35194,8 +32772,8 @@ ], "title": "Year 7", "description": "7 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_10": { "anyOf": [ @@ -35208,8 +32786,8 @@ ], "title": "Year 10", "description": "10 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_20": { "anyOf": [ @@ -35222,8 +32800,8 @@ ], "title": "Year 20", "description": "20 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_30": { "anyOf": [ @@ -35236,8 +32814,8 @@ ], "title": "Year 30", "description": "30 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" } }, "additionalProperties": true, @@ -35277,7 +32855,7 @@ } ], "title": "Images", - "description": "Images associated with the article." + "description": "Images associated with the news." }, "text": { "anyOf": [ @@ -36106,8 +33684,8 @@ ], "title": "Week 4", "description": "4 week Treasury bills rate (secondary market).", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_1": { "anyOf": [ @@ -36120,8 +33698,8 @@ ], "title": "Month 1", "description": "1 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_2": { "anyOf": [ @@ -36134,8 +33712,8 @@ ], "title": "Month 2", "description": "2 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_3": { "anyOf": [ @@ -36148,8 +33726,8 @@ ], "title": "Month 3", "description": "3 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "month_6": { "anyOf": [ @@ -36162,8 +33740,8 @@ ], "title": "Month 6", "description": "6 month Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_1": { "anyOf": [ @@ -36176,8 +33754,8 @@ ], "title": "Year 1", "description": "1 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_2": { "anyOf": [ @@ -36190,8 +33768,8 @@ ], "title": "Year 2", "description": "2 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_3": { "anyOf": [ @@ -36204,8 +33782,8 @@ ], "title": "Year 3", "description": "3 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_5": { "anyOf": [ @@ -36218,8 +33796,8 @@ ], "title": "Year 5", "description": "5 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_7": { "anyOf": [ @@ -36232,8 +33810,8 @@ ], "title": "Year 7", "description": "7 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_10": { "anyOf": [ @@ -36246,8 +33824,8 @@ ], "title": "Year 10", "description": "10 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_20": { "anyOf": [ @@ -36260,8 +33838,8 @@ ], "title": "Year 20", "description": "20 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" }, "year_30": { "anyOf": [ @@ -36274,8 +33852,8 @@ ], "title": "Year 30", "description": "30 year Treasury rate.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "frontend_multiply": 100, + "unit_measurement": "percent" } }, "additionalProperties": true, @@ -37910,7 +35488,7 @@ } ], "title": "Status", - "description": "The status of the IPO. Upcoming IPOs have not taken place yet but are expected to. Priced IPOs have taken place. Withdrawn IPOs were expected to take place, but were subsequently withdrawn." + "description": "\n The status of the IPO. Upcoming IPOs have not taken place yet but are expected to.\n Priced IPOs have taken place.\n Withdrawn IPOs were expected to take place, but were subsequently withdrawn and did not take place\n " }, "exchange": { "anyOf": [ @@ -37922,7 +35500,7 @@ } ], "title": "Exchange", - "description": "The acronym of the stock exchange that the company is going to trade publicly on. Typically NYSE or NASDAQ." + "description": "\n The acronym of the stock exchange that the company is going to trade publicly on.\n Typically NYSE or NASDAQ.\n " }, "offer_amount": { "anyOf": [ @@ -37958,7 +35536,7 @@ } ], "title": "Share Price Lowest", - "description": "The expected lowest price per share at which the IPO will be offered. Before an IPO is priced, companies typically provide a range of prices per share at which they expect to offer the IPO (typically available for upcoming IPOs)." + "description": "\n The expected lowest price per share at which the IPO will be offered.\n Before an IPO is priced, companies typically provide a range of prices per share at which\n they expect to offer the IPO (typically available for upcoming IPOs).\n " }, "share_price_highest": { "anyOf": [ @@ -37970,7 +35548,7 @@ } ], "title": "Share Price Highest", - "description": "The expected highest price per share at which the IPO will be offered. Before an IPO is priced, companies typically provide a range of prices per share at which they expect to offer the IPO (typically available for upcoming IPOs)." + "description": "\n The expected highest price per share at which the IPO will be offered.\n Before an IPO is priced, companies typically provide a range of prices per share at which\n they expect to offer the IPO (typically available for upcoming IPOs).\n " }, "share_count": { "anyOf": [ @@ -37994,7 +35572,7 @@ } ], "title": "Share Count Lowest", - "description": "The expected lowest number of shares that will be offered in the IPO. Before an IPO is priced, companies typically provide a range of shares that they expect to offer in the IPO (typically available for upcoming IPOs)." + "description": "\n The expected lowest number of shares that will be offered in the IPO. Before an IPO is priced,\n companies typically provide a range of shares that they expect to offer in the IPO\n (typically available for upcoming IPOs).\n " }, "share_count_highest": { "anyOf": [ @@ -38006,7 +35584,7 @@ } ], "title": "Share Count Highest", - "description": "The expected highest number of shares that will be offered in the IPO. Before an IPO is priced, companies typically provide a range of shares that they expect to offer in the IPO (typically available for upcoming IPOs)." + "description": "\n The expected highest number of shares that will be offered in the IPO. Before an IPO is priced,\n companies typically provide a range of shares that they expect to offer in the IPO\n (typically available for upcoming IPOs).\n " }, "announcement_url": { "anyOf": [ @@ -38030,7 +35608,7 @@ } ], "title": "Sec Report Url", - "description": "The URL to the company's S-1, S-1/A, F-1, or F-1/A SEC filing, which is required to be filed before an IPO takes place." + "description": "\n The URL to the company's S-1, S-1/A, F-1, or F-1/A SEC filing,\n which is required to be filed before an IPO takes place.\n " }, "open_price": { "anyOf": [ @@ -38078,7 +35656,7 @@ } ], "title": "Day Change", - "description": "The percentage change between the open price and the close price on the first trading day (only available for priced IPOs)." + "description": "\n The percentage change between the open price and the close price on the first trading day\n (only available for priced IPOs).\n " }, "week_change": { "anyOf": [ @@ -38090,7 +35668,7 @@ } ], "title": "Week Change", - "description": "The percentage change between the open price on the first trading day and the close price approximately a week after the first trading day (only available for priced IPOs)." + "description": "\n The percentage change between the open price on the first trading day and the close price approximately\n a week after the first trading day (only available for priced IPOs).\n " }, "month_change": { "anyOf": [ @@ -38102,7 +35680,7 @@ } ], "title": "Month Change", - "description": "The percentage change between the open price on the first trading day and the close price approximately a month after the first trading day (only available for priced IPOs)." + "description": "\n The percentage change between the open price on the first trading day and the close price approximately\n a month after the first trading day (only available for priced IPOs).\n " }, "id": { "anyOf": [ @@ -38188,30 +35766,6 @@ "title": "Reported Currency", "description": "The currency in which the balance sheet is reported." }, - "net_income_continuing_operations": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Net Income Continuing Operations", - "description": "Net Income (Continuing Operations)" - }, - "net_income_discontinued_operations": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Net Income Discontinued Operations", - "description": "Net Income (Discontinued Operations)" - }, "net_income": { "anyOf": [ { @@ -38332,6 +35886,30 @@ "title": "Net Cash From Discontinued Operating Activities", "description": "Net Cash from Discontinued Operating Activities" }, + "net_income_continuing_operations": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Net Income Continuing Operations", + "description": "Net Income (Continuing Operations)" + }, + "net_income_discontinued_operations": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Net Income Discontinued Operations", + "description": "Net Income (Discontinued Operations)" + }, "net_cash_from_operating_activities": { "anyOf": [ { @@ -39097,164 +36675,6 @@ "title": "Vwap", "description": "Volume Weighted Average Price over the period." }, - "average": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Average", - "description": "Average trade price of an individual equity during the interval." - }, - "change": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Change", - "description": "Change in the price of the symbol from the previous day." - }, - "change_percent": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Change Percent", - "description": "Percent change in the price of the symbol from the previous day.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "adj_open": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Adj Open", - "description": "The adjusted open price." - }, - "adj_high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Adj High", - "description": "The adjusted high price." - }, - "adj_low": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Adj Low", - "description": "The adjusted low price." - }, - "adj_close": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Adj Close", - "description": "The adjusted close price." - }, - "adj_volume": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Adj Volume", - "description": "The adjusted volume." - }, - "fifty_two_week_high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Fifty Two Week High", - "description": "52 week high price for the symbol." - }, - "fifty_two_week_low": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Fifty Two Week Low", - "description": "52 week low price for the symbol." - }, - "factor": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Factor", - "description": "factor by which to multiply equity prices before this date, in order to calculate historically-adjusted equity prices." - }, - "split_ratio": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Split Ratio", - "description": "Ratio of the equity split, if a split occurred." - }, - "dividend": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Dividend", - "description": "Dividend amount, if a dividend was paid." - }, "close_time": { "anyOf": [ { @@ -39280,6 +36700,30 @@ "title": "Interval", "description": "The data time frequency." }, + "average": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Average", + "description": "Average trade price of an individual equity during the interval." + }, + "change": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change", + "description": "Change in the price of the symbol from the previous day." + }, "intra_period": { "anyOf": [ { @@ -39291,6 +36735,138 @@ ], "title": "Intra Period", "description": "If true, the equity price represents an unfinished period (be it day, week, quarter, month, or year), meaning that the close price is the latest price available, not the official close price for the period" + }, + "adj_open": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Open", + "description": "Adjusted open price during the period." + }, + "adj_high": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj High", + "description": "Adjusted high price during the period." + }, + "adj_low": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Low", + "description": "Adjusted low price during the period." + }, + "adj_close": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Close", + "description": "Adjusted closing price during the period." + }, + "adj_volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Volume", + "description": "Adjusted volume during the period." + }, + "factor": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Factor", + "description": "factor by which to multiply equity prices before this date, in order to calculate historically-adjusted equity prices." + }, + "split_ratio": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Split Ratio", + "description": "Ratio of the equity split, if a equity split occurred." + }, + "dividend": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Dividend", + "description": "Dividend amount, if a dividend was paid." + }, + "percent_change": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Percent Change", + "description": "Percent change in the price of the symbol from the previous day." + }, + "fifty_two_week_high": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fifty Two Week High", + "description": "52 week high price for the symbol." + }, + "fifty_two_week_low": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fifty Two Week Low", + "description": "52 week low price for the symbol." } }, "additionalProperties": true, @@ -40183,7 +37759,7 @@ } ], "title": "Prev Close", - "description": "The previous close price." + "description": "The closing price of the previous trading day." }, "change": { "anyOf": [ @@ -40345,2211 +37921,6 @@ "title": "IntrinioEquitySearch", "description": "Intrinio Equity Search Data." }, - "IntrinioEtfHoldings": { - "properties": { - "symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Symbol", - "description": "Symbol representing the entity requested in the data. (ETF)" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name", - "description": "The common name for the holding." - }, - "security_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Security Type", - "description": "The type of instrument for this holding. Examples(Bond='BOND', Equity='EQUI')" - }, - "isin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Isin", - "description": "The International Securities Identification Number." - }, - "ric": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Ric", - "description": "The Reuters Instrument Code." - }, - "sedol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Sedol", - "description": "The Stock Exchange Daily Official List." - }, - "share_class_figi": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Share Class Figi", - "description": "The OpenFIGI symbol for the holding." - }, - "country": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Country", - "description": "The country or region of the holding." - }, - "maturity_date": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Maturity Date", - "description": "The maturity date for the debt security, if available." - }, - "contract_expiry_date": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Contract Expiry Date", - "description": "Expiry date for the futures contract held, if available." - }, - "coupon": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Coupon", - "description": "The coupon rate of the debt security, if available." - }, - "balance": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Balance", - "description": "The number of units of the security held, if available." - }, - "unit": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Unit", - "description": "The units of the 'balance' field." - }, - "units_per_share": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Units Per Share", - "description": "Number of units of the security held per share outstanding of the ETF, if available." - }, - "face_value": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Face Value", - "description": "The face value of the debt security, if available." - }, - "derivatives_value": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Derivatives Value", - "description": "The notional value of derivatives contracts held." - }, - "value": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Value", - "description": "The market value of the holding, on the 'as_of' date." - }, - "weight": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Weight", - "description": "The weight of the holding, as a normalized percent." - }, - "updated": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Updated", - "description": "The 'as_of' date for the holding." - } - }, - "additionalProperties": true, - "type": "object", - "title": "IntrinioEtfHoldings", - "description": "Intrinio ETF Holdings Data." - }, - "IntrinioEtfInfo": { - "properties": { - "symbol": { - "type": "string", - "title": "Symbol", - "description": "Symbol representing the entity requested in the data. (ETF)" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name", - "description": "Name of the ETF." - }, - "description": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Description", - "description": "Description of the fund." - }, - "inception_date": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Inception Date", - "description": "Inception date of the ETF." - }, - "fund_listing_date": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Fund Listing Date", - "description": "The date on which the Exchange Traded Product (ETP) or share class of the ETP is listed on a specific exchange." - }, - "data_change_date": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Data Change Date", - "description": "The last date on which there was a change in a classifications data field for this ETF." - }, - "etn_maturity_date": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Etn Maturity Date", - "description": "If the product is an ETN, this field identifies the maturity date for the ETN." - }, - "is_listed": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Is Listed", - "description": "If true, the ETF is still listed on an exchange." - }, - "close_date": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Close Date", - "description": "The date on which the ETF was de-listed if it is no longer listed." - }, - "exchange": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Exchange", - "description": "The exchange Market Identifier Code (MIC)." - }, - "isin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Isin", - "description": "International Securities Identification Number (ISIN)." - }, - "ric": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Ric", - "description": "Reuters Instrument Code (RIC)." - }, - "sedol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Sedol", - "description": "Stock Exchange Daily Official List (SEDOL)." - }, - "figi_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Figi Symbol", - "description": "Financial Instrument Global Identifier (FIGI) symbol." - }, - "share_class_figi": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Share Class Figi", - "description": "Financial Instrument Global Identifier (FIGI)." - }, - "firstbridge_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Firstbridge Id", - "description": "The FirstBridge unique identifier for the Exchange Traded Fund (ETF)." - }, - "firstbridge_parent_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Firstbridge Parent Id", - "description": "The FirstBridge unique identifier for the parent Exchange Traded Fund (ETF), if applicable." - }, - "intrinio_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Intrinio Id", - "description": "Intrinio unique identifier for the security." - }, - "intraday_nav_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Intraday Nav Symbol", - "description": "Intraday Net Asset Value (NAV) symbol." - }, - "primary_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Primary Symbol", - "description": "The primary ticker field is used for Exchange Traded Products (ETPs) that have multiple listings and share classes. If an ETP has multiple listings or share classes, the same primary ticker is assigned to all the listings and share classes." - }, - "etp_structure_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Etp Structure Type", - "description": "Classifies Exchange Traded Products (ETPs) into very broad categories based on its legal structure." - }, - "legal_structure": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Legal Structure", - "description": "Legal structure of the fund." - }, - "issuer": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Issuer", - "description": "Issuer of the ETF." - }, - "etn_issuing_bank": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Etn Issuing Bank", - "description": "If the product is an Exchange Traded Note (ETN), this field identifies the issuing bank." - }, - "fund_family": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Fund Family", - "description": "This field identifies the fund family to which the ETF belongs, as categorized by the ETF Sponsor." - }, - "investment_style": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Investment Style", - "description": "Investment style of the ETF." - }, - "derivatives_based": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Derivatives Based", - "description": "This field is populated if the ETF holds either listed or over-the-counter derivatives in its portfolio." - }, - "income_category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Income Category", - "description": "Identifies if an Exchange Traded Fund (ETF) falls into a category that is specifically designed to provide a high yield or income" - }, - "asset_class": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Asset Class", - "description": "Captures the underlying nature of the securities in the Exchanged Traded Product (ETP)." - }, - "other_asset_types": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Other Asset Types", - "description": "If 'asset_class' field is classified as 'Other Asset Types' this field captures the specific category of the underlying assets." - }, - "single_category_designation": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Single Category Designation", - "description": "This categorization is created for those users who want every ETF to be 'forced' into a single bucket, so that the assets for all categories will always sum to the total market." - }, - "beta_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Beta Type", - "description": "This field identifies whether an ETF provides 'Traditional' beta exposure or 'Smart' beta exposure. ETFs that are active (i.e. non-indexed), leveraged / inverse or have a proprietary quant model (i.e. that don't provide indexed exposure to a targeted factor) are classified separately." - }, - "beta_details": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Beta Details", - "description": "This field provides further detail within the traditional and smart beta categories." - }, - "market_cap_range": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Market Cap Range", - "description": "Equity ETFs are classified as falling into categories based on the description of their investment strategy in the prospectus. Examples ('Mega Cap', 'Large Cap', 'Mid Cap', etc.)" - }, - "market_cap_weighting_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Market Cap Weighting Type", - "description": "For ETFs that take the value 'Market Cap Weighted' in the 'index_weighting_scheme' field, this field provides detail on the market cap weighting type." - }, - "index_weighting_scheme": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Index Weighting Scheme", - "description": "For ETFs that track an underlying index, this field provides detail on the index weighting type." - }, - "index_linked": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Index Linked", - "description": "This field identifies whether an ETF is index linked or active." - }, - "index_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Index Name", - "description": "This field identifies the name of the underlying index tracked by the ETF, if applicable." - }, - "index_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Index Symbol", - "description": "This field identifies the OpenFIGI ticker for the Index underlying the ETF." - }, - "parent_index": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Parent Index", - "description": "This field identifies the name of the parent index, which represents the broader universe from which the index underlying the ETF is created, if applicable." - }, - "index_family": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Index Family", - "description": "This field identifies the index family to which the index underlying the ETF belongs. The index family is represented as categorized by the index provider." - }, - "broader_index_family": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Broader Index Family", - "description": "This field identifies the broader index family to which the index underlying the ETF belongs. The broader index family is represented as categorized by the index provider." - }, - "index_provider": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Index Provider", - "description": "This field identifies the Index provider for the index underlying the ETF, if applicable." - }, - "index_provider_code": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Index Provider Code", - "description": "This field provides the First Bridge code for each Index provider, corresponding to the index underlying the ETF if applicable." - }, - "replication_structure": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Replication Structure", - "description": "The replication structure of the Exchange Traded Product (ETP)." - }, - "growth_value_tilt": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Growth Value Tilt", - "description": "Classifies equity ETFs as either 'Growth' or Value' based on the stated style tilt in the ETF prospectus. Equity ETFs that do not have a stated style tilt are classified as 'Core / Blend'." - }, - "growth_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Growth Type", - "description": "For ETFs that are classified as 'Growth' in 'growth_value_tilt', this field further identifies those where the stocks in the ETF are both selected and weighted based on their growth (style factor) scores." - }, - "value_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Value Type", - "description": "For ETFs that are classified as 'Value' in 'growth_value_tilt', this field further identifies those where the stocks in the ETF are both selected and weighted based on their value (style factor) scores." - }, - "sector": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Sector", - "description": "For equity ETFs that aim to provide targeted exposure to a sector or industry, this field identifies the Sector that it provides the exposure to." - }, - "industry": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Industry", - "description": "For equity ETFs that aim to provide targeted exposure to an industry, this field identifies the Industry that it provides the exposure to." - }, - "industry_group": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Industry Group", - "description": "For equity ETFs that aim to provide targeted exposure to a sub-industry, this field identifies the sub-Industry that it provides the exposure to." - }, - "cross_sector_theme": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Cross Sector Theme", - "description": "For equity ETFs that aim to provide targeted exposure to a specific investment theme that cuts across GICS sectors, this field identifies the specific cross-sector theme. Examples ('Agri-business', 'Natural Resources', 'Green Investing', etc.)" - }, - "natural_resources_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Natural Resources Type", - "description": "For ETFs that are classified as 'Natural Resources' in the 'cross_sector_theme' field, this field provides further detail on the type of Natural Resources exposure." - }, - "us_or_excludes_us": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Us Or Excludes Us", - "description": "Takes the value of 'Domestic' for US exposure, 'International' for non-US exposure and 'Global' for exposure that includes all regions including the US." - }, - "developed_emerging": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Developed Emerging", - "description": "This field identifies the stage of development of the markets that the ETF provides exposure to." - }, - "specialized_region": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Specialized Region", - "description": "This field is populated if the ETF provides targeted exposure to a specific type of geography-based grouping that does not fall into a specific country or continent grouping. Examples ('BRIC', 'Chindia', etc.)" - }, - "continent": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Continent", - "description": "This field is populated if the ETF provides targeted exposure to a specific continent or country within that Continent." - }, - "latin_america_sub_group": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Latin America Sub Group", - "description": "For ETFs that are classified as 'Latin America' in the 'continent' field, this field provides further detail on the type of regional exposure." - }, - "europe_sub_group": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Europe Sub Group", - "description": "For ETFs that are classified as 'Europe' in the 'continent' field, this field provides further detail on the type of regional exposure." - }, - "asia_sub_group": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Asia Sub Group", - "description": "For ETFs that are classified as 'Asia' in the 'continent' field, this field provides further detail on the type of regional exposure." - }, - "specific_country": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Specific Country", - "description": "This field is populated if the ETF provides targeted exposure to a specific country." - }, - "china_listing_location": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "China Listing Location", - "description": "For ETFs that are classified as 'China' in the 'country' field, this field provides further detail on the type of exposure in the underlying securities." - }, - "us_state": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Us State", - "description": "Takes the value of a US state if the ETF provides targeted exposure to the municipal bonds or equities of companies." - }, - "real_estate": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Real Estate", - "description": "For ETFs that provide targeted real estate exposure, this field is populated if the ETF provides targeted exposure to a specific segment of the real estate market." - }, - "fundamental_weighting_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Fundamental Weighting Type", - "description": "For ETFs that take the value 'Fundamental Weighted' in the 'index_weighting_scheme' field, this field provides detail on the fundamental weighting methodology." - }, - "dividend_weighting_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Dividend Weighting Type", - "description": "For ETFs that take the value 'Dividend Weighted' in the 'index_weighting_scheme' field, this field provides detail on the dividend weighting methodology." - }, - "bond_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Bond Type", - "description": "For ETFs where 'asset_class_type' is 'Bonds', this field provides detail on the type of bonds held in the ETF." - }, - "government_bond_types": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Government Bond Types", - "description": "For bond ETFs that take the value 'Treasury & Government' in 'bond_type', this field provides detail on the exposure." - }, - "municipal_bond_region": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Municipal Bond Region", - "description": "For bond ETFs that take the value 'Municipal' in 'bond_type', this field provides additional detail on the geographic exposure." - }, - "municipal_vrdo": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Municipal Vrdo", - "description": "For bond ETFs that take the value 'Municipal' in 'bond_type', this field identifies those ETFs that specifically provide exposure to Variable Rate Demand Obligations." - }, - "mortgage_bond_types": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Mortgage Bond Types", - "description": "For bond ETFs that take the value 'Mortgage' in 'bond_type', this field provides additional detail on the type of underlying securities." - }, - "bond_tax_status": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Bond Tax Status", - "description": "For all US bond ETFs, this field provides additional detail on the tax treatment of the underlying securities." - }, - "credit_quality": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Credit Quality", - "description": "For all bond ETFs, this field helps to identify if the ETF provides targeted exposure to securities of a specific credit quality range." - }, - "average_maturity": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Average Maturity", - "description": "For all bond ETFs, this field helps to identify if the ETF provides targeted exposure to securities of a specific maturity range." - }, - "specific_maturity_year": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Specific Maturity Year", - "description": "For all bond ETFs that take the value 'Specific Maturity Year' in the 'average_maturity' field, this field specifies the calendar year." - }, - "commodity_types": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Commodity Types", - "description": "For ETFs where 'asset_class_type' is 'Commodities', this field provides detail on the type of commodities held in the ETF." - }, - "energy_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Energy Type", - "description": "For ETFs where 'commodity_type' is 'Energy', this field provides detail on the type of energy exposure provided by the ETF." - }, - "agricultural_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Agricultural Type", - "description": "For ETFs where 'commodity_type' is 'Agricultural', this field provides detail on the type of agricultural exposure provided by the ETF." - }, - "livestock_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Livestock Type", - "description": "For ETFs where 'commodity_type' is 'Livestock', this field provides detail on the type of livestock exposure provided by the ETF." - }, - "metal_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Metal Type", - "description": "For ETFs where 'commodity_type' is 'Gold & Metals', this field provides detail on the type of exposure provided by the ETF." - }, - "inverse_leveraged": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Inverse Leveraged", - "description": "This field is populated if the ETF provides inverse or leveraged exposure." - }, - "target_date_multi_asset_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Target Date Multi Asset Type", - "description": "For ETFs where 'asset_class_type' is 'Target Date / MultiAsset', this field provides detail on the type of commodities held in the ETF." - }, - "currency_pair": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Currency Pair", - "description": "This field is populated if the ETF's strategy involves providing exposure to the movements of a currency or involves hedging currency exposure." - }, - "social_environmental_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Social Environmental Type", - "description": "This field is populated if the ETF's strategy involves providing exposure to a specific social or environmental theme." - }, - "clean_energy_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Clean Energy Type", - "description": "This field is populated if the ETF has a value of 'Clean Energy' in the 'social_environmental_type' field." - }, - "dividend_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Dividend Type", - "description": "This field is populated if the ETF has an intended investment objective of holding dividend-oriented stocks as stated in the prospectus." - }, - "regular_dividend_payor_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Regular Dividend Payor Type", - "description": "This field is populated if the ETF has a value of'Dividend - Regular Payors' in the 'dividend_type' field." - }, - "quant_strategies_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Quant Strategies Type", - "description": "This field is populated if the ETF has either an index-linked or active strategy that is based on a proprietary quantitative strategy." - }, - "other_quant_models": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Other Quant Models", - "description": "For ETFs where 'quant_strategies_type' is 'Other Quant Model', this field provides the name of the specific proprietary quant model used as the underlying strategy for the ETF." - }, - "hedge_fund_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Hedge Fund Type", - "description": "For ETFs where 'other_asset_types' is 'Hedge Fund Replication', this field provides detail on the type of hedge fund replication strategy." - }, - "excludes_financials": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Excludes Financials", - "description": "For equity ETFs, identifies those ETFs where the underlying fund holdings will not hold financials stocks, based on the funds intended objective." - }, - "excludes_technology": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Excludes Technology", - "description": "For equity ETFs, identifies those ETFs where the underlying fund holdings will not hold technology stocks, based on the funds intended objective." - }, - "holds_only_nyse_stocks": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Holds Only Nyse Stocks", - "description": "If true, the ETF is an equity ETF and holds only stocks listed on NYSE." - }, - "holds_only_nasdaq_stocks": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Holds Only Nasdaq Stocks", - "description": "If true, the ETF is an equity ETF and holds only stocks listed on Nasdaq." - }, - "holds_mlp": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Holds Mlp", - "description": "If true, the ETF's investment objective explicitly specifies that it holds MLPs as an intended part of its investment strategy." - }, - "holds_preferred_stock": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Holds Preferred Stock", - "description": "If true, the ETF's investment objective explicitly specifies that it holds preferred stock as an intended part of its investment strategy." - }, - "holds_closed_end_funds": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Holds Closed End Funds", - "description": "If true, the ETF's investment objective explicitly specifies that it holds closed end funds as an intended part of its investment strategy." - }, - "holds_adr": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Holds Adr", - "description": "If true, he ETF's investment objective explicitly specifies that it holds American Depositary Receipts (ADRs) as an intended part of its investment strategy." - }, - "laddered": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Laddered", - "description": "For bond ETFs, this field identifies those ETFs that specifically hold bonds in a laddered structure, where the bonds are scheduled to mature in an annual, sequential structure." - }, - "zero_coupon": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Zero Coupon", - "description": "For bond ETFs, this field identifies those ETFs that specifically hold zero coupon Treasury Bills." - }, - "floating_rate": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Floating Rate", - "description": "For bond ETFs, this field identifies those ETFs that specifically hold floating rate bonds." - }, - "build_america_bonds": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Build America Bonds", - "description": "For municipal bond ETFs, this field identifies those ETFs that specifically hold Build America Bonds." - }, - "dynamic_futures_roll": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Dynamic Futures Roll", - "description": "If the product holds futures contracts, this field identifies those products where the roll strategy is dynamic (rather than entirely rules based), so as to minimize roll costs." - }, - "currency_hedged": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Currency Hedged", - "description": "This field is populated if the ETF's strategy involves hedging currency exposure." - }, - "includes_short_exposure": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Includes Short Exposure", - "description": "This field is populated if the ETF has short exposure in any of its holdings e.g. in a long/short or inverse ETF." - }, - "ucits": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Ucits", - "description": "If true, the Exchange Traded Product (ETP) is Undertakings for the Collective Investment in Transferable Securities (UCITS) compliant" - }, - "registered_countries": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Registered Countries", - "description": "The list of countries where the ETF is legally registered for sale. This may differ from where the ETF is domiciled or traded, particularly in Europe." - }, - "issuer_country": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Issuer Country", - "description": "2 letter ISO country code for the country where the issuer is located." - }, - "domicile": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Domicile", - "description": "2 letter ISO country code for the country where the ETP is domiciled." - }, - "listing_country": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Listing Country", - "description": "2 letter ISO country code for the country of the primary listing." - }, - "listing_region": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Listing Region", - "description": "Geographic region in the country of the primary listing falls." - }, - "bond_currency_denomination": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Bond Currency Denomination", - "description": "For all bond ETFs, this field provides additional detail on the currency denomination of the underlying securities." - }, - "base_currency": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Base Currency", - "description": "Base currency in which NAV is reported." - }, - "listing_currency": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Listing Currency", - "description": "Listing currency of the Exchange Traded Product (ETP) in which it is traded. Reported using the 3-digit ISO currency code." - }, - "number_of_holdings": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Number Of Holdings", - "description": "The number of holdings in the ETF." - }, - "month_end_assets": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Month End Assets", - "description": "Net assets in millions of dollars as of the most recent month end." - }, - "net_expense_ratio": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Net Expense Ratio", - "description": "Gross expense net of Fee Waivers, as a percentage of net assets as published by the ETF issuer.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "etf_portfolio_turnover": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Etf Portfolio Turnover", - "description": "The percentage of positions turned over in the last 12 months.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "symbol", - "name", - "inception_date" - ], - "title": "IntrinioEtfInfo", - "description": "Intrinio ETF Info Data." - }, - "IntrinioEtfPricePerformance": { - "properties": { - "symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Symbol", - "description": "Symbol representing the entity requested in the data." - }, - "one_day": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "One Day", - "description": "One-day return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "wtd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Wtd", - "description": "Week to date return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "one_week": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "One Week", - "description": "One-week return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "mtd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Mtd", - "description": "Month to date return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "one_month": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "One Month", - "description": "One-month return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "qtd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Qtd", - "description": "Quarter to date return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "three_month": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Three Month", - "description": "Three-month return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "six_month": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Six Month", - "description": "Six-month return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "ytd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ytd", - "description": "Year to date return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "one_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "One Year", - "description": "One-year return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "two_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Two Year", - "description": "Two-year return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "three_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Three Year", - "description": "Three-year return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "four_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Four Year", - "description": "Four-year", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "five_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Five Year", - "description": "Five-year return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "ten_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ten Year", - "description": "Ten-year return.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "max": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Max", - "description": "Return from the beginning of the time series.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "max_annualized": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Max Annualized", - "description": "Annualized rate of return from inception.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "volatility_one_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volatility One Year", - "description": "Trailing one-year annualized volatility.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "volatility_three_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volatility Three Year", - "description": "Trailing three-year annualized volatility.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "volatility_five_year": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volatility Five Year", - "description": "Trailing five-year annualized volatility.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "volume": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Volume", - "description": "The trading volume." - }, - "volume_avg_30": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume Avg 30", - "description": "The one-month average daily volume." - }, - "volume_avg_90": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume Avg 90", - "description": "The three-month average daily volume." - }, - "volume_avg_180": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume Avg 180", - "description": "The six-month average daily volume." - }, - "beta": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Beta", - "description": "Beta compared to the S&P 500." - }, - "nav": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Nav", - "description": "Net asset value per share." - }, - "year_high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Year High", - "description": "The 52-week high price." - }, - "year_low": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Year Low", - "description": "The 52-week low price." - }, - "market_cap": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Market Cap", - "description": "The market capitalization." - }, - "shares_outstanding": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Shares Outstanding", - "description": "The number of shares outstanding." - }, - "updated": { - "anyOf": [ - { - "type": "string", - "format": "date" - }, - { - "type": "null" - } - ], - "title": "Updated", - "description": "The date of the data." - } - }, - "additionalProperties": true, - "type": "object", - "title": "IntrinioEtfPricePerformance", - "description": "Intrinio ETF Performance Data." - }, - "IntrinioEtfSearch": { - "properties": { - "symbol": { - "type": "string", - "title": "Symbol", - "description": "Symbol representing the entity requested in the data.(ETF)" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name", - "description": "Name of the ETF." - }, - "exchange": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Exchange", - "description": "The exchange MIC code." - }, - "figi_ticker": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Figi Ticker", - "description": "The OpenFIGI ticker." - }, - "ric": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Ric", - "description": "The Reuters Instrument Code." - }, - "isin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Isin", - "description": "The International Securities Identification Number." - }, - "sedol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Sedol", - "description": "The Stock Exchange Daily Official List." - }, - "intrinio_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Intrinio Id", - "description": "The unique Intrinio ID for the security." - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "symbol" - ], - "title": "IntrinioEtfSearch", - "description": "Intrinio ETF Search Data." - }, "IntrinioFinancialRatios": { "properties": { "period_ending": { @@ -44151,6 +39522,95 @@ "title": "IntrinioInsiderTrading", "description": "Intrinio Insider Trading Data." }, + "IntrinioInstitutionalOwnership": { + "properties": { + "symbol": { + "type": "string", + "title": "Symbol", + "description": "Symbol representing the entity requested in the data." + }, + "cik": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cik", + "description": "Central Index Key (CIK) for the requested entity." + }, + "date": { + "type": "string", + "format": "date", + "title": "Date", + "description": "The date of the data." + }, + "name": { + "type": "string", + "title": "Name", + "description": "Name of the institutional owner." + }, + "value": { + "type": "number", + "title": "Value", + "description": "Value of the institutional owner." + }, + "amount": { + "type": "number", + "title": "Amount", + "description": "Amount of the institutional owner." + }, + "sole_voting_authority": { + "type": "number", + "title": "Sole Voting Authority", + "description": "Sole voting authority of the institutional owner." + }, + "shared_voting_authority": { + "type": "number", + "title": "Shared Voting Authority", + "description": "Shared voting authority of the institutional owner." + }, + "no_voting_authority": { + "type": "number", + "title": "No Voting Authority", + "description": "No voting authority of the institutional owner." + }, + "previous_amount": { + "type": "number", + "title": "Previous Amount", + "description": "Previous amount of the institutional owner." + }, + "amount_change": { + "type": "number", + "title": "Amount Change", + "description": "Amount change of the institutional owner." + }, + "amount_percent_change": { + "type": "number", + "title": "Amount Percent Change", + "description": "Amount percent change of the institutional owner." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "symbol", + "date", + "name", + "value", + "amount", + "sole_voting_authority", + "shared_voting_authority", + "no_voting_authority", + "previous_amount", + "amount_change", + "amount_percent_change" + ], + "title": "IntrinioInstitutionalOwnership", + "description": "Intrinio Institutional Ownership Data." + }, "IntrinioKeyMetrics": { "properties": { "symbol": { @@ -44189,464 +39649,42 @@ "title": "Pe Ratio", "description": "Price-to-earnings ratio (P/E ratio)" }, - "price_to_book": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price To Book", - "description": "Price to book ratio." - }, - "price_to_tangible_book": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price To Tangible Book", - "description": "Price to tangible book ratio." - }, - "price_to_revenue": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price To Revenue", - "description": "Price to revenue ratio." - }, - "quick_ratio": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Quick Ratio", - "description": "Quick ratio." - }, - "gross_margin": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Gross Margin", - "description": "Gross margin, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "ebit_margin": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ebit Margin", - "description": "EBIT margin, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "profit_margin": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Profit Margin", - "description": "Profit margin, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "eps": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Eps", - "description": "Basic earnings per share." - }, - "eps_growth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Eps Growth", - "description": "EPS growth, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "revenue_growth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Revenue Growth", - "description": "Revenue growth, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "ebitda_growth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ebitda Growth", - "description": "EBITDA growth, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "ebit_growth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ebit Growth", - "description": "EBIT growth, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "net_income_growth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Net Income Growth", - "description": "Net income growth, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "free_cash_flow_to_firm_growth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Free Cash Flow To Firm Growth", - "description": "Free cash flow to firm growth, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "invested_capital_growth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Invested Capital Growth", - "description": "Invested capital growth, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "return_on_assets": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Return On Assets", - "description": "Return on assets, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "return_on_equity": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Return On Equity", - "description": "Return on equity, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "return_on_invested_capital": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Return On Invested Capital", - "description": "Return on invested capital, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "ebitda": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Ebitda", - "description": "Earnings before interest, taxes, depreciation, and amortization." - }, - "ebit": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Ebit", - "description": "Earnings before interest and taxes." - }, - "long_term_debt": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Long Term Debt", - "description": "Long-term debt." - }, - "total_debt": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Total Debt", - "description": "Total debt." - }, - "total_capital": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Total Capital", - "description": "The sum of long-term debt and total shareholder equity." - }, - "enterprise_value": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Enterprise Value", - "description": "Enterprise value." - }, - "free_cash_flow_to_firm": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Free Cash Flow To Firm", - "description": "Free cash flow to firm." - }, - "altman_z_score": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Altman Z Score", - "description": "Altman Z-score." - }, "beta": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], + "type": "number", "title": "Beta", - "description": "Beta relative to the broad market (rolling three-year)." + "description": "Beta relative to the broad market calculated on a rolling three-year basis." + }, + "volume": { + "type": "number", + "title": "Volume", + "description": "Volume" + }, + "fifty_two_week_high": { + "type": "number", + "title": "Fifty Two Week High", + "description": "52 week high" + }, + "fifty_two_week_low": { + "type": "number", + "title": "Fifty Two Week Low", + "description": "52 week low" }, "dividend_yield": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], + "type": "number", "title": "Dividend Yield", "description": "Dividend yield, as a normalized percent.", "x-frontend_multiply": 100, "x-unit_measurement": "percent" - }, - "earnings_yield": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Earnings Yield", - "description": "Earnings yield, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "last_price": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Last Price", - "description": "Last price of the stock." - }, - "year_high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Year High", - "description": "52 week high" - }, - "year_low": { - "type": "number", - "title": "Year Low", - "description": "52 week low" - }, - "volume_avg": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Volume Avg", - "description": "Average daily volume." - }, - "short_interest": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Short Interest", - "description": "Number of shares reported as sold short." - }, - "shares_outstanding": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Shares Outstanding", - "description": "Weighted average shares outstanding (TTM)." - }, - "days_to_cover": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Days To Cover", - "description": "Days to cover short interest, based on average daily volume." } }, "additionalProperties": true, "type": "object", + "required": [ + "beta", + "volume", + "fifty_two_week_high", + "fifty_two_week_low" + ], "title": "IntrinioKeyMetrics", "description": "Intrinio Key Metrics Data." }, @@ -44693,12 +39731,13 @@ "title": "IntrinioLatestAttributes", "description": "Intrinio Latest Attributes Data." }, - "IntrinioMarketSnapshots": { + "IntrinioMarketIndices": { "properties": { - "symbol": { + "date": { "type": "string", - "title": "Symbol", - "description": "Symbol representing the entity requested in the data." + "format": "date-time", + "title": "Date", + "description": "The date of the data." }, "open": { "anyOf": [ @@ -44759,176 +39798,15 @@ ], "title": "Volume", "description": "The trading volume." - }, - "prev_close": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Prev Close", - "description": "The previous close price." - }, - "change": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Change", - "description": "The change in price from the previous close." - }, - "change_percent": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Change Percent", - "description": "The change in price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - }, - "last_price": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Last Price", - "description": "The last trade price." - }, - "last_size": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Last Size", - "description": "The last trade size." - }, - "last_volume": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Last Volume", - "description": "The last trade volume." - }, - "last_trade_timestamp": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Last Trade Timestamp", - "description": "The timestamp of the last trade." - }, - "bid_size": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Bid Size", - "description": "The size of the last bid price. Bid price and size is not always available." - }, - "bid_price": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Bid Price", - "description": "The last bid price. Bid price and size is not always available." - }, - "ask_price": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Ask Price", - "description": "The last ask price. Ask price and size is not always available." - }, - "ask_size": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Ask Size", - "description": "The size of the last ask price. Ask price and size is not always available." - }, - "last_bid_timestamp": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Last Bid Timestamp", - "description": "The timestamp of the last bid price. Bid price and size is not always available." - }, - "last_ask_timestamp": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Last Ask Timestamp", - "description": "The timestamp of the last ask price. Ask price and size is not always available." } }, "additionalProperties": true, "type": "object", "required": [ - "symbol" + "date" ], - "title": "IntrinioMarketSnapshots", - "description": "Intrinio Market Snapshots Data." + "title": "IntrinioMarketIndices", + "description": "Intrinio Market Indices Data." }, "IntrinioOptionsChains": { "properties": { @@ -45468,64 +40346,16 @@ "title": "Contract Symbol", "description": "Contract symbol for the option." }, - "trade_timestamp": { - "type": "string", - "format": "date-time", - "title": "Trade Timestamp", - "description": "The datetime of order placement." - }, "trade_type": { "type": "string", - "enum": [ - "block", - "sweep", - "large" - ], "title": "Trade Type", "description": "The type of unusual trade." }, "sentiment": { "type": "string", - "enum": [ - "bullish", - "bearish", - "neutral" - ], "title": "Sentiment", "description": "Bullish, Bearish, or Neutral Sentiment is estimated based on whether the trade was executed at the bid, ask, or mark price." }, - "bid_at_execution": { - "type": "number", - "title": "Bid At Execution", - "description": "Bid price at execution." - }, - "ask_at_execution": { - "type": "number", - "title": "Ask At Execution", - "description": "Ask price at execution." - }, - "average_price": { - "type": "number", - "title": "Average Price", - "description": "The average premium paid per option contract." - }, - "underlying_price_at_execution": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Underlying Price At Execution", - "description": "Price of the underlying security at execution of trade." - }, - "total_size": { - "type": "integer", - "title": "Total Size", - "description": "The total number of contracts involved in a single transaction." - }, "total_value": { "anyOf": [ { @@ -45537,20 +40367,52 @@ ], "title": "Total Value", "description": "The aggregated value of all option contract premiums included in the trade." + }, + "total_size": { + "type": "integer", + "title": "Total Size", + "description": "The total number of contracts involved in a single transaction." + }, + "average_price": { + "type": "number", + "title": "Average Price", + "description": "The average premium paid per option contract." + }, + "ask_at_execution": { + "type": "number", + "title": "Ask At Execution", + "description": "Ask price at execution." + }, + "bid_at_execution": { + "type": "number", + "title": "Bid At Execution", + "description": "Bid price at execution." + }, + "underlying_price_at_execution": { + "type": "number", + "title": "Underlying Price At Execution", + "description": "Price of the underlying security at execution of trade." + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "The UTC timestamp of order placement." } }, "additionalProperties": true, "type": "object", "required": [ "contract_symbol", - "trade_timestamp", "trade_type", "sentiment", - "bid_at_execution", - "ask_at_execution", - "average_price", + "total_value", "total_size", - "total_value" + "average_price", + "ask_at_execution", + "bid_at_execution", + "underlying_price_at_execution", + "timestamp" ], "title": "IntrinioOptionsUnusual", "description": "Intrinio Unusual Options Data." @@ -45974,7 +40836,7 @@ } ], "title": "Images", - "description": "Images associated with the article." + "description": "Images associated with the news." }, "text": { "anyOf": [ @@ -47459,6 +42321,9 @@ }, { "$ref": "#/components/schemas/PolygonCompanyNews" + }, + { + "$ref": "#/components/schemas/TiingoCompanyNews" } ], "discriminator": { @@ -47467,7 +42332,8 @@ "benzinga": "#/components/schemas/BenzingaCompanyNews", "fmp": "#/components/schemas/FMPCompanyNews", "intrinio": "#/components/schemas/IntrinioCompanyNews", - "polygon": "#/components/schemas/PolygonCompanyNews" + "polygon": "#/components/schemas/PolygonCompanyNews", + "tiingo": "#/components/schemas/TiingoCompanyNews" } } }, @@ -47708,13 +42574,17 @@ }, { "$ref": "#/components/schemas/PolygonCryptoHistorical" + }, + { + "$ref": "#/components/schemas/TiingoCryptoHistorical" } ], "discriminator": { "propertyName": "provider", "mapping": { "fmp": "#/components/schemas/FMPCryptoHistorical", - "polygon": "#/components/schemas/PolygonCryptoHistorical" + "polygon": "#/components/schemas/PolygonCryptoHistorical", + "tiingo": "#/components/schemas/TiingoCryptoHistorical" } } }, @@ -47876,13 +42746,17 @@ }, { "$ref": "#/components/schemas/PolygonCurrencyHistorical" + }, + { + "$ref": "#/components/schemas/TiingoCurrencyHistorical" } ], "discriminator": { "propertyName": "provider", "mapping": { "fmp": "#/components/schemas/FMPCurrencyHistorical", - "polygon": "#/components/schemas/PolygonCurrencyHistorical" + "polygon": "#/components/schemas/PolygonCurrencyHistorical", + "tiingo": "#/components/schemas/TiingoCurrencyHistorical" } } }, @@ -48115,88 +42989,6 @@ "title": "OBBject_CurrencyReferenceRates", "description": "OBBject with results of type CurrencyReferenceRates" }, - "OBBject_CurrencySnapshots": { - "properties": { - "_id": { - "type": "string", - "title": " Id" - }, - "results": { - "anyOf": [ - { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/FMPCurrencySnapshots" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "fmp": "#/components/schemas/FMPCurrencySnapshots" - } - } - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Results", - "description": "Serializable results.", - "has_list": true, - "is_union": false, - "model": "CurrencySnapshots" - }, - "provider": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Provider", - "description": "Provider name." - }, - "warnings": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/Warning_" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Warnings", - "description": "List of warnings." - }, - "chart": { - "anyOf": [ - { - "$ref": "#/components/schemas/Chart" - }, - { - "type": "null" - } - ], - "description": "Chart object." - }, - "extra": { - "type": "object", - "title": "Extra", - "description": "Extra info." - } - }, - "type": "object", - "title": "OBBject_CurrencySnapshots", - "description": "OBBject with results of type CurrencySnapshots" - }, "OBBject_DiscountWindowPrimaryCreditRate": { "properties": { "_id": { @@ -48794,6 +43586,9 @@ }, { "$ref": "#/components/schemas/PolygonEquityHistorical" + }, + { + "$ref": "#/components/schemas/TiingoEquityHistorical" } ], "discriminator": { @@ -48801,7 +43596,8 @@ "mapping": { "fmp": "#/components/schemas/FMPEquityHistorical", "intrinio": "#/components/schemas/IntrinioEquityHistorical", - "polygon": "#/components/schemas/PolygonEquityHistorical" + "polygon": "#/components/schemas/PolygonEquityHistorical", + "tiingo": "#/components/schemas/TiingoEquityHistorical" } } }, @@ -49694,96 +44490,6 @@ "title": "OBBject_EtfEquityExposure", "description": "OBBject with results of type EtfEquityExposure" }, - "OBBject_EtfHistorical": { - "properties": { - "_id": { - "type": "string", - "title": " Id" - }, - "results": { - "anyOf": [ - { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/FMPEquityHistorical" - }, - { - "$ref": "#/components/schemas/IntrinioEquityHistorical" - }, - { - "$ref": "#/components/schemas/PolygonEquityHistorical" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "fmp": "#/components/schemas/FMPEquityHistorical", - "intrinio": "#/components/schemas/IntrinioEquityHistorical", - "polygon": "#/components/schemas/PolygonEquityHistorical" - } - } - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Results", - "description": "Serializable results.", - "has_list": true, - "is_union": false, - "model": "EtfHistorical" - }, - "provider": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Provider", - "description": "Provider name." - }, - "warnings": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/Warning_" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Warnings", - "description": "List of warnings." - }, - "chart": { - "anyOf": [ - { - "$ref": "#/components/schemas/Chart" - }, - { - "type": "null" - } - ], - "description": "Chart object." - }, - "extra": { - "type": "object", - "title": "Extra", - "description": "Extra info." - } - }, - "type": "object", - "title": "OBBject_EtfHistorical", - "description": "OBBject with results of type EtfHistorical" - }, "OBBject_EtfHoldings": { "properties": { "_id": { @@ -49798,9 +44504,6 @@ { "$ref": "#/components/schemas/FMPEtfHoldings" }, - { - "$ref": "#/components/schemas/IntrinioEtfHoldings" - }, { "$ref": "#/components/schemas/SecEtfHoldings" } @@ -49809,7 +44512,6 @@ "propertyName": "provider", "mapping": { "fmp": "#/components/schemas/FMPEtfHoldings", - "intrinio": "#/components/schemas/IntrinioEtfHoldings", "sec": "#/components/schemas/SecEtfHoldings" } } @@ -50051,16 +44753,12 @@ "oneOf": [ { "$ref": "#/components/schemas/FMPEtfInfo" - }, - { - "$ref": "#/components/schemas/IntrinioEtfInfo" } ], "discriminator": { "propertyName": "provider", "mapping": { - "fmp": "#/components/schemas/FMPEtfInfo", - "intrinio": "#/components/schemas/IntrinioEtfInfo" + "fmp": "#/components/schemas/FMPEtfInfo" } } }, @@ -50124,92 +44822,6 @@ "title": "OBBject_EtfInfo", "description": "OBBject with results of type EtfInfo" }, - "OBBject_EtfPricePerformance": { - "properties": { - "_id": { - "type": "string", - "title": " Id" - }, - "results": { - "anyOf": [ - { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/FMPPricePerformance" - }, - { - "$ref": "#/components/schemas/IntrinioEtfPricePerformance" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "fmp": "#/components/schemas/FMPPricePerformance", - "intrinio": "#/components/schemas/IntrinioEtfPricePerformance" - } - } - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Results", - "description": "Serializable results.", - "has_list": true, - "is_union": false, - "model": "EtfPricePerformance" - }, - "provider": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Provider", - "description": "Provider name." - }, - "warnings": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/Warning_" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Warnings", - "description": "List of warnings." - }, - "chart": { - "anyOf": [ - { - "$ref": "#/components/schemas/Chart" - }, - { - "type": "null" - } - ], - "description": "Chart object." - }, - "extra": { - "type": "object", - "title": "Extra", - "description": "Extra info." - } - }, - "type": "object", - "title": "OBBject_EtfPricePerformance", - "description": "OBBject with results of type EtfPricePerformance" - }, "OBBject_EtfSearch": { "properties": { "_id": { @@ -50223,16 +44835,12 @@ "oneOf": [ { "$ref": "#/components/schemas/FMPEtfSearch" - }, - { - "$ref": "#/components/schemas/IntrinioEtfSearch" } ], "discriminator": { "propertyName": "provider", "mapping": { - "fmp": "#/components/schemas/FMPEtfSearch", - "intrinio": "#/components/schemas/IntrinioEtfSearch" + "fmp": "#/components/schemas/FMPEtfSearch" } } }, @@ -50714,88 +45322,6 @@ "title": "OBBject_FinancialRatios", "description": "OBBject with results of type FinancialRatios" }, - "OBBject_Form13FHR": { - "properties": { - "_id": { - "type": "string", - "title": " Id" - }, - "results": { - "anyOf": [ - { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/SecForm13FHR" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "sec": "#/components/schemas/SecForm13FHR" - } - } - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Results", - "description": "Serializable results.", - "has_list": true, - "is_union": false, - "model": "Form13FHR" - }, - "provider": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Provider", - "description": "Provider name." - }, - "warnings": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/Warning_" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Warnings", - "description": "List of warnings." - }, - "chart": { - "anyOf": [ - { - "$ref": "#/components/schemas/Chart" - }, - { - "type": "null" - } - ], - "description": "Chart object." - }, - "extra": { - "type": "object", - "title": "Extra", - "description": "Extra info." - } - }, - "type": "object", - "title": "OBBject_Form13FHR", - "description": "OBBject with results of type Form13FHR" - }, "OBBject_FredRegional": { "properties": { "_id": { @@ -52395,12 +46921,16 @@ "oneOf": [ { "$ref": "#/components/schemas/FMPInstitutionalOwnership" + }, + { + "$ref": "#/components/schemas/IntrinioInstitutionalOwnership" } ], "discriminator": { "propertyName": "provider", "mapping": { - "fmp": "#/components/schemas/FMPInstitutionalOwnership" + "fmp": "#/components/schemas/FMPInstitutionalOwnership", + "intrinio": "#/components/schemas/IntrinioInstitutionalOwnership" } } }, @@ -52641,21 +47171,30 @@ "oneOf": [ { "$ref": "#/components/schemas/FMPKeyMetrics" - }, - { - "$ref": "#/components/schemas/IntrinioKeyMetrics" } ], "discriminator": { "propertyName": "provider", "mapping": { - "fmp": "#/components/schemas/FMPKeyMetrics", - "intrinio": "#/components/schemas/IntrinioKeyMetrics" + "fmp": "#/components/schemas/FMPKeyMetrics" } } }, "type": "array" }, + { + "oneOf": [ + { + "$ref": "#/components/schemas/IntrinioKeyMetrics" + } + ], + "discriminator": { + "propertyName": "provider", + "mapping": { + "intrinio": "#/components/schemas/IntrinioKeyMetrics" + } + } + }, { "type": "null" } @@ -52663,7 +47202,7 @@ "title": "Results", "description": "Serializable results.", "has_list": true, - "is_union": false, + "is_union": true, "model": "KeyMetrics" }, "provider": { @@ -52890,21 +47429,21 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/FMPIndexHistorical" + "$ref": "#/components/schemas/FMPMarketIndices" }, { - "$ref": "#/components/schemas/IntrinioIndexHistorical" + "$ref": "#/components/schemas/IntrinioMarketIndices" }, { - "$ref": "#/components/schemas/PolygonIndexHistorical" + "$ref": "#/components/schemas/PolygonMarketIndices" } ], "discriminator": { "propertyName": "provider", "mapping": { - "fmp": "#/components/schemas/FMPIndexHistorical", - "intrinio": "#/components/schemas/IntrinioIndexHistorical", - "polygon": "#/components/schemas/PolygonIndexHistorical" + "fmp": "#/components/schemas/FMPMarketIndices", + "intrinio": "#/components/schemas/IntrinioMarketIndices", + "polygon": "#/components/schemas/PolygonMarketIndices" } } }, @@ -52982,9 +47521,6 @@ { "$ref": "#/components/schemas/FMPMarketSnapshots" }, - { - "$ref": "#/components/schemas/IntrinioMarketSnapshots" - }, { "$ref": "#/components/schemas/PolygonMarketSnapshots" } @@ -52993,7 +47529,6 @@ "propertyName": "provider", "mapping": { "fmp": "#/components/schemas/FMPMarketSnapshots", - "intrinio": "#/components/schemas/IntrinioMarketSnapshots", "polygon": "#/components/schemas/PolygonMarketSnapshots" } } @@ -53645,20 +48180,17 @@ "results": { "anyOf": [ { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/FMPPriceTargetConsensus" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "fmp": "#/components/schemas/FMPPriceTargetConsensus" - } + "oneOf": [ + { + "$ref": "#/components/schemas/FMPPriceTargetConsensus" } - }, - "type": "array" + ], + "discriminator": { + "propertyName": "provider", + "mapping": { + "fmp": "#/components/schemas/FMPPriceTargetConsensus" + } + } }, { "type": "null" @@ -53666,7 +48198,7 @@ ], "title": "Results", "description": "Serializable results.", - "has_list": true, + "has_list": false, "is_union": false, "model": "PriceTargetConsensus" }, @@ -55028,6 +49560,88 @@ "title": "OBBject_SymbolMap", "description": "OBBject with results of type SymbolMap" }, + "OBBject_TrailingDividendYield": { + "properties": { + "_id": { + "type": "string", + "title": " Id" + }, + "results": { + "anyOf": [ + { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TiingoTrailingDivYield" + } + ], + "discriminator": { + "propertyName": "provider", + "mapping": { + "tiingo": "#/components/schemas/TiingoTrailingDivYield" + } + } + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Results", + "description": "Serializable results.", + "has_list": true, + "is_union": false, + "model": "TrailingDividendYield" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Provider", + "description": "Provider name." + }, + "warnings": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/Warning_" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Warnings", + "description": "List of warnings." + }, + "chart": { + "anyOf": [ + { + "$ref": "#/components/schemas/Chart" + }, + { + "type": "null" + } + ], + "description": "Chart object." + }, + "extra": { + "type": "object", + "title": "Extra", + "description": "Extra info." + } + }, + "type": "object", + "title": "OBBject_TrailingDividendYield", + "description": "OBBject with results of type TrailingDividendYield" + }, "OBBject_TreasuryConstantMaturity": { "properties": { "_id": { @@ -55379,6 +49993,9 @@ }, { "$ref": "#/components/schemas/IntrinioWorldNews" + }, + { + "$ref": "#/components/schemas/TiingoWorldNews" } ], "discriminator": { @@ -55386,7 +50003,8 @@ "mapping": { "benzinga": "#/components/schemas/BenzingaWorldNews", "fmp": "#/components/schemas/FMPWorldNews", - "intrinio": "#/components/schemas/IntrinioWorldNews" + "intrinio": "#/components/schemas/IntrinioWorldNews", + "tiingo": "#/components/schemas/TiingoWorldNews" } } }, @@ -56596,8 +51214,7 @@ "vwap": { "anyOf": [ { - "type": "number", - "exclusiveMinimum": 0.0 + "type": "number" }, { "type": "null" @@ -56910,7 +51527,7 @@ } ], "title": "Sequence Num", - "description": "The sequence number represents the sequence in which message events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11)" + "description": "\n The sequence number represents the sequence in which message events happened.\n These are increasing and unique per ticker symbol, but will not always be sequential\n (e.g., 1, 2, 6, 9, 10, 11)\n " }, "participant_timestamp": { "anyOf": [ @@ -56923,7 +51540,7 @@ } ], "title": "Participant Timestamp", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + "description": "\n The nanosecond accuracy Participant/Exchange Unix Timestamp.\n This is the timestamp of when the quote was actually generated at the exchange.\n " }, "sip_timestamp": { "anyOf": [ @@ -56936,7 +51553,7 @@ } ], "title": "Sip Timestamp", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this quote from the exchange which produced it." + "description": "\n The nanosecond accuracy SIP Unix Timestamp.\n This is the timestamp of when the SIP received this quote from the exchange which produced it.\n " }, "trf_timestamp": { "anyOf": [ @@ -56949,7 +51566,7 @@ } ], "title": "Trf Timestamp", - "description": "The nanosecond accuracy TRF (Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this quote." + "description": "\n The nanosecond accuracy TRF (Trade Reporting Facility) Unix Timestamp.\n This is the timestamp of when the trade reporting facility received this quote.\n " } }, "additionalProperties": true, @@ -57620,12 +52237,13 @@ "title": "PolygonIndexHistorical", "description": "Polygon Index Historical Data." }, - "PolygonMarketSnapshots": { + "PolygonMarketIndices": { "properties": { - "symbol": { + "date": { "type": "string", - "title": "Symbol", - "description": "Symbol representing the entity requested in the data." + "format": "date-time", + "title": "Date", + "description": "The date of the data." }, "open": { "anyOf": [ @@ -57687,6 +52305,83 @@ "title": "Volume", "description": "The trading volume." }, + "transactions": { + "anyOf": [ + { + "type": "integer", + "exclusiveMinimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Transactions", + "description": "Number of transactions for the symbol in the time period." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "date" + ], + "title": "PolygonMarketIndices", + "description": "Polygon Market Indices Data." + }, + "PolygonMarketSnapshots": { + "properties": { + "symbol": { + "type": "string", + "title": "Symbol", + "description": "Symbol representing the entity requested in the data." + }, + "open": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Open", + "description": "The open price." + }, + "high": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "High", + "description": "The high price." + }, + "low": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Low", + "description": "The low price." + }, + "close": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Close", + "description": "The close price." + }, "prev_close": { "anyOf": [ { @@ -57709,7 +52404,7 @@ } ], "title": "Change", - "description": "The change in price from the previous close." + "description": "The change in price." }, "change_percent": { "anyOf": [ @@ -57721,9 +52416,19 @@ } ], "title": "Change Percent", - "description": "The change in price from the previous close, as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" + "description": "The change, as a percent." + }, + "volume": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Volume", + "description": "The trading volume." }, "vwap": { "anyOf": [ @@ -58750,7 +53455,7 @@ } ], "title": "Is Paid Kind", - "description": "If the debt security payments are paid in kind." + "description": "If the debt security payments are are paid in kind." }, "derivative_category": { "anyOf": [ @@ -59314,129 +54019,6 @@ "title": "SecEtfHoldings", "description": "SEC ETF Holdings Data." }, - "SecForm13FHR": { - "properties": { - "period_ending": { - "type": "string", - "format": "date", - "title": "Period Ending", - "description": "The end-of-quarter date of the filing." - }, - "issuer": { - "type": "string", - "title": "Issuer", - "description": "The name of the issuer." - }, - "cusip": { - "type": "string", - "title": "Cusip", - "description": "The CUSIP of the security." - }, - "asset_class": { - "type": "string", - "title": "Asset Class", - "description": "The title of the asset class for the security." - }, - "security_type": { - "anyOf": [ - { - "type": "string", - "enum": [ - "SH", - "PRN" - ] - }, - { - "type": "null" - } - ], - "title": "Security Type", - "description": "The total number of shares of the class of security or the principal amount of such class. 'SH' for shares. 'PRN' for principal amount. Convertible debt securities are reported as 'PRN'." - }, - "option_type": { - "anyOf": [ - { - "type": "string", - "enum": [ - "call", - "put" - ] - }, - { - "type": "null" - } - ], - "title": "Option Type", - "description": "Defined when the holdings being reported are put or call options. Only long positions are reported." - }, - "voting_authority_sole": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Voting Authority Sole", - "description": "The number of shares for which the Manager exercises sole voting authority (none)." - }, - "voting_authority_shared": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Voting Authority Shared", - "description": "The number of shares for which the Manager exercises a defined shared voting authority (none)." - }, - "voting_authority_other": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Voting Authority Other", - "description": "The number of shares for which the Manager exercises other shared voting authority (none)." - }, - "principal_amount": { - "type": "integer", - "title": "Principal Amount", - "description": "The total number of shares of the class of security or the principal amount of such class. Only long positions are reported" - }, - "value": { - "type": "integer", - "title": "Value", - "description": "The fair market value of the holding of the particular class of security. The value reported for options is the fair market value of the underlying security with respect to the number of shares controlled. Values are rounded to the nearest US dollar and use the closing price of the last trading day of the calendar year or quarter." - }, - "weight": { - "type": "number", - "title": "Weight", - "description": "The weight of the security relative to the market value of all securities in the filing , as a normalized percent.", - "x-frontend_multiply": 100, - "x-unit_measurement": "percent" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "period_ending", - "issuer", - "cusip", - "asset_class", - "principal_amount", - "value", - "weight" - ], - "title": "SecForm13FHR", - "description": "SEC Form 13F-HR Data." - }, "SecInstitutionsSearch": { "properties": { "name": { @@ -59774,50 +54356,20 @@ "title": "TEEconomicCalendar", "description": "Trading Economics Economic Calendar Data." }, - "UDFSearchResult": { + "TiingoCompanyNews": { "properties": { - "symbol": { + "date": { "type": "string", - "title": "Symbol" + "format": "date-time", + "title": "Date", + "description": "The date of the data. Here it is the published date of the article." }, - "full_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Full Name" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "short_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Short Name" - }, - "description": { + "title": { "type": "string", - "title": "Description" + "title": "Title", + "description": "Title of the article." }, - "exchange": { + "text": { "anyOf": [ { "type": "string" @@ -59826,17 +54378,17 @@ "type": "null" } ], - "title": "Exchange" + "title": "Text", + "description": "Text/body of the article." }, - "ticker": { - "type": "string", - "title": "Ticker" - }, - "logo_urls": { + "images": { "anyOf": [ { "items": { - "type": "string" + "additionalProperties": { + "type": "string" + }, + "type": "object" }, "type": "array" }, @@ -59844,22 +54396,531 @@ "type": "null" } ], - "title": "Logo Urls" + "title": "Images", + "description": "Images associated with the article." }, - "type": { + "url": { "type": "string", - "title": "Type" + "title": "Url", + "description": "URL to the article." + }, + "symbols": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Symbols", + "description": "Symbols associated with the article." + }, + "tags": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tags", + "description": "Tags associated with the news article." + }, + "article_id": { + "type": "integer", + "title": "Article Id", + "description": "Unique ID of the news article." + }, + "source": { + "type": "string", + "title": "Source", + "description": "News source." + }, + "crawl_date": { + "type": "string", + "format": "date-time", + "title": "Crawl Date", + "description": "Date the news article was crawled." } }, + "additionalProperties": true, "type": "object", "required": [ - "symbol", - "description", - "ticker", - "type" + "date", + "title", + "url", + "article_id", + "source", + "crawl_date" ], - "title": "UDFSearchResult", - "description": "UDF Symbol Search Model." + "title": "TiingoCompanyNews", + "description": "Tiingo Company News data." + }, + "TiingoCryptoHistorical": { + "properties": { + "date": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Date", + "description": "The date of the data." + }, + "open": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "Open", + "description": "The open price." + }, + "high": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "High", + "description": "The high price." + }, + "low": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "Low", + "description": "The low price." + }, + "close": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "Close", + "description": "The close price." + }, + "volume": { + "type": "number", + "title": "Volume", + "description": "The trading volume." + }, + "vwap": { + "anyOf": [ + { + "type": "number", + "exclusiveMinimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Vwap", + "description": "Volume Weighted Average Price over the period." + }, + "transactions": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Transactions", + "description": "Number of transactions for the symbol in the time period." + }, + "volume_notional": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume Notional", + "description": "The last size done for the asset on the specific date in the quote currency. The volume of the asset on the specific date in the quote currency." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "date", + "open", + "high", + "low", + "close", + "volume" + ], + "title": "TiingoCryptoHistorical", + "description": "Tiingo Crypto Historical Price Data." + }, + "TiingoCurrencyHistorical": { + "properties": { + "date": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Date", + "description": "The date of the data." + }, + "open": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "Open", + "description": "The open price." + }, + "high": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "High", + "description": "The high price." + }, + "low": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "Low", + "description": "The low price." + }, + "close": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "Close", + "description": "The close price." + }, + "volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume", + "description": "The trading volume." + }, + "vwap": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Vwap", + "description": "Volume Weighted Average Price over the period." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "date", + "open", + "high", + "low", + "close" + ], + "title": "TiingoCurrencyHistorical", + "description": "Tiingo Currency Historical Price Data." + }, + "TiingoEquityHistorical": { + "properties": { + "date": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Date", + "description": "The date of the data." + }, + "open": { + "type": "number", + "title": "Open", + "description": "The open price." + }, + "high": { + "type": "number", + "title": "High", + "description": "The high price." + }, + "low": { + "type": "number", + "title": "Low", + "description": "The low price." + }, + "close": { + "type": "number", + "title": "Close", + "description": "The close price." + }, + "volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Volume", + "description": "The trading volume." + }, + "vwap": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Vwap", + "description": "Volume Weighted Average Price over the period." + }, + "adj_open": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Open", + "description": "Adjusted open price during the period." + }, + "adj_high": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj High", + "description": "Adjusted high price during the period." + }, + "adj_low": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Low", + "description": "Adjusted low price during the period." + }, + "adj_close": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Close", + "description": "Adjusted closing price during the period." + }, + "adj_volume": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Adj Volume", + "description": "Adjusted volume during the period." + }, + "split_ratio": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Split Ratio", + "description": "Ratio of the equity split, if a equity split occurred." + }, + "dividend": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Dividend", + "description": "Dividend amount, if a dividend was paid." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "date", + "open", + "high", + "low", + "close" + ], + "title": "TiingoEquityHistorical", + "description": "Tiingo Equity Historical Price Data." + }, + "TiingoTrailingDivYield": { + "properties": { + "date": { + "type": "string", + "format": "date", + "title": "Date", + "description": "The date of the data." + }, + "trailing_dividend_yield": { + "type": "number", + "title": "Trailing Dividend Yield", + "description": "Trailing dividend yield." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "date", + "trailing_dividend_yield" + ], + "title": "TiingoTrailingDivYield", + "description": "Tiingo Trailing Dividend Yield Data." + }, + "TiingoWorldNews": { + "properties": { + "date": { + "type": "string", + "format": "date-time", + "title": "Date", + "description": "The date of the data. The published date of the article." + }, + "title": { + "type": "string", + "title": "Title", + "description": "Title of the article." + }, + "images": { + "anyOf": [ + { + "items": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Images", + "description": "Images associated with the news." + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Text", + "description": "Text/body of the article." + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url", + "description": "URL to the article." + }, + "symbols": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Symbols", + "description": "Ticker tagged in the fetched news." + }, + "article_id": { + "type": "integer", + "title": "Article Id", + "description": "Unique ID of the news article." + }, + "site": { + "type": "string", + "title": "Site", + "description": "News source." + }, + "tags": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tags", + "description": "Tags associated with the news article." + }, + "crawl_date": { + "type": "string", + "format": "date-time", + "title": "Crawl Date", + "description": "Date the news article was crawled." + } + }, + "additionalProperties": true, + "type": "object", + "required": [ + "date", + "title", + "article_id", + "site", + "crawl_date" + ], + "title": "TiingoWorldNews", + "description": "Tiingo World News Data." }, "UDFSubsession": { "properties": { @@ -60089,28 +55150,6 @@ "title": "Currency Code", "default": "USD" }, - "sector": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Sector" - }, - "industry": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Industry" - }, "fractional": { "anyOf": [ { @@ -60159,6 +55198,7 @@ "30", "60", "D", + "1D", "W", "M", "3M", @@ -60272,6 +55312,86 @@ "title": "UDFSymbol", "description": "UDF Symbol Model." }, + "UDFSymbolSearch": { + "properties": { + "symbol": { + "type": "string", + "title": "Symbol" + }, + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Full Name" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "short_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Short Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "exchange": { + "type": "string", + "title": "Exchange" + }, + "ticker": { + "type": "string", + "title": "Ticker" + }, + "logo_urls": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Logo Urls" + }, + "type": { + "type": "string", + "title": "Type" + } + }, + "type": "object", + "required": [ + "symbol", + "description", + "exchange", + "ticker", + "type" + ], + "title": "UDFSymbolSearch" + }, "ValidationError": { "properties": { "loc": { diff --git a/website/content/platform/development/how-to/add_data_provider_extension.md b/website/content/platform/development/how-to/add_data_provider_extension.md index 796821adf8c..f8d99af0332 100644 --- a/website/content/platform/development/how-to/add_data_provider_extension.md +++ b/website/content/platform/development/how-to/add_data_provider_extension.md @@ -212,7 +212,7 @@ The updated endpoint's function signature will now display the additional provid ```python Signature: obb.derivatives.options.chains( - symbol: typing.Annotated[str, OpenBBCustomParameter(description='Symbol to get data for.')], + symbol: typing.Annotated[str, OpenBBField(description='Symbol to get data for.')], provider: Optional[Literal['cboe', 'intrinio', 'tmx', 'tradier']] = None, **kwargs, ) -> openbb_core.app.model.obbject.OBBject @@ -270,4 +270,3 @@ Now, you can pip install your package from PyPI with: ```bash pip install openbb-some_ext ``` - diff --git a/website/content/platform/extensions/charting/_category_.json b/website/content/platform/extensions/charting/_category_.json new file mode 100644 index 00000000000..bbcd6d4e083 --- /dev/null +++ b/website/content/platform/extensions/charting/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Charting", + "position": 3 +} \ No newline at end of file diff --git a/website/content/platform/extensions/charting/examples.md b/website/content/platform/extensions/charting/examples.md new file mode 100644 index 00000000000..87b9918ceed --- /dev/null +++ b/website/content/platform/extensions/charting/examples.md @@ -0,0 +1,165 @@ +--- +title: Examples +sidebar_position: 1 +description: This page provides examples of creating charts with the `openbb-charting` extension. +keywords: +- tutorial +- OpenBB Platform +- Python client +- Fast API +- getting started +- extensions +- charting +- view +- Plotly +- toolkits +- how-to +- generic +- figure +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +## Overview + +This page will walk through creating different charts using the `openbb-charting` extension. +The perspective for this content is from the the Python Interface, +and the examples will assume that the OpenBB Platform is installed with all optional packages. + +```python +from datetime import datetime, timedelta +from openbb import obb +``` + +## Cumulative Returns + +The historical (equity) prices can be requested for multiple symbols. +The extension will attempt to handle variations accordingly. +By default, more than three symbols will draw the chart as cumulative returns from the beginning of the series. + +### Default View + +The tickers below are a collection of State Street Global Advisors SPDR funds, representing S&P 500 components. +The data is looking back five years. + +``` +SPDRS = [ + "SPY", + "XLE", + "XLB", + "XLI", + "XHB", + "XLP", + "XLY", + "XRT", + "XLF", + "XLV", + "XLK", + "XLC", + "XLU", + "XLRE", +] +start_date = (datetime.now() - timedelta(weeks=52*5)).date() +spdrs = obb.equity.price.historical(SPDRS, start_date=start_date, provider="yfinance", chart=True) + +spdrs.show() +``` + +![SPDRs Cumulative Returns - 5 years](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/8884f4ed-b09c-4161-9dc6-87ad66d9fc8b) + +### Redraw as YTD + +The `charting` attribute of the command output has methods for creating the chart again. +The `data` parameter allows modifications to the data before creating the figure. +In this example, the length of the data is trimmed to the beginning of the year. + +```python +new_data = spdrs.to_df().loc[datetime(2023,12,29).date():] +spdrs.charting.to_chart(data=new_data, title="YTD") +``` + +:::note +This replaces the chart that was already created. +::: + +![SPDRs Cumulative Returns - YTD](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/22ed2588-1098-4712-aec1-54dd22c324ef) + +## Price Performance Bar Chart + +The `obb.equity.price.performance` endpoint will create a bar chart over intervals. + +```python +price_performance = obb.equity.price.performance(SPDRS, chart=True) +price_performance.show() +``` + +![Price Performance](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/0de3260d-7fce-490b-90e1-bdfa38d6ab23) + +### Create Bar Chart + +This example uses the `create_bar_chart()` method, which does not replace the existing chart, in `price_performance.chart`. +It isolates the one-month performance and orients the layout as horizontal. + +```python +new_data = price_performance.to_df().set_index("symbol").multiply(100).reset_index() +price_performance.charting.create_bar_chart( + data=new_data, + x="symbol", + y="one_month", + orientation="h", + title="One Month Price Performance", + xtitle="Percent (%)" +) +``` + +![Horizonontal Price Performance](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/8da01f73-d7a8-4168-846a-9fa9ed6a0e39) + +## Create Your Own + +This example analyzes the share volume turnover of the S&P 500 Energy Sector constituents, year-to-date. + +```python +symbols = [ + 'XOM', + 'CVX', + 'COP', + 'EOG', + 'MPC', + 'SLB', + 'PSX', + 'PXD', + 'VLO', + 'WMB', + 'OKE', + 'OXY', + 'HES', + 'FANG', + 'HAL', + 'KMI', + 'DVN', + 'BKR', + 'TRGP', + 'CTRA', + 'MRO', + 'EQT', + 'APA' +] +data = obb.equity.price.historical(symbols, start_date="2024-01-01", provider="yfinance") +create_bar_chart = data.charting.create_bar_chart +volume = data.to_df().groupby("symbol").sum()["volume"] +shares = obb.equity.profile( + symbols, provider="yfinance" +).to_df().set_index("symbol")["shares_float"] +df = volume.to_frame().join(shares) +df["Turnover"] = (df.shares_float/df.volume).round(4) +df = df.sort_values(by="Turnover", ascending=False).reset_index() +create_bar_chart( + data=df, + x="symbol", + y="Turnover", + title="S&P Energy Sector YTD Turnover Rate", +) +``` +![S&P 500 Energy Sector Turnover Rate](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/4f59eb36-e637-4a54-87ab-e730e43baf8d) diff --git a/website/content/platform/extensions/charting/index.md b/website/content/platform/extensions/charting/index.md new file mode 100644 index 00000000000..f55bbe6a8fe --- /dev/null +++ b/website/content/platform/extensions/charting/index.md @@ -0,0 +1,358 @@ +--- +title: OpenBB Charting +sidebar_position: 1 +description: This page introduces the optional openbb-charting extension. +keywords: +- explanation +- OpenBB Platform +- Python client +- Fast API +- getting started +- extensions +- charting +- view +- Plotly +- toolkits +- community +- Plotly +- OpenBBFigure +- PyWry +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +## Overview + +The `openbb-charting` extension provides elements for building and displaying interactive charts, tables, dashboards, and more, directly from the OpenBB Platform's Python Interface and FAST API. + +It allows users to create a custom view, without any previous experience working with Plotly, from any response served by the OpenBB Platform. + +The Python Interface includes a custom [PyWry](https://github.com/OpenBB-finance/pywry) backend for displaying any content, in a WebKit HTML window served over `localhost`. In an IDE setting, they will be rendered inline. + +To install, follow the instructions [here](installation). The sections below provide a general explanation of the extension. + +## How Does It Work? + +It works by extending the `OBBject` class with a new attribute, `charting`. When it is installed, every response from the OpenBB Platform will be equipped with these tools. + +For functions that have pre-defined views, it serves as an intermediary between the user request and the response, activated when `chart=True`. When a chart is created, it will populate the existing, `chart`, attribute of the `OBBject`. This is where it is served by the FAST API from the function request. In the Python Interface, charts can be generated post-request, regardless of `chart=True`. + +The `chart` attribute in the OBBject contains three items, responses from the API have two: + +- `fig`: The OpenBBFigure object - an extended Plotly GraphObjects class. Not included in the API response. +- `content`: The Plotly JSON representation of the chart - Returned to the API. +- `format`: The format of the chart - 'plotly' is currently the only charting library. + +There is one OBBject class method, `show()`, which will display the contents of the `chart` attribute, if populated. + +The new `charting` attribute that binds to the OBBject also has a `show()` method. This differs in that it overwrites the existing chart, effectively a 'reset' for the view. + +The extension has a docstring, and it lists the class methods within `charting`. + +```python +from openbb import obb +data = obb.equity.price.historical("AAPL") +data.charting? +``` + +```console +Charting extension. + +Methods +------- +show + Display chart and save it to the OBBject. +to_chart + Redraw the chart and save it to the OBBject, with an optional entry point for Data. +functions + Return a list of Platform commands with charting functions. +get_params + Return the charting parameters for the function the OBBject was created from. +indicators + Return the list of the available technical indicators to use with the `to_chart` method and OHLC+V data. +table + Display an interactive table. +create_line_chart + Create a line chart from external data. +create_bar_chart + Create a bar chart, on a single x-axis with one or more values for the y-axis, from external data. +``` + +:::note +When creating a chart directly from the OpenBB Platform endpoint, chart parameters must be passed as a nested dictionary under the name, `chart_params`. + +```python +chart_params = dict( + title="AAPL 50/200 Day EMA", + indicators=dict( + ema=dict(length=[50,200]), + ), +) +params = dict( + symbol="AAPL", + start_date="2022-01-01", + provider="yfinance", + chart=True, + chart_params=chart_params, +) +data = obb.equity.price.historical(**params) +``` + +`chart_params` are sent in the body of the request when using the API. +::: + +Passing only `chart=True` will return a default view which can be modified and drawn again post-request, via the `OBBject`. + +```console +OBBject + +id: 06614d74-7443-7201-8000-a65f358136a3 +results: [{'date': datetime.date(2022, 1, 3), 'open': 177.8300018310547, 'high': 18... +provider: yfinance +warnings: None +chart: {'content': {'data': [{'close': [182.00999450683594, 179.6999969482422, 174.... +extra: {'metadata': {'arguments': {'provider_choices': {'provider': 'yfinance'}, 's... +``` + +```python +data.show() +``` + +![candles with ema](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/b427d68b-777e-4230-852a-df749c5dbc46) + +### No Render + +The charts can be created without opening the PyWry window, and this is the default behaviour when `chart=True`. +With the `charting.show()` and `charting.to_chart()` methods, the default is `render=True`. +Setting as `False` will return the chart to itself, populating the `chart` attribute of OBBject. + +## What Endpoints Have Charts? + +The OpenBB Platform router, open_api.json, function signatures, and documentation are all generated based on your specific configuration. When the `openbb-charting` extension is installed, any function found in the "[charting_router](https://github.com/OpenBB-finance/OpenBBTerminal/blob/develop/openbb_platform/obbject_extensions/charting/openbb_charting/charting_router.py)" adds `chart: bool = False` to the command on build. For example, `obb.index.price.historical?` + +```python +Signature: +obb.index.price.historical( + symbol: Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for. Multiple comma separated items allowed for provider(s): cboe, fmp, intrinio, polygon, yfinance.')], + ... + chart: typing.Annotated[bool, OpenBBCustomParameter(description='Whether to create a chart or not, by default False.')] = False, + **kwargs, +) -> openbb_core.app.model.obbject.OBBject +``` + +### Charting Functions + +The `charting` attribute of every command output has methods for identifying the charting functions and parameters. +While able to serve JSON-serializable charts, the `openbb-charting` extension is best-suited for use with the Python Interface. Much of the functionality is realized post-request. + +Examine the extension by returning any command at all. + +```python +from openbb import obb + +data = obb.equity.price.historical("SPY,QQQ,XLK,BTC-USD", provider="yfinance") + +data.charting.functions() +``` + +```console +['crypto_price_historical', + 'currency_price_historical', + 'economy_fred_series', + 'equity_price_historical', + 'equity_price_performance', + 'etf_historical', + 'etf_holdings', + 'etf_price_performance', + 'index_price_historical', + 'technical_adx', + 'technical_aroon', + 'technical_cones', + 'technical_ema', + 'technical_hma', + 'technical_macd', + 'technical_rsi', + 'technical_sma', + 'technical_wma', + 'technical_zlma'] +``` + +:::tip +The list above should, as shown here, should not be considered as the source of truth. It's just a sample. +::: + +If the `OBBject` in question has a dedicated charting function associated with it, parameters are detailed by the `get_params()` method. + +```console +EquityPriceHistoricalChartQueryParams + + Parameters + ---------- + + data : Union[Data, list[Data], NoneType] + Filtered versions of the data contained in the original `self.results`. + Columns should be the same as the original data. + Example use is to reduce the number of columns, or the length of data, to plot. + + title : Union[str, NoneType] + Title of the chart. + + target : Union[str, NoneType] + The specific column to target. + If supplied, this will override the candles and volume parameters. + + multi_symbol : bool + Flag to indicate whether the data contains multiple symbols. + This is mostly handled automatically, but if the chart fails to generate try setting this to True. + + same_axis : bool + If True, forces all data to be plotted on the same axis. + + normalize : bool + If True, the data will be normalized and placed on the same axis. + + returns : bool + If True, the cumulative returns for the length of the time series will be calculated and plotted. + + candles : bool + If True, and OHLC exists, and there is only one symbol in the data, candles will be plotted. + + heikin_ashi : bool + If True, and `candles=True`, Heikin Ashi candles will be plotted. + + volume : bool + If True, and volume exists, and `candles=True`, volume will be plotted. + + indicators : Union[ChartIndicators, dict[str, dict[str, Any]], NoneType] + Indicators to be plotted, formatted as a dictionary. + Data containing multiple symbols will ignore indicators. + Example: + indicators = dict( + sma=dict(length=[20,30,50]), + adx=dict(length=14), + rsi=dict(length=14), + ) +``` + +Not all commands will have the same `chart_params`, and some less than others, but it is always possible to redraw the chart with a different combination post-request. Here's what the default chart is from the output of the command above. + +If `chart=True` was not specified, it will need to be created. + +```python +data.charting.to_chart() +``` + +![obb.equity.price.historical()](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/9231c455-ee1b-47a8-a627-b0034ea52ecd) + +The extension recognized that multiple symbols were within the object, and made a determination to display cumulative returns by default. + +A candlestick chart will draw only when there is one symbol in the data. + +```python +obb.equity.price.historical( + symbol="XLK", + start_date="2024-01-01", + provider="yfinance", + chart=True, + chart_params=dict(title="XLK YTD", heikin_ashi=True) +).show() +``` + +![obb.equity.price.historical()](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/13af30b3-7298-402d-ac32-1f7700cd08fd) + +## Endpoints Without Charts + +Most functions do not have dedicated charts. However, it's still possible to generate one automatically. Using the `data` above, we can try passing it through a quantitative analysis command. + +```python +data = obb.equity.price.historical( + symbol="XLK", + start_date="2023-01-01", + provider="yfinance", +) +qa = obb.quantitative.rolling.stdev(data.results, target="close") + +qa.charting.show(title="XLK Rolling 21 Day Standard Deviation") +``` + +![auto chart](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/f87a6648-7365-4529-a254-35897af448ca) + +## Charts From Any Data + +There are methods for creating a generic chart from any external data. +They will bypass any data contained in the parent object, unless specifically fed into itself. + +- charting.create_bar_chart() +- charting.create_line_chart() + +They can also be used as standalone components by initializing an empty instance of the OBBject class. + +```python +from openbb import obb +from openbb_core.app.model.obbject import OBBject +create_bar_chart = OBBject(results=None).charting.create_bar_chart + +create_bar_chart? +```` + +```console +Create a bar chart on a single x-axis with one or more values for the y-axis. + +Parameters +---------- +data : Union[list, dict, pd.DataFrame, List[pd.DataFrame], pd.Series, List[pd.Series], np.ndarray, Data] + Data to plot. +x : str + The x-axis column name. +y : Union[str, List[str]] + The y-axis column name(s). +barmode : Literal["group", "stack", "relative", "overlay"], optional + The bar mode, by default "group". +xtype : Literal["category", "multicategory", "date", "log", "linear"], optional + The x-axis type, by default "category". +title : Optional[str], optional + The title of the chart, by default None. +xtitle : Optional[str], optional + The x-axis title, by default None. +ytitle : Optional[str], optional + The y-axis title, by default None. +orientation : Literal["h", "v"], optional + The orientation of the chart, by default "v". +colors: Optional[List[str]], optional + Manually set the colors to cycle through for each column in 'y', by default None. +layout_kwargs : Optional[Dict[str, Any]], optional + Additional keyword arguments to apply with figure.update_layout(), by default None. + +Returns +------- +OpenBBFigure + The OpenBBFigure object. +``` + +## Tables + +The `openbb-charting` extension is equipped with interactive tables, utilizing the React framework. They are displayed by using the `table` method. + +```python +data = obb.equity.price.quote("AAPL,MSFT,GOOGL,META,TSLA,AMZN", provider="yfinance") +data.charting.table() +``` +![Interactive Tables](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/77f5f812-b933-4ced-929c-c1e39b2a3eed) + +External data can also be supplied, providing an opportunity to filter or apply Pandas operations before display. + +``` +new_df = df.to_df().T +new_df.index.name="metric" +new_df.columns = new_df.loc["symbol"] +new_df.drop("symbol", inplace=True) +data.charting.table(data=new_df) +``` + +![Tables From External Data](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/d02f8c34-e1d1-4001-a73e-d3b948a4c5c1) + +:::important +This does not alter the contents of the original object, the displayed data is a copy. +::: diff --git a/website/content/platform/extensions/charting/indicators.md b/website/content/platform/extensions/charting/indicators.md new file mode 100644 index 00000000000..9966ba4571f --- /dev/null +++ b/website/content/platform/extensions/charting/indicators.md @@ -0,0 +1,384 @@ +--- +title: Indicators +sidebar_position: 2 +description: A tutorial of the technical indicators included with the openbb-charting library, including how to get started using them. +keywords: +- tutorial +- OpenBB Platform +- getting started +- extensions +- charting +- view +- Plotly +- toolkits +- indicators +- Plotly +- OpenBBFigure +- PyWry +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +## Introduction + +Select indicators (technical) can be added to a chart where the data is OHLC+V prices over time, and the data is for one symbol only. +They are meant as quick visualizations, and a way to build more complex charts. +As starting points, they can be refined to perfection by manipulating the figure object directly. + +```python +from datetime import datetime, timedelta +from openbb import obb +data = obb.equity.price.historical( + "TSLA", + provider="yfinance", + interval="15m", + start_date=(datetime.now()-timedelta(days=21)).date(), + chart=True, + chart_params=dict( + heikin_ashi=True, + indicators=(dict( + ema=dict(length=[8,32]), + srlines={}, # For indicators, an empty dictionary implies the default state. + rsi=dict(length=32) + )) + ) +) +data.show() +``` + +![TSLA Intraday With Indicators](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/7d8d95d8-0383-4e9d-9477-7ad2424328df) + +## Available Indicators + +To get all the indicators, use the `charting.indicators()` method. +The object returned is a Pydantic model where each indicator is field. +If you don't catch it, it will print as a docstring to the console. + +:::danger +Some indicators, like RSI and MACD, create subplots. Only 4 subplots (not including the main candles + volume) can be created within the same view. +::: + +```python +data.charting.indicators() +``` + +```console +SMA: + + Parameters + ---------- + + length : Union[int, list[int]] + Window length for the moving average, by default is 50. + The number is relative to the interval of the time series data. + + offset : int + Number of periods to offset for the moving average, by default is 0. + +EMA: + + Parameters + ---------- + + length : Union[int, list[int]] + Window length for the moving average, by default is 50. + The number is relative to the interval of the time series data. + + offset : int + Number of periods to offset for the moving average, by default is 0. + +HMA: + + Parameters + ---------- + + length : Union[int, list[int]] + Window length for the moving average, by default is 50. + The number is relative to the interval of the time series data. + + offset : int + Number of periods to offset for the moving average, by default is 0. + +WMA: + + Parameters + ---------- + + length : Union[int, list[int]] + Window length for the moving average, by default is 50. + The number is relative to the interval of the time series data. + + offset : int + Number of periods to offset for the moving average, by default is 0. + +ZLMA: + + Parameters + ---------- + + length : Union[int, list[int]] + Window length for the moving average, by default is 50. + The number is relative to the interval of the time series data. + + offset : int + Number of periods to offset for the moving average, by default is 0. + +AD: + + Parameters + ---------- + + offset : int + Offset value for the AD, by default is 0. + +AD Oscillator: + + Parameters + ---------- + + fast : int + Number of periods to use for the fast calculation, by default 3. + + slow : int + Number of periods to use for the slow calculation, by default 10. + + offset : int + Offset to be used for the calculation, by default is 0. + +ADX: + + Parameters + ---------- + + length : int + Window length for the ADX, by default is 50. + + scalar : float + Scalar to multiply the ADX by, default is 100. + + drift : int + Drift value for the ADX, by default is 1. + +Aroon: + + Parameters + ---------- + + length : int + Window length for the Aroon, by default is 50. + + scalar : float + Scalar to multiply the Aroon by, default is 100. + +ATR: + + Parameters + ---------- + + length : int + Window length for the ATR, by default is 14. + + mamode : Literal[rma, ema, sma, wma] + The mode to use for the moving average calculation. + + drift : int + The difference period. + + offset : int + Number of periods to offset the result, by default is 0. + +CCI: + + Parameters + ---------- + + length : int + Window length for the CCI, by default is 14. + + scalar : float + Scalar to multiply the CCI by, default is 0.015. + +Clenow: + + Parameters + ---------- + + period : int + The number of periods for the momentum, by default 90. + +Demark: + + Parameters + ---------- + + show_all : bool + Show 1 - 13. + If set to False, show 6 - 9. + + offset : int + Number of periods to offset the result, by default is 0. + +Donchian: + + Parameters + ---------- + + lower : Union[int, NoneType] + Window length for the lower band, by default is 20. + + upper : Union[int, NoneType] + Window length for the upper band, by default is 20. + + offset : Union[int, NoneType] + Number of periods to offset the result, by default is 0. + +Fib: + + Parameters + ---------- + + period : int + The period to calculate the Fibonacci Retracement, by default 120. + + start_date : Union[str, NoneType] + The start date for the Fibonacci Retracement. + + end_date : Union[str, NoneType] + The end date for the Fibonacci Retracement. + +Fisher: + + Parameters + ---------- + + length : int + Window length for the Fisher Transform, by default is 14. + + signal : int + Fisher Signal Period + +Ichimoku: + + Parameters + ---------- + + conversion : int + The conversion line period, by default 9. + + base : int + The base line period, by default 26. + + lagging : int + The lagging line period, by default 52. + + offset : int + The offset period, by default 26. + + lookahead : bool + Drops the Chikou Span Column to prevent potential data leak + +KC: + + Parameters + ---------- + + length : int + Window length for the Keltner Channel, by default is 20. + + scalar : float + Scalar to multiply the ATR, by default is 2. + + mamode : Literal[ema, sma, wma, hna, zlma, rma] + The mode to use for the moving average calculation, by default is ema. + + offset : int + Number of periods to offset the result, by default is 0. + +MACD: + + Parameters + ---------- + + fast : Union[int, NoneType] + Window length for the fast EMA, by default is 12. + + slow : Union[int, NoneType] + Window length for the slow EMA, by default is 26. + + signal : Union[int, NoneType] + Window length for the signal line, by default is 9. + + scalar : Union[float, NoneType] + Scalar to multiply the MACD by, default is 100. + +OBV: + + Parameters + ---------- + + offset : int + Number of periods to offset the result, by default is 0. + +RSI: + + Parameters + ---------- + + length : int + Window length for the RSI, by default is 14. + + scalar : float + Scalar to multiply the RSI by, default is 100. + + drift : int + Drift value for the RSI, by default is 1. + +SRLines: + + Parameters + ---------- + + show : bool + Show the support and resistance lines. + +Stoch: + + Parameters + ---------- + + fast_k : int + The fast K period, by default 14. + + slow_d : int + The slow D period, by default 3. + + slow_k : int + The slow K period, by default 3. +``` + +The model can be converted to a dictionary and then passed through the `indicators` params. + +The chart below is built from the same object as the one above. + +```python +indicators = data.charting.indicators().dict() +macd=indicators.get("macd") +kc=indicators.get("kc") +chart_params=dict( + candles=False, + title="My New Chart", + indicators=(dict( + macd=macd, + kc=kc, + )) +) +data.charting.to_chart(**chart_params) +``` + +![indicators2](https://github.com/OpenBB-finance/OpenBBTerminal/assets/85772166/76c06aff-a568-4b7f-80d4-c58a73c0f1d7) + +:::tip +Data can be exported directly from the chart as a CSV. Use the button at the bottom-right of the mode bar. +::: diff --git a/website/content/platform/extensions/charting/installation.md b/website/content/platform/extensions/charting/installation.md new file mode 100644 index 00000000000..2282d777aeb --- /dev/null +++ b/website/content/platform/extensions/charting/installation.md @@ -0,0 +1,71 @@ +--- +title: Installation +sidebar_position: 1 +description: This page outlines the installation of the openbb-charting extension. +keywords: +- tutorial +- OpenBB Platform +- Installation +- Python client +- Fast API +- getting started +- extensions +- charting +- view +- Plotly +- toolkit +- community +- Plotly +- OpenBBFigure +- PyWry +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +## PyPI + +To install the extension, run the following command in this folder: + +```bash +pip install openbb-charting +``` + +> Find the latest version on [PyPI](https://pypi.org/project/openbb-charting/). + +## Editable Mode + +To install from source in editable mode, navigate into the folder, `~/openbb_platform/extensions/charting`, and enter: + +```console +pip install -e . +``` + +After installation, the Python interface will automatically rebuild on initialization. This process can also be triggered manually with: + +```python +import openbb +openbb.build() +``` + +The Python interpreter may need to be restarted. + +## PyWry Dependency In Linux + +When using Linux distributions, the PyWry dependency requires certain dependencies to be installed first. + +- Debian-based / Ubuntu / Mint: +`sudo apt install libwebkit2gtk-4.0-dev` + +- Arch Linux / Manjaro: +`sudo pacman -S webkit2gtk` + +- Fedora: +`sudo dnf install gtk3-devel webkit2gtk3-devel` + +If Rust (Cargo) is required, install it: + +```console +curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh +``` diff --git a/website/content/platform/extensions/toolkit_extensions.md b/website/content/platform/extensions/toolkit_extensions.md index d3e13b8f738..00ce133e832 100644 --- a/website/content/platform/extensions/toolkit_extensions.md +++ b/website/content/platform/extensions/toolkit_extensions.md @@ -40,14 +40,12 @@ The sections below outline any specific installation considerations for the exte ## Charting -The OpenBB Charting Extension supplies charting infrastructure and services to the OpenBB Platform. Figure objects are served via REST API or Python Client. It utilizes [PyWry](https://github.com/OpenBB-finance/pywry) for handling the display of interactive charts and tables in a separate window, with a Plotly library. The extension framework allows developers to easily insert other Python charting libraries into the router pipeline. +The OpenBB Charting Extension supplies charting infrastructure and services to the OpenBB Platform. Figure objects are served via REST API or Python Client. It utilizes [PyWry](https://github.com/OpenBB-finance/pywry) for handling the display of interactive charts and tables in a separate window, with a Plotly library. -Functions with charting enabled return figures to a field (`chart`) in the `OBBject` response object. They are displayed with the class method, `show()`. - -> Additional Python libraries are installed with this extension: `aiohttp`, `nbformat`, `pandas-ta`, `plotly`, `pywry`, `reportlab`, `scipy`, `statsmodels`, and `svglib`. +Functions with dedicated views return figures to the `chart` attribute of the `OBBject` response object. They are displayed with the class method, `show()`. :::tip -The `openbb-charting` is in fact an [`OBBject` extension](platform/development/how-to/add_obbject_extension.md) which means you'll have the functionality it exposes on every command result. +The `openbb-charting` is an [`OBBject` extension](platform/development/how-to/add_obbject_extension.md), which means the general functionality is exposed in every command result. ::: The following packages are dependencies of the `openbb-charting` extension: @@ -63,47 +61,7 @@ The following packages are dependencies of the `openbb-charting` extension: ### Installation -To install the extension, run the following command in this folder: - -```bash -pip install openbb-charting -``` - -> Find the latest version on [PyPI](https://pypi.org/project/openbb-charting/). - -To install from source in editable mode, navigate into the folder, `~/openbb_platform/extensions/charting`, and enter: - -```console -pip install -e . -``` - -After installation, the Python interface will automatically rebuild on initialization. This process can also be triggered manually with: - -```python -import openbb -openbb.build() -``` - -The Python interpreter may require a restart. - -### PyWry dependency in Linux - -When using Linux distributions, the PyWry dependency requires certain dependencies to be installed first. - -- Debian-based / Ubuntu / Mint: -`sudo apt install libwebkit2gtk-4.0-dev` - -- Arch Linux / Manjaro: -`sudo pacman -S webkit2gtk` - -- Fedora: -`sudo dnf install gtk3-devel webkit2gtk3-devel` - -If Rust (Cargo) is required, install it: - -```console -curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -``` +See the [charting](charting) section for more details and [installation](charting/installation) instructions. ## Devtools diff --git a/website/content/pro/advanced-search.md b/website/content/pro/advanced-search.md index e6443dda2a2..653c5d03d51 100644 --- a/website/content/pro/advanced-search.md +++ b/website/content/pro/advanced-search.md @@ -1,6 +1,6 @@ --- title: Advanced Search -sidebar_position: 6 +sidebar_position: 7 description: Learn about the functionality of the advanced search in OpenBB Terminal Pro. Discover the six main categories including Securities, Templates, Widgets, Actions, News, and the All option that enhances research and productivity. diff --git a/website/content/pro/getting-started/index.md b/website/content/pro/architecture.md similarity index 96% rename from website/content/pro/getting-started/index.md rename to website/content/pro/architecture.md index 0ad429003d5..660c70b9fff 100644 --- a/website/content/pro/getting-started/index.md +++ b/website/content/pro/architecture.md @@ -1,6 +1,6 @@ --- -title: Getting Started -sidebar_position: 0 +title: Architecture +sidebar_position: 1 description: Get started with OpenBB Terminal Pro, your comprehensive tool for investment research. Understand the layout and powerful features that can enhance your research capabilities. @@ -19,7 +19,7 @@ keywords: import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; - + Welcome to the OpenBB Terminal Pro, your comprehensive tool for investment research. diff --git a/website/content/pro/copilot/index.md b/website/content/pro/copilot/index.md index 5d21786e779..e8b34344e7f 100644 --- a/website/content/pro/copilot/index.md +++ b/website/content/pro/copilot/index.md @@ -1,6 +1,6 @@ --- title: OpenBB Copilot -sidebar_position: 7 +sidebar_position: 8 description: Learn how to use OpenBB Copilot to interact with the OpenBB Terminal Pro keywords: - OpenBB Copilot @@ -108,7 +108,7 @@ Sometimes you may wish to focus your analysis and utilize OpenBB Copilot to anal a specific subset of widgets. For example, you may want to use OpenBB Copilot is assist you in a deep analysis of an earnings transcript in the "Earnings Transcript" widget, without retrieving data from the rest of the dashboard. - + To achieve this, you can chat with specifically selected widgets by clicking on the "Add widgets as context" button on each widget you wish to use while querying OpenBB Copilot. Selecting a widget in this manner will make that @@ -139,4 +139,4 @@ filenames that are descriptive of the data that they contain. For example, given a PDF file containing a technical report from TSLA released in 2024, a good filename would be `tsla_technical_report_2024.pdf`. -::: +::: diff --git a/website/content/pro/dashboards/_category_.json b/website/content/pro/dashboards/_category_.json index c805f86dfa3..ff5b5ec938f 100644 --- a/website/content/pro/dashboards/_category_.json +++ b/website/content/pro/dashboards/_category_.json @@ -1,4 +1,4 @@ { "label": "Dashboards", - "position": 5 -} \ No newline at end of file + "position": 6 +} diff --git a/website/content/pro/data-connectors/_category_.json b/website/content/pro/data-connectors/_category_.json index 50f9cdcbc83..4462097d884 100644 --- a/website/content/pro/data-connectors/_category_.json +++ b/website/content/pro/data-connectors/_category_.json @@ -1,4 +1,4 @@ { "label": "Data Connectors", - "position": 3 + "position": 4 } diff --git a/website/content/pro/data-connectors/single-widget/examples.md b/website/content/pro/data-connectors/single-widget/examples.md new file mode 100644 index 00000000000..bc4ddbebfef --- /dev/null +++ b/website/content/pro/data-connectors/single-widget/examples.md @@ -0,0 +1,23 @@ +--- +title: Endpoint Examples +sidebar_position: 1 +description: Public API endpoints that can be used as single widget for Terminal Pro +keywords: +- Single Widget +- Data Connectors +- API Endpoints +- JSON +- Bring your own data +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +| Widget title | Public URL | Category | Subcategory | Source | Description | +| -------- | ------- | -------- | ------- | -------- | ------- | +| Protocols | https://api.llama.fi/v2/protocols | DeFi | TVL | DefiLLama | List of all protocols on DefiLlama along with their TVL | +| Historical Chain TVL | https://api.llama.fi/v2/historicalChainTvl | DeFi | TVL | DefiLLama | Get historical TVL (excludes liquid staking and double counted tvl) on DeFi on all chains | +| Chains | https://api.llama.fi/v2/chains | DeFi | TVL | DefiLLama | Get current TVL of all chains | +| Stablecoins | https://api.llama.fi/v2/stablecoins | DeFi | coins | DefiLLama | List all stablecoins along with their circulating amounts | +| TAO stats | https://taostats.io/data.json | Crypto | | Tao | Latest $TAO token and subnet information | diff --git a/website/content/pro/data-connectors/single-widget.md b/website/content/pro/data-connectors/single-widget/index.md similarity index 98% rename from website/content/pro/data-connectors/single-widget.md rename to website/content/pro/data-connectors/single-widget/index.md index 815c1029b81..75bf0e6fd84 100644 --- a/website/content/pro/data-connectors/single-widget.md +++ b/website/content/pro/data-connectors/single-widget/index.md @@ -1,6 +1,6 @@ --- title: Single widget -sidebar_position: 1 +sidebar_position: 0 description: Learn how to use the Single Widget of OpenBB Terminal Pro for seamless integration with your API Endpoints, enabling custom data to be fetched and displayed in an accessible format. Includes features like additional headers and addressing diff --git a/website/content/pro/getting-started/_category_.json b/website/content/pro/getting-started/_category_.json deleted file mode 100644 index 446d1af1efe..00000000000 --- a/website/content/pro/getting-started/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Getting started", - "position": 0 -} diff --git a/website/content/pro/getting-started/free-trial.md b/website/content/pro/getting-started/free-trial.md deleted file mode 100644 index e2d7a2bb845..00000000000 --- a/website/content/pro/getting-started/free-trial.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Free trial -sidebar_position: 1 -description: The free trial of OpenBB Terminal Pro provides full access to its features - for 2 weeks with a potential 1-week extension. Steps to get early access and personalized - onboarding process are also explained. -keywords: -- Free Trial -- OpenBB Hub account -- early access code -- product development -- free trial extension -- Personalized Onboarding -- investment interests ---- - -import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; - - - -There are 3 main ways to get started: - -1. Join the waitlist at - -2. Get invited by a colleague who already has access - -3. Become a design partner and contribute to our product development - -The free trial of **OpenBB Terminal Pro** grants you full access to all features and data for a period of 2 weeks. - -To continue using the product after the trial period you can reach out to to extend your trial and discuss pricing options. - -As an early adopter, your feedback is invaluable. The OpenBB team may reach out to understand your experience and gather insights for improvement. - -## Personalized Onboarding - -Upon your first login, we'll ask a few questions about your investment interests, background, and workflow. - -Your responses will help us tailor your experience, ensuring a smooth and effective start with the app. - -Note: You can update these responses anytime should your interests evolve. diff --git a/website/content/pro/index.md b/website/content/pro/index.md index ffb7947bd2f..67334e876ac 100644 --- a/website/content/pro/index.md +++ b/website/content/pro/index.md @@ -25,66 +25,27 @@ import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; -Discover the superior investment research capabilities of the OpenBB Terminal Pro. Built on top of the open-source OpenBB Terminal, our platform provides a sleek graphical interface that is intuitive and fully customizable, making it easier for you to access and analyze financial information with ease. +Investment research tech is stuck in the 80s and limits what you can do. With the Terminal Pro, you can bring your own data and use AI to quickly extract insights from it. -Plus, with built-in access to high-quality financial data curated from official partnerships with data providers, you can conduct comprehensive analysis and gain valuable insights that inform your investment decisions. +Gain an edge in the market, start the 3-week free trial now. No credit cards required.
    - - ---- - -- **Improved User Experience** - -We've focused on improving the user experience (UX) of the OpenBB Terminal Pro based on feedback from dozens of users. The platform features a better user interface that is visually appealing, while keeping the keyboard-centric workflow of the OpenBB Terminal for quick and efficient information access. - -- **Customizable and Collaborative** - -Unlike traditional investment research dashboards, the OpenBB Terminal Pro is a fully integrated and customizable environment that allows you to optimize your workflow to your preferences. Plus, take advantage of advanced collaboration features to share insights, exchange ideas, and make informed decisions with your team in real time. - -- **Built-in access to high-quality financial data** - -The OpenBB Terminal Pro is powered by an extensive data marketplace that allows you to make use of any dataset that exists. With an abundance of data at your fingertips, you can conduct a comprehensive analysis and gain valuable insights that inform your investment decisions. You can subscribe to only the datasets you need and access the raw data for deeper analysis, whether you're looking for financial, economic, or market data. - ---- - -## Features - -### Bring your own data - -The OpenBB Terminal Pro allows professionals to bring any data into their research environment. Whether that is a .csv file, a private endpoint, a RSS feed or even embed a SEC filing directly. The only limit is the user's creativity. - -### Your terminal, your whiteboard - -The OpenBB Terminal Pro is the most flexible investment research platform. It allows users to create their preferred dashboards with their preferred widgets. Never be limited again by what a platform allows you to create. - -### Generative AI to summarize content - -Our most popular feature includes chatting with financial data through state-of-the-art large language models (LLMs). For instance, instead of spending minutes reading news articles or hours reading earnings transcripts, create a summary in seconds and ask how that impacts your investments. - -### Build investment research reports in seconds - -The OpenBB Terminal Pro allows to add notes next to each widget and render the tab into a custom report that can be used to share with the team or manager., share with team - -### Create charts from raw data - -The OpenBB Terminal Pro allows to create charts directly from raw data in seconds. This effectively increases user efficiency by 10x, as visual insights are much more powerful. diff --git a/website/content/pro/templates/_category_.json b/website/content/pro/templates/_category_.json new file mode 100644 index 00000000000..a74b76d6603 --- /dev/null +++ b/website/content/pro/templates/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Templates", + "position": 3 +} diff --git a/website/content/pro/templates/excel.md b/website/content/pro/templates/excel.md new file mode 100644 index 00000000000..2a2ada7a97f --- /dev/null +++ b/website/content/pro/templates/excel.md @@ -0,0 +1,28 @@ +--- +title: Excel Templates +sidebar_position: 2 +description: Download Excel templates that OpenBB makes available + to your organization so you can fully automate your workflow. +keywords: +- Excel Add-In +- Automation +- Workflow +- Download +- Modeling +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +When navigating to the Templates page and clicking on the Excel tab, this is what the user will be able to see. As you can see from the image below, the user will be able to see a list of Excel templates that have been created by the OpenBB team and that leverage our Add-in for Excel to automate financial workflows. + +charting + +Once clicking on "Download Template" (e.g. for "Equity Analysis"), users will be able to access an Excel spreadsheet like the one shown below. + +If you have your OpenBB Add-in for Excel installed (instructions [here](/excel/getting-started/installation)) you will be able to change a ticker on the spreadsheet and all the values are automatically updated. + +charting + +More templates will be added in the next few weeks. diff --git a/website/content/pro/templates/index.md b/website/content/pro/templates/index.md new file mode 100644 index 00000000000..a959b3dfbc7 --- /dev/null +++ b/website/content/pro/templates/index.md @@ -0,0 +1,34 @@ +--- +title: Templates +sidebar_position: 0 +description: This page allows users to manage their Terminal Pro and Excel templates. +keywords: +- Templates +- Terminal Pro +- Excel Add-in +- Automated +- Download +--- + + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +import NewReferenceCard from "@site/src/components/General/NewReferenceCard"; + +
      + + + + + +
    diff --git a/website/content/pro/templates/pro.md b/website/content/pro/templates/pro.md new file mode 100644 index 00000000000..8dfc6a9222d --- /dev/null +++ b/website/content/pro/templates/pro.md @@ -0,0 +1,18 @@ +--- +title: Terminal Pro Templates +sidebar_position: 1 +description: Manage your organization's Terminal Pro templates + from this page. +keywords: +- Terminal Pro +- Templates +- Dashboard +- Widgets +- Sharing +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + + + +Coming soon. diff --git a/website/content/pro/tutorials/_category_.json b/website/content/pro/tutorials/_category_.json index 14856fcd7ce..d7a53ea5983 100644 --- a/website/content/pro/tutorials/_category_.json +++ b/website/content/pro/tutorials/_category_.json @@ -1,4 +1,4 @@ { "label": "Tutorials", - "position": 10 + "position": 0 } diff --git a/website/content/pro/tutorials/index.md b/website/content/pro/tutorials/index.md index 1852df2270b..c19173707ae 100644 --- a/website/content/pro/tutorials/index.md +++ b/website/content/pro/tutorials/index.md @@ -1,6 +1,6 @@ --- title: Tutorials -sidebar_position: 0 +sidebar_position: -1 description: Learn about common workflows that you can do with the OpenBB Terminal Pro. keywords: - workflows diff --git a/website/content/pro/widgets/_category_.json b/website/content/pro/widgets/_category_.json index e76371f2e07..5bca832ff79 100644 --- a/website/content/pro/widgets/_category_.json +++ b/website/content/pro/widgets/_category_.json @@ -1,4 +1,4 @@ { "label": "Widgets", - "position": 4 + "position": 5 } diff --git a/website/generate_excel_markdown.py b/website/generate_excel_markdown.py index 555215edb70..a4405786216 100644 --- a/website/generate_excel_markdown.py +++ b/website/generate_excel_markdown.py @@ -33,14 +33,114 @@ class CommandLib: } API_PREFIX = "/api/v1" - EXAMPLES: Dict[str, Dict] = { + # These examples will be generated in the core, but we keep them here meanwhile + EXAMPLE_PARAMS: Dict[str, Dict] = { "/get": { - "Example 0": '=OBB.GET({"a","b","c";"d","e","f"})', - "Example 1": '=OBB.GET({"a","b","c";"d","e","f"},"d","c")', + "array": '{"a","b","c";"d","e","f"}', + "rows": '"d"', + "columns": '"c"', }, "/byod": { - "Example 0": '=OBB.BYOD("widget_name")', - "Example 1": '=OBB.BYOD("widget_name","backend_name")', + "widget": '"widget_name"', + "backend": '"backend_name"', + }, + "crypto": { + "symbol": '"BTCUSD"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "query": '"coin"', + }, + "currency": { + "symbol": '"EURUSD"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + }, + "derivatives": { + "symbol": '"AAPL"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + }, + "/derivatives/futures/curve": { + "symbol": '"NG"', + }, + "economy": { + "countries": '"united_states"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "units": '"growth_previous"', + "frequency": '"quarterly"', + "harmonized": "TRUE", + "query": '"gdp"', + "symbol": '"GFDGDPA188S"', + "limit": 5, + "period": '"quarter"', + "type": '"real"', + "adjusted": "TRUE", + }, + "/economy/fred_regional": { + "symbol": '"NYICLAIMS"', + }, + "equity": { + "symbol": '"AAPL"', + "tag": '"ebitda"', + "query": '"ebitda"', + "year": 2022, + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "limit": 5, + "form_type": '"10-K"', + "period": '"annual"', + "frequency": '"quarterly"', + "type": "", + "sort": '"desc"', + "structure": '"flat"', + "date": '"2023-05-07"', + "page": 1, + "interval": '"1d"', + "is_symbol": "FALSE", + }, + "/equity/fundamental/reported_financials": { + "symbol": '"AAPL"', + "period": '"annual"', + "statement_type": '"balance"', + "limit": 5, + }, + "etf": { + "symbol": '"SPY"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "query": '"global"', + }, + "fixedincome": { + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "maturity": '"90d"', + "category": '"nonfinancial"', + "grade": '"aa"', + "date": '"2023-05-07"', + "yield_curve": '"spot"', + "index_type": '"yield"', + "inflation_adjusted": "TRUE", + "interest_rate_type": '"deposit"', + }, + "index": { + "symbol": '"^GSPC"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "index": '"sp500"', + }, + "news": { + "symbol": '"AAPL"', + "symbols": '"AAPL,MSFT"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "limit": 5, + }, + "regulators": { + "symbol": '"AAPL"', + "start_date": '"2023-01-01"', + "end_date": '"2023-12-31"', + "query": '"AAPL"', }, } @@ -162,41 +262,35 @@ class CommandLib: return {} def _get_examples( - self, cmd: str, sig_parameters: Dict, sep: str = "," - ) -> Dict[str, str]: + self, cmd: str, signature_: str, parameters: dict, sep: str = "," + ) -> dict: """Get the examples of the command.""" - if cmd in ("/get", "/byod"): - return self.EXAMPLES[cmd] + sig = signature_.split("(")[0] + "(" + category = signature_.split(".")[1].lower() - # API examples - examples = self._traverse( - ["paths", self.API_PREFIX + cmd, "get", "examples"], self.openapi - ) - sig = "=OBB." + self.xl_funcs[cmd].get("name", "") - ex_reference: Dict[str, str] = {} - for i, ex in enumerate(examples): - ex_code = "" - if ex.get("scope") == "api": - ex_code += sig + "(" - ex_parameters = ex.get("parameters", {}) - for p_name, p_info in sig_parameters.items(): - p_type = p_info.get("type", {}) - if p_value := ex_parameters.get(p_name): - if p_type == "Text": - ex_code += f'"{p_value}"{sep}' - elif p_type == "Boolean": - p_type = "TRUE" if bool(p_value) else "FALSE" - ex_code += f"{p_type}{sep}" - else: - ex_code += f"{p_value}{sep}" - else: - ex_code += sep - ex_code = ex_code.strip(sep) - ex_code += ")" - # Some example are repeated, we only want to add them once - if ex_code not in ex_reference.values(): - ex_reference[f"Example {i}"] = ex_code - return ex_reference + def get_p_value(cmd, p_name) -> str: + if cmd in self.EXAMPLE_PARAMS: + return self.EXAMPLE_PARAMS[cmd].get(p_name, "") + return self.EXAMPLE_PARAMS.get(category, {}).get(p_name, "") + + required_eg = sig + for p_name, p_info in parameters.items(): + if p_info["required"]: + p_value = get_p_value(cmd, p_name) + required_eg += f"{p_value}{sep}" + required_eg = required_eg.strip(f"{sep} ") + ")" + + standard_eg = sig + for p_name, p_info in parameters.items(): + if p_name == "provider": + break + p_value = get_p_value(cmd, p_name) + standard_eg += f"{p_value}{sep}" + standard_eg = standard_eg.strip(f"{sep} ") + ")" + + if cmd in ("/get", "/byod"): + return {"Required": required_eg, "Standard": standard_eg} + return {"Required": required_eg} def get_info(self, cmd: str) -> Dict[str, Any]: """Get the info for a command.""" @@ -209,7 +303,7 @@ class CommandLib: signature_ = self._get_signature(cmd, parameters) data = self._get_data(cmd) return_ = self.xl_funcs[cmd].get("result", {}).get("dimensionality", "") - examples = self._get_examples(cmd, parameters) + examples = self._get_examples(cmd, signature_, parameters) return { "name": name, "description": description, @@ -329,7 +423,7 @@ class Editor: def get_examples() -> str: if cmd_examples := cmd_info["examples"]: - examples = "## Examples\n\n" + examples = "### Example\n\n" for _, v in cmd_examples.items(): # examples += f"### {k}\n\n" examples += f"```{self.interface}\n" diff --git a/website/generate_platform_v4_markdown.py b/website/generate_platform_v4_markdown.py index 1a45e7c289e..083d14e0a3e 100644 --- a/website/generate_platform_v4_markdown.py +++ b/website/generate_platform_v4_markdown.py @@ -1,17 +1,15 @@ """Platform V4 Markdown Generator Script.""" -import argparse import json import re import shutil import subprocess from pathlib import Path -from typing import Dict, List, Union +from typing import Dict, List -import toml -from openbb_core.app.static.utils.console import Console from openbb_core.provider import standard_models -from packaging import specifiers +from poetry.core.constraints.version import Version, VersionConstraint, parse_constraint +from poetry.core.pyproject.toml import PyProjectTOML # Number of spaces to substitute tabs for indentation TAB_WIDTH = 4 @@ -19,157 +17,38 @@ TAB_WIDTH = 4 # Maximum number of commands to display on the cards MAX_COMMANDS = 8 -# Path to the Platform directory and the reference.json file +# Input paths PLATFORM_PATH = Path(__file__).parent.parent / "openbb_platform" +PLATFORM_PYPROJECT_PATH = Path(PLATFORM_PATH / "pyproject.toml") REFERENCE_FILE_PATH = Path(PLATFORM_PATH / "openbb/assets/reference.json") -# Paths to use for generating and storing the markdown files +# Output paths WEBSITE_PATH = Path(__file__).parent.absolute() SEO_METADATA_PATH = Path(WEBSITE_PATH / "metadata/platform_v4_seo_metadata.json") PLATFORM_CONTENT_PATH = Path(WEBSITE_PATH / "content/platform") PLATFORM_REFERENCE_PATH = Path(WEBSITE_PATH / "content/platform/reference") PLATFORM_DATA_MODELS_PATH = Path(WEBSITE_PATH / "content/platform/data_models") -# Imports used in the generated markdown files +# Markdown imports and elements PLATFORM_REFERENCE_IMPORT = "import ReferenceCard from '@site/src/components/General/NewReferenceCard';" # fmt: skip PLATFORM_REFERENCE_UL_ELEMENT = '
      ' # noqa: E501 # pylint: disable=redefined-outer-name -def check_installed_packages( - console: Console, - debug: bool, -) -> None: - """Checks if the installed packages are the same as those on the platform pyproject.toml file. - Compares the versions of the installed packages with the versions specified in the pyproject.toml file. - The source of truth for the package versions is the pyproject.toml file, and the installed packages are - checked against the specified versions. If the installed packages do not satisfy the version requirements, - an error is raised. - Parameters - ---------- - console (Console): Console object to display messages and save logs - debug (bool): Flag to enable debug mode - """ +class Console: + """Console class to log messages to the console.""" - def convert_poetry_version_specifier( - poetry_version: Union[str, Dict[str, str]] - ) -> str: - """ - Convert a Poetry version specifier to a format compatible with the packaging library. - Handles both simple string specifiers and dictionary specifiers, extracting only the version value if it's a dict. + def __init__(self, verbose: bool = False): + self.verbose = verbose - Parameters - ---------- - poetry_version (Union[str, Dict[str, str]]): - Poetry version specifier + def log(self, message: str) -> None: + if self.verbose: + print(message) - Returns - ------- - str: - Version specifier compatible with the packaging library - """ - if isinstance(poetry_version, dict): - poetry_version = poetry_version.get("version", "") - if isinstance(poetry_version, str): - if poetry_version.startswith("^"): - base_version = poetry_version[1:] - # Use regex to split the version and convert to integers only if they are purely numeric - parts = re.split(r"\.|\-", base_version) - try: - major, minor = (int(x) for x in parts[:2]) - except ValueError: - # If conversion fails, return the original version specifier - return poetry_version - next_major_version = major + 1 - # Construct a version specifier that represents the range. - return f">={base_version},<{next_major_version}.0.0" - - if poetry_version.startswith("~"): - base_version = poetry_version[1:] - parts = re.split(r"\.|\-", base_version) - try: - major, minor = (int(x) for x in parts[:2]) - except ValueError: - # If conversion fails, return the original version specifier - return poetry_version - next_minor_version = minor + 1 - # Construct a version specifier that represents the range. - return f">={base_version},<{major}.{next_minor_version}.0" - - # No need to modify other specifiers, as they are compatible with packaging library - return poetry_version - - def check_dependency( - package_name: str, version_spec: str, installed_packages_dict: Dict[str, str] - ) -> None: - """ - Check if the installed package version satisfies the required version specifier. - Raises DependencyCheckError if the package is not installed or does not satisfy the version requirements. - - Parameters - ---------- - package_name (str): - Name of the package to check - version_spec (str): - Version specifier to check against - installed_packages_dict (Dict[str, str]): - Dictionary of installed packages and their versions - """ - installed_version = installed_packages_dict.get(package_name.lower()) - if not installed_version: - raise Exception(f"{package_name} is not installed.") - - converted_version_spec = convert_poetry_version_specifier(version_spec) - specifier_set = specifiers.SpecifierSet(converted_version_spec) - - if not specifier_set.contains(installed_version, prereleases=True): - message = f"{package_name} version {installed_version} does not satisfy the specified version {converted_version_spec}." # noqa: E501, pylint: disable=line-too-long - raise Exception(message) - - console.log("\n[CRITICAL] Ensuring all the extensions are installed before the script runs...") # fmt: skip - - # Execute the pip list command once and store the output - pip_list_output = subprocess.run( - "pip list | grep openbb", # noqa: S607 - shell=True, # noqa: S602 - capture_output=True, - text=True, - check=False, - ) - installed_packages = pip_list_output.stdout.splitlines() - installed_packages_dict = { - line.split()[0].lower(): line.split()[1] for line in installed_packages - } - - # Load the pyproject.toml file once - with open(PLATFORM_PATH / "pyproject.toml") as f: - toml_dict = toml.load(f) - - # Extract the openbb dependencies, excluding the python dependency - dependencies = toml_dict["tool"]["poetry"]["dependencies"] - dependencies.pop("python", None) - - # Compare versions and check dependencies - for package, version_spec in dependencies.items(): - normalized_package_name = package.replace("_", "-").lower() - try: - # Convert the version specifier before checking - converted_version_spec = convert_poetry_version_specifier(version_spec) - check_dependency( - normalized_package_name, converted_version_spec, installed_packages_dict - ) - - # Ensure debug_mode output shows the processed version specifier - if debug: - installed_version = installed_packages_dict.get(normalized_package_name) - console.log( - f"{normalized_package_name}: Specified version {converted_version_spec}, Installed version {installed_version}" # noqa: E501, pylint: disable=line-too-long - ) - except Exception as e: - raise e +console = Console(verbose=True) def create_reference_markdown_seo(path: str, description: str) -> str: @@ -177,15 +56,15 @@ def create_reference_markdown_seo(path: str, description: str) -> str: Parameters ---------- - path (str): - Command path relative to the obb class - description (str): - Description of the command + path: str + Command path relative to the obb class + description: str + Description of the command Returns ------- - str: - SEO section for the markdown file + str + SEO section for the markdown file """ with open(SEO_METADATA_PATH) as f: @@ -228,17 +107,17 @@ def create_reference_markdown_intro( Parameters ---------- - path (str): - Command path relative to the obb class - description (str): - Description of the command - deprecated (Dict[str, str]): - Deprecated flag and message + path: str + Command path relative to the obb class + description: str + Description of the command + deprecated: Dict[str, str] + Deprecated flag and message Returns ------- - str: - Introduction section for the markdown file + str + Introduction section for the markdown file """ deprecation_message = ( @@ -268,15 +147,15 @@ def create_reference_markdown_tabular_section( Parameters ---------- - parameters (Dict[str, List[Dict[str, str]]]): - Dictionary of providers and their corresponding parameters - heading (str): - Section heading for the tabular section + parameters: Dict[str, List[Dict[str, str]]] + Dictionary of providers and their corresponding parameters + heading: str + Section heading for the tabular section Returns ------- - str: - Tabular section for the markdown file + str + Tabular section for the markdown file """ standard_params_list = [] @@ -339,14 +218,15 @@ def create_reference_markdown_tabular_section( def create_reference_markdown_returns_section(returns: List[Dict[str, str]]) -> str: """Create the returns section for the markdown file. - Args - ---- - returns (List[Dict[str, str]]): - List of dictionaries containing the name, type and description of the returns + Parameters + ---------- + returns: List[Dict[str, str]] + List of dictionaries containing the name, type and description of the returns + Returns ------- - str: - Returns section for the markdown file + str + Returns section for the markdown file """ returns_str = "" @@ -371,17 +251,17 @@ def create_data_model_markdown(title: str, description: str, model: str) -> str: Parameters ---------- - title (str): - Title of the data model - description (str): - Description of the data model - model (str): - Model name + title: str + Title of the data model + description: str + Description of the data model + model: str + Model name Returns ------- - str: - Basic markdown file content for the data model + str + Basic markdown file content for the data model """ # File name is used in the import statement @@ -431,13 +311,13 @@ def find_data_model_implementation_file(data_model: str) -> str: Parameters ---------- - data_model (str): - Data model name + data_model: str + Data model name Returns ------- - str: - File name containing the data model class + str + File name containing the data model class """ # Function to search for the data model class in the file @@ -465,8 +345,8 @@ def generate_reference_index_files(reference_content: Dict[str, str]) -> None: Parameters ---------- - reference_content (Dict[str, str]): - Endpoints and their corresponding descriptions. + reference_content: Dict[str, str] + Endpoints and their corresponding descriptions. """ def generate_index_and_category( @@ -599,17 +479,17 @@ def create_data_models_index(title: str, description: str, model: str) -> str: Parameters ---------- - title (str): - Title of the data model - description (str): - Description of the data model - model (str): - Model name + title: str + Title of the data model + description: str + Description of the data model + model: str + Model name Returns ------- - str: - Index content for the data models + str + Index content for the data models """ # Get the first sentence of the description @@ -632,8 +512,8 @@ def generate_data_models_index_files(content: str) -> None: Parameters ---------- - content (str): - Content for the data models index file + content: str + Content for the data models index file """ index_content = ( @@ -661,17 +541,17 @@ def generate_markdown_file(path: str, markdown_content: str, directory: str) -> Parameters ---------- - path (str): - Path to the markdown file - markdown_content (str): - Content for the markdown file - directory (str): - Directory to save the markdown file + path: str + Path to the markdown file + markdown_content: str + Content for the markdown file + directory: str + Directory to save the markdown file Raises ------ - ValueError: - If the content type is invalid + ValueError: + If the content type is invalid """ # For reference, split the path to separate the @@ -697,24 +577,12 @@ def generate_markdown_file(path: str, markdown_content: str, directory: str) -> # pylint: disable=redefined-outer-name -def generate_platform_markdown( - console: Console, -) -> None: +def generate_platform_markdown(paths: Dict) -> None: """Generate markdown files for OpenBB Docusaurus website.""" data_models_index_content = [] reference_index_content_dict = {} - console.log(f"\n[INFO] Reading the {REFERENCE_FILE_PATH} file...") - # Load the reference.json file - try: - with open(REFERENCE_FILE_PATH) as f: - reference = json.load(f) - except FileNotFoundError as exc: - raise FileNotFoundError( - "File not found! Please ensure the file exists." - ) from exc - # Clear the platform/reference folder console.log(f"\n[INFO] Clearing the {PLATFORM_REFERENCE_PATH} folder...") shutil.rmtree(PLATFORM_REFERENCE_PATH, ignore_errors=True) @@ -728,7 +596,7 @@ def generate_platform_markdown( ) # noqa: E501 console.log(f"\n[INFO] Generating the markdown files for the {PLATFORM_DATA_MODELS_PATH} directory...") # fmt: skip - for path, path_data in reference.items(): + for path, path_data in paths.items(): reference_markdown_content = "" data_markdown_content = "" @@ -808,28 +676,101 @@ def generate_platform_markdown( console.log("\n[INFO] Markdown files generated successfully!") +def read_reference() -> dict: + """Read the reference.json file.""" + console.log(f"\n[INFO] Reading the {REFERENCE_FILE_PATH} file...") + # Load the reference.json file + try: + with open(REFERENCE_FILE_PATH) as f: + reference = json.load(f) + except FileNotFoundError as exc: + raise FileNotFoundError( + "File not found! Please ensure the file exists." + ) from exc + + return reference + + +def get_openbb_versions() -> Dict[str, VersionConstraint]: + """Get the openbb package version constraints from pyproject.toml.""" + pyproject = PyProjectTOML(PLATFORM_PYPROJECT_PATH) + deps = pyproject.data["tool"]["poetry"]["dependencies"] + dep_spec = {} + for p, v in deps.items(): + if p.startswith("openbb"): + if isinstance(v, str): + dep_spec[p] = parse_constraint(v) + elif isinstance(v, dict): + dep_spec[p] = parse_constraint(v["version"]) + return dep_spec + + +def check_installed(openbb_versions: Dict[str, VersionConstraint]) -> None: + """Check all the openbb packages are installed and have the correct version.""" + console.log("\n[INFO] Ensuring all packages installed...") + pip_list_output = subprocess.run( + "pip list | grep openbb", # noqa: S607 + shell=True, # noqa: S602 + capture_output=True, + text=True, + check=False, + ) + result = pip_list_output.stdout.splitlines() + installed = { + line.split()[0].lower(): Version.parse(line.split()[1]) for line in result + } + + failures = set() + for o, v in openbb_versions.items(): + if o not in installed: + console.log(f"[INFO] Package '{o}' not installed.") + failures.add(o) + elif not v.allows(installed[o]): + console.log( + f"[INFO] Version '{installed[o]}' of '{o}' not compatible. Expected '{v}'." + ) + failures.add(o) + + if failures: + raise ValueError(f"Failures: {failures}") + + +def check_built(openbb_versions: Dict[str, VersionConstraint], reference: dict) -> None: + """Check all the openbb packages installed are in the reference file.""" + console.log("\n[INFO] Ensuring all packages built...") + core_version = reference.get("info", {}).get("core", "") + extensions = reference.get("info", {}).get("extensions", {}) + built = {} + built["openbb-core"] = Version.parse(core_version) + for value in extensions.values(): + for v in value: + name, version = v.split("@") + if name.startswith("openbb_"): + name = name[7:] + name = "openbb-" + name.replace("_", "-") + built[name] = Version.parse(version) + + failures = set() + for o, v in openbb_versions.items(): + if o not in built: + console.log(f"[INFO] Package '{o}' not in reference file.") + failures.add(o) + elif not v.allows(built[o]): + console.log( + f"[INFO] Version '{built[o]}' of '{o}' not compatible. Expected '{v}'." + ) + failures.add(o) + + if failures: + raise ValueError(f"Failures: {failures}") + + if __name__ == "__main__": - parser = argparse.ArgumentParser( - prog="Platform Markdown Generator V2", - description="Generate markdown files for the Platform website docs.", - ) - parser.add_argument( - "-v", - "--verbose", - action="store_true", - help="Enable verbose output for debugging.", - ) + openbb_versions = get_openbb_versions() + check_installed(openbb_versions) - args = parser.parse_args() - console = Console(True) - verbose = False + reference = read_reference() + check_built(openbb_versions, reference) - if args.verbose: - verbose = True - - check_installed_packages( - console=console, - debug=verbose, - ) - generate_platform_markdown(console=console) + generate_platform_markdown(reference.get("paths", {}))

    ^W{M)d`oi3@aRO*fQ!(}0 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

A+ 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 XfBORFQ!r!BUx*q0>Xa|wn{WOfXiM9o diff --git a/build/nsis/assets/Splashscreen #2.png b/build/nsis/assets/Splashscreen #2.png deleted file mode 100644 index 0f95c376fb2de2d95564687d59aea46be0156b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1510901 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�Z2z%CptS?|&R;UMc-r>=DP0gt4L%_b=rE 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