├── .editorconfig ├── .github ├── .stale.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ ├── feature_request.md │ └── question.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── release-drafter.yml └── workflows │ ├── build.yml │ ├── greetings.yml │ └── release-drafter.yml ├── .gitignore ├── .pre-commit-config.yaml ├── AlphaAgent.png ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENCE ├── Makefile ├── README.md ├── SECURITY.md ├── alphaagent ├── config │ ├── README.md │ └── llm_config.py └── utils │ └── llm_utils.py ├── cookiecutter-config-file.yml ├── docs └── .gitkeep ├── poetry.lock ├── pyproject.toml ├── requirements.txt └── test └── test_llm.py /.editorconfig: -------------------------------------------------------------------------------- 1 | # Check http://editorconfig.org for more information 2 | # This is the main config file for this project: 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | insert_final_newline = true 9 | indent_style = space 10 | indent_size = 2 11 | trim_trailing_whitespace = true 12 | 13 | [*.{py, pyi}] 14 | indent_style = space 15 | indent_size = 4 16 | 17 | [Makefile] 18 | indent_style = tab 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | 23 | [*.{diff,patch}] 24 | trim_trailing_whitespace = false 25 | -------------------------------------------------------------------------------- /.github/.stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | # Label to use when marking an issue as stale 10 | staleLabel: wontfix 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: ":bug: Bug report" 3 | about: If something isn't working 🔧 4 | title: '' 5 | labels: bug, needs-triage 6 | assignees: 7 | --- 8 | 9 | ## :bug: Bug Report 10 | 11 | 12 | 13 | ## :microscope: How To Reproduce 14 | 15 | Steps to reproduce the behaviour: 16 | 17 | 1. ... 18 | 19 | ### Code sample 20 | 21 | 22 | 23 | ### Environment 24 | 25 | * OS: [e.g. Linux / Windows / macOS] 26 | * Python version, get it with: 27 | 28 | ```bash 29 | python --version 30 | ``` 31 | 32 | ### Screenshots 33 | 34 | 35 | 36 | ## :chart_with_upwards_trend: Expected behavior 37 | 38 | 39 | 40 | ## :paperclip: Additional context 41 | 42 | 43 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository 2 | 3 | blank_issues_enabled: false 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: ":rocket: Feature request" 3 | about: Suggest an idea for this project 🏖 4 | title: '' 5 | labels: enhancement, needs-triage 6 | assignees: 7 | --- 8 | 9 | ## :rocket: Feature Request 10 | 11 | 12 | 13 | ## :sound: Motivation 14 | 15 | 16 | 17 | ## :satellite: Alternatives 18 | 19 | 20 | 21 | ## :paperclip: Additional context 22 | 23 | 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "red_question_mark Question" 3 | about: Ask a question about this project 🎓 4 | title: '' 5 | labels: question, needs-triage 6 | assignees: 7 | --- 8 | 9 | ## Checklist 10 | 11 | 12 | 13 | - [ ] I've searched the project's [`issues`][1], looking for the following terms: 14 | - [...] 15 | 16 | ## :question: Question 17 | 18 | 19 | 20 | How can I [...]? 21 | 22 | Is it possible to [...]? 23 | 24 | ## :paperclip: Additional context 25 | 26 | 27 | 28 | [1]: https://github.com/llmquant/alphaagent/issues 29 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | 4 | 5 | ## Related Issue 6 | 7 | 8 | 9 | ## Type of Change 10 | 11 | 12 | 13 | - [ ] :books: Examples, docs, tutorials or dependencies update; 14 | - [ ] :wrench: Bug fix (non-breaking change which fixes an issue); 15 | - [ ] :clinking_glasses: Improvement (non-breaking change which improves an existing feature); 16 | - [ ] :rocket: New feature (non-breaking change which adds functionality); 17 | - [ ] :boom: Breaking change (fix or feature that would cause existing functionality to change); 18 | - [ ] :closed_lock_with_key: Security fix. 19 | 20 | ## Checklist 21 | 22 | 23 | 24 | - [ ] I've read the [`CODE_OF_CONDUCT.md`][1] document; 25 | - [ ] I've read the [`CONTRIBUTING.md`][2] guide; 26 | - [ ] I've updated the code style using `make codestyle`; 27 | - [ ] I've written tests for all new methods and classes that I created; 28 | - [ ] I've written the docstring in `Numpy` format for all the methods and classes that I used. 29 | 30 | [1]: https://github.com/llmquant/alphaagent/blob/master/CODE_OF_CONDUCT.md 31 | [2]: https://github.com/llmquant/alphaagent/blob/master/CONTRIBUTING.md 32 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Configuration: https://dependabot.com/docs/config-file/ 2 | # Docs: https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically 3 | 4 | version: 2 5 | 6 | updates: 7 | - package-ecosystem: "pip" 8 | directory: "/" 9 | schedule: 10 | interval: "daily" 11 | allow: 12 | - dependency-type: "all" 13 | commit-message: 14 | prefix: ":arrow_up:" 15 | open-pull-requests-limit: 50 16 | 17 | - package-ecosystem: "github-actions" 18 | directory: "/" 19 | schedule: 20 | interval: "daily" 21 | allow: 22 | - dependency-type: "all" 23 | commit-message: 24 | prefix: ":arrow_up:" 25 | open-pull-requests-limit: 50 26 | 27 | - package-ecosystem: "docker" 28 | directory: "/docker" 29 | schedule: 30 | interval: "weekly" 31 | allow: 32 | - dependency-type: "all" 33 | commit-message: 34 | prefix: ":arrow_up:" 35 | open-pull-requests-limit: 50 36 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | # Release drafter configuration https://github.com/release-drafter/release-drafter#configuration 2 | # Emojis were chosen to match the https://gitmoji.dev/ 3 | 4 | name-template: "v$NEXT_PATCH_VERSION" 5 | tag-template: "v$NEXT_PATCH_VERSION" 6 | 7 | categories: 8 | - title: ":rocket: Features" 9 | labels: [enhancement, feature] 10 | - title: ":wrench: Fixes & Refactoring" 11 | labels: [bug, refactoring, bugfix, fix] 12 | - title: ":package: Build System & CI/CD" 13 | labels: [build, ci, testing] 14 | - title: ":boom: Breaking Changes" 15 | labels: [breaking] 16 | - title: ":memo: Documentation" 17 | labels: [documentation] 18 | - title: ":arrow_up: Dependencies updates" 19 | labels: [dependencies] 20 | 21 | template: | 22 | ## What's Changed 23 | 24 | $CHANGES 25 | 26 | ## :busts_in_silhouette: List of contributors 27 | 28 | $CONTRIBUTORS 29 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | 2 | # UPDATEME to suit your project's workflow 3 | name: build 4 | 5 | on: [push, pull_request] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | strategy: 11 | matrix: 12 | python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Set up Python ${{ matrix.python-version }} 17 | uses: actions/setup-python@v2.2.2 18 | with: 19 | python-version: ${{ matrix.python-version }} 20 | 21 | - name: Install poetry 22 | run: make poetry-download 23 | 24 | - name: Set up cache 25 | uses: actions/cache@v2.1.6 26 | with: 27 | path: .venv 28 | key: venv-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('poetry.lock') }} 29 | - name: Install dependencies 30 | run: | 31 | poetry config virtualenvs.in-project true 32 | poetry install 33 | 34 | - name: Run style checks 35 | run: | 36 | make check-codestyle 37 | 38 | - name: Run tests 39 | run: | 40 | make test 41 | 42 | - name: Run safety checks 43 | run: | 44 | make check-safety 45 | -------------------------------------------------------------------------------- /.github/workflows/greetings.yml: -------------------------------------------------------------------------------- 1 | name: Greetings 2 | 3 | on: [pull_request, issues] 4 | 5 | jobs: 6 | greeting: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/first-interaction@v1 10 | with: 11 | repo-token: ${{ secrets.GITHUB_TOKEN }} 12 | pr-message: 'Hello @${{ github.actor }}, thank you for submitting a PR! We will respond as soon as possible.' 13 | issue-message: | 14 | Hello @${{ github.actor }}, thank you for your interest in our work! 15 | 16 | If this is a bug report, please provide screenshots and **minimum viable code to reproduce your issue**, otherwise we can not help you. 17 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name: Release Drafter 2 | 3 | on: 4 | push: 5 | # branches to consider in the event; optional, defaults to all 6 | branches: 7 | - master 8 | 9 | jobs: 10 | update_release_draft: 11 | runs-on: ubuntu-latest 12 | steps: 13 | # Drafts your next Release notes as Pull Requests are merged into "master" 14 | - uses: release-drafter/release-drafter@v5.15.0 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/linux,archlinuxpackages,osx,windows,python,c,django,database,pycharm,visualstudio,visualstudiocode,vim,zsh,git,diff,microsoftoffice,spreadsheet,ssh,certificates 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=linux,archlinuxpackages,osx,windows,python,c,django,database,pycharm,visualstudio,visualstudiocode,vim,zsh,git,diff,microsoftoffice,spreadsheet,ssh,certificates 3 | 4 | ### ArchLinuxPackages ### 5 | *.tar 6 | *.tar.* 7 | *.jar 8 | *.exe 9 | *.msi 10 | *.zip 11 | *.tgz 12 | *.log 13 | *.log.* 14 | *.sig 15 | 16 | pkg/ 17 | src/ 18 | 19 | ### C ### 20 | # Prerequisites 21 | *.d 22 | 23 | # Object files 24 | *.o 25 | *.ko 26 | *.obj 27 | *.elf 28 | 29 | # Linker output 30 | *.ilk 31 | *.map 32 | *.exp 33 | 34 | # Precompiled Headers 35 | *.gch 36 | *.pch 37 | 38 | # Libraries 39 | *.lib 40 | *.a 41 | *.la 42 | *.lo 43 | 44 | # Shared objects (inc. Windows DLLs) 45 | *.dll 46 | *.so 47 | *.so.* 48 | *.dylib 49 | 50 | # Executables 51 | *.out 52 | *.app 53 | *.i*86 54 | *.x86_64 55 | *.hex 56 | 57 | # Debug files 58 | *.dSYM/ 59 | *.su 60 | *.idb 61 | *.pdb 62 | 63 | # Kernel Module Compile Results 64 | *.mod* 65 | *.cmd 66 | .tmp_versions/ 67 | modules.order 68 | Module.symvers 69 | Mkfile.old 70 | dkms.conf 71 | 72 | ### certificates ### 73 | *.pem 74 | *.key 75 | *.crt 76 | *.cer 77 | *.der 78 | *.priv 79 | 80 | ### Database ### 81 | *.accdb 82 | *.db 83 | *.dbf 84 | *.mdb 85 | *.sqlite3 86 | *.db-shm 87 | *.db-wal 88 | 89 | ### Diff ### 90 | *.patch 91 | *.diff 92 | 93 | ### Django ### 94 | *.pot 95 | *.pyc 96 | __pycache__/ 97 | local_settings.py 98 | db.sqlite3 99 | db.sqlite3-journal 100 | media 101 | 102 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 103 | # in your Git repository. Update and uncomment the following line accordingly. 104 | # /staticfiles/ 105 | 106 | ### Django.Python Stack ### 107 | # Byte-compiled / optimized / DLL files 108 | *.py[cod] 109 | *$py.class 110 | 111 | # C extensions 112 | 113 | # Distribution / packaging 114 | .Python 115 | build/ 116 | develop-eggs/ 117 | dist/ 118 | downloads/ 119 | eggs/ 120 | .eggs/ 121 | lib/ 122 | lib64/ 123 | parts/ 124 | sdist/ 125 | var/ 126 | wheels/ 127 | share/python-wheels/ 128 | *.egg-info/ 129 | .installed.cfg 130 | *.egg 131 | MANIFEST 132 | 133 | # PyInstaller 134 | # Usually these files are written by a python script from a template 135 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 136 | *.manifest 137 | *.spec 138 | 139 | # Installer logs 140 | pip-log.txt 141 | pip-delete-this-directory.txt 142 | 143 | # Unit test / coverage reports 144 | htmlcov/ 145 | .tox/ 146 | .nox/ 147 | .coverage 148 | .coverage.* 149 | .cache 150 | nosetests.xml 151 | coverage.xml 152 | *.cover 153 | *.py,cover 154 | .hypothesis/ 155 | .pytest_cache/ 156 | cover/ 157 | 158 | # Translations 159 | *.mo 160 | 161 | # Django stuff: 162 | 163 | # Flask stuff: 164 | instance/ 165 | .webassets-cache 166 | 167 | # Scrapy stuff: 168 | .scrapy 169 | 170 | # Sphinx documentation 171 | docs/_build/ 172 | 173 | # PyBuilder 174 | .pybuilder/ 175 | target/ 176 | 177 | # Jupyter Notebook 178 | .ipynb_checkpoints 179 | 180 | # IPython 181 | profile_default/ 182 | ipython_config.py 183 | 184 | # pyenv 185 | # For a library or package, you might want to ignore these files since the code is 186 | # intended to run in multiple environments; otherwise, check them in: 187 | # .python-version 188 | 189 | # pipenv 190 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 191 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 192 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 193 | # install all needed dependencies. 194 | #Pipfile.lock 195 | 196 | # poetry 197 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 198 | # This is especially recommended for binary packages to ensure reproducibility, and is more 199 | # commonly ignored for libraries. 200 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 201 | #poetry.lock 202 | 203 | # pdm 204 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 205 | #pdm.lock 206 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 207 | # in version control. 208 | # https://pdm.fming.dev/#use-with-ide 209 | .pdm.toml 210 | 211 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 212 | __pypackages__/ 213 | 214 | # Celery stuff 215 | celerybeat-schedule 216 | celerybeat.pid 217 | 218 | # SageMath parsed files 219 | *.sage.py 220 | 221 | # Environments 222 | .env 223 | .venv 224 | env/ 225 | venv/ 226 | ENV/ 227 | env.bak/ 228 | venv.bak/ 229 | 230 | # Spyder project settings 231 | .spyderproject 232 | .spyproject 233 | 234 | # Rope project settings 235 | .ropeproject 236 | 237 | # mkdocs documentation 238 | /site 239 | 240 | # mypy 241 | .mypy_cache/ 242 | .dmypy.json 243 | dmypy.json 244 | 245 | # Pyre type checker 246 | .pyre/ 247 | 248 | # pytype static type analyzer 249 | .pytype/ 250 | 251 | # Cython debug symbols 252 | cython_debug/ 253 | 254 | # PyCharm 255 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 256 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 257 | # and can be added to the global gitignore or merged into this file. For a more nuclear 258 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 259 | #.idea/ 260 | 261 | ### Git ### 262 | # Created by git for backups. To disable backups in Git: 263 | # $ git config --global mergetool.keepBackup false 264 | *.orig 265 | 266 | # Created by git when using merge tools for conflicts 267 | *.BACKUP.* 268 | *.BASE.* 269 | *.LOCAL.* 270 | *.REMOTE.* 271 | *_BACKUP_*.txt 272 | *_BASE_*.txt 273 | *_LOCAL_*.txt 274 | *_REMOTE_*.txt 275 | 276 | ### Linux ### 277 | *~ 278 | 279 | # temporary files which can be created if a process still has a handle open of a deleted file 280 | .fuse_hidden* 281 | 282 | # KDE directory preferences 283 | .directory 284 | 285 | # Linux trash folder which might appear on any partition or disk 286 | .Trash-* 287 | 288 | # .nfs files are created when an open file is removed but is still being accessed 289 | .nfs* 290 | 291 | ### MicrosoftOffice ### 292 | *.tmp 293 | 294 | # Word temporary 295 | ~$*.doc* 296 | 297 | # Word Auto Backup File 298 | Backup of *.doc* 299 | 300 | # Excel temporary 301 | ~$*.xls* 302 | 303 | # Excel Backup File 304 | *.xlk 305 | 306 | # PowerPoint temporary 307 | ~$*.ppt* 308 | 309 | # Visio autosave temporary files 310 | *.~vsd* 311 | 312 | ### OSX ### 313 | # General 314 | .DS_Store 315 | .AppleDouble 316 | .LSOverride 317 | 318 | # Icon must end with two \r 319 | Icon 320 | 321 | # Thumbnails 322 | ._* 323 | 324 | # Files that might appear in the root of a volume 325 | .DocumentRevisions-V100 326 | .fseventsd 327 | .Spotlight-V100 328 | .TemporaryItems 329 | .Trashes 330 | .VolumeIcon.icns 331 | .com.apple.timemachine.donotpresent 332 | 333 | # Directories potentially created on remote AFP share 334 | .AppleDB 335 | .AppleDesktop 336 | Network Trash Folder 337 | Temporary Items 338 | .apdisk 339 | 340 | ### PyCharm ### 341 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 342 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 343 | 344 | # User-specific stuff 345 | .idea/**/workspace.xml 346 | .idea/**/tasks.xml 347 | .idea/**/usage.statistics.xml 348 | .idea/**/dictionaries 349 | .idea/**/shelf 350 | 351 | # AWS User-specific 352 | .idea/**/aws.xml 353 | 354 | # Generated files 355 | .idea/**/contentModel.xml 356 | 357 | # Sensitive or high-churn files 358 | .idea/**/dataSources/ 359 | .idea/**/dataSources.ids 360 | .idea/**/dataSources.local.xml 361 | .idea/**/sqlDataSources.xml 362 | .idea/**/dynamic.xml 363 | .idea/**/uiDesigner.xml 364 | .idea/**/dbnavigator.xml 365 | 366 | # Gradle 367 | .idea/**/gradle.xml 368 | .idea/**/libraries 369 | 370 | # Gradle and Maven with auto-import 371 | # When using Gradle or Maven with auto-import, you should exclude module files, 372 | # since they will be recreated, and may cause churn. Uncomment if using 373 | # auto-import. 374 | # .idea/artifacts 375 | # .idea/compiler.xml 376 | # .idea/jarRepositories.xml 377 | # .idea/modules.xml 378 | # .idea/*.iml 379 | # .idea/modules 380 | # *.iml 381 | # *.ipr 382 | 383 | # CMake 384 | cmake-build-*/ 385 | 386 | # Mongo Explorer plugin 387 | .idea/**/mongoSettings.xml 388 | 389 | # File-based project format 390 | *.iws 391 | 392 | # IntelliJ 393 | out/ 394 | 395 | # mpeltonen/sbt-idea plugin 396 | .idea_modules/ 397 | 398 | # JIRA plugin 399 | atlassian-ide-plugin.xml 400 | 401 | # Cursive Clojure plugin 402 | .idea/replstate.xml 403 | 404 | # SonarLint plugin 405 | .idea/sonarlint/ 406 | 407 | # Crashlytics plugin (for Android Studio and IntelliJ) 408 | com_crashlytics_export_strings.xml 409 | crashlytics.properties 410 | crashlytics-build.properties 411 | fabric.properties 412 | 413 | # Editor-based Rest Client 414 | .idea/httpRequests 415 | 416 | # Android studio 3.1+ serialized cache file 417 | .idea/caches/build_file_checksums.ser 418 | 419 | ### PyCharm Patch ### 420 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 421 | 422 | # *.iml 423 | # modules.xml 424 | # .idea/misc.xml 425 | # *.ipr 426 | 427 | # Sonarlint plugin 428 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 429 | .idea/**/sonarlint/ 430 | 431 | # SonarQube Plugin 432 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 433 | .idea/**/sonarIssues.xml 434 | 435 | # Markdown Navigator plugin 436 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 437 | .idea/**/markdown-navigator.xml 438 | .idea/**/markdown-navigator-enh.xml 439 | .idea/**/markdown-navigator/ 440 | 441 | # Cache file creation bug 442 | # See https://youtrack.jetbrains.com/issue/JBR-2257 443 | .idea/$CACHE_FILE$ 444 | 445 | # CodeStream plugin 446 | # https://plugins.jetbrains.com/plugin/12206-codestream 447 | .idea/codestream.xml 448 | 449 | # Azure Toolkit for IntelliJ plugin 450 | # https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij 451 | .idea/**/azureSettings.xml 452 | 453 | ### Python ### 454 | # Byte-compiled / optimized / DLL files 455 | 456 | # C extensions 457 | 458 | # Distribution / packaging 459 | 460 | # PyInstaller 461 | # Usually these files are written by a python script from a template 462 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 463 | 464 | # Installer logs 465 | 466 | # Unit test / coverage reports 467 | 468 | # Translations 469 | 470 | # Django stuff: 471 | 472 | # Flask stuff: 473 | 474 | # Scrapy stuff: 475 | 476 | # Sphinx documentation 477 | 478 | # PyBuilder 479 | 480 | # Jupyter Notebook 481 | 482 | # IPython 483 | 484 | # pyenv 485 | # For a library or package, you might want to ignore these files since the code is 486 | # intended to run in multiple environments; otherwise, check them in: 487 | # .python-version 488 | 489 | # pipenv 490 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 491 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 492 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 493 | # install all needed dependencies. 494 | 495 | # poetry 496 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 497 | # This is especially recommended for binary packages to ensure reproducibility, and is more 498 | # commonly ignored for libraries. 499 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 500 | 501 | # pdm 502 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 503 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 504 | # in version control. 505 | # https://pdm.fming.dev/#use-with-ide 506 | 507 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 508 | 509 | # Celery stuff 510 | 511 | # SageMath parsed files 512 | 513 | # Environments 514 | 515 | # Spyder project settings 516 | 517 | # Rope project settings 518 | 519 | # mkdocs documentation 520 | 521 | # mypy 522 | 523 | # Pyre type checker 524 | 525 | # pytype static type analyzer 526 | 527 | # Cython debug symbols 528 | 529 | # PyCharm 530 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 531 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 532 | # and can be added to the global gitignore or merged into this file. For a more nuclear 533 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 534 | 535 | ### Python Patch ### 536 | # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration 537 | poetry.toml 538 | 539 | # ruff 540 | .ruff_cache/ 541 | 542 | # LSP config files 543 | pyrightconfig.json 544 | 545 | ### Spreadsheet ### 546 | *.xlr 547 | *.xls 548 | *.xlsx 549 | 550 | ### SSH ### 551 | **/.ssh/id_* 552 | **/.ssh/*_id_* 553 | **/.ssh/known_hosts 554 | 555 | ### Vim ### 556 | # Swap 557 | [._]*.s[a-v][a-z] 558 | !*.svg # comment out if you don't need vector files 559 | [._]*.sw[a-p] 560 | [._]s[a-rt-v][a-z] 561 | [._]ss[a-gi-z] 562 | [._]sw[a-p] 563 | 564 | # Session 565 | Session.vim 566 | Sessionx.vim 567 | 568 | # Temporary 569 | .netrwhist 570 | # Auto-generated tag files 571 | tags 572 | # Persistent undo 573 | [._]*.un~ 574 | 575 | ### VisualStudioCode ### 576 | .vscode/* 577 | !.vscode/settings.json 578 | !.vscode/tasks.json 579 | !.vscode/launch.json 580 | !.vscode/extensions.json 581 | !.vscode/*.code-snippets 582 | 583 | # Local History for Visual Studio Code 584 | .history/ 585 | 586 | # Built Visual Studio Code Extensions 587 | *.vsix 588 | 589 | ### VisualStudioCode Patch ### 590 | # Ignore all local history of files 591 | .history 592 | .ionide 593 | 594 | ### Windows ### 595 | # Windows thumbnail cache files 596 | Thumbs.db 597 | Thumbs.db:encryptable 598 | ehthumbs.db 599 | ehthumbs_vista.db 600 | 601 | # Dump file 602 | *.stackdump 603 | 604 | # Folder config file 605 | [Dd]esktop.ini 606 | 607 | # Recycle Bin used on file shares 608 | $RECYCLE.BIN/ 609 | 610 | # Windows Installer files 611 | *.cab 612 | *.msix 613 | *.msm 614 | *.msp 615 | 616 | # Windows shortcuts 617 | *.lnk 618 | 619 | ### Zsh ### 620 | # Zsh compiled script + zrecompile backup 621 | *.zwc 622 | *.zwc.old 623 | 624 | # Zsh completion-optimization dumpfile 625 | *zcompdump* 626 | 627 | # Zsh history 628 | .zsh_history 629 | 630 | # Zsh sessions 631 | .zsh_sessions 632 | 633 | # Zsh zcalc history 634 | .zcalc_history 635 | 636 | # A popular plugin manager's files 637 | ._zinit 638 | .zinit_lstupd 639 | 640 | # zdharma/zshelldoc tool's files 641 | zsdoc/data 642 | 643 | # robbyrussell/oh-my-zsh/plugins/per-directory-history plugin's files 644 | # (when set-up to store the history in the local directory) 645 | .directory_history 646 | 647 | # MichaelAquilina/zsh-autoswitch-virtualenv plugin's files 648 | # (for Zsh plugins using Python) 649 | 650 | # Zunit tests' output 651 | /tests/_output/* 652 | !/tests/_output/.gitkeep 653 | 654 | ### VisualStudio ### 655 | ## Ignore Visual Studio temporary files, build results, and 656 | ## files generated by popular Visual Studio add-ons. 657 | ## 658 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore 659 | 660 | # User-specific files 661 | *.rsuser 662 | *.suo 663 | *.user 664 | *.userosscache 665 | *.sln.docstates 666 | 667 | # User-specific files (MonoDevelop/Xamarin Studio) 668 | *.userprefs 669 | 670 | # Mono auto generated files 671 | mono_crash.* 672 | 673 | # Build results 674 | [Dd]ebug/ 675 | [Dd]ebugPublic/ 676 | [Rr]elease/ 677 | [Rr]eleases/ 678 | x64/ 679 | x86/ 680 | [Ww][Ii][Nn]32/ 681 | [Aa][Rr][Mm]/ 682 | [Aa][Rr][Mm]64/ 683 | bld/ 684 | [Bb]in/ 685 | [Oo]bj/ 686 | [Ll]og/ 687 | [Ll]ogs/ 688 | 689 | # Visual Studio 2015/2017 cache/options directory 690 | .vs/ 691 | # Uncomment if you have tasks that create the project's static files in wwwroot 692 | #wwwroot/ 693 | 694 | # Visual Studio 2017 auto generated files 695 | Generated\ Files/ 696 | 697 | # MSTest test Results 698 | [Tt]est[Rr]esult*/ 699 | [Bb]uild[Ll]og.* 700 | 701 | # NUnit 702 | *.VisualState.xml 703 | TestResult.xml 704 | nunit-*.xml 705 | 706 | # Build Results of an ATL Project 707 | [Dd]ebugPS/ 708 | [Rr]eleasePS/ 709 | dlldata.c 710 | 711 | # Benchmark Results 712 | BenchmarkDotNet.Artifacts/ 713 | 714 | # .NET Core 715 | project.lock.json 716 | project.fragment.lock.json 717 | artifacts/ 718 | 719 | # ASP.NET Scaffolding 720 | ScaffoldingReadMe.txt 721 | 722 | # StyleCop 723 | StyleCopReport.xml 724 | 725 | # Files built by Visual Studio 726 | *_i.c 727 | *_p.c 728 | *_h.h 729 | *.meta 730 | *.iobj 731 | *.ipdb 732 | *.pgc 733 | *.pgd 734 | *.rsp 735 | *.sbr 736 | *.tlb 737 | *.tli 738 | *.tlh 739 | *.tmp_proj 740 | *_wpftmp.csproj 741 | *.tlog 742 | *.vspscc 743 | *.vssscc 744 | .builds 745 | *.pidb 746 | *.svclog 747 | *.scc 748 | 749 | # Chutzpah Test files 750 | _Chutzpah* 751 | 752 | # Visual C++ cache files 753 | ipch/ 754 | *.aps 755 | *.ncb 756 | *.opendb 757 | *.opensdf 758 | *.sdf 759 | *.cachefile 760 | *.VC.db 761 | *.VC.VC.opendb 762 | 763 | # Visual Studio profiler 764 | *.psess 765 | *.vsp 766 | *.vspx 767 | *.sap 768 | 769 | # Visual Studio Trace Files 770 | *.e2e 771 | 772 | # TFS 2012 Local Workspace 773 | $tf/ 774 | 775 | # Guidance Automation Toolkit 776 | *.gpState 777 | 778 | # ReSharper is a .NET coding add-in 779 | _ReSharper*/ 780 | *.[Rr]e[Ss]harper 781 | *.DotSettings.user 782 | 783 | # TeamCity is a build add-in 784 | _TeamCity* 785 | 786 | # DotCover is a Code Coverage Tool 787 | *.dotCover 788 | 789 | # AxoCover is a Code Coverage Tool 790 | .axoCover/* 791 | !.axoCover/settings.json 792 | 793 | # Coverlet is a free, cross platform Code Coverage Tool 794 | coverage*.json 795 | coverage*.xml 796 | coverage*.info 797 | 798 | # Visual Studio code coverage results 799 | *.coverage 800 | *.coveragexml 801 | 802 | # NCrunch 803 | _NCrunch_* 804 | .*crunch*.local.xml 805 | nCrunchTemp_* 806 | 807 | # MightyMoose 808 | *.mm.* 809 | AutoTest.Net/ 810 | 811 | # Web workbench (sass) 812 | .sass-cache/ 813 | 814 | # Installshield output folder 815 | [Ee]xpress/ 816 | 817 | # DocProject is a documentation generator add-in 818 | DocProject/buildhelp/ 819 | DocProject/Help/*.HxT 820 | DocProject/Help/*.HxC 821 | DocProject/Help/*.hhc 822 | DocProject/Help/*.hhk 823 | DocProject/Help/*.hhp 824 | DocProject/Help/Html2 825 | DocProject/Help/html 826 | 827 | # Click-Once directory 828 | publish/ 829 | 830 | # Publish Web Output 831 | *.[Pp]ublish.xml 832 | *.azurePubxml 833 | # Note: Comment the next line if you want to checkin your web deploy settings, 834 | # but database connection strings (with potential passwords) will be unencrypted 835 | *.pubxml 836 | *.publishproj 837 | 838 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 839 | # checkin your Azure Web App publish settings, but sensitive information contained 840 | # in these scripts will be unencrypted 841 | PublishScripts/ 842 | 843 | # NuGet Packages 844 | *.nupkg 845 | # NuGet Symbol Packages 846 | *.snupkg 847 | # The packages folder can be ignored because of Package Restore 848 | **/[Pp]ackages/* 849 | # except build/, which is used as an MSBuild target. 850 | !**/[Pp]ackages/build/ 851 | # Uncomment if necessary however generally it will be regenerated when needed 852 | #!**/[Pp]ackages/repositories.config 853 | # NuGet v3's project.json files produces more ignorable files 854 | *.nuget.props 855 | *.nuget.targets 856 | 857 | # Microsoft Azure Build Output 858 | csx/ 859 | *.build.csdef 860 | 861 | # Microsoft Azure Emulator 862 | ecf/ 863 | rcf/ 864 | 865 | # Windows Store app package directories and files 866 | AppPackages/ 867 | BundleArtifacts/ 868 | Package.StoreAssociation.xml 869 | _pkginfo.txt 870 | *.appx 871 | *.appxbundle 872 | *.appxupload 873 | 874 | # Visual Studio cache files 875 | # files ending in .cache can be ignored 876 | *.[Cc]ache 877 | # but keep track of directories ending in .cache 878 | !?*.[Cc]ache/ 879 | 880 | # Others 881 | ClientBin/ 882 | ~$* 883 | *.dbmdl 884 | *.dbproj.schemaview 885 | *.jfm 886 | *.pfx 887 | *.publishsettings 888 | orleans.codegen.cs 889 | 890 | # Including strong name files can present a security risk 891 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 892 | #*.snk 893 | 894 | # Since there are multiple workflows, uncomment next line to ignore bower_components 895 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 896 | #bower_components/ 897 | 898 | # RIA/Silverlight projects 899 | Generated_Code/ 900 | 901 | # Backup & report files from converting an old project file 902 | # to a newer Visual Studio version. Backup files are not needed, 903 | # because we have git ;-) 904 | _UpgradeReport_Files/ 905 | Backup*/ 906 | UpgradeLog*.XML 907 | UpgradeLog*.htm 908 | ServiceFabricBackup/ 909 | *.rptproj.bak 910 | 911 | # SQL Server files 912 | *.mdf 913 | *.ldf 914 | *.ndf 915 | 916 | # Business Intelligence projects 917 | *.rdl.data 918 | *.bim.layout 919 | *.bim_*.settings 920 | *.rptproj.rsuser 921 | *- [Bb]ackup.rdl 922 | *- [Bb]ackup ([0-9]).rdl 923 | *- [Bb]ackup ([0-9][0-9]).rdl 924 | 925 | # Microsoft Fakes 926 | FakesAssemblies/ 927 | 928 | # GhostDoc plugin setting file 929 | *.GhostDoc.xml 930 | 931 | # Node.js Tools for Visual Studio 932 | .ntvs_analysis.dat 933 | node_modules/ 934 | 935 | # Visual Studio 6 build log 936 | *.plg 937 | 938 | # Visual Studio 6 workspace options file 939 | *.opt 940 | 941 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 942 | *.vbw 943 | 944 | # Visual Studio 6 auto-generated project file (contains which files were open etc.) 945 | *.vbp 946 | 947 | # Visual Studio 6 workspace and project file (working project files containing files to include in project) 948 | *.dsw 949 | *.dsp 950 | 951 | # Visual Studio 6 technical files 952 | 953 | # Visual Studio LightSwitch build output 954 | **/*.HTMLClient/GeneratedArtifacts 955 | **/*.DesktopClient/GeneratedArtifacts 956 | **/*.DesktopClient/ModelManifest.xml 957 | **/*.Server/GeneratedArtifacts 958 | **/*.Server/ModelManifest.xml 959 | _Pvt_Extensions 960 | 961 | # Paket dependency manager 962 | .paket/paket.exe 963 | paket-files/ 964 | 965 | # FAKE - F# Make 966 | .fake/ 967 | 968 | # CodeRush personal settings 969 | .cr/personal 970 | 971 | # Python Tools for Visual Studio (PTVS) 972 | 973 | # Cake - Uncomment if you are using it 974 | # tools/** 975 | # !tools/packages.config 976 | 977 | # Tabs Studio 978 | *.tss 979 | 980 | # Telerik's JustMock configuration file 981 | *.jmconfig 982 | 983 | # BizTalk build output 984 | *.btp.cs 985 | *.btm.cs 986 | *.odx.cs 987 | *.xsd.cs 988 | 989 | # OpenCover UI analysis results 990 | OpenCover/ 991 | 992 | # Azure Stream Analytics local run output 993 | ASALocalRun/ 994 | 995 | # MSBuild Binary and Structured Log 996 | *.binlog 997 | 998 | # NVidia Nsight GPU debugger configuration file 999 | *.nvuser 1000 | 1001 | # MFractors (Xamarin productivity tool) working folder 1002 | .mfractor/ 1003 | 1004 | # Local History for Visual Studio 1005 | .localhistory/ 1006 | 1007 | # Visual Studio History (VSHistory) files 1008 | .vshistory/ 1009 | 1010 | # BeatPulse healthcheck temp database 1011 | healthchecksdb 1012 | 1013 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 1014 | MigrationBackup/ 1015 | 1016 | # Ionide (cross platform F# VS Code tools) working folder 1017 | .ionide/ 1018 | 1019 | # Fody - auto-generated XML schema 1020 | FodyWeavers.xsd 1021 | 1022 | # VS Code files for those working on multiple tools 1023 | *.code-workspace 1024 | 1025 | # Local History for Visual Studio Code 1026 | 1027 | # Windows Installer files from build outputs 1028 | 1029 | # JetBrains Rider 1030 | *.sln.iml 1031 | 1032 | ### VisualStudio Patch ### 1033 | # Additional files built by Visual Studio 1034 | 1035 | # End of https://www.toptal.com/developers/gitignore/api/linux,archlinuxpackages,osx,windows,python,c,django,database,pycharm,visualstudio,visualstudiocode,vim,zsh,git,diff,microsoftoffice,spreadsheet,ssh,certificates 1036 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | default_stages: [commit, push] 2 | 3 | repos: 4 | - repo: https://github.com/pre-commit/pre-commit-hooks 5 | rev: v2.5.0 6 | hooks: 7 | - id: check-yaml 8 | - id: end-of-file-fixer 9 | exclude: LICENCE 10 | 11 | - repo: local 12 | hooks: 13 | - id: ruff 14 | name: ruff 15 | entry: poetry run ruff check 16 | types: [python] 17 | language: system 18 | # UPDATEME with additional hooks 19 | -------------------------------------------------------------------------------- /AlphaAgent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LLMQuant/Alpha-Agent/e65ec21364bee34cb1c01e888a47c172d44d97da/AlphaAgent.png -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LLMQuant/Alpha-Agent/e65ec21364bee34cb1c01e888a47c172d44d97da/CHANGELOG.md -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, caste, color, religion, or sexual 10 | identity and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the overall 26 | community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or advances of 31 | any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email address, 35 | without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | [info@llmquant.com][mail]. All complaints will be reviewed and 64 | investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series of 86 | actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or permanent 93 | ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within the 113 | community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.1, available at 119 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 120 | 121 | Community Impact Guidelines were inspired by 122 | [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. 123 | 124 | For answers to common questions about this code of conduct, see the FAQ at 125 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at 126 | [https://www.contributor-covenant.org/translations][translations]. 127 | 128 | [homepage]: https://www.contributor-covenant.org 129 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 130 | [Mozilla CoC]: https://github.com/mozilla/diversity 131 | [FAQ]: https://www.contributor-covenant.org/faq 132 | [translations]: https://www.contributor-covenant.org/translations 133 | [mail]: mailto:info@llmquant.com 134 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | ## Dependencies 4 | 5 | We use `poetry` to manage the [dependencies][1]. 6 | If you dont have `poetry`, you should install with `make poetry-download`. 7 | 8 | To install dependencies and prepare [`pre-commit`][2] hooks you would need to run `install` command: 9 | 10 | ```bash 11 | make install 12 | make pre-commit-install 13 | ``` 14 | 15 | To activate your `virtualenv` run `poetry shell`. 16 | 17 | ## Codestyle 18 | 19 | After installation you may execute code formatting. 20 | 21 | ```bash 22 | make codestyle 23 | ``` 24 | 25 | ### Checks 26 | 27 | Many checks are configured for this project. Command `make check-codestyle` will check pyupgrade, black and isort. 28 | The `make check-safety` command will look at the security of your code. 29 | 30 | Comand `make lint-all` applies all checks. 31 | 32 | ### Before submitting 33 | 34 | Before submitting your code please do the following steps: 35 | 36 | 1. Add any changes you want 37 | 1. Add tests for the new changes 38 | 1. Edit documentation if you have changed something significant 39 | 1. Run `make codestyle` to format your changes. 40 | 1. Run `make lint-all` to ensure that types, security and docstrings are okay. 41 | 42 | ## Other help 43 | 44 | You can contribute by spreading a word about this library. 45 | It would also be a huge contribution to write 46 | a short article on how you are using this project. 47 | You can also share your best practices with us. 48 | 49 | [1]: https://github.com/python-poetry/poetry 50 | [2]: https://pre-commit.com/ 51 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2024 LLMQuant 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 20 | OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #* Variables 2 | SHELL := /usr/bin/env bash 3 | PYTHON := python 4 | PYTHONPATH := `pwd` 5 | 6 | 7 | #* Poetry 8 | .PHONY: poetry-download 9 | poetry-download: 10 | curl -sSL https://install.python-poetry.org | $(PYTHON) - 11 | 12 | .PHONY: poetry-remove 13 | poetry-remove: 14 | curl -sSL https://install.python-poetry.org | $(PYTHON) - --uninstall 15 | 16 | .PHONY: poetry-plugins 17 | poetry-plugins: 18 | poetry self add poetry-plugin-up 19 | 20 | .PHONY: update-dev-deps 21 | update-dev-deps: 22 | poetry up --only=dev-dependencies --latest 23 | 24 | 25 | #* Installation 26 | .PHONY: install 27 | install: 28 | poetry lock -n && poetry export --without-hashes > requirements.txt 29 | poetry install -n 30 | -poetry run mypy --install-types --non-interactive ./ 31 | 32 | .PHONY: pre-commit-install 33 | pre-commit-install: 34 | poetry run pre-commit install 35 | 36 | 37 | #* Formatters 38 | .PHONY: codestyle 39 | codestyle: 40 | poetry run ruff format 41 | 42 | .PHONE: formatting 43 | formatting: codestyle 44 | 45 | 46 | #* Linting 47 | .PHONY: test 48 | test: 49 | PYTHONPATH=$(PYTHONPATH) poetry run pytest -c pyproject.toml --cov-report=html --cov=alphaagent tests/ 50 | 51 | .PHONY: check-linter 52 | check-linter: 53 | poetry run ruff check 54 | 55 | .PHONY: check-formatting 56 | check-formatting: 57 | poetry run ruff format --check 58 | 59 | .PHONY: mypy 60 | mypy: 61 | poetry run mypy --config-file pyproject.toml ./ 62 | 63 | .PHONY: check-safety 64 | check-safety: 65 | poetry check 66 | poetry run safety check --full-report 67 | poetry run bandit -ll --recursive alphaagent tests 68 | 69 | .PHONY: lint-all 70 | lint: test check-linter check-formatting mypy check-safety 71 | 72 | 73 | #* Cleaning 74 | .PHONY: pycache-remove 75 | pycache-remove: 76 | find . | grep -E "(__pycache__|\.pyc|\.pyo$$)" | xargs rm -rf 77 | 78 | .PHONY: dsstore-remove 79 | dsstore-remove: 80 | find . | grep -E ".DS_Store" | xargs rm -rf 81 | 82 | .PHONY: mypycache-remove 83 | mypycache-remove: 84 | find . | grep -E ".mypy_cache" | xargs rm -rf 85 | 86 | .PHONY: ipynbcheckpoints-remove 87 | ipynbcheckpoints-remove: 88 | find . | grep -E ".ipynb_checkpoints" | xargs rm -rf 89 | 90 | .PHONY: pytestcache-remove 91 | pytestcache-remove: 92 | find . | grep -E ".pytest_cache" | xargs rm -rf 93 | 94 | .PHONY: build-remove 95 | build-remove: 96 | rm -rf build/ 97 | 98 | .PHONY: cleanup 99 | cleanup: pycache-remove dsstore-remove mypycache-remove ipynbcheckpoints-remove pytestcache-remove 100 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Alpha Agent: A Multi-Agent Based Framework for Alpha Research in Quantitative Investment 2 | [![Python 3.8](https://img.shields.io/badge/python-3.8-blue.svg)](https://www.python.org/downloads/release/python-360/) 3 | [![PyPI](https://img.shields.io/pypi/v/alphaagent.svg)](https://pypi.org/project/alphaagent/) 4 | ![License](https://img.shields.io/github/license/LLMQuant/alphaagent.svg?color=brightgreen) 5 | ![](https://img.shields.io/github/issues-raw/LLMQuant/alphaagent?label=Issues) 6 | ![](https://img.shields.io/github/issues-closed-raw/LLMQuant/alphaagent?label=Closed+Issues) 7 | ![](https://img.shields.io/github/issues-pr-raw/LLMQuant/alphaagent?label=Open+PRs) 8 | ![](https://img.shields.io/github/issues-pr-closed-raw/LLMQuant/alphaagent?label=Closed+PRs) 9 | 10 |
11 | image 12 |
13 | 14 | ## AlphaAgent Overview 15 | 16 | AlphaAgent is designed to harness the power of AI and machine learning for financial markets. It integrates multiple agents working in tandem to analyze data, implement strategies, combine insights, and test their efficacy in simulated environments. 17 | 18 | ## Components 19 | 20 | ### Alpha Mining Agent 21 | 22 | The Alpha Mining Agent is responsible for extracting valuable insights from large datasets. It uses various machine learning algorithms to identify patterns and generate trading signals. 23 | 24 | ### Implementation Agent 25 | 26 | The Implementation Agent takes the signals generated by the Alpha Mining Agent and executes trades based on predefined strategies. It ensures that the trades are carried out efficiently and effectively. 27 | 28 | ### Combination Agent 29 | 30 | The Combination Agent merges the outputs of multiple agents to create a cohesive strategy. It optimizes the combined signals to maximize returns while managing risk. 31 | 32 | ### Backtesting 33 | 34 | Backtesting is a critical component that tests the strategies in a simulated environment using historical data. It helps in assessing the performance and robustness of the trading strategies before they are deployed in live markets. 35 | 36 | 37 | ## Very first steps 38 | 39 | ### Initialize your code 40 | 41 | 1. Initialize `git` inside your repo: 42 | 43 | ```bash 44 | cd alphaagent && git init 45 | ``` 46 | 47 | 2. If you don't have `Poetry` installed run: 48 | 49 | ```bash 50 | make poetry-download 51 | ``` 52 | 53 | > This installs Poetry as a [standalone application][fs1]. If you prefer, install it through your distribution's package manager. 54 | 55 | 3. Initialize Poetry and install `pre-commit` hooks: 56 | 57 | ```bash 58 | make install 59 | make pre-commit-install 60 | ``` 61 | 62 | 4. Run the codestyle: 63 | 64 | ```bash 65 | make codestyle 66 | ``` 67 | 68 | 5. Upload initial code to GitHub: 69 | 70 | ```bash 71 | git add . 72 | git commit -m ":tada: Initial commit" 73 | git branch -M main 74 | git remote add origin https://github.com/llmquant/alphaagent.git 75 | git push -u origin main 76 | ``` 77 | 78 | ## License 79 | 80 | This project is licensed under the Apache-2.0 License. See the LICENSE file for more details. 81 | 82 | --- 83 | 84 | **Disclaimer**: The information provided in this repository is for educational purposes only and should not be construed as financial advice. Always consult with a qualified financial advisor before making any investment decisions. 85 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security 2 | 3 | ## :closed_lock_with_key: Reporting Security Issues 4 | 5 | > Do not open issues that might have security implications! 6 | > It is critical that security related issues are reported privately so we have time to address them before they become public knowledge. 7 | 8 | Vulnerabilities can be reported by emailing core members: 9 | 10 | - LLMQuant <[info@llmquant.com][1]> 11 | 12 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 13 | 14 | - Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 15 | - Full paths of source file(s) related to the manifestation of the issue 16 | - The location of the affected source code (tag/branch/commit or direct URL) 17 | - Any special configuration required to reproduce the issue 18 | - Environment (e.g. Linux / Windows / macOS) 19 | - Step-by-step instructions to reproduce the issue 20 | - Proof-of-concept or exploit code (if possible) 21 | - Impact of the issue, including how an attacker might exploit the issue 22 | 23 | This information will help us triage your report more quickly. 24 | 25 | ## Preferred Languages 26 | 27 | We prefer all communications to be in English. 28 | 29 | [1]: mailto:info@llmquant.com 30 | -------------------------------------------------------------------------------- /alphaagent/config/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LLMQuant/Alpha-Agent/e65ec21364bee34cb1c01e888a47c172d44d97da/alphaagent/config/README.md -------------------------------------------------------------------------------- /alphaagent/config/llm_config.py: -------------------------------------------------------------------------------- 1 | from dotenv import load_dotenv 2 | from pydantic_settings import BaseSettings 3 | 4 | # make sure that env variable is loaded while calling 5 | load_dotenv(verbose=True, override=True) 6 | 7 | 8 | class LLMConfig(BaseSettings): 9 | """LLM basic configuration.""" 10 | 11 | openai_api_key: str = "" 12 | chat_openai_api_key: str = "" 13 | chat_api_base: str = "" 14 | chat_api_version: str = "" 15 | chat_model: str = "" 16 | chat_max_tokens: int = 3000 17 | chat_temperature: float = 0.5 18 | chat_stream: bool = True 19 | chat_seed: int | None = None 20 | chat_frequency_penalty: float = 0.0 21 | chat_presence_penalty: float = 0.0 22 | chat_token_limit: int = 100000 # 100000 is the maximum limit of gpt4, which might increase in the future version of gpt 23 | default_system_prompt: str = "You are an Finace AI assistant who helps to answer user's questions in finance domain." 24 | max_past_message_include: int = 5 25 | -------------------------------------------------------------------------------- /alphaagent/utils/llm_utils.py: -------------------------------------------------------------------------------- 1 | """All llm related utils classes which to call llm api.""" 2 | 3 | from openai import OpenAI 4 | 5 | from alphaagent.config.llm_config import LLMConfig 6 | 7 | 8 | class LLMReferenceAgent: 9 | def __init__(self): 10 | self.llm_config = LLMConfig() 11 | self.api_key = self.llm_config.openai_api_key 12 | self.chat_api_base = self.llm_config.chat_api_base 13 | self.model = self.llm_config.chat_model 14 | self.temperature = self.llm_config.chat_temperature 15 | self.former_messages = [] 16 | 17 | def build_messages( 18 | self, 19 | system_prompt: str | None = None, 20 | user_prompt: str | None = None, 21 | former_messages: list[dict] | None = None, 22 | ) -> list[dict[str, str]]: 23 | if former_messages is None: 24 | former_messages = [] 25 | system_prompt = ( 26 | self.llm_config.default_system_prompt 27 | if system_prompt is None 28 | else system_prompt 29 | ) 30 | messages = [{"role": "system", "content": system_prompt}] 31 | messages.extend( 32 | former_messages[-1 * self.llm_config.max_past_message_include :] 33 | ) 34 | messages.append({"role": "user", "content": user_prompt}) 35 | return messages 36 | 37 | def complete_message(self, *, system_prompt: str, user_prompt: str | None = None) -> (str | None): 38 | """Complete the message.""" 39 | messages = self.build_messages(system_prompt, user_prompt, self.former_messages) 40 | 41 | client = OpenAI(api_key=self.api_key, base_url=self.chat_api_base) 42 | chat_completion = client.chat.completions.create( 43 | messages=messages, model=self.model 44 | ) 45 | return chat_completion.choices[0].message.content 46 | -------------------------------------------------------------------------------- /cookiecutter-config-file.yml: -------------------------------------------------------------------------------- 1 | # This file contains values from Cookiecutter 2 | # Made with https://gitlab.com/manoelpqueiroz/galactipy 3 | 4 | default_context: 5 | project_name: "AlphaAgent" 6 | repo_name: "alphaagent" 7 | package_name: "alphaagent" 8 | project_description: "Awesome `alphaagent` is a Python cli/package created with https://gitlab.com/manoelpqueiroz/galactipy" 9 | version: "0.1.0" 10 | author: "LLMQuant" 11 | scm_platform: "GitHub" 12 | scm_username: "llmquant" 13 | email: "info@llmquant.com" 14 | licence: "MIT" 15 | minimal_python_version: 3.8 16 | use_ruff: True 17 | line_length: 88 18 | docstring_style: "numpy" 19 | create_cli: True 20 | create_docker: False 21 | create_docs: True 22 | -------------------------------------------------------------------------------- /docs/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LLMQuant/Alpha-Agent/e65ec21364bee34cb1c01e888a47c172d44d97da/docs/.gitkeep -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "appnope" 5 | version = "0.1.4" 6 | description = "Disable App Nap on macOS >= 10.9" 7 | optional = false 8 | python-versions = ">=3.6" 9 | files = [ 10 | {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, 11 | {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, 12 | ] 13 | 14 | [[package]] 15 | name = "asttokens" 16 | version = "2.4.1" 17 | description = "Annotate AST trees with source code positions" 18 | optional = false 19 | python-versions = "*" 20 | files = [ 21 | {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, 22 | {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, 23 | ] 24 | 25 | [package.dependencies] 26 | six = ">=1.12.0" 27 | 28 | [package.extras] 29 | astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] 30 | test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] 31 | 32 | [[package]] 33 | name = "backcall" 34 | version = "0.2.0" 35 | description = "Specifications for callback functions passed in to an API" 36 | optional = false 37 | python-versions = "*" 38 | files = [ 39 | {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, 40 | {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, 41 | ] 42 | 43 | [[package]] 44 | name = "bandit" 45 | version = "1.7.9" 46 | description = "Security oriented static analyser for python code." 47 | optional = false 48 | python-versions = ">=3.8" 49 | files = [ 50 | {file = "bandit-1.7.9-py3-none-any.whl", hash = "sha256:52077cb339000f337fb25f7e045995c4ad01511e716e5daac37014b9752de8ec"}, 51 | {file = "bandit-1.7.9.tar.gz", hash = "sha256:7c395a436743018f7be0a4cbb0a4ea9b902b6d87264ddecf8cfdc73b4f78ff61"}, 52 | ] 53 | 54 | [package.dependencies] 55 | colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} 56 | PyYAML = ">=5.3.1" 57 | rich = "*" 58 | stevedore = ">=1.20.0" 59 | 60 | [package.extras] 61 | baseline = ["GitPython (>=3.1.30)"] 62 | sarif = ["jschema-to-python (>=1.2.3)", "sarif-om (>=1.0.4)"] 63 | 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)"] 64 | toml = ["tomli (>=1.1.0)"] 65 | yaml = ["PyYAML"] 66 | 67 | [[package]] 68 | name = "certifi" 69 | version = "2024.7.4" 70 | description = "Python package for providing Mozilla's CA Bundle." 71 | optional = false 72 | python-versions = ">=3.6" 73 | files = [ 74 | {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, 75 | {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, 76 | ] 77 | 78 | [[package]] 79 | name = "cffi" 80 | version = "1.17.0" 81 | description = "Foreign Function Interface for Python calling C code." 82 | optional = false 83 | python-versions = ">=3.8" 84 | files = [ 85 | {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, 86 | {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, 87 | {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, 88 | {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, 89 | {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, 90 | {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, 91 | {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, 92 | {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, 93 | {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, 94 | {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, 95 | {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, 96 | {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, 97 | {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, 98 | {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, 99 | {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, 100 | {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, 101 | {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, 102 | {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, 103 | {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, 104 | {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, 105 | {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, 106 | {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, 107 | {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, 108 | {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, 109 | {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, 110 | {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, 111 | {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, 112 | {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, 113 | {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, 114 | {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, 115 | {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, 116 | {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, 117 | {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, 118 | {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, 119 | {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, 120 | {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, 121 | {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, 122 | {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, 123 | {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, 124 | {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, 125 | {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, 126 | {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, 127 | {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, 128 | {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, 129 | {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, 130 | {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, 131 | {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, 132 | {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, 133 | {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, 134 | {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, 135 | {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, 136 | {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, 137 | {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, 138 | {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, 139 | {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, 140 | {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, 141 | {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, 142 | {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, 143 | {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, 144 | {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, 145 | {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, 146 | {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, 147 | {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, 148 | {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, 149 | {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, 150 | {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, 151 | {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, 152 | ] 153 | 154 | [package.dependencies] 155 | pycparser = "*" 156 | 157 | [[package]] 158 | name = "cfgv" 159 | version = "3.4.0" 160 | description = "Validate configuration and produce human readable error messages." 161 | optional = false 162 | python-versions = ">=3.8" 163 | files = [ 164 | {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, 165 | {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, 166 | ] 167 | 168 | [[package]] 169 | name = "charset-normalizer" 170 | version = "3.3.2" 171 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 172 | optional = false 173 | python-versions = ">=3.7.0" 174 | files = [ 175 | {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, 176 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, 177 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, 178 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, 179 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, 180 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, 181 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, 182 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, 183 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, 184 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, 185 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, 186 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, 187 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, 188 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, 189 | {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, 190 | {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, 191 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, 192 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, 193 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, 194 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, 195 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, 196 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, 197 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, 198 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, 199 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, 200 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, 201 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, 202 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, 203 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, 204 | {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, 205 | {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, 206 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, 207 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, 208 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, 209 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, 210 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, 211 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, 212 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, 213 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, 214 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, 215 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, 216 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, 217 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, 218 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, 219 | {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, 220 | {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, 221 | {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, 222 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, 223 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, 224 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, 225 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, 226 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, 227 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, 228 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, 229 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, 230 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, 231 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, 232 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, 233 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, 234 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, 235 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, 236 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, 237 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, 238 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, 239 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, 240 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, 241 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, 242 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, 243 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, 244 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, 245 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, 246 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, 247 | {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, 248 | {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, 249 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, 250 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, 251 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, 252 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, 253 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, 254 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, 255 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, 256 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, 257 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, 258 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, 259 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, 260 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, 261 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, 262 | {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, 263 | {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, 264 | {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, 265 | ] 266 | 267 | [[package]] 268 | name = "click" 269 | version = "8.1.7" 270 | description = "Composable command line interface toolkit" 271 | optional = false 272 | python-versions = ">=3.7" 273 | files = [ 274 | {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, 275 | {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, 276 | ] 277 | 278 | [package.dependencies] 279 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 280 | 281 | [[package]] 282 | name = "colorama" 283 | version = "0.4.6" 284 | description = "Cross-platform colored terminal text." 285 | optional = false 286 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 287 | files = [ 288 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 289 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 290 | ] 291 | 292 | [[package]] 293 | name = "comm" 294 | version = "0.2.2" 295 | description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." 296 | optional = false 297 | python-versions = ">=3.8" 298 | files = [ 299 | {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, 300 | {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, 301 | ] 302 | 303 | [package.dependencies] 304 | traitlets = ">=4" 305 | 306 | [package.extras] 307 | test = ["pytest"] 308 | 309 | [[package]] 310 | name = "commonmark" 311 | version = "0.9.1" 312 | description = "Python parser for the CommonMark Markdown spec" 313 | optional = false 314 | python-versions = "*" 315 | files = [ 316 | {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, 317 | {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, 318 | ] 319 | 320 | [package.extras] 321 | test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] 322 | 323 | [[package]] 324 | name = "coverage" 325 | version = "7.6.1" 326 | description = "Code coverage measurement for Python" 327 | optional = false 328 | python-versions = ">=3.8" 329 | files = [ 330 | {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, 331 | {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, 332 | {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, 333 | {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, 334 | {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, 335 | {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, 336 | {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, 337 | {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, 338 | {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, 339 | {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, 340 | {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, 341 | {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, 342 | {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, 343 | {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, 344 | {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, 345 | {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, 346 | {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, 347 | {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, 348 | {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, 349 | {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, 350 | {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, 351 | {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, 352 | {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, 353 | {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, 354 | {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, 355 | {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, 356 | {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, 357 | {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, 358 | {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, 359 | {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, 360 | {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, 361 | {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, 362 | {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, 363 | {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, 364 | {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, 365 | {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, 366 | {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, 367 | {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, 368 | {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, 369 | {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, 370 | {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, 371 | {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, 372 | {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, 373 | {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, 374 | {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, 375 | {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, 376 | {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, 377 | {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, 378 | {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, 379 | {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, 380 | {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, 381 | {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, 382 | {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, 383 | {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, 384 | {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, 385 | {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, 386 | {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, 387 | {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, 388 | {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, 389 | {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, 390 | {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, 391 | {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, 392 | {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, 393 | {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, 394 | {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, 395 | {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, 396 | {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, 397 | {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, 398 | {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, 399 | {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, 400 | {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, 401 | {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, 402 | ] 403 | 404 | [package.dependencies] 405 | tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} 406 | 407 | [package.extras] 408 | toml = ["tomli"] 409 | 410 | [[package]] 411 | name = "debugpy" 412 | version = "1.8.5" 413 | description = "An implementation of the Debug Adapter Protocol for Python" 414 | optional = false 415 | python-versions = ">=3.8" 416 | files = [ 417 | {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, 418 | {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, 419 | {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, 420 | {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, 421 | {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, 422 | {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, 423 | {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, 424 | {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, 425 | {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, 426 | {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, 427 | {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, 428 | {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, 429 | {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, 430 | {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, 431 | {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, 432 | {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, 433 | {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, 434 | {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, 435 | {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, 436 | {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, 437 | {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, 438 | {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, 439 | ] 440 | 441 | [[package]] 442 | name = "decorator" 443 | version = "5.1.1" 444 | description = "Decorators for Humans" 445 | optional = false 446 | python-versions = ">=3.5" 447 | files = [ 448 | {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, 449 | {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, 450 | ] 451 | 452 | [[package]] 453 | name = "distlib" 454 | version = "0.3.8" 455 | description = "Distribution utilities" 456 | optional = false 457 | python-versions = "*" 458 | files = [ 459 | {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, 460 | {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, 461 | ] 462 | 463 | [[package]] 464 | name = "dparse" 465 | version = "0.6.3" 466 | description = "A parser for Python dependency files" 467 | optional = false 468 | python-versions = ">=3.6" 469 | files = [ 470 | {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, 471 | {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, 472 | ] 473 | 474 | [package.dependencies] 475 | packaging = "*" 476 | tomli = {version = "*", markers = "python_version < \"3.11\""} 477 | 478 | [package.extras] 479 | conda = ["pyyaml"] 480 | pipenv = ["pipenv (<=2022.12.19)"] 481 | 482 | [[package]] 483 | name = "exceptiongroup" 484 | version = "1.2.2" 485 | description = "Backport of PEP 654 (exception groups)" 486 | optional = false 487 | python-versions = ">=3.7" 488 | files = [ 489 | {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, 490 | {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, 491 | ] 492 | 493 | [package.extras] 494 | test = ["pytest (>=6)"] 495 | 496 | [[package]] 497 | name = "executing" 498 | version = "2.0.1" 499 | description = "Get the currently executing AST node of a frame, and other information" 500 | optional = false 501 | python-versions = ">=3.5" 502 | files = [ 503 | {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, 504 | {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, 505 | ] 506 | 507 | [package.extras] 508 | tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] 509 | 510 | [[package]] 511 | name = "filelock" 512 | version = "3.15.4" 513 | description = "A platform independent file lock." 514 | optional = false 515 | python-versions = ">=3.8" 516 | files = [ 517 | {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, 518 | {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, 519 | ] 520 | 521 | [package.extras] 522 | docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] 523 | testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] 524 | typing = ["typing-extensions (>=4.8)"] 525 | 526 | [[package]] 527 | name = "identify" 528 | version = "2.6.0" 529 | description = "File identification library for Python" 530 | optional = false 531 | python-versions = ">=3.8" 532 | files = [ 533 | {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, 534 | {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, 535 | ] 536 | 537 | [package.extras] 538 | license = ["ukkonen"] 539 | 540 | [[package]] 541 | name = "idna" 542 | version = "3.7" 543 | description = "Internationalized Domain Names in Applications (IDNA)" 544 | optional = false 545 | python-versions = ">=3.5" 546 | files = [ 547 | {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, 548 | {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, 549 | ] 550 | 551 | [[package]] 552 | name = "importlib-metadata" 553 | version = "8.4.0" 554 | description = "Read metadata from Python packages" 555 | optional = false 556 | python-versions = ">=3.8" 557 | files = [ 558 | {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, 559 | {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, 560 | ] 561 | 562 | [package.dependencies] 563 | zipp = ">=0.5" 564 | 565 | [package.extras] 566 | doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] 567 | perf = ["ipython"] 568 | test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] 569 | 570 | [[package]] 571 | name = "iniconfig" 572 | version = "2.0.0" 573 | description = "brain-dead simple config-ini parsing" 574 | optional = false 575 | python-versions = ">=3.7" 576 | files = [ 577 | {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, 578 | {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, 579 | ] 580 | 581 | [[package]] 582 | name = "ipykernel" 583 | version = "6.29.5" 584 | description = "IPython Kernel for Jupyter" 585 | optional = false 586 | python-versions = ">=3.8" 587 | files = [ 588 | {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, 589 | {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, 590 | ] 591 | 592 | [package.dependencies] 593 | appnope = {version = "*", markers = "platform_system == \"Darwin\""} 594 | comm = ">=0.1.1" 595 | debugpy = ">=1.6.5" 596 | ipython = ">=7.23.1" 597 | jupyter-client = ">=6.1.12" 598 | jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" 599 | matplotlib-inline = ">=0.1" 600 | nest-asyncio = "*" 601 | packaging = "*" 602 | psutil = "*" 603 | pyzmq = ">=24" 604 | tornado = ">=6.1" 605 | traitlets = ">=5.4.0" 606 | 607 | [package.extras] 608 | cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] 609 | docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] 610 | pyqt5 = ["pyqt5"] 611 | pyside6 = ["pyside6"] 612 | test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] 613 | 614 | [[package]] 615 | name = "ipython" 616 | version = "8.12.3" 617 | description = "IPython: Productive Interactive Computing" 618 | optional = false 619 | python-versions = ">=3.8" 620 | files = [ 621 | {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, 622 | {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, 623 | ] 624 | 625 | [package.dependencies] 626 | appnope = {version = "*", markers = "sys_platform == \"darwin\""} 627 | backcall = "*" 628 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 629 | decorator = "*" 630 | jedi = ">=0.16" 631 | matplotlib-inline = "*" 632 | pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} 633 | pickleshare = "*" 634 | prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" 635 | pygments = ">=2.4.0" 636 | stack-data = "*" 637 | traitlets = ">=5" 638 | typing-extensions = {version = "*", markers = "python_version < \"3.10\""} 639 | 640 | [package.extras] 641 | all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] 642 | black = ["black"] 643 | doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] 644 | kernel = ["ipykernel"] 645 | nbconvert = ["nbconvert"] 646 | nbformat = ["nbformat"] 647 | notebook = ["ipywidgets", "notebook"] 648 | parallel = ["ipyparallel"] 649 | qtconsole = ["qtconsole"] 650 | test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] 651 | test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] 652 | 653 | [[package]] 654 | name = "jedi" 655 | version = "0.19.1" 656 | description = "An autocompletion tool for Python that can be used for text editors." 657 | optional = false 658 | python-versions = ">=3.6" 659 | files = [ 660 | {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, 661 | {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, 662 | ] 663 | 664 | [package.dependencies] 665 | parso = ">=0.8.3,<0.9.0" 666 | 667 | [package.extras] 668 | docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] 669 | qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] 670 | testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] 671 | 672 | [[package]] 673 | name = "jupyter-client" 674 | version = "8.6.2" 675 | description = "Jupyter protocol implementation and client libraries" 676 | optional = false 677 | python-versions = ">=3.8" 678 | files = [ 679 | {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, 680 | {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, 681 | ] 682 | 683 | [package.dependencies] 684 | importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} 685 | jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" 686 | python-dateutil = ">=2.8.2" 687 | pyzmq = ">=23.0" 688 | tornado = ">=6.2" 689 | traitlets = ">=5.3" 690 | 691 | [package.extras] 692 | docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] 693 | test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] 694 | 695 | [[package]] 696 | name = "jupyter-core" 697 | version = "5.7.2" 698 | description = "Jupyter core package. A base package on which Jupyter projects rely." 699 | optional = false 700 | python-versions = ">=3.8" 701 | files = [ 702 | {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, 703 | {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, 704 | ] 705 | 706 | [package.dependencies] 707 | platformdirs = ">=2.5" 708 | pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} 709 | traitlets = ">=5.3" 710 | 711 | [package.extras] 712 | docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] 713 | test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] 714 | 715 | [[package]] 716 | name = "matplotlib-inline" 717 | version = "0.1.7" 718 | description = "Inline Matplotlib backend for Jupyter" 719 | optional = false 720 | python-versions = ">=3.8" 721 | files = [ 722 | {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, 723 | {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, 724 | ] 725 | 726 | [package.dependencies] 727 | traitlets = "*" 728 | 729 | [[package]] 730 | name = "mypy" 731 | version = "1.0.1" 732 | description = "Optional static typing for Python" 733 | optional = false 734 | python-versions = ">=3.7" 735 | files = [ 736 | {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, 737 | {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, 738 | {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, 739 | {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, 740 | {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, 741 | {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, 742 | {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, 743 | {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, 744 | {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, 745 | {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, 746 | {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, 747 | {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, 748 | {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, 749 | {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, 750 | {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, 751 | {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, 752 | {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, 753 | {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, 754 | {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, 755 | {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, 756 | {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, 757 | {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, 758 | {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, 759 | {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, 760 | {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, 761 | {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, 762 | ] 763 | 764 | [package.dependencies] 765 | mypy-extensions = ">=0.4.3" 766 | tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} 767 | typing-extensions = ">=3.10" 768 | 769 | [package.extras] 770 | dmypy = ["psutil (>=4.0)"] 771 | install-types = ["pip"] 772 | python2 = ["typed-ast (>=1.4.0,<2)"] 773 | reports = ["lxml"] 774 | 775 | [[package]] 776 | name = "mypy-extensions" 777 | version = "0.4.4" 778 | description = "Experimental type system extensions for programs checked with the mypy typechecker." 779 | optional = false 780 | python-versions = ">=2.7" 781 | files = [ 782 | {file = "mypy_extensions-0.4.4.tar.gz", hash = "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd"}, 783 | ] 784 | 785 | [[package]] 786 | name = "nest-asyncio" 787 | version = "1.6.0" 788 | description = "Patch asyncio to allow nested event loops" 789 | optional = false 790 | python-versions = ">=3.5" 791 | files = [ 792 | {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, 793 | {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, 794 | ] 795 | 796 | [[package]] 797 | name = "nodeenv" 798 | version = "1.9.1" 799 | description = "Node.js virtual environment builder" 800 | optional = false 801 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 802 | files = [ 803 | {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, 804 | {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, 805 | ] 806 | 807 | [[package]] 808 | name = "packaging" 809 | version = "24.1" 810 | description = "Core utilities for Python packages" 811 | optional = false 812 | python-versions = ">=3.8" 813 | files = [ 814 | {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, 815 | {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, 816 | ] 817 | 818 | [[package]] 819 | name = "parso" 820 | version = "0.8.4" 821 | description = "A Python Parser" 822 | optional = false 823 | python-versions = ">=3.6" 824 | files = [ 825 | {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, 826 | {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, 827 | ] 828 | 829 | [package.extras] 830 | qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] 831 | testing = ["docopt", "pytest"] 832 | 833 | [[package]] 834 | name = "pbr" 835 | version = "6.0.0" 836 | description = "Python Build Reasonableness" 837 | optional = false 838 | python-versions = ">=2.6" 839 | files = [ 840 | {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, 841 | {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, 842 | ] 843 | 844 | [[package]] 845 | name = "pexpect" 846 | version = "4.9.0" 847 | description = "Pexpect allows easy control of interactive console applications." 848 | optional = false 849 | python-versions = "*" 850 | files = [ 851 | {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, 852 | {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, 853 | ] 854 | 855 | [package.dependencies] 856 | ptyprocess = ">=0.5" 857 | 858 | [[package]] 859 | name = "pickleshare" 860 | version = "0.7.5" 861 | description = "Tiny 'shelve'-like database with concurrency support" 862 | optional = false 863 | python-versions = "*" 864 | files = [ 865 | {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, 866 | {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, 867 | ] 868 | 869 | [[package]] 870 | name = "platformdirs" 871 | version = "4.2.2" 872 | description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." 873 | optional = false 874 | python-versions = ">=3.8" 875 | files = [ 876 | {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, 877 | {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, 878 | ] 879 | 880 | [package.extras] 881 | docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] 882 | test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] 883 | type = ["mypy (>=1.8)"] 884 | 885 | [[package]] 886 | name = "pluggy" 887 | version = "1.5.0" 888 | description = "plugin and hook calling mechanisms for python" 889 | optional = false 890 | python-versions = ">=3.8" 891 | files = [ 892 | {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, 893 | {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, 894 | ] 895 | 896 | [package.extras] 897 | dev = ["pre-commit", "tox"] 898 | testing = ["pytest", "pytest-benchmark"] 899 | 900 | [[package]] 901 | name = "pre-commit" 902 | version = "2.21.0" 903 | description = "A framework for managing and maintaining multi-language pre-commit hooks." 904 | optional = false 905 | python-versions = ">=3.7" 906 | files = [ 907 | {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, 908 | {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, 909 | ] 910 | 911 | [package.dependencies] 912 | cfgv = ">=2.0.0" 913 | identify = ">=1.0.0" 914 | nodeenv = ">=0.11.1" 915 | pyyaml = ">=5.1" 916 | virtualenv = ">=20.10.0" 917 | 918 | [[package]] 919 | name = "prompt-toolkit" 920 | version = "3.0.47" 921 | description = "Library for building powerful interactive command lines in Python" 922 | optional = false 923 | python-versions = ">=3.7.0" 924 | files = [ 925 | {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, 926 | {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, 927 | ] 928 | 929 | [package.dependencies] 930 | wcwidth = "*" 931 | 932 | [[package]] 933 | name = "psutil" 934 | version = "6.0.0" 935 | description = "Cross-platform lib for process and system monitoring in Python." 936 | optional = false 937 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" 938 | files = [ 939 | {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, 940 | {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, 941 | {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, 942 | {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, 943 | {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, 944 | {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, 945 | {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, 946 | {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, 947 | {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, 948 | {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, 949 | {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, 950 | {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, 951 | {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, 952 | {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, 953 | {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, 954 | {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, 955 | {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, 956 | ] 957 | 958 | [package.extras] 959 | test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] 960 | 961 | [[package]] 962 | name = "ptyprocess" 963 | version = "0.7.0" 964 | description = "Run a subprocess in a pseudo terminal" 965 | optional = false 966 | python-versions = "*" 967 | files = [ 968 | {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, 969 | {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, 970 | ] 971 | 972 | [[package]] 973 | name = "pure-eval" 974 | version = "0.2.3" 975 | description = "Safely evaluate AST nodes without side effects" 976 | optional = false 977 | python-versions = "*" 978 | files = [ 979 | {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, 980 | {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, 981 | ] 982 | 983 | [package.extras] 984 | tests = ["pytest"] 985 | 986 | [[package]] 987 | name = "py" 988 | version = "1.11.0" 989 | description = "library with cross-python path, ini-parsing, io, code, log facilities" 990 | optional = false 991 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 992 | files = [ 993 | {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, 994 | {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, 995 | ] 996 | 997 | [[package]] 998 | name = "py-cpuinfo" 999 | version = "9.0.0" 1000 | description = "Get CPU info with pure Python" 1001 | optional = false 1002 | python-versions = "*" 1003 | files = [ 1004 | {file = "py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, 1005 | {file = "py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, 1006 | ] 1007 | 1008 | [[package]] 1009 | name = "pycparser" 1010 | version = "2.22" 1011 | description = "C parser in Python" 1012 | optional = false 1013 | python-versions = ">=3.8" 1014 | files = [ 1015 | {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, 1016 | {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "pygments" 1021 | version = "2.18.0" 1022 | description = "Pygments is a syntax highlighting package written in Python." 1023 | optional = false 1024 | python-versions = ">=3.8" 1025 | files = [ 1026 | {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, 1027 | {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, 1028 | ] 1029 | 1030 | [package.extras] 1031 | windows-terminal = ["colorama (>=0.4.6)"] 1032 | 1033 | [[package]] 1034 | name = "pytest" 1035 | version = "7.4.4" 1036 | description = "pytest: simple powerful testing with Python" 1037 | optional = false 1038 | python-versions = ">=3.7" 1039 | files = [ 1040 | {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, 1041 | {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, 1042 | ] 1043 | 1044 | [package.dependencies] 1045 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 1046 | exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} 1047 | iniconfig = "*" 1048 | packaging = "*" 1049 | pluggy = ">=0.12,<2.0" 1050 | tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} 1051 | 1052 | [package.extras] 1053 | testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] 1054 | 1055 | [[package]] 1056 | name = "pytest-benchmark" 1057 | version = "4.0.0" 1058 | description = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer." 1059 | optional = false 1060 | python-versions = ">=3.7" 1061 | files = [ 1062 | {file = "pytest-benchmark-4.0.0.tar.gz", hash = "sha256:fb0785b83efe599a6a956361c0691ae1dbb5318018561af10f3e915caa0048d1"}, 1063 | {file = "pytest_benchmark-4.0.0-py3-none-any.whl", hash = "sha256:fdb7db64e31c8b277dff9850d2a2556d8b60bcb0ea6524e36e28ffd7c87f71d6"}, 1064 | ] 1065 | 1066 | [package.dependencies] 1067 | py-cpuinfo = "*" 1068 | pytest = ">=3.8" 1069 | 1070 | [package.extras] 1071 | aspect = ["aspectlib"] 1072 | elasticsearch = ["elasticsearch"] 1073 | histogram = ["pygal", "pygaljs"] 1074 | 1075 | [[package]] 1076 | name = "pytest-click" 1077 | version = "1.1.0" 1078 | description = "Pytest plugin for Click" 1079 | optional = false 1080 | python-versions = "*" 1081 | files = [ 1082 | {file = "pytest_click-1.1.0-py3-none-any.whl", hash = "sha256:eade4742c2f02c345e78a32534a43e8db04acf98d415090539dacc880b7cd0e9"}, 1083 | {file = "pytest_click-1.1.0.tar.gz", hash = "sha256:fdd9f6721f877dda021e7c5dc73e70aecd37e5ed23ec6820f8a7b3fd7b4f8d30"}, 1084 | ] 1085 | 1086 | [package.dependencies] 1087 | click = ">=6.0" 1088 | pytest = ">=5.0" 1089 | 1090 | [[package]] 1091 | name = "pytest-cov" 1092 | version = "4.1.0" 1093 | description = "Pytest plugin for measuring coverage." 1094 | optional = false 1095 | python-versions = ">=3.7" 1096 | files = [ 1097 | {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, 1098 | {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, 1099 | ] 1100 | 1101 | [package.dependencies] 1102 | coverage = {version = ">=5.2.1", extras = ["toml"]} 1103 | pytest = ">=4.6" 1104 | 1105 | [package.extras] 1106 | testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] 1107 | 1108 | [[package]] 1109 | name = "pytest-html" 1110 | version = "3.2.0" 1111 | description = "pytest plugin for generating HTML reports" 1112 | optional = false 1113 | python-versions = ">=3.6" 1114 | files = [ 1115 | {file = "pytest-html-3.2.0.tar.gz", hash = "sha256:c4e2f4bb0bffc437f51ad2174a8a3e71df81bbc2f6894604e604af18fbe687c3"}, 1116 | {file = "pytest_html-3.2.0-py3-none-any.whl", hash = "sha256:868c08564a68d8b2c26866f1e33178419bb35b1e127c33784a28622eb827f3f3"}, 1117 | ] 1118 | 1119 | [package.dependencies] 1120 | py = ">=1.8.2" 1121 | pytest = ">=5.0,<6.0.0 || >6.0.0" 1122 | pytest-metadata = "*" 1123 | 1124 | [[package]] 1125 | name = "pytest-metadata" 1126 | version = "3.1.1" 1127 | description = "pytest plugin for test session metadata" 1128 | optional = false 1129 | python-versions = ">=3.8" 1130 | files = [ 1131 | {file = "pytest_metadata-3.1.1-py3-none-any.whl", hash = "sha256:c8e0844db684ee1c798cfa38908d20d67d0463ecb6137c72e91f418558dd5f4b"}, 1132 | {file = "pytest_metadata-3.1.1.tar.gz", hash = "sha256:d2a29b0355fbc03f168aa96d41ff88b1a3b44a3b02acbe491801c98a048017c8"}, 1133 | ] 1134 | 1135 | [package.dependencies] 1136 | pytest = ">=7.0.0" 1137 | 1138 | [package.extras] 1139 | test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] 1140 | 1141 | [[package]] 1142 | name = "pytest-mock" 1143 | version = "3.14.0" 1144 | description = "Thin-wrapper around the mock package for easier use with pytest" 1145 | optional = false 1146 | python-versions = ">=3.8" 1147 | files = [ 1148 | {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, 1149 | {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, 1150 | ] 1151 | 1152 | [package.dependencies] 1153 | pytest = ">=6.2.5" 1154 | 1155 | [package.extras] 1156 | dev = ["pre-commit", "pytest-asyncio", "tox"] 1157 | 1158 | [[package]] 1159 | name = "pytest-pikachu" 1160 | version = "1.0.0" 1161 | description = "Show surprise when tests are passing" 1162 | optional = false 1163 | python-versions = "*" 1164 | files = [ 1165 | {file = "pytest-pikachu-1.0.0.tar.gz", hash = "sha256:8acd13fdc51491e86aff5106cfaa31f80f4584ac41dcc3ae512d471c18333fd7"}, 1166 | {file = "pytest_pikachu-1.0.0-py3-none-any.whl", hash = "sha256:c20cfe20a84978e11e69af24f7a9d07beb90cbca805ae5011e2061c14a486eb6"}, 1167 | ] 1168 | 1169 | [package.dependencies] 1170 | pytest = "*" 1171 | 1172 | [[package]] 1173 | name = "pytest-sugar" 1174 | version = "0.9.7" 1175 | description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." 1176 | optional = false 1177 | python-versions = "*" 1178 | files = [ 1179 | {file = "pytest-sugar-0.9.7.tar.gz", hash = "sha256:f1e74c1abfa55f7241cf7088032b6e378566f16b938f3f08905e2cf4494edd46"}, 1180 | {file = "pytest_sugar-0.9.7-py2.py3-none-any.whl", hash = "sha256:8cb5a4e5f8bbcd834622b0235db9e50432f4cbd71fef55b467fe44e43701e062"}, 1181 | ] 1182 | 1183 | [package.dependencies] 1184 | packaging = ">=21.3" 1185 | pytest = ">=6.2.0" 1186 | termcolor = ">=2.1.0" 1187 | 1188 | [package.extras] 1189 | dev = ["black", "flake8", "pre-commit"] 1190 | 1191 | [[package]] 1192 | name = "pytest-timeout" 1193 | version = "2.3.1" 1194 | description = "pytest plugin to abort hanging tests" 1195 | optional = false 1196 | python-versions = ">=3.7" 1197 | files = [ 1198 | {file = "pytest-timeout-2.3.1.tar.gz", hash = "sha256:12397729125c6ecbdaca01035b9e5239d4db97352320af155b3f5de1ba5165d9"}, 1199 | {file = "pytest_timeout-2.3.1-py3-none-any.whl", hash = "sha256:68188cb703edfc6a18fad98dc25a3c61e9f24d644b0b70f33af545219fc7813e"}, 1200 | ] 1201 | 1202 | [package.dependencies] 1203 | pytest = ">=7.0.0" 1204 | 1205 | [[package]] 1206 | name = "python-dateutil" 1207 | version = "2.9.0.post0" 1208 | description = "Extensions to the standard Python datetime module" 1209 | optional = false 1210 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 1211 | files = [ 1212 | {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, 1213 | {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, 1214 | ] 1215 | 1216 | [package.dependencies] 1217 | six = ">=1.5" 1218 | 1219 | [[package]] 1220 | name = "pywin32" 1221 | version = "306" 1222 | description = "Python for Window Extensions" 1223 | optional = false 1224 | python-versions = "*" 1225 | files = [ 1226 | {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, 1227 | {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, 1228 | {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, 1229 | {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, 1230 | {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, 1231 | {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, 1232 | {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, 1233 | {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, 1234 | {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, 1235 | {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, 1236 | {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, 1237 | {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, 1238 | {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, 1239 | {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, 1240 | ] 1241 | 1242 | [[package]] 1243 | name = "pyyaml" 1244 | version = "6.0.2" 1245 | description = "YAML parser and emitter for Python" 1246 | optional = false 1247 | python-versions = ">=3.8" 1248 | files = [ 1249 | {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, 1250 | {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, 1251 | {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, 1252 | {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, 1253 | {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, 1254 | {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, 1255 | {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, 1256 | {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, 1257 | {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, 1258 | {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, 1259 | {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, 1260 | {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, 1261 | {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, 1262 | {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, 1263 | {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, 1264 | {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, 1265 | {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, 1266 | {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, 1267 | {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, 1268 | {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, 1269 | {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, 1270 | {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, 1271 | {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, 1272 | {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, 1273 | {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, 1274 | {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, 1275 | {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, 1276 | {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, 1277 | {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, 1278 | {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, 1279 | {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, 1280 | {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, 1281 | {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, 1282 | {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, 1283 | {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, 1284 | {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, 1285 | {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, 1286 | {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, 1287 | {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, 1288 | {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, 1289 | {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, 1290 | {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, 1291 | {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, 1292 | {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, 1293 | {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, 1294 | {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, 1295 | {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, 1296 | {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, 1297 | {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, 1298 | {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, 1299 | {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, 1300 | {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, 1301 | {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "pyzmq" 1306 | version = "26.1.1" 1307 | description = "Python bindings for 0MQ" 1308 | optional = false 1309 | python-versions = ">=3.7" 1310 | files = [ 1311 | {file = "pyzmq-26.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:b1bb952d1e407463c9333ea7e0c0600001e54e08ce836d4f0aff1fb3f902cf63"}, 1312 | {file = "pyzmq-26.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:65e2a18e845c6ea7ab849c70db932eaeadee5edede9e379eb21c0a44cf523b2e"}, 1313 | {file = "pyzmq-26.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:def7ae3006924b8a0c146a89ab4008310913fa903beedb95e25dea749642528e"}, 1314 | {file = "pyzmq-26.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8234571df7816f99dde89c3403cb396d70c6554120b795853a8ea56fcc26cd3"}, 1315 | {file = "pyzmq-26.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18da8e84dbc30688fd2baefd41df7190607511f916be34f9a24b0e007551822e"}, 1316 | {file = "pyzmq-26.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c70dab93d98b2bf3f0ac1265edbf6e7f83acbf71dabcc4611889bb0dea45bed7"}, 1317 | {file = "pyzmq-26.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fcb90592c5d5c562e1b1a1ceccf6f00036d73c51db0271bf4d352b8d6b31d468"}, 1318 | {file = "pyzmq-26.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cf4be7460a0c1bc71e9b0e64ecdd75a86386ca6afaa36641686f5542d0314e9d"}, 1319 | {file = "pyzmq-26.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4cbecda4ddbfc1e309c3be04d333f9be3fc6178b8b6592b309676f929767a15"}, 1320 | {file = "pyzmq-26.1.1-cp310-cp310-win32.whl", hash = "sha256:583f73b113b8165713b6ce028d221402b1b69483055b5aa3f991937e34dd1ead"}, 1321 | {file = "pyzmq-26.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5e6f39ecb8eb7bfcb976c49262e8cf83ff76e082b77ca23ba90c9b6691a345be"}, 1322 | {file = "pyzmq-26.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:8d042d6446cab3a1388b38596f5acabb9926b0b95c3894c519356b577a549458"}, 1323 | {file = "pyzmq-26.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:362cac2423e36966d336d79d3ec3eafeabc153ee3e7a5cf580d7e74a34b3d912"}, 1324 | {file = "pyzmq-26.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0841633446cb1539a832a19bb24c03a20c00887d0cedd1d891b495b07e5c5cb5"}, 1325 | {file = "pyzmq-26.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e1fcdc333afbf9918d0a614a6e10858aede7da49a60f6705a77e343fe86a317"}, 1326 | {file = "pyzmq-26.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc8d655627d775475eafdcf0e49e74bcc1e5e90afd9ab813b4da98f092ed7b93"}, 1327 | {file = "pyzmq-26.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32de51744820857a6f7c3077e620ab3f607d0e4388dfead885d5124ab9bcdc5e"}, 1328 | {file = "pyzmq-26.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a880240597010914ffb1d6edd04d3deb7ce6a2abf79a0012751438d13630a671"}, 1329 | {file = "pyzmq-26.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:26131b1cec02f941ed2d2b4b8cc051662b1c248b044eff5069df1f500bbced56"}, 1330 | {file = "pyzmq-26.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ce05841322b58510607f9508a573138d995a46c7928887bc433de9cb760fd2ad"}, 1331 | {file = "pyzmq-26.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32123ff0a6db521aadf2b95201e967a4e0d11fb89f73663a99d2f54881c07214"}, 1332 | {file = "pyzmq-26.1.1-cp311-cp311-win32.whl", hash = "sha256:e790602d7ea1d6c7d8713d571226d67de7ffe47b1e22ae2c043ebd537de1bccb"}, 1333 | {file = "pyzmq-26.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:717960855f2d6fdc2dba9df49dff31c414187bb11c76af36343a57d1f7083d9a"}, 1334 | {file = "pyzmq-26.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:08956c26dbcd4fd8835cb777a16e21958ed2412317630e19f0018d49dbeeb470"}, 1335 | {file = "pyzmq-26.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e80345900ae241c2c51bead7c9fa247bba6d4b2a83423e9791bae8b0a7f12c52"}, 1336 | {file = "pyzmq-26.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ec8fe214fcc45dfb0c32e4a7ad1db20244ba2d2fecbf0cbf9d5242d81ca0a375"}, 1337 | {file = "pyzmq-26.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf4e283f97688d993cb7a8acbc22889effbbb7cbaa19ee9709751f44be928f5d"}, 1338 | {file = "pyzmq-26.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2508bdc8ab246e5ed7c92023d4352aaad63020ca3b098a4e3f1822db202f703d"}, 1339 | {file = "pyzmq-26.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:741bdb4d96efe8192616abdc3671931d51a8bcd38c71da2d53fb3127149265d1"}, 1340 | {file = "pyzmq-26.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:76154943e4c4054b2591792eb3484ef1dd23d59805759f9cebd2f010aa30ee8c"}, 1341 | {file = "pyzmq-26.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9498ac427d20d0e0ef0e4bbd6200841e91640dfdf619f544ceec7f464cfb6070"}, 1342 | {file = "pyzmq-26.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f34453ef3496ca3462f30435bf85f535f9550392987341f9ccc92c102825a79"}, 1343 | {file = "pyzmq-26.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:50f0669324e27cc2091ef6ab76ca7112f364b6249691790b4cffce31e73fda28"}, 1344 | {file = "pyzmq-26.1.1-cp312-cp312-win32.whl", hash = "sha256:3ee5cbf2625b94de21c68d0cefd35327c8dfdbd6a98fcc41682b4e8bb00d841f"}, 1345 | {file = "pyzmq-26.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:75bd448a28b1001b6928679015bc95dd5f172703ed30135bb9e34fc9cda0a3e7"}, 1346 | {file = "pyzmq-26.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:4350233569b4bbef88595c5e77ee38995a6f1f1790fae148b578941bfffd1c24"}, 1347 | {file = "pyzmq-26.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8087a3281c20b1d11042d372ed5a47734af05975d78e4d1d6e7bd1018535f3"}, 1348 | {file = "pyzmq-26.1.1-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:ebef7d3fe11fe4c688f08bc0211a976c3318c097057f258428200737b9fff4da"}, 1349 | {file = "pyzmq-26.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a5342110510045a47de1e87f5f1dcc1d9d90109522316dc9830cfc6157c800f"}, 1350 | {file = "pyzmq-26.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af690ea4be6ca92a67c2b44a779a023bf0838e92d48497a2268175dc4a505691"}, 1351 | {file = "pyzmq-26.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc994e220c1403ae087d7f0fa45129d583e46668a019e389060da811a5a9320e"}, 1352 | {file = "pyzmq-26.1.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b8e153f5dffb0310af71fc6fc9cd8174f4c8ea312c415adcb815d786fee78179"}, 1353 | {file = "pyzmq-26.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0065026e624052a51033857e5cd45a94b52946b44533f965f0bdf182460e965d"}, 1354 | {file = "pyzmq-26.1.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:63351392f948b5d50b9f55161994bc4feedbfb3f3cfe393d2f503dea2c3ec445"}, 1355 | {file = "pyzmq-26.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ffecc43b3c18e36b62fcec995761829b6ac325d8dd74a4f2c5c1653afbb4495a"}, 1356 | {file = "pyzmq-26.1.1-cp313-cp313-win32.whl", hash = "sha256:6ff14c2fae6c0c2c1c02590c5c5d75aa1db35b859971b3ca2fcd28f983d9f2b6"}, 1357 | {file = "pyzmq-26.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:85f2d2ee5ea9a8f1de86a300e1062fbab044f45b5ce34d20580c0198a8196db0"}, 1358 | {file = "pyzmq-26.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:cc09b1de8b985ca5a0ca343dd7fb007267c6b329347a74e200f4654268084239"}, 1359 | {file = "pyzmq-26.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:bc904e86de98f8fc5bd41597da5d61232d2d6d60c4397f26efffabb961b2b245"}, 1360 | {file = "pyzmq-26.1.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:00f39c367bbd6aa8e4bc36af6510561944c619b58eb36199fa334b594a18f615"}, 1361 | {file = "pyzmq-26.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de6f384864a959866b782e6a3896538d1424d183f2d3c7ef079f71dcecde7284"}, 1362 | {file = "pyzmq-26.1.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3abb15df0c763339edb27a644c19381b2425ddd1aea3dbd77c1601a3b31867b8"}, 1363 | {file = "pyzmq-26.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40908ec2dd3b29bbadc0916a0d3c87f8dbeebbd8fead8e618539f09e0506dec4"}, 1364 | {file = "pyzmq-26.1.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c11a95d3f6fc7e714ccd1066f68f9c1abd764a8b3596158be92f46dd49f41e03"}, 1365 | {file = "pyzmq-26.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:4437af9fee7a58302dbd511cc49f0cc2b35c112a33a1111fb123cf0be45205ca"}, 1366 | {file = "pyzmq-26.1.1-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:76390d3d66406cb01b9681c382874400e9dfd77f30ecdea4bd1bf5226dd4aff0"}, 1367 | {file = "pyzmq-26.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:4d4c7fe5e50e269f9c63a260638488fec194a73993008618a59b54c47ef6ae72"}, 1368 | {file = "pyzmq-26.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:25d128524207f53f7aae7c5abdc2b63f8957a060b00521af5ffcd20986b5d8f4"}, 1369 | {file = "pyzmq-26.1.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d74b925d997e4f92b042bdd7085cd0a309ee0fd7cb4dc376059bbff6b32ff34f"}, 1370 | {file = "pyzmq-26.1.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:732f957441e5b1c65a7509395e6b6cafee9e12df9aa5f4bf92ed266fe0ba70ee"}, 1371 | {file = "pyzmq-26.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0a45102ad7ed9f9ddf2bd699cc5df37742cf7301111cba06001b927efecb120"}, 1372 | {file = "pyzmq-26.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9f380d5333fc7cd17423f486125dcc073918676e33db70a6a8172b19fc78d23d"}, 1373 | {file = "pyzmq-26.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8eaffcd6bf6a9d00b66a2052a33fa7e6a6575427e9644395f13c3d070f2918dc"}, 1374 | {file = "pyzmq-26.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f1483d4975ae1b387b39bb8e23d1ff32fe5621aa9e4ed3055d05e9c5613fea53"}, 1375 | {file = "pyzmq-26.1.1-cp37-cp37m-win32.whl", hash = "sha256:a83653c6bbe5887caea55e49fbd2909c14b73acf43bcc051eb60b2d514bbd46e"}, 1376 | {file = "pyzmq-26.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9763a8d3f5f74ef679989b373c37cc22e8d07e56d26439205cb83edb7722357f"}, 1377 | {file = "pyzmq-26.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2b045647caf620ce0ed6c8fd9fb6a73116f99aceed966b152a5ba1b416d25311"}, 1378 | {file = "pyzmq-26.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f66dcb6625c002f209cdc12cae1a1fec926493cd2262efe37dc6b25a30cea863"}, 1379 | {file = "pyzmq-26.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0cf1d980c969fb9e538f52abd2227f09e015096bc5c3ef7aa26e0d64051c1db8"}, 1380 | {file = "pyzmq-26.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:443ebf5e261a95ee9725693f2a5a71401f89b89df0e0ea58844b074067aac2f1"}, 1381 | {file = "pyzmq-26.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29de77ba1b1877fe7defc1b9140e65cbd35f72a63bc501e56c2eae55bde5fff4"}, 1382 | {file = "pyzmq-26.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f6071ec95af145d7b659dae6786871cd85f0acc599286b6f8ba0c74592d83dd"}, 1383 | {file = "pyzmq-26.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f0512fc87629ad968889176bf2165d721cd817401a281504329e2a2ed0ca6a3"}, 1384 | {file = "pyzmq-26.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5ccfcf13e80719f6a2d9c0a021d9e47d4550907a29253554be2c09582f6d7963"}, 1385 | {file = "pyzmq-26.1.1-cp38-cp38-win32.whl", hash = "sha256:809673947e95752e407aaaaf03f205ee86ebfff9ca51db6d4003dfd87b8428d1"}, 1386 | {file = "pyzmq-26.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:62b5180e23e6f581600459cd983473cd723fdc64350f606d21407c99832aaf5f"}, 1387 | {file = "pyzmq-26.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:fe73d7c89d6f803bed122135ff5783364e8cdb479cf6fe2d764a44b6349e7e0f"}, 1388 | {file = "pyzmq-26.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db1b7e2b50ef21f398036786da4c153db63203a402396d9f21e08ea61f3f8dba"}, 1389 | {file = "pyzmq-26.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c506a51cb01bb997a3f6440db0d121e5e7a32396e9948b1fdb6a7bfa67243f4"}, 1390 | {file = "pyzmq-26.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:92eca4f80e8a748d880e55d3cf57ef487692e439f12d5c5a2e1cce84aaa7f6cb"}, 1391 | {file = "pyzmq-26.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14bdbae02f72f4716b0ffe7500e9da303d719ddde1f3dcfb4c4f6cc1cf73bb02"}, 1392 | {file = "pyzmq-26.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e03be7ed17836c9434cce0668ac1e2cc9143d7169f90f46a0167f6155e176e32"}, 1393 | {file = "pyzmq-26.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc5df31e36e4fddd4c8b5c42daee8d54d7b529e898ac984be97bf5517de166a7"}, 1394 | {file = "pyzmq-26.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f218179c90a12d660906e04b25a340dd63e9743000ba16232ddaf46888f269da"}, 1395 | {file = "pyzmq-26.1.1-cp39-cp39-win32.whl", hash = "sha256:7dfabc180a4da422a4b349c63077347392463a75fa07aa3be96712ed6d42c547"}, 1396 | {file = "pyzmq-26.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c5248e6e0fcbbbc912982e99cdd51c342601f495b0fa5bd667f3bdbdbf3e170f"}, 1397 | {file = "pyzmq-26.1.1-cp39-cp39-win_arm64.whl", hash = "sha256:2ae7aa1408778dc74582a1226052b930f9083b54b64d7e6ef6ec0466cfdcdec2"}, 1398 | {file = "pyzmq-26.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:be3fc2b11c0c384949cf1f01f9a48555039408b0f3e877863b1754225635953e"}, 1399 | {file = "pyzmq-26.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48dee75c2a9fa4f4a583d4028d564a0453447ee1277a29b07acc3743c092e259"}, 1400 | {file = "pyzmq-26.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23f2fe4fb567e8098ebaa7204819658195b10ddd86958a97a6058eed2901eed3"}, 1401 | {file = "pyzmq-26.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:472cacd16f627c06d3c8b2d374345ab74446bae913584a6245e2aa935336d929"}, 1402 | {file = "pyzmq-26.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8285b25aa20fcc46f1ca4afbc39fd3d5f2fe4c4bbf7f2c7f907a214e87a70024"}, 1403 | {file = "pyzmq-26.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2067e63fd9d5c13cfe12624dab0366053e523b37a7a01678ce4321f839398939"}, 1404 | {file = "pyzmq-26.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cc109be2ee3638035d276e18eaf66a1e1f44201c0c4bea4ee0c692766bbd3570"}, 1405 | {file = "pyzmq-26.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d0da97e65ee73261dba70469cc8f63d8da3a8a825337a2e3d246b9e95141cdd0"}, 1406 | {file = "pyzmq-26.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa79c528706561306938b275f89bb2c6985ce08469c27e5de05bc680df5e826f"}, 1407 | {file = "pyzmq-26.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3ddbd851a3a2651fdc5065a2804d50cf2f4b13b1bcd66de8e9e855d0217d4fcd"}, 1408 | {file = "pyzmq-26.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3df226ab7464684ae6706e20a5cbab717c3735a7e409b3fa598b754d49f1946"}, 1409 | {file = "pyzmq-26.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abad7b897e960d577eb4a0f3f789c1780bc3ffe2e7c27cf317e7c90ad26acf12"}, 1410 | {file = "pyzmq-26.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c513d829a548c2d5c88983167be2b3aa537f6d1191edcdc6fcd8999e18bdd994"}, 1411 | {file = "pyzmq-26.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70af4c9c991714ef1c65957605a8de42ef0d0620dd5f125953c8e682281bdb80"}, 1412 | {file = "pyzmq-26.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8d4234f335b0d0842f7d661d8cd50cbad0729be58f1c4deb85cd96b38fe95025"}, 1413 | {file = "pyzmq-26.1.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2c0fdb7b758e0e1605157e480b00b3a599073068a37091a1c75ec65bf7498645"}, 1414 | {file = "pyzmq-26.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc657577f057d60dd3642c9f95f28b432889b73143140061f7c1331d02f03df6"}, 1415 | {file = "pyzmq-26.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e3b66fe6131b4f33d239f7d4c3bfb2f8532d8644bae3b3da4f3987073edac55"}, 1416 | {file = "pyzmq-26.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59b57e912feef6951aec8bb03fe0faa5ad5f36962883c72a30a9c965e6d988fd"}, 1417 | {file = "pyzmq-26.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:146956aec7d947c5afc5e7da0841423d7a53f84fd160fff25e682361dcfb32cb"}, 1418 | {file = "pyzmq-26.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9521b874fd489495865172f344e46e0159095d1f161858e3fc6e28e43ca15160"}, 1419 | {file = "pyzmq-26.1.1.tar.gz", hash = "sha256:a7db05d8b7cd1a8c6610e9e9aa55d525baae7a44a43e18bc3260eb3f92de96c6"}, 1420 | ] 1421 | 1422 | [package.dependencies] 1423 | cffi = {version = "*", markers = "implementation_name == \"pypy\""} 1424 | 1425 | [[package]] 1426 | name = "requests" 1427 | version = "2.32.3" 1428 | description = "Python HTTP for Humans." 1429 | optional = false 1430 | python-versions = ">=3.8" 1431 | files = [ 1432 | {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, 1433 | {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, 1434 | ] 1435 | 1436 | [package.dependencies] 1437 | certifi = ">=2017.4.17" 1438 | charset-normalizer = ">=2,<4" 1439 | idna = ">=2.5,<4" 1440 | urllib3 = ">=1.21.1,<3" 1441 | 1442 | [package.extras] 1443 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 1444 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 1445 | 1446 | [[package]] 1447 | name = "rich" 1448 | version = "12.6.0" 1449 | description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" 1450 | optional = false 1451 | python-versions = ">=3.6.3,<4.0.0" 1452 | files = [ 1453 | {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"}, 1454 | {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, 1455 | ] 1456 | 1457 | [package.dependencies] 1458 | commonmark = ">=0.9.0,<0.10.0" 1459 | pygments = ">=2.6.0,<3.0.0" 1460 | typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} 1461 | 1462 | [package.extras] 1463 | jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] 1464 | 1465 | [[package]] 1466 | name = "ruamel-yaml" 1467 | version = "0.18.6" 1468 | description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" 1469 | optional = false 1470 | python-versions = ">=3.7" 1471 | files = [ 1472 | {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, 1473 | {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, 1474 | ] 1475 | 1476 | [package.dependencies] 1477 | "ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} 1478 | 1479 | [package.extras] 1480 | docs = ["mercurial (>5.7)", "ryd"] 1481 | jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] 1482 | 1483 | [[package]] 1484 | name = "ruamel-yaml-clib" 1485 | version = "0.2.8" 1486 | description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" 1487 | optional = false 1488 | python-versions = ">=3.6" 1489 | files = [ 1490 | {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, 1491 | {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, 1492 | {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"}, 1493 | {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, 1494 | {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, 1495 | {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, 1496 | {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, 1497 | {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, 1498 | {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, 1499 | {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, 1500 | {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"}, 1501 | {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, 1502 | {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, 1503 | {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, 1504 | {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, 1505 | {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, 1506 | {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, 1507 | {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, 1508 | {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"}, 1509 | {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, 1510 | {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, 1511 | {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, 1512 | {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, 1513 | {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, 1514 | {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, 1515 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, 1516 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, 1517 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, 1518 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, 1519 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, 1520 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, 1521 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, 1522 | {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, 1523 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, 1524 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, 1525 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, 1526 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, 1527 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, 1528 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, 1529 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, 1530 | {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, 1531 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, 1532 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, 1533 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, 1534 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, 1535 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, 1536 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, 1537 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, 1538 | {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, 1539 | {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, 1540 | ] 1541 | 1542 | [[package]] 1543 | name = "ruff" 1544 | version = "0.4.10" 1545 | description = "An extremely fast Python linter and code formatter, written in Rust." 1546 | optional = false 1547 | python-versions = ">=3.7" 1548 | files = [ 1549 | {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, 1550 | {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, 1551 | {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, 1552 | {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, 1553 | {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, 1554 | {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, 1555 | {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, 1556 | {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, 1557 | {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, 1558 | {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, 1559 | {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, 1560 | {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, 1561 | {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, 1562 | {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, 1563 | {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, 1564 | {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, 1565 | {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, 1566 | ] 1567 | 1568 | [[package]] 1569 | name = "safety" 1570 | version = "2.3.4" 1571 | description = "Checks installed dependencies for known vulnerabilities and licenses." 1572 | optional = false 1573 | python-versions = "*" 1574 | files = [ 1575 | {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, 1576 | {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, 1577 | ] 1578 | 1579 | [package.dependencies] 1580 | Click = ">=8.0.2" 1581 | dparse = ">=0.6.2" 1582 | packaging = ">=21.0" 1583 | requests = "*" 1584 | "ruamel.yaml" = ">=0.17.21" 1585 | setuptools = ">=19.3" 1586 | 1587 | [package.extras] 1588 | github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] 1589 | gitlab = ["python-gitlab (>=1.3.0)"] 1590 | 1591 | [[package]] 1592 | name = "setuptools" 1593 | version = "73.0.1" 1594 | description = "Easily download, build, install, upgrade, and uninstall Python packages" 1595 | optional = false 1596 | python-versions = ">=3.8" 1597 | files = [ 1598 | {file = "setuptools-73.0.1-py3-none-any.whl", hash = "sha256:b208925fcb9f7af924ed2dc04708ea89791e24bde0d3020b27df0e116088b34e"}, 1599 | {file = "setuptools-73.0.1.tar.gz", hash = "sha256:d59a3e788ab7e012ab2c4baed1b376da6366883ee20d7a5fc426816e3d7b1193"}, 1600 | ] 1601 | 1602 | [package.extras] 1603 | core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] 1604 | doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] 1605 | test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.11.*)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (<0.4)", "pytest-ruff (>=0.2.1)", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] 1606 | 1607 | [[package]] 1608 | name = "shellingham" 1609 | version = "1.5.4" 1610 | description = "Tool to Detect Surrounding Shell" 1611 | optional = false 1612 | python-versions = ">=3.7" 1613 | files = [ 1614 | {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, 1615 | {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "six" 1620 | version = "1.16.0" 1621 | description = "Python 2 and 3 compatibility utilities" 1622 | optional = false 1623 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 1624 | files = [ 1625 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 1626 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 1627 | ] 1628 | 1629 | [[package]] 1630 | name = "stack-data" 1631 | version = "0.6.3" 1632 | description = "Extract data from python stack frames and tracebacks for informative displays" 1633 | optional = false 1634 | python-versions = "*" 1635 | files = [ 1636 | {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, 1637 | {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, 1638 | ] 1639 | 1640 | [package.dependencies] 1641 | asttokens = ">=2.1.0" 1642 | executing = ">=1.2.0" 1643 | pure-eval = "*" 1644 | 1645 | [package.extras] 1646 | tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] 1647 | 1648 | [[package]] 1649 | name = "stevedore" 1650 | version = "5.2.0" 1651 | description = "Manage dynamic plugins for Python applications" 1652 | optional = false 1653 | python-versions = ">=3.8" 1654 | files = [ 1655 | {file = "stevedore-5.2.0-py3-none-any.whl", hash = "sha256:1c15d95766ca0569cad14cb6272d4d31dae66b011a929d7c18219c176ea1b5c9"}, 1656 | {file = "stevedore-5.2.0.tar.gz", hash = "sha256:46b93ca40e1114cea93d738a6c1e365396981bb6bb78c27045b7587c9473544d"}, 1657 | ] 1658 | 1659 | [package.dependencies] 1660 | pbr = ">=2.0.0,<2.1.0 || >2.1.0" 1661 | 1662 | [[package]] 1663 | name = "termcolor" 1664 | version = "2.4.0" 1665 | description = "ANSI color formatting for output in terminal" 1666 | optional = false 1667 | python-versions = ">=3.8" 1668 | files = [ 1669 | {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, 1670 | {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, 1671 | ] 1672 | 1673 | [package.extras] 1674 | tests = ["pytest", "pytest-cov"] 1675 | 1676 | [[package]] 1677 | name = "tomli" 1678 | version = "2.0.1" 1679 | description = "A lil' TOML parser" 1680 | optional = false 1681 | python-versions = ">=3.7" 1682 | files = [ 1683 | {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 1684 | {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "tornado" 1689 | version = "6.4.1" 1690 | description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." 1691 | optional = false 1692 | python-versions = ">=3.8" 1693 | files = [ 1694 | {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, 1695 | {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, 1696 | {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, 1697 | {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, 1698 | {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, 1699 | {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, 1700 | {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, 1701 | {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, 1702 | {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, 1703 | {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, 1704 | {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "traitlets" 1709 | version = "5.14.3" 1710 | description = "Traitlets Python configuration system" 1711 | optional = false 1712 | python-versions = ">=3.8" 1713 | files = [ 1714 | {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, 1715 | {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, 1716 | ] 1717 | 1718 | [package.extras] 1719 | docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] 1720 | test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] 1721 | 1722 | [[package]] 1723 | name = "typer" 1724 | version = "0.7.0" 1725 | description = "Typer, build great CLIs. Easy to code. Based on Python type hints." 1726 | optional = false 1727 | python-versions = ">=3.6" 1728 | files = [ 1729 | {file = "typer-0.7.0-py3-none-any.whl", hash = "sha256:b5e704f4e48ec263de1c0b3a2387cd405a13767d2f907f44c1a08cbad96f606d"}, 1730 | {file = "typer-0.7.0.tar.gz", hash = "sha256:ff797846578a9f2a201b53442aedeb543319466870fbe1c701eab66dd7681165"}, 1731 | ] 1732 | 1733 | [package.dependencies] 1734 | click = ">=7.1.1,<9.0.0" 1735 | colorama = {version = ">=0.4.3,<0.5.0", optional = true, markers = "extra == \"all\""} 1736 | rich = {version = ">=10.11.0,<13.0.0", optional = true, markers = "extra == \"all\""} 1737 | shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""} 1738 | 1739 | [package.extras] 1740 | all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] 1741 | dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] 1742 | doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] 1743 | test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] 1744 | 1745 | [[package]] 1746 | name = "typing-extensions" 1747 | version = "4.12.2" 1748 | description = "Backported and Experimental Type Hints for Python 3.8+" 1749 | optional = false 1750 | python-versions = ">=3.8" 1751 | files = [ 1752 | {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, 1753 | {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, 1754 | ] 1755 | 1756 | [[package]] 1757 | name = "urllib3" 1758 | version = "2.2.2" 1759 | description = "HTTP library with thread-safe connection pooling, file post, and more." 1760 | optional = false 1761 | python-versions = ">=3.8" 1762 | files = [ 1763 | {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, 1764 | {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, 1765 | ] 1766 | 1767 | [package.extras] 1768 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] 1769 | h2 = ["h2 (>=4,<5)"] 1770 | socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] 1771 | zstd = ["zstandard (>=0.18.0)"] 1772 | 1773 | [[package]] 1774 | name = "virtualenv" 1775 | version = "20.26.3" 1776 | description = "Virtual Python Environment builder" 1777 | optional = false 1778 | python-versions = ">=3.7" 1779 | files = [ 1780 | {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, 1781 | {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, 1782 | ] 1783 | 1784 | [package.dependencies] 1785 | distlib = ">=0.3.7,<1" 1786 | filelock = ">=3.12.2,<4" 1787 | platformdirs = ">=3.9.1,<5" 1788 | 1789 | [package.extras] 1790 | 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)"] 1791 | 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)"] 1792 | 1793 | [[package]] 1794 | name = "wcwidth" 1795 | version = "0.2.13" 1796 | description = "Measures the displayed width of unicode strings in a terminal" 1797 | optional = false 1798 | python-versions = "*" 1799 | files = [ 1800 | {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, 1801 | {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, 1802 | ] 1803 | 1804 | [[package]] 1805 | name = "zipp" 1806 | version = "3.20.0" 1807 | description = "Backport of pathlib-compatible object wrapper for zip files" 1808 | optional = false 1809 | python-versions = ">=3.8" 1810 | files = [ 1811 | {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"}, 1812 | {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"}, 1813 | ] 1814 | 1815 | [package.extras] 1816 | doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] 1817 | test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] 1818 | 1819 | [metadata] 1820 | lock-version = "2.0" 1821 | python-versions = "^3.8" 1822 | content-hash = "441f64cb4609e09168aa89599d847b9ec35dde93deca3bcdc77bbc68fa41ee4a" 1823 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | 2 | # Poetry pyproject.toml: https://python-poetry.org/docs/pyproject/ 3 | [build-system] 4 | requires = ["poetry_core>=1.0.0"] 5 | build-backend = "poetry.core.masonry.api" 6 | 7 | 8 | [tool.poetry] 9 | name = "AlphaAgent" 10 | version = "0.1.0" 11 | description = "Awesome `alphaagent` is a Python cli/package created with https://gitlab.com/manoelpqueiroz/galactipy" 12 | readme = "README.md" 13 | authors = ["LLMQuant "] 14 | license = "MIT" 15 | repository = "https://github.com/llmquant/alphaagent" 16 | homepage = "https://github.com/llmquant/alphaagent" 17 | packages = [ 18 | {include = "alphaagent"} 19 | ] 20 | 21 | 22 | # Keywords description https://python-poetry.org/docs/pyproject/#keywords 23 | keywords = [] # UPDATEME with relevant keywords 24 | 25 | 26 | # Pypi classifiers: https://pypi.org/classifiers/ 27 | classifiers = [ # UPDATEME with additional classifiers; remove last classifier to allow publishing on PyPI 28 | "Development Status :: 3 - Alpha", 29 | "Intended Audience :: Developers", 30 | "Operating System :: OS Independent", 31 | "Topic :: Software Development :: Libraries :: Python Modules", 32 | "License :: OSI Approved :: MIT License", 33 | "Programming Language :: Python :: 3", 34 | "Programming Language :: Python :: 3.8", 35 | "Programming Language :: Python :: 3.9", 36 | "Programming Language :: Python :: 3.10", 37 | "Programming Language :: Python :: 3.11", 38 | "Programming Language :: Python :: 3.12", 39 | "Private :: Do Not Upload" 40 | ] 41 | 42 | 43 | [tool.poetry.scripts] 44 | # Entry points for the package https://python-poetry.org/docs/pyproject/#scripts 45 | "alphaagent" = "alphaagent.__main__:app" 46 | 47 | 48 | [tool.poetry.dependencies] 49 | python = "^3.8" 50 | 51 | typer = {extras = ["all"], version = "^0.7.0"} 52 | rich = "^12.6.0" 53 | 54 | 55 | [tool.poetry.group.dev.dependencies] 56 | mypy = "^1.0.0" 57 | mypy-extensions = "^0.4.3" 58 | pre-commit = "^2.21.0" 59 | bandit = "^1.7.5" 60 | safety = "^2.3.4" 61 | 62 | ruff = "^0.4.3" 63 | 64 | pytest = "^7.2.1" 65 | pytest-html = "^3.2.0" 66 | pytest-cov = "^4.1.0" 67 | pytest-mock = "^3.10.0" 68 | pytest-timeout = "^2.2.0" 69 | pytest-benchmark = "^4.0.0" 70 | pytest-sugar = "^0.9.7" 71 | pytest-click = "^1.1.0" 72 | pytest-pikachu = "^1.0.0" 73 | coverage = "^7.3.0" 74 | ipykernel = "^6.29.5" 75 | 76 | 77 | [tool.ruff] 78 | # https://github.com/astral-sh/ruff 79 | # https://docs.astral.sh/ruff/settings 80 | output-format = "grouped" 81 | show-fixes = true 82 | target-version = "py38" 83 | 84 | [tool.ruff.format] 85 | docstring-code-format = true 86 | docstring-code-line-length = 79 87 | skip-magic-trailing-comma = true 88 | 89 | [tool.ruff.lint] 90 | select = [ # UPDATEME with additional rules from https://docs.astral.sh/ruff/rules/ 91 | "F", 92 | "E", 93 | "W", 94 | "I", 95 | "N", 96 | "D", 97 | "S", 98 | "B", 99 | "UP", 100 | "C90", 101 | "T20", 102 | "EM", 103 | "PL", 104 | "C4", 105 | "PT", 106 | "TD", 107 | "ANN", 108 | "ICN", 109 | "RET", 110 | "ISC", 111 | "RSE", 112 | "ARG", 113 | "FBT", 114 | "SIM", 115 | "TID", 116 | "PTH", 117 | "TCH", 118 | "FIX", 119 | "BLE", 120 | "ERA", 121 | "TRY", 122 | "FLY", 123 | "YTT", 124 | "CPY", 125 | "RUF" 126 | ] 127 | ignore = ["D200", "D104", "E501", "D101", "D100", "D102", "ANN101", "T201"] 128 | task-tags = ["TODO", "FIXME", "XXX", "UPDATEME"] # UPDATEME by modifying or removing this setting after addressing all UPDATEMEs 129 | 130 | [tool.ruff.lint.per-file-ignores] 131 | "tests/**.py" = ["D100", "D101", "D102", "D103", "D104", "S101"] 132 | "__main__.py" = ["D100", "D101"] 133 | 134 | [tool.ruff.lint.flake8-annotations] 135 | ignore-fully-untyped = true 136 | suppress-dummy-args = true 137 | 138 | [tool.ruff.lint.flake8-pytest-style] 139 | fixture-parentheses = false 140 | mark-parentheses = false 141 | 142 | [tool.ruff.lint.flake8-tidy-imports] 143 | ban-relative-imports = "all" 144 | 145 | [tool.ruff.lint.pycodestyle] 146 | max-line-length = 88 147 | max-doc-length = 79 148 | 149 | [tool.ruff.lint.pydocstyle] 150 | convention = "numpy" 151 | 152 | [tool.ruff.lint.flake8-copyright] 153 | author = "LLMQuant" 154 | 155 | [tool.ruff.lint.pylint] 156 | max-bool-expr = 3 157 | 158 | [tool.ruff.lint.isort] 159 | split-on-trailing-comma = false 160 | known-first-party = ["alphaagent"] 161 | sections.typing = ["typing", "types", "typing_extensions", "mypy", "mypy_extensions"] 162 | sections.testing = ["pytest", "tests"] 163 | section-order = [ 164 | "future", 165 | "typing", 166 | "standard-library", 167 | "third-party", 168 | "first-party", 169 | "local-folder", 170 | "testing" 171 | ] 172 | 173 | 174 | [tool.mypy] 175 | # https://github.com/python/mypy 176 | # https://mypy.readthedocs.io/en/latest/config_file.html#using-a-pyproject-toml-file 177 | python_version = 3.8 178 | pretty = true 179 | show_traceback = true 180 | color_output = true 181 | 182 | allow_redefinition = false 183 | check_untyped_defs = true 184 | disallow_any_generics = true 185 | disallow_incomplete_defs = true 186 | ignore_missing_imports = true 187 | implicit_reexport = false 188 | no_implicit_optional = true 189 | show_column_numbers = true 190 | show_error_codes = true 191 | show_error_context = true 192 | strict_equality = true 193 | strict_optional = true 194 | warn_no_return = true 195 | warn_redundant_casts = true 196 | warn_return_any = true 197 | warn_unreachable = true 198 | warn_unused_configs = true 199 | warn_unused_ignores = true 200 | 201 | 202 | [tool.pytest.ini_options] 203 | # https://github.com/pytest-dev/pytest 204 | # https://docs.pytest.org/en/6.2.x/customize.html#pyproject-toml 205 | # Directories that are not visited by pytest collector: 206 | norecursedirs =[ 207 | "hooks", 208 | "*.egg", 209 | ".eggs", 210 | "dist", 211 | "build", 212 | "docs", 213 | ".tox", 214 | ".git", 215 | "__pycache__" 216 | ] 217 | doctest_optionflags = ["NUMBER", "NORMALIZE_WHITESPACE", "IGNORE_EXCEPTION_DETAIL"] 218 | timeout = 10 219 | 220 | # Extra options: 221 | addopts = [ 222 | "--strict-markers", 223 | "--tb=short", 224 | "--doctest-modules", 225 | "--doctest-continue-on-failure", 226 | "--pikachu" 227 | ] 228 | 229 | 230 | [tool.coverage.run] 231 | source = ["tests"] 232 | branch = true 233 | 234 | 235 | [tool.coverage.report] 236 | exclude_also = [ 237 | "def main", 238 | "if __name__ == .__main__.:" 239 | ] 240 | fail_under = 50 241 | show_missing = true 242 | 243 | 244 | [tool.coverage.paths] 245 | source = ["alphaagent"] 246 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | click==8.1.7 ; python_version >= "3.8" and python_version < "4.0" 2 | colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" 3 | commonmark==0.9.1 ; python_version >= "3.8" and python_version < "4.0" 4 | pygments==2.18.0 ; python_version >= "3.8" and python_version < "4.0" 5 | rich==12.6.0 ; python_version >= "3.8" and python_version < "4.0" 6 | shellingham==1.5.4 ; python_version >= "3.8" and python_version < "4.0" 7 | typer[all]==0.7.0 ; python_version >= "3.8" and python_version < "4.0" 8 | typing-extensions==4.12.2 ; python_version >= "3.8" and python_version < "3.9" 9 | -------------------------------------------------------------------------------- /test/test_llm.py: -------------------------------------------------------------------------------- 1 | from alphaagent.utils.llm_utils import LLMReferenceAgent 2 | 3 | llm_reference = LLMReferenceAgent() 4 | 5 | print( 6 | llm_reference.complete_message( 7 | system_prompt="You are a helpful assistant.", 8 | user_prompt="What is the capital of France?", 9 | ) 10 | ) 11 | --------------------------------------------------------------------------------