diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
new file mode 100644
index 000000000..5354d671d
--- /dev/null
+++ b/.github/dependabot.yaml
@@ -0,0 +1,36 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+version: 2
+updates:
+ - package-ecosystem: "pip" # See documentation for possible values
+ directory: "/" # Location of package manifests
+ schedule:
+ interval: "weekly"
+ time: "09:00"
+ day: "monday"
+ timezone: "Europe/London"
+ commit-message:
+ prefix: "build"
+ include: "scope"
+
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ time: "09:30"
+ day: "monday"
+ timezone: "Europe/London"
+ commit-message:
+ prefix: "chore"
+ include: "scope"
+
+ - package-ecosystem: "docker"
+ directory: "/src/airflow/"
+ schedule:
+ interval: "weekly"
+ time: "09:30"
+ day: "monday"
+ timezone: "Europe/London"
+ commit-message:
+ prefix: "build"
+ include: "scope"
diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
deleted file mode 100644
index 90a9b71dd..000000000
--- a/.github/workflows/docs.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-name: docs
-on:
- push:
- branches:
- - main
-jobs:
- docs:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- with:
- fetch-depth: 0
- - name: Set up Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.10.8
- - name: Install and configure Poetry
- uses: snok/install-poetry@v1
- with:
- virtualenvs-create: true
- virtualenvs-in-project: true
- installer-parallel: true
- - name: Load cached venv
- id: cached-poetry-dependencies
- uses: actions/cache@v2
- with:
- path: .venv
- key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
- - name: Install dependencies
- if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
- run: poetry install --no-interaction --no-root
- - name: Install library
- run: poetry install --without tests --no-interaction
- - name: Publish docs
- run: poetry run mkdocs gh-deploy --force
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pr.yaml
similarity index 70%
rename from .github/workflows/pytest.yaml
rename to .github/workflows/pr.yaml
index b43bbc997..9cfe58485 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pr.yaml
@@ -1,14 +1,20 @@
-name: tests
-on: [push]
+name: Checks
+
+"on":
+ pull_request:
+
+env:
+ PYTHON_VERSION_DEFAULT: "3.10.8"
+
jobs:
test:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Set up Python
- uses: actions/setup-python@v2
+ uses: actions/setup-python@v5
with:
python-version: 3.10.8
- name: Install and configure Poetry
@@ -19,15 +25,19 @@ jobs:
installer-parallel: true
- name: Load cached venv
id: cached-poetry-dependencies
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: .venv
- key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
+ key: venv-${{ runner.os }}-${{ env.PYTHON_VERSION_DEFAULT }}-${{ hashFiles('**/poetry.lock') }}
+ - name: Validate project dependencies
+ run: poetry check
- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root
- name: Install library
run: poetry install --no-interaction
+ - name: Check dependencies
+ run: poetry run deptry .
- name: Run tests
run: poetry run pytest
- name: Upload coverage to Codecov
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
new file mode 100644
index 000000000..4fe48f20f
--- /dev/null
+++ b/.github/workflows/release.yaml
@@ -0,0 +1,107 @@
+name: Release
+
+"on":
+ push:
+ branches: ["main", "master", "release/**"]
+
+concurrency:
+ group: deploy
+ cancel-in-progress: false # prevent hickups with semantic-release
+
+env:
+ PYTHON_VERSION_DEFAULT: "3.10.8"
+
+jobs:
+ Release:
+ if: github.event_name == 'push' && !contains(github.event.head_commit.message, 'chore(release):')
+ runs-on: ubuntu-latest
+ permissions:
+ # NOTE: this enables trusted publishing.
+ # See https://github.com/pypa/gh-action-pypi-publish/tree/release/v1#trusted-publishing
+ # and https://blog.pypi.org/posts/2023-04-20-introducing-trusted-publishers/
+ id-token: write
+ contents: write
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ repository: opentargets/genetics_etl_python
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
+ - name: Install and configure Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-create: true
+ virtualenvs-in-project: true
+ installer-parallel: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: |
+ venv-${{ runner.os }}-\
+ ${{ env.PYTHON_VERSION_DEFAULT }}-\
+ ${{ hashFiles('**/poetry.lock') }}
+
+ - name: Validate project dependencies
+ run: poetry check
+
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --no-interaction --no-root
+
+ - name: Python Semantic Release
+ id: release
+ uses: python-semantic-release/python-semantic-release@v8.7.0
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Publish package distributions to GitHub Releases
+ if: steps.release.outputs.released == 'true'
+ # see https://github.com/python-semantic-release/upload-to-gh-release
+ uses: python-semantic-release/upload-to-gh-release@main
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ tag: ${{ steps.release.outputs.tag }}
+
+ Documentation:
+ needs: Release
+ runs-on: ubuntu-latest
+ if: github.ref == 'refs/heads/main'
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
+ - name: Install and configure Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-create: true
+ virtualenvs-in-project: true
+ installer-parallel: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: |
+ venv-${{ runner.os }}-\
+ ${{ env.PYTHON_VERSION_DEFAULT }}-\
+ ${{ hashFiles('**/poetry.lock') }}
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --no-interaction --no-root
+ - name: Install library
+ run: poetry install --without tests --no-interaction
+ - name: Publish docs
+ run: poetry run mkdocs gh-deploy --force
diff --git a/.gitignore b/.gitignore
index a32879400..07c8bef82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,5 +7,7 @@ outputs/
coverage.xml
docs/assets/schemas/
.cache/
-src/airflow/logs/
+src/airflow/logs/*
+!src/airflow/logs/.gitkeep
site/
+.env
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 11abbedf6..2a7d9b00f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,4 +1,13 @@
repos:
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ rev: v0.1.6
+ hooks:
+ - id: ruff
+ args:
+ - --fix
+ - id: ruff-format
+ files: ^((otg|utils|tests)/.+)?[^/]+\.py$
+
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
@@ -8,16 +17,20 @@ repos:
- id: check-merge-conflict
- id: check-case-conflict
- id: check-json
+ exclude: (.vscode|.devcontainer)
+ - id: no-commit-to-branch
+ args:
+ - --branch=dev
+ - --branch=main
- id: check-toml
- id: check-yaml
- - id: pretty-format-json
- args:
- - --autofix
- - --no-ensure-ascii
- - --no-sort-keys
- id: check-ast
- id: debug-statements
- id: check-docstring-first
+ - repo: https://github.com/adrienverge/yamllint.git
+ rev: v1.32.0
+ hooks:
+ - id: yamllint
- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.10.0
@@ -27,39 +40,39 @@ repos:
- id: python-check-blanket-noqa
- repo: https://github.com/hadialqattan/pycln
- rev: v2.2.2
+ rev: v2.4.0
hooks:
- id: pycln
args: [--all]
- - repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.0.292
+ - repo: https://github.com/pre-commit/mirrors-prettier
+ rev: "v3.0.3"
hooks:
- - id: ruff
-
- - repo: https://github.com/pycqa/isort
- rev: 5.12.0
- hooks:
- - id: isort
- args: [--add-import, from __future__ import annotations, --profile, black]
-
-
- - repo: https://github.com/psf/black
- rev: 23.9.1
- hooks:
- - id: black
+ - id: prettier
+ args: ["--staged"]
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
- rev: v9.5.0
+ rev: v9.10.0
hooks:
- id: commitlint
- additional_dependencies: ['@commitlint/config-conventional']
+ additional_dependencies: ["@commitlint/config-conventional"]
stages: [commit-msg]
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: 'v1.5.1'
+ rev: "v1.7.1"
hooks:
- id: mypy
+ args:
+ - "--ignore-missing-imports"
+ - "--check-untyped-defs"
+ - "--disallow-any-generics"
+ - "--disallow-incomplete-defs"
+ - "--no-implicit-optional"
+ - "--no-implicit-reexport"
+ - "--strict-equality"
+ - "--warn-redundant-casts"
+ - "--warn-unused-ignores"
+ - "--disallow-untyped-defs"
- repo: https://github.com/econchick/interrogate
rev: 1.5.0
@@ -71,8 +84,14 @@ repos:
rev: 6.3.0
hooks:
- id: pydocstyle
- args: [--convention=google]
+ args: [--convention=google, --add-ignore=D107]
+
- repo: https://github.com/lovesegfault/beautysh
rev: v6.2.1
hooks:
- id: beautysh
+
+ - repo: https://github.com/jsh9/pydoclint
+ rev: 0.3.8
+ hooks:
+ - id: pydoclint
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index e434673de..1be2f117e 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,12 +1,11 @@
{
"recommendations": [
"charliermarsh.ruff",
- "ms-python.isort",
"ms-python.mypy-type-checker",
"ms-python.python",
- "ms-python.black-formatter"
+ "esbenp.prettier-vscode",
+ "redhat.vscode-yaml",
+ "fnando.linter"
],
- "unwantedRecommendations": [
- "ms-python.flake8"
- ]
+ "unwantedRecommendations": ["ms-python.flake8"]
}
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 796274c77..1d3659207 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -8,9 +8,7 @@
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
- "args": [
- "--config-dir=./configs"
- ]
+ "args": ["--config-dir=./configs"]
},
{
"name": "Python: Current File [local]",
@@ -19,10 +17,7 @@
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
- "args": [
- "--config-dir=./configs",
- "environment=local"
- ]
+ "args": ["--config-dir=./configs", "environment=local"]
}
]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 727b1d959..aaafda97f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,43 +1,29 @@
{
"[python]": {
- "editor.defaultFormatter": "ms-python.black-formatter",
+ "editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
- "source.fixAll": false,
- "source.organizeImports": true
+ "source.fixAll": "never",
+ "source.organizeImports": "explicit"
}
},
- "python.terminal.launchArgs": [
- "-m",
- "IPython",
- "--no-autoindent"
- ],
+ "python.terminal.launchArgs": ["-m", "IPython", "--no-autoindent"],
"[jsonc]": {
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.detectIndentation": false,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
- "source.organizeImports": true
+ "source.organizeImports": "explicit"
}
},
"json.format.keepLines": true,
- "isort.args": [
- "--profile",
- "black"
- ],
"autoDocstring.docstringFormat": "google",
- "python.testing.pytestArgs": [
- ".",
- "--doctest-modules",
- "--cov=src/"
- ],
+ "python.testing.pytestArgs": [".", "--doctest-modules", "--cov=src/"],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
"mypy-type-checker.severity": {
"error": "Information"
- },
- "ruff.fixAll": false,
- "ruff.organizeImports": false
+ }
}
diff --git a/.yamllint b/.yamllint
new file mode 100644
index 000000000..0148408de
--- /dev/null
+++ b/.yamllint
@@ -0,0 +1,59 @@
+rules:
+ braces:
+ level: error
+ min-spaces-inside: 0
+ max-spaces-inside: 1
+ min-spaces-inside-empty: -1
+ max-spaces-inside-empty: -1
+ brackets:
+ level: error
+ min-spaces-inside: 0
+ max-spaces-inside: 0
+ min-spaces-inside-empty: -1
+ max-spaces-inside-empty: -1
+ colons:
+ level: error
+ max-spaces-before: 0
+ max-spaces-after: 1
+ commas:
+ level: error
+ max-spaces-before: 0
+ min-spaces-after: 1
+ max-spaces-after: 1
+ comments:
+ level: error
+ require-starting-space: true
+ min-spaces-from-content: 1
+ comments-indentation:
+ level: error
+ document-end:
+ level: error
+ present: false
+ document-start:
+ level: error
+ present: false
+ empty-lines:
+ level: error
+ max: 1
+ max-start: 0
+ max-end: 1
+ hyphens:
+ level: error
+ max-spaces-after: 1
+ indentation:
+ level: error
+ spaces: 2
+ indent-sequences: true
+ check-multi-line-strings: false
+ key-duplicates:
+ level: error
+ line-length: disable
+ new-line-at-end-of-file:
+ level: error
+ new-lines:
+ level: error
+ type: unix
+ trailing-spaces:
+ level: error
+ truthy:
+ level: error
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..afaa98fe5
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,128 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+- Focusing on what is best not just for us as individuals, but for the
+ overall community
+
+Examples of unacceptable behavior include:
+
+- The use of sexualized language or imagery, and sexual attention or
+ advances of any kind
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email
+ address, without their explicit permission
+- Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
diff --git a/LICENSE.md b/LICENSE.md
index 261eeb9e9..c61b66391 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -2,180 +2,180 @@
Version 2.0, January 2004
http://www.apache.org/licenses/
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
@@ -186,16 +186,16 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright [yyyy] [name of copyright owner]
+Copyright [yyyy] [name of copyright owner]
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/Makefile b/Makefile
index 49bba7b4a..627385541 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
PROJECT_ID ?= open-targets-genetics-dev
REGION ?= europe-west1
-APP_NAME ?= $$(cat pyproject.toml| grep name | cut -d" " -f3 | sed 's/"//g')
+APP_NAME ?= $$(cat pyproject.toml| grep -m 1 "name" | cut -d" " -f3 | sed 's/"//g')
VERSION_NO ?= $$(poetry version --short)
CLEAN_VERSION_NO := $(shell echo "$(VERSION_NO)" | tr -cd '[:alnum:]')
BUCKET_NAME=gs://genetics_etl_python_playground/initialisation/${VERSION_NO}/
@@ -21,11 +21,11 @@ setup-dev: ## Setup development environment
@. utils/install_dependencies.sh
check: ## Lint and format code
- @echo "Linting..."
+ @echo "Linting API..."
@poetry run ruff src/otg .
- @echo "Formatting..."
- @poetry run black src/otg .
- @poetry run isort src/otg .
+ @echo "Linting docstrings..."
+ @poetry run pydoclint --config=pyproject.toml src
+ @poetry run pydoclint --config=pyproject.toml --skip-checking-short-docstrings=true tests
test: ## Run tests
@echo "Running Tests..."
@@ -35,8 +35,7 @@ build-documentation: ## Create local server with documentation
@echo "Building Documentation..."
@poetry run mkdocs serve
-create-dev-cluster: ## Spin up a simple dataproc cluster with all dependencies for development purposes
- @${MAKE} build
+create-dev-cluster: build ## Spin up a simple dataproc cluster with all dependencies for development purposes
@echo "Creating Dataproc Dev Cluster"
@gcloud config set project ${PROJECT_ID}
@gcloud dataproc clusters create "ot-genetics-dev-${CLEAN_VERSION_NO}" \
@@ -46,10 +45,10 @@ create-dev-cluster: ## Spin up a simple dataproc cluster with all dependencies f
--initialization-actions=gs://genetics_etl_python_playground/initialisation/${VERSION_NO}/install_dependencies_on_cluster.sh \
--metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${VERSION_NO}/otgenetics-${VERSION_NO}-py3-none-any.whl,CONFIGTAR=gs://genetics_etl_python_playground/initialisation/${VERSION_NO}/config.tar.gz" \
--single-node \
+ --optional-components=JUPYTER \
--enable-component-gateway
-make update-dev-cluster: ## Reinstalls the package on the dev-cluster
- @${MAKE} build
+make update-dev-cluster: build ## Reinstalls the package on the dev-cluster
@echo "Updating Dataproc Dev Cluster"
@gcloud config set project ${PROJECT_ID}
gcloud dataproc jobs submit pig --cluster="ot-genetics-dev-${CLEAN_VERSION_NO}" \
@@ -60,7 +59,6 @@ make update-dev-cluster: ## Reinstalls the package on the dev-cluster
build: clean ## Build Python package with dependencies
@gcloud config set project ${PROJECT_ID}
@echo "Packaging Code and Dependencies for ${APP_NAME}-${VERSION_NO}"
- @rm -rf ./dist
@poetry build
@tar -czf dist/config.tar.gz config/
@echo "Uploading to Dataproc"
diff --git a/Makefile_deprecated b/Makefile_deprecated
deleted file mode 100644
index df9617ce9..000000000
--- a/Makefile_deprecated
+++ /dev/null
@@ -1,186 +0,0 @@
-PROJECT_ID ?= open-targets-genetics-dev
-REGION ?= europe-west1
-CLUSTER_NAME ?= ${USER}-genetics-etl
-PROJECT_NUMBER ?= $$(gcloud projects list --filter=${PROJECT_ID} --format="value(PROJECT_NUMBER)")
-APP_NAME ?= $$(cat pyproject.toml| grep name | cut -d" " -f3 | sed 's/"//g')
-VERSION_NO ?= $$(poetry version --short)
-SRC_WITH_DEPS ?= code_bundle
-
-.PHONY: $(shell sed -n -e '/^$$/ { n ; /^[^ .\#][^ ]*:/ { s/:.*$$// ; p ; } ; }' $(MAKEFILE_LIST))
-
-.DEFAULT_GOAL := help
-
-help: ## This is help
- @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
-
-clean: ## CleanUp Prior to Build
- @rm -Rf ./dist
- @rm -Rf ./${SRC_WITH_DEPS}
- @rm -f requirements.txt
-
-setup-dev: SHELL:=/bin/bash
-setup-dev: ## Setup dev environment
- @. utils/install_dependencies.sh
-
-build: clean ## Build Python Package with Dependencies
- @echo "Packaging Code and Dependencies for ${APP_NAME}-${VERSION_NO}"
- @rm -rf ./dist
- @poetry build
- @cp ./src/*.py ./dist
- @poetry run python ./utils/configure.py --cfg job > ./dist/config.yaml
- @echo "Uploading to Dataproc"
- @gsutil cp ./dist/${APP_NAME}-${VERSION_NO}-py3-none-any.whl gs://genetics_etl_python_playground/initialisation/
- @gsutil cp ./utils/initialise_cluster.sh gs://genetics_etl_python_playground/initialisation/
-
-prepare_pics: ## Create cluster for variant annotation:
- gcloud dataproc clusters create ${CLUSTER_NAME} \
- --image-version=2.0 \
- --project=${PROJECT_ID} \
- --region=${REGION} \
- --master-machine-type=n1-highmem-96 \
- --enable-component-gateway \
- --num-master-local-ssds=1 \
- --master-local-ssd-interface=NVME \
- --metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl" \
- --initialization-actions=gs://genetics_etl_python_playground/initialisation/initialise_cluster.sh \
- --single-node \
- --max-idle=10m
-
-prepare_variant_annotation: ## Create cluster for variant annotation
- gcloud dataproc clusters create ${CLUSTER_NAME} \
- --image-version=2.0 \
- --project=${PROJECT_ID} \
- --region=${REGION} \
- --master-machine-type=n1-highmem-96 \
- --enable-component-gateway \
- --metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl" \
- --initialization-actions=gs://genetics_etl_python_playground/initialisation/initialise_cluster.sh \
- --single-node \
- --max-idle=10m
-
-prepare_variant_index: ## Create cluster for variant index generation
- gcloud dataproc clusters create ${CLUSTER_NAME} \
- --image-version=2.0 \
- --project=${PROJECT_ID} \
- --region=${REGION} \
- --master-machine-type=n1-highmem-32 \
- --metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl" \
- --initialization-actions=gs://genetics_etl_python_playground/initialisation/initialise_cluster.sh \
- --enable-component-gateway \
- --single-node \
- --max-idle=10m
-
-prepare_v2g: ## Create cluster for variant to gene data generation
- gcloud dataproc clusters create ${CLUSTER_NAME} \
- --image-version=2.0 \
- --project=${PROJECT_ID} \
- --region=${REGION} \
- --master-machine-type=n1-highmem-64 \
- --enable-component-gateway \
- --metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl" \
- --initialization-actions=gs://genetics_etl_python_playground/initialisation/initialise_cluster.sh \
- --single-node \
- --max-idle=10m
-
-prepare_v2g: ## Create cluster for variant to gene data generation
- gcloud dataproc clusters create ${CLUSTER_NAME} \
- --image-version=2.0 \
- --project=${PROJECT_ID} \
- --region=${REGION} \
- --master-machine-type=n1-highmem-64 \
- --enable-component-gateway \
- --metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl" \
- --initialization-actions=gs://genetics_etl_python_playground/initialisation/initialise_cluster.sh \
- --single-node \
- --max-idle=10m
-
-prepare_coloc: ## Create cluster for coloc
- gcloud dataproc clusters create ${CLUSTER_NAME} \
- --image-version=2.0 \
- --project=${PROJECT_ID} \
- --region=${REGION} \
- --master-machine-type=n1-highmem-64 \
- --num-master-local-ssds=1 \
- --master-local-ssd-interface=NVME \
- --enable-component-gateway \
- --metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl" \
- --initialization-actions=gs://genetics_etl_python_playground/initialisation/initialise_cluster.sh \
- --single-node \
- --max-idle=10m
-
-prepare_gwas: ## Create cluster for gwas data generation
- gcloud dataproc clusters create ${CLUSTER_NAME} \
- --image-version=2.0 \
- --project=${PROJECT_ID} \
- --region=${REGION} \
- --master-machine-type=n1-highmem-32 \
- --metadata="PACKAGE=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl" \
- --initialization-actions=gs://genetics_etl_python_playground/initialisation/initialise_cluster.sh \
- --enable-component-gateway \
- --single-node \
- --max-idle=10m
-
-run_coloc: ## Generate coloc results
- gcloud dataproc jobs submit pyspark ./dist/run_coloc.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --py-files=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl \
- --project=${PROJECT_ID} \
- --region=${REGION}
-
-run_v2g: ## Generate V2G dataset
- gcloud dataproc jobs submit pyspark ./dist/run_v2g.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --py-files=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl \
- --project=${PROJECT_ID} \
- --region=${REGION}
-
-run_v2g: ## Generate V2G dataset
- gcloud dataproc jobs submit pyspark ./dist/run_v2g.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --py-files=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl \
- --project=${PROJECT_ID} \
- --region=${REGION}
-
-run_variant_annotation: ## Generate variant annotation dataset
- gcloud dataproc jobs submit pyspark ./dist/run_variant_annotation.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --properties='spark.jars=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.driver.extraClassPath=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.executor.extraClassPath=./hail-all-spark.jar,spark.serializer=org.apache.spark.serializer.KryoSerializer,spark.kryo.registrator=is.hail.kryo.HailKryoRegistrator' \
- --project=${PROJECT_ID} \
- --region=${REGION}
-
-run_variant_index: ## Generate variant index dataset
- gcloud dataproc jobs submit pyspark ./dist/run_variant_index.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --py-files=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl \
- --project=${PROJECT_ID} \
- --region=${REGION}
-
-run_gwas: ## Ingest gwas dataset on a dataproc cluster
- gcloud dataproc jobs submit pyspark ./dist/run_gwas_ingest.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --properties='spark.jars=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.driver.extraClassPath=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.executor.extraClassPath=./hail-all-spark.jar,spark.serializer=org.apache.spark.serializer.KryoSerializer,spark.kryo.registrator=is.hail.kryo.HailKryoRegistrator' \
- --py-files=gs://genetics_etl_python_playground/initialisation/${APP_NAME}-${VERSION_NO}-py3-none-any.whl \
- --project=${PROJECT_ID} \
- --region=${REGION}
-
-run_pics: ## Run pics method
- gcloud dataproc jobs submit pyspark ./dist/pics_experiment.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --properties='spark.jars=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.driver.extraClassPath=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.executor.extraClassPath=./hail-all-spark.jar,spark.serializer=org.apache.spark.serializer.KryoSerializer,spark.kryo.registrator=is.hail.kryo.HailKryoRegistrator' \
- --project=${PROJECT_ID} \
- --region=${REGION}
-
-run_precompute_ld_index: ## Precompute ld-index information
- gcloud dataproc jobs submit pyspark ./dist/run_precompute_ld_indexes.py \
- --cluster=${CLUSTER_NAME} \
- --files=./dist/config.yaml \
- --properties='spark.jars=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.driver.extraClassPath=/opt/conda/miniconda3/lib/python3.8/site-packages/hail/backend/hail-all-spark.jar,spark.executor.extraClassPath=./hail-all-spark.jar,spark.serializer=org.apache.spark.serializer.KryoSerializer,spark.kryo.registrator=is.hail.kryo.HailKryoRegistrator' \
- --project=${PROJECT_ID} \
- --region=${REGION}
diff --git a/README.md b/README.md
index b1ec5ba19..5be708d82 100644
--- a/README.md
+++ b/README.md
@@ -2,8 +2,8 @@
[![docs](https://github.com/opentargets/genetics_etl_python/actions/workflows/docs.yaml/badge.svg)](https://opentargets.github.io/genetics_etl_python/)
[![codecov](https://codecov.io/gh/opentargets/genetics_etl_python/branch/main/graph/badge.svg?token=5ixzgu8KFP)](https://codecov.io/gh/opentargets/genetics_etl_python)
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
-[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/opentargets/genetics_etl_python/main.svg)](https://results.pre-commit.ci/badge/github/opentargets/genetics_etl_python)
# Genetics Portal Data Pipeline (experimental)
+
- [Documentation](https://opentargets.github.io/genetics_etl_python/)
diff --git a/codecov.yml b/codecov.yml
index d817e3746..945dba691 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -1,8 +1,10 @@
+codecov:
+ branch: dev
comment:
layout: "reach, diff, flags, files"
behavior: default
- require_changes: false # if true: only post the comment if coverage changes
+ require_changes: false # if true: only post the comment if coverage changes
coverage:
status:
diff --git a/commitlint.config.js b/commitlint.config.js
index 3347cb961..5073c20db 100644
--- a/commitlint.config.js
+++ b/commitlint.config.js
@@ -1 +1 @@
-module.exports = {extends: ['@commitlint/config-conventional']};
+module.exports = { extends: ["@commitlint/config-conventional"] };
diff --git a/config/my_config.yaml b/config/config.yaml
similarity index 60%
rename from config/my_config.yaml
rename to config/config.yaml
index 8a4d21399..1e524ed5f 100644
--- a/config/my_config.yaml
+++ b/config/config.yaml
@@ -1,4 +1,4 @@
defaults:
- datasets: gcp
- - session: dataproc
+ - step/session: dataproc
- step: ???
diff --git a/config/datasets/gcp.yaml b/config/datasets/gcp.yaml
index 9b7af54a0..e8d949ecd 100644
--- a/config/datasets/gcp.yaml
+++ b/config/datasets/gcp.yaml
@@ -1,47 +1,49 @@
-
# Input/Output paths
version: XX.XX
inputs: gs://genetics_etl_python_playground/input
outputs: gs://genetics_etl_python_playground/output/python_etl/parquet/${datasets.version}
# Input datasets
-gnomad_gnomes: gs://gcp-public-data--gnomad/release/3.1.2/ht/genomes/gnomad.genomes.v3.1.2.sites.ht
-chain_hail_38_37: gs://hail-common/references/grch38_to_grch37.over.chain.gz
-chain_hail_37_38: gs://hail-common/references/grch37_to_grch38.over.chain.gz
chain_37_38: ${datasets.inputs}/v2g_input/grch37_to_grch38.over.chain
target_index: ${datasets.inputs}/v2g_input/targets_correct_tss
vep_consequences: gs://genetics-portal-data/lut/vep_consequences.tsv
anderson: gs://genetics-portal-input/v2g_input/andersson2014/enhancer_tss_associations.bed
javierre: gs://genetics-portal-input/v2g_input/javierre_2016_preprocessed.parquet
jung: gs://genetics-portal-raw/pchic_jung2019/jung2019_pchic_tableS3.csv
-thrunman: gs://genetics-portal-input/v2g_input/thurman2012/genomewideCorrs_above0.7_promoterPlusMinus500kb_withGeneNames_32celltypeCategories.bed8.gz
-catalog_associations: ${datasets.inputs}/v2d/gwas_catalog_v1.0.2-associations_e110_r2023-09-11.tsv
-catalog_studies: ${datasets.inputs}/v2d/gwas-catalog-v1.0.3-studies-r2023-09-11.tsv
-catalog_ancestries: ${datasets.inputs}/v2d/gwas-catalog-v1.0.3-ancestries-r2023-09-11.tsv
-catalog_sumstats_lut: ${datasets.inputs}/v2d/harmonised_list-r2023-09-11.txt
-finngen_phenotype_table_url: https://r9.finngen.fi/api/phenos
+thurman: gs://genetics-portal-input/v2g_input/thurman2012/genomewideCorrs_above0.7_promoterPlusMinus500kb_withGeneNames_32celltypeCategories.bed8.gz
+catalog_associations: ${datasets.inputs}/v2d/gwas_catalog_v1.0.2-associations_e110_r2023-11-24.tsv
+catalog_studies:
+ # To get a complete representation of all GWAS Catalog studies, we need to
+ # ingest the list of unpublished studies from a different file.
+ - ${datasets.inputs}/v2d/gwas-catalog-v1.0.3-studies-r2023-11-24.tsv
+ - ${datasets.inputs}/v2d/gwas-catalog-v1.0.3-unpublished-studies-r2023-11-24.tsv
+catalog_ancestries:
+ - ${datasets.inputs}/v2d/gwas-catalog-v1.0.3-ancestries-r2023-11-24.tsv
+ - ${datasets.inputs}/v2d/gwas-catalog-v1.0.3-unpublished-ancestries-r2023-11-24.tsv
+catalog_sumstats_lut: ${datasets.inputs}/v2d/harmonised_list-r2023-11-24a.txt
ukbiobank_manifest: gs://genetics-portal-input/ukb_phenotypes/neale2_saige_study_manifest.190430.tsv
-
-# Templates
-ld_index_raw_template: gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.ld.variant_indices.ht
-ld_matrix_template: gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.adj.ld.bm
+l2g_gold_standard_curation: ${datasets.inputs}/l2g/gold_standard/curation.json
+gene_interactions: ${datasets.inputs}/l2g/interaction # 23.09 data
+eqtl_catalogue_paths_imported: ${datasets.inputs}/preprocess/eqtl_catalogue/tabix_ftp_paths_imported.tsv
# Output datasets
-gene_index: ${datasets.outputs}/gene_index/gene_index
+gene_index: ${datasets.outputs}/gene_index
variant_annotation: ${datasets.outputs}/variant_annotation
variant_index: ${datasets.outputs}/variant_index
+study_index: ${datasets.outputs}/study_index
study_locus: ${datasets.outputs}/study_locus
+credible_set: ${datasets.outputs}/credible_set
+summary_statistics: ${datasets.outputs}/summary_statistics
study_locus_overlap: ${datasets.outputs}/study_locus_overlap
colocalisation: ${datasets.outputs}/colocalisation
v2g: ${datasets.outputs}/v2g
ld_index: ${datasets.outputs}/ld_index
-catalog_study_index: ${datasets.outputs}/catalog_study_index
-catalog_study_locus: ${datasets.outputs}/catalog_study_locus
-finngen_study_index: ${datasets.outputs}/finngen_study_index
-finngen_summary_stats: ${datasets.outputs}/finngen_summary_stats
-ukbiobank_study_index: ${datasets.outputs}/ukbiobank_study_index
-
-# Constants
-finngen_release_prefix: FINNGEN_R9
-finngen_sumstat_url_prefix: https://storage.googleapis.com/finngen-public-data-r9/summary_stats/finngen_R9_
-finngen_sumstat_url_suffix: .gz
+catalog_study_index: ${datasets.study_index}/catalog
+catalog_study_locus: ${datasets.study_locus}/catalog_study_locus
+finngen_study_index: ${datasets.study_index}/finngen
+finngen_summary_stats: ${datasets.summary_statistics}/finngen
+from_sumstats_study_locus: ${datasets.study_locus}/from_sumstats
+from_sumstats_pics: ${datasets.credible_set}/from_sumstats
+ukbiobank_study_index: ${datasets.study_index}/ukbiobank
+l2g_model: ${datasets.outputs}/l2g_model
+l2g_predictions: ${datasets.outputs}/l2g_predictions
diff --git a/config/step/clump.yaml b/config/step/clump.yaml
new file mode 100644
index 000000000..04790663f
--- /dev/null
+++ b/config/step/clump.yaml
@@ -0,0 +1,6 @@
+_target_: otg.clump.ClumpStep
+input_path: ???
+ld_index_path: null
+study_index_path: null
+locus_collect_distance: null
+clumped_study_locus_path: ???
diff --git a/config/step/my_colocalisation.yaml b/config/step/colocalisation.yaml
similarity index 55%
rename from config/step/my_colocalisation.yaml
rename to config/step/colocalisation.yaml
index af05c2d66..0a39dd338 100644
--- a/config/step/my_colocalisation.yaml
+++ b/config/step/colocalisation.yaml
@@ -1,6 +1,3 @@
-# Default config
-defaults:
- - colocalisation
-# Additional config
+_target_: otg.colocalisation.ColocalisationStep
study_locus_path: ${datasets.study_locus}
coloc_path: ${datasets.colocalisation}
diff --git a/config/step/eqtl_catalogue.yaml b/config/step/eqtl_catalogue.yaml
new file mode 100644
index 000000000..04a958993
--- /dev/null
+++ b/config/step/eqtl_catalogue.yaml
@@ -0,0 +1,4 @@
+_target_: otg.eqtl_catalogue.EqtlCatalogueStep
+eqtl_catalogue_paths_imported: ${datasets.eqtl_catalogue_paths_imported}
+eqtl_catalogue_study_index_out: ${datasets.eqtl_catalogue_study_index_out}
+eqtl_catalogue_summary_stats_out: ${datasets.eqtl_catalogue_summary_stats_out}
diff --git a/config/step/finngen_studies.yaml b/config/step/finngen_studies.yaml
new file mode 100644
index 000000000..23b58c443
--- /dev/null
+++ b/config/step/finngen_studies.yaml
@@ -0,0 +1,2 @@
+_target_: otg.finngen_studies.FinnGenStudiesStep
+finngen_study_index_out: ${datasets.finngen_study_index}
diff --git a/config/step/finngen_sumstat_preprocess.yaml b/config/step/finngen_sumstat_preprocess.yaml
new file mode 100644
index 000000000..319e7af63
--- /dev/null
+++ b/config/step/finngen_sumstat_preprocess.yaml
@@ -0,0 +1,3 @@
+_target_: otg.finngen_sumstat_preprocess.FinnGenSumstatPreprocessStep
+raw_sumstats_path: ???
+out_sumstats_path: ???
diff --git a/config/step/my_gene_index.yaml b/config/step/gene_index.yaml
similarity index 55%
rename from config/step/my_gene_index.yaml
rename to config/step/gene_index.yaml
index 20c2bc3b7..20de8dfbe 100644
--- a/config/step/my_gene_index.yaml
+++ b/config/step/gene_index.yaml
@@ -1,6 +1,3 @@
-# Default config
-defaults:
- - gene_index
-# Additional config
+_target_: otg.gene_index.GeneIndexStep
target_path: ${datasets.target_index}
gene_index_path: ${datasets.gene_index}
diff --git a/config/step/my_gwas_catalog.yaml b/config/step/gwas_catalog_ingestion.yaml
similarity index 58%
rename from config/step/my_gwas_catalog.yaml
rename to config/step/gwas_catalog_ingestion.yaml
index 70fab08d3..863c75ac2 100644
--- a/config/step/my_gwas_catalog.yaml
+++ b/config/step/gwas_catalog_ingestion.yaml
@@ -1,12 +1,8 @@
-# Default config
-defaults:
- - gwas_catalog
-# Additional config
-catalog_studies_file: ${datasets.catalog_studies}
-catalog_ancestry_file: ${datasets.catalog_ancestries}
+_target_: otg.gwas_catalog.GWASCatalogStep
+catalog_study_files: ${datasets.catalog_studies}
+catalog_ancestry_files: ${datasets.catalog_ancestries}
catalog_associations_file: ${datasets.catalog_associations}
catalog_sumstats_lut: ${datasets.catalog_sumstats_lut}
variant_annotation_path: ${datasets.variant_annotation}
-ld_index_path: ${datasets.ld_index}
catalog_studies_out: ${datasets.catalog_study_index}
catalog_associations_out: ${datasets.catalog_study_locus}
diff --git a/config/step/gwas_catalog_sumstat_preprocess.yaml b/config/step/gwas_catalog_sumstat_preprocess.yaml
new file mode 100644
index 000000000..29d3486e8
--- /dev/null
+++ b/config/step/gwas_catalog_sumstat_preprocess.yaml
@@ -0,0 +1,3 @@
+_target_: otg.gwas_catalog_sumstat_preprocess.GWASCatalogSumstatsPreprocessStep
+raw_sumstats_path: ???
+out_sumstats_path: ???
diff --git a/config/step/ld_index.yaml b/config/step/ld_index.yaml
new file mode 100644
index 000000000..86f595076
--- /dev/null
+++ b/config/step/ld_index.yaml
@@ -0,0 +1,6 @@
+_target_: otg.ld_index.LDIndexStep
+
+session:
+ start_hail: true
+
+ld_index_out: ${datasets.ld_index}
diff --git a/config/step/locus_to_gene.yaml b/config/step/locus_to_gene.yaml
new file mode 100644
index 000000000..471ef5195
--- /dev/null
+++ b/config/step/locus_to_gene.yaml
@@ -0,0 +1,20 @@
+_target_: otg.l2g.LocusToGeneStep
+
+session:
+ extended_spark_conf:
+ spark.dynamicAllocation.enabled: false
+run_mode: train
+wandb_run_name: null
+perform_cross_validation: false
+model_path: ${datasets.l2g_model}
+predictions_path: ${datasets.l2g_predictions}
+credible_set_path: ${datasets.credible_set}
+variant_gene_path: ${datasets.v2g}
+colocalisation_path: ${datasets.colocalisation}
+study_index_path: ${datasets.study_index}
+study_locus_overlap_path: ${datasets.study_locus_overlap}
+gold_standard_curation_path: ${datasets.l2g_gold_standard_curation}
+gene_interactions_path: ${datasets.gene_interactions}
+hyperparameters:
+ max_depth: 5
+ loss_function: binary:logistic
diff --git a/config/step/my_finngen.yaml b/config/step/my_finngen.yaml
deleted file mode 100644
index 93cb2b3ce..000000000
--- a/config/step/my_finngen.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-# Default config
-defaults:
- - finngen
-# Additional config
-finngen_phenotype_table_url: ${datasets.finngen_phenotype_table_url}
-finngen_release_prefix: ${datasets.finngen_release_prefix}
-finngen_sumstat_url_prefix: ${datasets.finngen_sumstat_url_prefix}
-finngen_sumstat_url_suffix: ${datasets.finngen_sumstat_url_suffix}
-finngen_study_index_out: ${datasets.finngen_study_index}
-finngen_summary_stats_out: ${datasets.finngen_summary_stats}
diff --git a/config/step/my_ld_index.yaml b/config/step/my_ld_index.yaml
deleted file mode 100644
index 400451194..000000000
--- a/config/step/my_ld_index.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Default config
-defaults:
- - ld_index
-# Additional config
-grch37_to_grch38_chain_path: ${datasets.chain_hail_37_38}
-ld_index_raw_template: ${datasets.ld_index_raw_template}
-ld_index_out: ${datasets.ld_index}
diff --git a/config/step/my_study_locus_overlap.yaml b/config/step/my_study_locus_overlap.yaml
deleted file mode 100644
index d895174df..000000000
--- a/config/step/my_study_locus_overlap.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Default config
-defaults:
- - study_locus_overlap
-# Additional config
-study_locus_path: ${datasets.outputs}/catalog_study_locus
-study_index_path: ${datasets.outputs}/catalog_study_index
-overlaps_index_out: ${datasets.outputs}/study_locus_overlap
diff --git a/config/step/my_variant_annotation.yaml b/config/step/my_variant_annotation.yaml
deleted file mode 100644
index f57722aca..000000000
--- a/config/step/my_variant_annotation.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Default config
-defaults:
- - variant_annotation
-# Additional config
-gnomad_genomes: ${datasets.gnomad_gnomes}
-chain_38_to_37: ${datasets.chain_hail_38_37}
-variant_annotation_path: ${datasets.variant_annotation}
diff --git a/config/step/my_variant_index.yaml b/config/step/my_variant_index.yaml
deleted file mode 100644
index 625d00afa..000000000
--- a/config/step/my_variant_index.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Default config
-defaults:
- - variant_index
-# Additional config
-variant_annotation_path: ${datasets.variant_annotation}
-study_locus_path: ${datasets.study_locus}
-variant_index_path: ${datasets.variant_index}
diff --git a/config/step/pics.yaml b/config/step/pics.yaml
new file mode 100644
index 000000000..4a656a876
--- /dev/null
+++ b/config/step/pics.yaml
@@ -0,0 +1,3 @@
+_target_: otg.pics.PICSStep
+study_locus_ld_annotated_in: ???
+picsed_study_locus_out: ???
diff --git a/config/session/dataproc.yaml b/config/step/session/dataproc.yaml
similarity index 56%
rename from config/session/dataproc.yaml
rename to config/step/session/dataproc.yaml
index 96b2ff07a..0c8b1208a 100644
--- a/config/session/dataproc.yaml
+++ b/config/step/session/dataproc.yaml
@@ -1,5 +1,4 @@
-defaults:
- - session_config
+_target_: otg.common.session.Session
spark_uri: yarn
-write_mode: overwrite
hail_home: /opt/conda/miniconda3/lib/python3.10/site-packages/hail
+write_mode: errorifexists
diff --git a/config/step/session/local.yaml b/config/step/session/local.yaml
new file mode 100644
index 000000000..ac7f42591
--- /dev/null
+++ b/config/step/session/local.yaml
@@ -0,0 +1,4 @@
+_target_: otg.common.session.Session
+spark_uri: local[*]
+hail_home: ???
+write_mode: errorifexists
diff --git a/config/step/study_locus_overlap.yaml b/config/step/study_locus_overlap.yaml
new file mode 100644
index 000000000..02f9cd83d
--- /dev/null
+++ b/config/step/study_locus_overlap.yaml
@@ -0,0 +1,4 @@
+_target_: otg.overlaps.OverlapsIndexStep
+study_locus_path: ${datasets.outputs}/credible_set
+study_index_path: ${datasets.outputs}/study_index
+overlaps_index_out: ${datasets.outputs}/study_locus_overlap
diff --git a/config/step/my_ukbiobank.yaml b/config/step/ukbiobank.yaml
similarity index 64%
rename from config/step/my_ukbiobank.yaml
rename to config/step/ukbiobank.yaml
index 7e8af4723..fc7d7fb19 100644
--- a/config/step/my_ukbiobank.yaml
+++ b/config/step/ukbiobank.yaml
@@ -1,6 +1,3 @@
-# Default config
-defaults:
- - ukbiobank
-# Additional config
+_target_: otg.ukbiobank.UKBiobankStep
ukbiobank_manifest: ${datasets.ukbiobank_manifest}
ukbiobank_study_index_out: ${datasets.ukbiobank_study_index}
diff --git a/config/step/my_v2g.yaml b/config/step/v2g.yaml
similarity index 58%
rename from config/step/my_v2g.yaml
rename to config/step/v2g.yaml
index 6e506c5a9..bdd003861 100644
--- a/config/step/my_v2g.yaml
+++ b/config/step/v2g.yaml
@@ -1,14 +1,12 @@
-# Default config
-defaults:
- - v2g
-# Additional config
+_target_: otg.v2g.V2GStep
variant_index_path: ${datasets.variant_index}
variant_annotation_path: ${datasets.variant_annotation}
gene_index_path: ${datasets.gene_index}
vep_consequences_path: ${datasets.vep_consequences}
liftover_chain_file_path: ${datasets.chain_37_38}
-anderson_path: ${datasets.anderson}
-javierre_path: ${datasets.javierre}
-jung_path: ${datasets.jung}
-thurnman_path: ${datasets.thurnman}
+intervals:
+ andersson: ${datasets.anderson}
+ javierre: ${datasets.javierre}
+ jung: ${datasets.jung}
+ thurman: ${datasets.thurman}
v2g_path: ${datasets.v2g}
diff --git a/config/step/variant_annotation.yaml b/config/step/variant_annotation.yaml
new file mode 100644
index 000000000..1a8042ddb
--- /dev/null
+++ b/config/step/variant_annotation.yaml
@@ -0,0 +1,6 @@
+_target_: otg.variant_annotation.VariantAnnotationStep
+
+session:
+ start_hail: true
+
+variant_annotation_path: ${datasets.variant_annotation}
diff --git a/config/step/variant_index.yaml b/config/step/variant_index.yaml
new file mode 100644
index 000000000..88f84690b
--- /dev/null
+++ b/config/step/variant_index.yaml
@@ -0,0 +1,4 @@
+_target_: otg.variant_index.VariantIndexStep
+variant_annotation_path: ${datasets.variant_annotation}
+credible_set_path: ${datasets.study_locus}
+variant_index_path: ${datasets.variant_index}
diff --git a/docs/assets/genetics_portal_logo-1.png b/docs/assets/genetics_portal_logo-1.png
deleted file mode 100644
index 999714271..000000000
Binary files a/docs/assets/genetics_portal_logo-1.png and /dev/null differ
diff --git a/docs/assets/imgs/GWAS_Catalog_circle_178x178.png b/docs/assets/imgs/GWAS_Catalog_circle_178x178.png
new file mode 100644
index 000000000..3cfa2a747
Binary files /dev/null and b/docs/assets/imgs/GWAS_Catalog_circle_178x178.png differ
diff --git a/docs/assets/Open_Targets_Genetics_Portal_Logo_v2_font.svg b/docs/assets/imgs/Open_Targets_Genetics_Portal_Logo_v2_font.svg
similarity index 100%
rename from docs/assets/Open_Targets_Genetics_Portal_Logo_v2_font.svg
rename to docs/assets/imgs/Open_Targets_Genetics_Portal_Logo_v2_font.svg
diff --git a/docs/assets/imgs/UK_biobank_logo.png b/docs/assets/imgs/UK_biobank_logo.png
new file mode 100644
index 000000000..7faa2f97b
Binary files /dev/null and b/docs/assets/imgs/UK_biobank_logo.png differ
diff --git a/docs/assets/favicon.png b/docs/assets/imgs/favicon.png
similarity index 100%
rename from docs/assets/favicon.png
rename to docs/assets/imgs/favicon.png
diff --git a/docs/assets/imgs/finngen.svg b/docs/assets/imgs/finngen.svg
new file mode 100644
index 000000000..e5fcfb4f3
--- /dev/null
+++ b/docs/assets/imgs/finngen.svg
@@ -0,0 +1,27 @@
+
+
+ Page 1
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/assets/imgs/gnomad.svg b/docs/assets/imgs/gnomad.svg
new file mode 100644
index 000000000..b066ef269
--- /dev/null
+++ b/docs/assets/imgs/gnomad.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/docs/assets/imgs/open_targets_platform.svg b/docs/assets/imgs/open_targets_platform.svg
new file mode 100644
index 000000000..8d17ee1d8
--- /dev/null
+++ b/docs/assets/imgs/open_targets_platform.svg
@@ -0,0 +1 @@
+
diff --git a/docs/assets/otlogo.png b/docs/assets/imgs/otlogo.png
similarity index 100%
rename from docs/assets/otlogo.png
rename to docs/assets/imgs/otlogo.png
diff --git a/docs/assets/javascripts/extra.js b/docs/assets/javascripts/extra.js
index dfc99ea08..808fdb8c1 100644
--- a/docs/assets/javascripts/extra.js
+++ b/docs/assets/javascripts/extra.js
@@ -1,4 +1,4 @@
-$('.contributors img[data-src]').each(function () {
- src = $(this).attr("data-src");
- $(this).attr('src', src);
+$(".contributors img[data-src]").each(function () {
+ src = $(this).attr("data-src");
+ $(this).attr("src", src);
});
diff --git a/docs/assets/overrides/partials/source-file.html b/docs/assets/overrides/partials/source-file.html
index fdda516dc..a8d89b766 100644
--- a/docs/assets/overrides/partials/source-file.html
+++ b/docs/assets/overrides/partials/source-file.html
@@ -1,46 +1,50 @@
-
-
-
- {% if page.meta.git_creation_date_localized %}
-
-
- {% include ".icons/material/clock-plus-outline.svg" %}
-
-
- {{ page.meta.git_creation_date_localized }}
-
-
- {% endif %}
+
+
+
+ {% if page.meta.git_creation_date_localized %}
+
+
+ {% include ".icons/material/clock-plus-outline.svg" %}
+
+ {{ page.meta.git_creation_date_localized }}
+
+ {% endif %} {% if page.meta.git_revision_date_localized %}
+
+
+ {% include ".icons/material/clock-edit-outline.svg" %}
+
+ {{ page.meta.git_revision_date_localized }}
+
+ {% endif %}
- {% if page.meta.git_revision_date_localized %}
-
-
- {% include ".icons/material/clock-edit-outline.svg" %}
-
-
- {{ page.meta.git_revision_date_localized }}
-
-
- {% endif %}
-
-
-
- {% include ".icons/material/github.svg" %}
-
-
- Contributors
-
-
-
-
- {%- for user in committers -%}
-
- {%- endfor -%}
-
-
+
+
+ {% include ".icons/material/github.svg" %}
+
+ Contributors
+
+
+
+ {%- for user in committers -%}
+
+
+
+ {%- endfor -%}
-
+
+
+
diff --git a/docs/assets/stylesheets/extra.css b/docs/assets/stylesheets/extra.css
index 1073b23b9..5712dc8ea 100644
--- a/docs/assets/stylesheets/extra.css
+++ b/docs/assets/stylesheets/extra.css
@@ -1,79 +1,75 @@
.metadata {
- list-style: none;
- padding: 0;
- margin: 0;
- margin-bottom: 15px;
- color: #999;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ margin-bottom: 15px;
+ color: #999;
}
.metadata.page-metadata .contributors-text {
- margin-right: 5px;
- display: inline-block;
+ margin-right: 5px;
+ display: inline-block;
}
.metadata.page-metadata {
- display: flex !important;
- flex-direction: row;
- align-items: center;
- font-size: 1.2em;
+ display: flex !important;
+ flex-direction: row;
+ align-items: center;
+ font-size: 1.2em;
}
-
.metadata.page-metadata li {
- list-style: none;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- margin-bottom: 0 !important;
+ list-style: none;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ margin-bottom: 0 !important;
}
-
.metadata.page-metadata li .icon {
- width: 1.1rem;
- height: 1.1rem;
- margin-right: 2px;
+ width: 1.1rem;
+ height: 1.1rem;
+ margin-right: 2px;
}
-
.metadata.page-metadata li .icon svg {
- fill: #999;
+ fill: #999;
}
-
.page-metadata .contributors-holder {
- margin: 0 !important;
- margin-left: 1em;
+ margin: 0 !important;
+ margin-left: 1em;
}
.page-metadata .contributors {
- margin-right: 5px;
- display: inline-block;
- list-style: none;
- display: flex;
- flex-direction: row;
+ margin-right: 5px;
+ display: inline-block;
+ list-style: none;
+ display: flex;
+ flex-direction: row;
}
.page-metadata .contributors li {
- display: inline-flex;
- margin: 0 !important;
- padding: 0 !important;
+ display: inline-flex;
+ margin: 0 !important;
+ padding: 0 !important;
}
.page-metadata .contributors li img {
- border-radius: 50%;
- filter: grayscale(100%);
- -webkit-filter: grayscale(100%);
- opacity: 0.8;
- vertical-align: middle;
- width: 1.6rem;
- transition: all 0.2s ease-in-out;
+ border-radius: 50%;
+ filter: grayscale(100%);
+ -webkit-filter: grayscale(100%);
+ opacity: 0.8;
+ vertical-align: middle;
+ width: 1.6rem;
+ transition: all 0.2s ease-in-out;
}
.page-metadata .contributors li img:hover {
- opacity: 1;
- filter: grayscale(0%);
- -webkit-filter: grayscale(0%);
- vertical-align: middle;
- transform: scale(1.2);
+ opacity: 1;
+ filter: grayscale(0%);
+ -webkit-filter: grayscale(0%);
+ vertical-align: middle;
+ transform: scale(1.2);
}
diff --git a/docs/components/dataset/gene_index.md b/docs/components/dataset/gene_index.md
deleted file mode 100644
index 1885f2dad..000000000
--- a/docs/components/dataset/gene_index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-::: otg.dataset.gene_index.GeneIndex
-
-___
-
-## Schema
-
---8<-- "assets/schemas/targets.md"
diff --git a/docs/components/dataset/study_index.md b/docs/components/dataset/study_index.md
deleted file mode 100644
index 0318babb8..000000000
--- a/docs/components/dataset/study_index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-::: otg.dataset.study_index.StudyIndex
-
-___
-
-## Schema
-
---8<-- "assets/schemas/studies.md"
diff --git a/docs/components/datasource/finngen/_finngen.md b/docs/components/datasource/finngen/_finngen.md
deleted file mode 100644
index e3017fbec..000000000
--- a/docs/components/datasource/finngen/_finngen.md
+++ /dev/null
@@ -1 +0,0 @@
-# FinnGen
diff --git a/docs/components/datasource/gnomad/_gnomad.md b/docs/components/datasource/gnomad/_gnomad.md
deleted file mode 100644
index dbfa3a229..000000000
--- a/docs/components/datasource/gnomad/_gnomad.md
+++ /dev/null
@@ -1 +0,0 @@
-# GnomAD
diff --git a/docs/components/datasource/gwas_catalog/_gwas_catalog.md b/docs/components/datasource/gwas_catalog/_gwas_catalog.md
deleted file mode 100644
index 00a668fbb..000000000
--- a/docs/components/datasource/gwas_catalog/_gwas_catalog.md
+++ /dev/null
@@ -1 +0,0 @@
-# GWAS Catalog
diff --git a/docs/components/datasource/gwas_catalog/associations.md b/docs/components/datasource/gwas_catalog/associations.md
deleted file mode 100644
index c49f34517..000000000
--- a/docs/components/datasource/gwas_catalog/associations.md
+++ /dev/null
@@ -1 +0,0 @@
-::: otg.datasource.gwas_catalog.associations.GWASCatalogAssociations
diff --git a/docs/components/datasource/gwas_catalog/study_index.md b/docs/components/datasource/gwas_catalog/study_index.md
deleted file mode 100644
index e42faa6a7..000000000
--- a/docs/components/datasource/gwas_catalog/study_index.md
+++ /dev/null
@@ -1 +0,0 @@
-::: otg.datasource.gwas_catalog.study_index.GWASCatalogStudyIndex
diff --git a/docs/components/datasource/intervals/_intervals.md b/docs/components/datasource/intervals/_intervals.md
deleted file mode 100644
index b41dee39d..000000000
--- a/docs/components/datasource/intervals/_intervals.md
+++ /dev/null
@@ -1 +0,0 @@
-# Chromatin intervals
diff --git a/docs/components/datasource/intervals/thurnman.md b/docs/components/datasource/intervals/thurnman.md
deleted file mode 100644
index bc8cab313..000000000
--- a/docs/components/datasource/intervals/thurnman.md
+++ /dev/null
@@ -1 +0,0 @@
-::: otg.datasource.intervals.thurnman.IntervalsThurnman
diff --git a/docs/components/datasource/open_targets/_open_targets.md b/docs/components/datasource/open_targets/_open_targets.md
deleted file mode 100644
index 916b22c92..000000000
--- a/docs/components/datasource/open_targets/_open_targets.md
+++ /dev/null
@@ -1 +0,0 @@
-# Open Targets Platform
diff --git a/docs/components/datasource/ukbiobank/_ukbiobank.md b/docs/components/datasource/ukbiobank/_ukbiobank.md
deleted file mode 100644
index 16c076b4a..000000000
--- a/docs/components/datasource/ukbiobank/_ukbiobank.md
+++ /dev/null
@@ -1 +0,0 @@
-# UK Biobank
diff --git a/docs/components/datasource/ukbiobank/study_index.md b/docs/components/datasource/ukbiobank/study_index.md
deleted file mode 100644
index 0cd24cf87..000000000
--- a/docs/components/datasource/ukbiobank/study_index.md
+++ /dev/null
@@ -1 +0,0 @@
-::: otg.datasource.ukbiobank.study_index.UKBiobankStudyIndex
diff --git a/docs/components/method/_method.md b/docs/components/method/_method.md
deleted file mode 100644
index eef793d4c..000000000
--- a/docs/components/method/_method.md
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Methods used accross the Open Targets Genetics Pipeline
diff --git a/docs/components/step/colocalisation.md b/docs/components/step/colocalisation.md
deleted file mode 100644
index e78403d2b..000000000
--- a/docs/components/step/colocalisation.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Colocalisation
-
-::: otg.colocalisation.ColocalisationStep
-::: otg.config.ColocalisationStepConfig
diff --git a/docs/components/step/finngen.md b/docs/components/step/finngen.md
deleted file mode 100644
index a5391601f..000000000
--- a/docs/components/step/finngen.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# FinnGen
-
-::: otg.finngen.FinnGenStep
-::: otg.config.FinnGenStepConfig
diff --git a/docs/components/step/gene_index.md b/docs/components/step/gene_index.md
deleted file mode 100644
index 4a4c73e61..000000000
--- a/docs/components/step/gene_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Gene index
-
-::: otg.gene_index.GeneIndexStep
-::: otg.config.GeneIndexStepConfig
diff --git a/docs/components/step/gwas_catalog.md b/docs/components/step/gwas_catalog.md
deleted file mode 100644
index c9cff9f11..000000000
--- a/docs/components/step/gwas_catalog.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# GWAS Catalog
-
-::: otg.gwas_catalog.GWASCatalogStep
-::: otg.config.GWASCatalogStepConfig
diff --git a/docs/components/step/gwas_catalog_sumstat_preprocess.md b/docs/components/step/gwas_catalog_sumstat_preprocess.md
deleted file mode 100644
index 413c812ec..000000000
--- a/docs/components/step/gwas_catalog_sumstat_preprocess.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# GWAS Catalog sumstat preprocess
-
-::: otg.gwas_catalog_sumstat_preprocess.GWASCatalogSumstatsPreprocessStep
-::: otg.config.GWASCatalogSumstatsPreprocessConfig
diff --git a/docs/components/step/ld_index.md b/docs/components/step/ld_index.md
deleted file mode 100644
index c6e4106d4..000000000
--- a/docs/components/step/ld_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# LD index
-
-::: otg.ld_index.LDIndexStep
-::: otg.config.LDIndexStepConfig
diff --git a/docs/components/step/ukbiobank.md b/docs/components/step/ukbiobank.md
deleted file mode 100644
index 4ffddf342..000000000
--- a/docs/components/step/ukbiobank.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# UKBiobank
-
-::: otg.ukbiobank.UKBiobankStep
-::: otg.config.UKBiobankStepConfig
diff --git a/docs/components/step/variant_annotation_step.md b/docs/components/step/variant_annotation_step.md
deleted file mode 100644
index 0a5aacc1e..000000000
--- a/docs/components/step/variant_annotation_step.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Variant annotation
-
-::: otg.variant_annotation.VariantAnnotationStep
-::: otg.config.VariantAnnotationStepConfig
diff --git a/docs/components/step/variant_index_step.md b/docs/components/step/variant_index_step.md
deleted file mode 100644
index be34cc431..000000000
--- a/docs/components/step/variant_index_step.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Variant index
-
-::: otg.variant_index.VariantIndexStep
-::: otg.config.VariantIndexStepConfig
diff --git a/docs/components/step/variant_to_gene_step.md b/docs/components/step/variant_to_gene_step.md
deleted file mode 100644
index 59724f9c4..000000000
--- a/docs/components/step/variant_to_gene_step.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# V2G
-
-::: otg.v2g.V2GStep
-::: otg.config.V2GStepConfig
diff --git a/docs/contributing.md b/docs/contributing.md
deleted file mode 100644
index 52c06078b..000000000
--- a/docs/contributing.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# Environment configuration and contributing changes
-
-## One-time configuration
-The steps in this section only ever need to be done once on any particular system.
-
-Google Cloud configuration:
-1. Install Google Cloud SDK: https://cloud.google.com/sdk/docs/install.
-1. Log in to your work Google Account: run `gcloud auth login` and follow instructions.
-1. Obtain Google application credentials: run `gcloud auth application-default login` and follow instructions.
-
-Check that you have the `make` utility installed, and if not (which is unlikely), install it using your system package manager.
-
-Check that you have `java` installed.
-
-## Environment configuration
-Run `make setup-dev` to install/update the necessary packages and activate the development environment. You need to do this every time you open a new shell.
-
-It is recommended to use VS Code as an IDE for development.
-
-## How to run the code
-All pipelines in this repository are intended to be run in Google Dataproc. Running them locally is not currently supported.
-
-In order to run the code:
-
-1. Manually edit your local `workflow/dag.yaml` file and comment out the steps you do not want to run.
-
-2. Manually edit your local `pyproject.toml` file and modify the version of the code.
- - This must be different from the version used by any other people working on the repository to avoid any deployment conflicts, so it's a good idea to use your name, for example: `1.2.3+jdoe`.
- - You can also add a brief branch description, for example: `1.2.3+jdoe.myfeature`.
- - Note that the version must comply with [PEP440 conventions](https://peps.python.org/pep-0440/#normalization), otherwise Poetry will not allow it to be deployed.
- - Do not use underscores or hyphens in your version name. When building the WHL file, they will be automatically converted to dots, which means the file name will no longer match the version and the build will fail. Use dots instead.
-
-3. Run `make build`.
- - This will create a bundle containing the neccessary code, configuration and dependencies to run the ETL pipeline, and then upload this bundle to Google Cloud.
- - A version specific subpath is used, so uploading the code will not affect any branches but your own.
- - If there was already a code bundle uploaded with the same version number, it will be replaced.
-
-4. Submit the Dataproc job with `poetry run python workflow/workflow_template.py`
- - You will need to specify additional parameters, some are mandatory and some are optional. Run with `--help` to see usage.
- - The script will provision the cluster and submit the job.
- - The cluster will take a few minutes to get provisioned and running, during which the script will not output anything, this is normal.
- - Once submitted, you can monitor the progress of your job on this page: https://console.cloud.google.com/dataproc/jobs?project=open-targets-genetics-dev.
- - On completion (whether successful or a failure), the cluster will be automatically removed, so you don't have to worry about shutting it down to avoid incurring charges.
-
-## Contributing checklist
-When making changes, and especially when implementing a new module or feature, it's essential to ensure that all relevant sections of the code base are modified.
-- [ ] Run `make check`. This will run the linter and formatter to ensure that the code is compliant with the project conventions.
-- [ ] Develop unit tests for your code and run `make test`. This will run all unit tests in the repository, including the examples appended in the docstrings of some methods.
-- [ ] Update the configuration if necessary.
-- [ ] Update the documentation and check it with `run build-documentation`. This will start a local server to browse it (URL will be printed, usually `http://127.0.0.1:8000/`)
-
-For more details on each of these steps, see the sections below.
-### Documentation
-* If during development you had a question which wasn't covered in the documentation, and someone explained it to you, add it to the documentation. The same applies if you encountered any instructions in the documentation which were obsolete or incorrect.
-* Documentation autogeneration expressions start with `:::`. They will automatically generate sections of the documentation based on class and method docstrings. Be sure to update them for:
- + Dataset definitions in `docs/reference/dataset` (example: `docs/reference/dataset/study_index/study_index_finngen.md`)
- + Step definitions in `docs/reference/step` (example: `docs/reference/step/finngen.md`)
-
-### Configuration
-* Input and output paths in `config/datasets/gcp.yaml`
-* Step configuration in `config/step/my_STEP.yaml` (example: `config/step/my_finngen.yaml`)
-
-### Classes
-* Step configuration class in `src/org/config.py` (example: `FinnGenStepConfig` class in that module)
-* Dataset class in `src/org/dataset/` (example: `src/otg/dataset/study_index.py` → `StudyIndexFinnGen`)
-* Step main running class in `src/org/STEP.py` (example: `src/org/finngen.py`)
-
-### Tests
-* Test study fixture in `tests/conftest.py` (example: `mock_study_index_finngen` in that module)
-* Test sample data in `tests/data_samples` (example: `tests/data_samples/finngen_studies_sample.json`)
-* Test definition in `tests/` (example: `tests/dataset/test_study_index.py` → `test_study_index_finngen_creation`)
diff --git a/docs/development/_development.md b/docs/development/_development.md
new file mode 100644
index 000000000..be1e3426c
--- /dev/null
+++ b/docs/development/_development.md
@@ -0,0 +1 @@
+This section contains various technical information on how to develop and run the code.
diff --git a/docs/development/airflow.md b/docs/development/airflow.md
new file mode 100644
index 000000000..9768bf961
--- /dev/null
+++ b/docs/development/airflow.md
@@ -0,0 +1,120 @@
+# Airflow configuration
+
+This section describes how to set up a local Airflow server which will orchestrate running workflows in Google Cloud Platform. This is useful for testing and debugging, but for production use, it is recommended to run Airflow on a dedicated server.
+
+## Install pre-requisites
+
+- [Docker](https://docs.docker.com/get-docker/)
+- [Google Cloud SDK](https://cloud.google.com/sdk/docs/install)
+
+!!!warning macOS Docker memory allocation
+On macOS, the default amount of memory available for Docker might not be enough to get Airflow up and running. Allocate at least 4GB of memory for the Docker Engine (ideally 8GB). [More info](https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html#)
+
+## Configure Airflow access to Google Cloud Platform
+
+!!!warning Specifying Google Cloud parameters
+Run the next two command with the appropriate Google Cloud project ID and service account name to ensure the correct Google default application credentials are set up.
+
+Authenticate to Google Cloud:
+
+```bash
+gcloud auth application-default login --project=
+```
+
+Create the service account key file that will be used by Airflow to access Google Cloud Platform resources:
+
+```bash
+gcloud iam service-accounts keys create ~/.config/gcloud/service_account_credentials.json --iam-account=@appspot.gserviceaccount.com
+```
+
+## Set up Airflow
+
+Change the working directory so that all subsequent commands will work:
+
+```bash
+cd src/airflow
+```
+
+### Build Docker image
+
+!!!note Custom Docker image for Airflow
+The custom Dockerfile built by the command below extends the official [Airflow Docker Compose YAML](https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml). We add support for Google Cloud SDK, Google Dataproc operators, and access to GCP credentials.
+
+```bash
+docker build . --tag extending_airflow:latest
+```
+
+### Set Airflow user ID
+
+!!!note Setting Airflow user ID
+These commands allow Airflow running inside Docker to access the credentials file which was generated earlier.
+
+```bash
+# If any user ID is already specified in .env, remove it.
+grep -v "AIRFLOW_UID" .env > .env.tmp
+# Add the correct user ID.
+echo "AIRFLOW_UID=$(id -u)" >> .env.tmp
+# Move the file.
+mv .env.tmp .env
+```
+
+### Initialise
+
+Before starting Airflow, initialise the database:
+
+```bash
+docker compose up airflow-init
+```
+
+Now start all services:
+
+```bash
+docker compose up -d
+```
+
+Airflow UI will now be available at `http://localhost:8080/`. Default username and password are both `airflow`.
+
+For additional information on how to use Airflow visit the [official documentation](https://airflow.apache.org/docs/apache-airflow/stable/index.html).
+
+### Cleaning up
+
+At any time, you can check the status of your containers with:
+
+```bash
+docker ps
+```
+
+To stop Airflow, run:
+
+```bash
+docker compose down
+```
+
+To cleanup the Airflow database, run:
+
+```bash
+docker compose down --volumes --remove-orphans
+```
+
+### Advanced configuration
+
+More information on running Airflow with Docker Compose can be found in the [official docs](https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html).
+
+1. **Increase Airflow concurrency**. Modify the `docker-compose.yaml` and add the following to the x-airflow-common → environment section:
+
+ ```yaml
+ AIRFLOW__CORE__PARALLELISM: 32
+ AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG: 32
+ AIRFLOW__SCHEDULER__MAX_TIS_PER_QUERY: 16
+ AIRFLOW__CORE__MAX_ACTIVE_RUNS_PER_DAG: 1
+ # Also add the following line if you are using CeleryExecutor (by default, LocalExecutor is used).
+ AIRFLOW__CELERY__WORKER_CONCURRENCY: 32
+ ```
+
+1. **Additional pip packages**. They can be added to the `requirements.txt` file.
+
+## Troubleshooting
+
+Note that when you a a new workflow under `dags/`, Airflow will not pick that up immediately. By default the filesystem is only scanned for new DAGs every 300s. However, once the DAG is added, updates are applied nearly instantaneously.
+
+Also, if you edit the DAG while an instance of it is running, it might cause problems with the run, as Airflow will try to update the tasks and their properties in DAG according to the file changes.
diff --git a/docs/development/contributing.md b/docs/development/contributing.md
new file mode 100644
index 000000000..a2eaa6aae
--- /dev/null
+++ b/docs/development/contributing.md
@@ -0,0 +1,86 @@
+---
+title: Contributing guidelines
+---
+
+# Contributing guidelines
+
+## One-time configuration
+
+The steps in this section only ever need to be done once on any particular system.
+
+Google Cloud configuration:
+
+1. Install Google Cloud SDK: https://cloud.google.com/sdk/docs/install.
+
+1. Log in to your work Google Account: run `gcloud auth login` and follow instructions.
+
+1. Obtain Google application credentials: run `gcloud auth application-default login` and follow instructions.
+
+Check that you have the `make` utility installed, and if not (which is unlikely), install it using your system package manager.
+
+Check that you have `java` installed.
+
+## Environment configuration
+
+Run `make setup-dev` to install/update the necessary packages and activate the development environment. You need to do this every time you open a new shell.
+
+It is recommended to use VS Code as an IDE for development.
+
+## How to run the code
+
+All pipelines in this repository are intended to be run in Google Dataproc. Running them locally is not currently supported.
+
+In order to run the code:
+
+1. Manually edit your local `src/airflow/dags/*` file and comment out the steps you do not want to run.
+
+2. Manually edit your local `pyproject.toml` file and modify the version of the code.
+
+ - This must be different from the version used by any other people working on the repository to avoid any deployment conflicts, so it's a good idea to use your name, for example: `1.2.3+jdoe`.
+ - You can also add a brief branch description, for example: `1.2.3+jdoe.myfeature`.
+ - Note that the version must comply with [PEP440 conventions](https://peps.python.org/pep-0440/#normalization), otherwise Poetry will not allow it to be deployed.
+ - Do not use underscores or hyphens in your version name. When building the WHL file, they will be automatically converted to dots, which means the file name will no longer match the version and the build will fail. Use dots instead.
+
+3. Manually edit your local `src/airflow/dags/common_airflow.py` and set `OTG_VERSION` to the same version as you did in the previous step.
+
+4. Run `make build`.
+
+ - This will create a bundle containing the neccessary code, configuration and dependencies to run the ETL pipeline, and then upload this bundle to Google Cloud.
+ - A version specific subpath is used, so uploading the code will not affect any branches but your own.
+ - If there was already a code bundle uploaded with the same version number, it will be replaced.
+
+5. Open Airflow UI and run the DAG.
+
+## Contributing checklist
+
+When making changes, and especially when implementing a new module or feature, it's essential to ensure that all relevant sections of the code base are modified.
+
+- [ ] Run `make check`. This will run the linter and formatter to ensure that the code is compliant with the project conventions.
+- [ ] Develop unit tests for your code and run `make test`. This will run all unit tests in the repository, including the examples appended in the docstrings of some methods.
+- [ ] Update the configuration if necessary.
+- [ ] Update the documentation and check it with `make build-documentation`. This will start a local server to browse it (URL will be printed, usually `http://127.0.0.1:8000/`)
+
+For more details on each of these steps, see the sections below.
+
+### Documentation
+
+- If during development you had a question which wasn't covered in the documentation, and someone explained it to you, add it to the documentation. The same applies if you encountered any instructions in the documentation which were obsolete or incorrect.
+- Documentation autogeneration expressions start with `:::`. They will automatically generate sections of the documentation based on class and method docstrings. Be sure to update them for:
+ - Dataset definitions in `docs/python_api/datasource/STEP` (example: `docs/python_api/datasource/finngen/study_index.md`)
+ - Step definition in `docs/python_api/step/STEP.md` (example: `docs/python_api/step/finngen.md`)
+
+### Configuration
+
+- Input and output paths in `config/datasets/gcp.yaml`
+- Step configuration in `config/step/STEP.yaml` (example: `config/step/finngen.yaml`)
+
+### Classes
+
+- Dataset class in `src/otg/datasource/STEP` (example: `src/otg/datasource/finngen/study_index.py` → `FinnGenStudyIndex`)
+- Step main running class in `src/otg/STEP.py` (example: `src/otg/finngen.py`)
+
+### Tests
+
+- Test study fixture in `tests/conftest.py` (example: `mock_study_index_finngen` in that module)
+- Test sample data in `tests/data_samples` (example: `tests/data_samples/finngen_studies_sample.json`)
+- Test definition in `tests/` (example: `tests/dataset/test_study_index.py` → `test_study_index_finngen_creation`)
diff --git a/docs/troubleshooting.md b/docs/development/troubleshooting.md
similarity index 98%
rename from docs/troubleshooting.md
rename to docs/development/troubleshooting.md
index 9d1156765..b9f7385da 100644
--- a/docs/troubleshooting.md
+++ b/docs/development/troubleshooting.md
@@ -1,3 +1,7 @@
+---
+title: Troubleshooting
+---
+
# Troubleshooting
## BLAS/LAPACK
diff --git a/docs/development/workflows.md b/docs/development/workflows.md
new file mode 100644
index 000000000..2269041d8
--- /dev/null
+++ b/docs/development/workflows.md
@@ -0,0 +1,27 @@
+# Pipeline workflows
+
+This page describes the high level components of the pipeline, which are organised as Airflow DAGs (directed acyclic graphs).
+
+## Note on DAGs and Dataproc clusters
+
+Each DAG consists of the following general stages:
+
+1. Create cluster (if it already exists, this step is skipped)
+
+1. Install dependencies on the cluster
+
+1. Run data processing steps for this DAG
+
+1. Delete the cluster
+
+Within a DAG, all data processing steps run on the same Dataproc cluster as separate jobs.
+
+There is no need to configure DAGs or steps depending on the size of the input data. Clusters have autoscaling enabled, which means they will increase or decrease the number of worker VMs to accommodate the load.
+
+## DAG 1: Preprocess
+
+This DAG contains steps which are only supposed to be run once, or very rarely. They ingest external data and apply bespoke transformations specific for each particular data source. The output is normalised according to the data schemas used by the pipeline.
+
+## DAG 2: ETL
+
+The ETL DAG takes the inputs of the previous step and performs the main algorithmic processing. This processing is supposed to be data source agnostic.
diff --git a/docs/index.md b/docs/index.md
index 697cde46e..006477ec3 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,6 +1,12 @@
+---
+title: Open Targets Genetics
+hide:
+ - navigation
+ - toc
+---
-
+
+
+[FinnGen](https://www.finngen.fi/en) is a research project in genomics and personalized medicine, representing a large public-private partnership. The project has collected and analyzed genome and health data from 500,000 Finnish biobank donors to understand the genetic basis of diseases. FinnGen is now expanding its focus to comprehend the progression and biological mechanisms of diseases. This initiative provides a world-class resource for further breakthroughs in disease prevention, diagnosis, and treatment, offering insights into our genetic makeup.
+
+For a comprehensive understanding of the dataset and methods, refer to [Kurki et al., 2023](https://www.nature.com/articles/s41586-022-05473-8).
diff --git a/docs/components/datasource/finngen/study_index.md b/docs/python_api/datasource/finngen/study_index.md
similarity index 67%
rename from docs/components/datasource/finngen/study_index.md
rename to docs/python_api/datasource/finngen/study_index.md
index 165148be3..cd298e07c 100644
--- a/docs/components/datasource/finngen/study_index.md
+++ b/docs/python_api/datasource/finngen/study_index.md
@@ -1 +1,5 @@
+---
+title: Study Index
+---
+
::: otg.datasource.finngen.study_index.FinnGenStudyIndex
diff --git a/docs/python_api/datasource/gnomad/_gnomad.md b/docs/python_api/datasource/gnomad/_gnomad.md
new file mode 100644
index 000000000..aee2de8ad
--- /dev/null
+++ b/docs/python_api/datasource/gnomad/_gnomad.md
@@ -0,0 +1,19 @@
+---
+title: GnomAD
+---
+
+
+
+
+
+
+[GnomAD](https://gnomad.broadinstitute.org/) (Genome Aggregation Database) is a comprehensive resource that provides aggregated genomic data from large-scale sequencing projects. It encompasses variants from diverse populations and is widely used for variant annotation and population genetics studies.
+
+We use **GnomAD v4.0** as a source for variant annotation, offering detailed information about the prevalence and distribution of genetic variants across different populations. This version of GnomAD provides valuable insights into the genomic landscape, aiding in the interpretation of genetic variants and their potential functional implications.
+
+Additionally, [**GnomAD v2.1.1**](https://gnomad.broadinstitute.org/news/2018-10-gnomad-v2-1/) is utilized as a source for linkage disequilibrium (LD) information.
diff --git a/docs/components/datasource/gnomad/gnomad_ld.md b/docs/python_api/datasource/gnomad/gnomad_ld.md
similarity index 62%
rename from docs/components/datasource/gnomad/gnomad_ld.md
rename to docs/python_api/datasource/gnomad/gnomad_ld.md
index 18304b5c8..a6a6a8050 100644
--- a/docs/components/datasource/gnomad/gnomad_ld.md
+++ b/docs/python_api/datasource/gnomad/gnomad_ld.md
@@ -1 +1,5 @@
+---
+title: LD Matrix
+---
+
::: otg.datasource.gnomad.ld.GnomADLDMatrix
diff --git a/docs/components/datasource/gnomad/gnomad_variants.md b/docs/python_api/datasource/gnomad/gnomad_variants.md
similarity index 66%
rename from docs/components/datasource/gnomad/gnomad_variants.md
rename to docs/python_api/datasource/gnomad/gnomad_variants.md
index a1ba603b4..ae1bbd6dc 100644
--- a/docs/components/datasource/gnomad/gnomad_variants.md
+++ b/docs/python_api/datasource/gnomad/gnomad_variants.md
@@ -1 +1,5 @@
+---
+title: Variants
+---
+
::: otg.datasource.gnomad.variants.GnomADVariants
diff --git a/docs/python_api/datasource/gwas_catalog/_gwas_catalog.md b/docs/python_api/datasource/gwas_catalog/_gwas_catalog.md
new file mode 100644
index 000000000..4f05a4047
--- /dev/null
+++ b/docs/python_api/datasource/gwas_catalog/_gwas_catalog.md
@@ -0,0 +1,22 @@
+---
+title: GWAS Catalog
+---
+
+
+
+
GWAS Catalog
+
+
+The [GWAS Catalog](https://www.ebi.ac.uk/gwas/) is a comprehensive resource that aims to provide a curated collection of Genome-Wide Association Studies (GWAS) (including harmonized full GWAS summary statistics) across various traits and diseases in humans.
+
+It serves as a valuable repository of genetic associations identified in diverse populations, offering insights into the genetic basis of complex traits and diseases.
+
+We rely on the GWAS Catalog for a rich source of genetic associations, utilizing the data for analysis and interpretation.
+
+For detailed information on specific genetic associations, their significance, and associated studies, refer to the [GWAS Catalog](https://www.ebi.ac.uk/gwas/).
+
+Within our analyses, we leverage two different types of studies from the GWAS Catalog:
+
+1. **Studies with (full) GWAS summary stats**
+
+2. **Studies with top hits only - GWAS curated studies**
diff --git a/docs/python_api/datasource/gwas_catalog/associations.md b/docs/python_api/datasource/gwas_catalog/associations.md
new file mode 100644
index 000000000..3439e0779
--- /dev/null
+++ b/docs/python_api/datasource/gwas_catalog/associations.md
@@ -0,0 +1,9 @@
+---
+title: Associations
+---
+
+::: otg.datasource.gwas_catalog.associations.GWASCatalogCuratedAssociationsParser
+
+---
+
+::: otg.datasource.gwas_catalog.associations.StudyLocusGWASCatalog
diff --git a/docs/python_api/datasource/gwas_catalog/study_index.md b/docs/python_api/datasource/gwas_catalog/study_index.md
new file mode 100644
index 000000000..b9ae0463c
--- /dev/null
+++ b/docs/python_api/datasource/gwas_catalog/study_index.md
@@ -0,0 +1,9 @@
+---
+title: Study Index
+---
+
+::: otg.datasource.gwas_catalog.study_index.StudyIndexGWASCatalogParser
+
+---
+
+::: otg.datasource.gwas_catalog.study_index.StudyIndexGWASCatalog
diff --git a/docs/components/datasource/gwas_catalog/study_splitter.md b/docs/python_api/datasource/gwas_catalog/study_splitter.md
similarity index 69%
rename from docs/components/datasource/gwas_catalog/study_splitter.md
rename to docs/python_api/datasource/gwas_catalog/study_splitter.md
index ba8241851..4ad7e5627 100644
--- a/docs/components/datasource/gwas_catalog/study_splitter.md
+++ b/docs/python_api/datasource/gwas_catalog/study_splitter.md
@@ -1 +1,5 @@
+---
+title: Study Splitter
+---
+
::: otg.datasource.gwas_catalog.study_splitter.GWASCatalogStudySplitter
diff --git a/docs/components/datasource/gwas_catalog/summary_statistics.md b/docs/python_api/datasource/gwas_catalog/summary_statistics.md
similarity index 69%
rename from docs/components/datasource/gwas_catalog/summary_statistics.md
rename to docs/python_api/datasource/gwas_catalog/summary_statistics.md
index 3da1bd129..45294256a 100644
--- a/docs/components/datasource/gwas_catalog/summary_statistics.md
+++ b/docs/python_api/datasource/gwas_catalog/summary_statistics.md
@@ -1 +1,5 @@
+---
+title: Summary statistics
+---
+
:::otg.datasource.gwas_catalog.summary_statistics.GWASCatalogSummaryStatistics
diff --git a/docs/python_api/datasource/intervals/_intervals.md b/docs/python_api/datasource/intervals/_intervals.md
new file mode 100644
index 000000000..f5e91028b
--- /dev/null
+++ b/docs/python_api/datasource/intervals/_intervals.md
@@ -0,0 +1,25 @@
+---
+title: Interaction and Interval-based Studies
+---
+
+# List of Interaction and Interval-based Studies
+
+In this section, we provide a list of studies that focus on interaction and interval-based investigations, shedding light on the intricate relationships between genetic elements and their functional implications.
+
+1. **Promoter Capture Hi-C (Javierre et al., 2016):**
+ _Title:_ "Lineage-Specific Genome Architecture Links Enhancers and Non-coding Disease Variants to Target Gene Promoters".
+ This study presents evidence linking genetic variation to genes through the application of Promoter Capture Hi-C across each of the 17 human primary hematopoietic cell types. The method captures interactions between promoters and distal regulatory elements, providing valuable insights into the three-dimensional chromatin architecture. DOI: 10.1016/j.cell.2016.09.037
+
+2. **Enhancer-TSS Correlation (Andersson et al., 2014):**
+ _Title:_ "An Atlas of Active Enhancers across Human Cell Types and Tissues".
+ This study explores genetic variation's impact on genes by examining the correlation between the transcriptional activity of enhancers and transcription start sites. The findings are documented in the FANTOM5 CAGE expression atlas, offering a comprehensive view of the regulatory landscape. DOI: 10.1038/nature12787
+
+3. **DHS-Promoter Correlation (Thurman et al., 2012):**
+ _Title:_ "The accessible chromatin landscape of the human genome".
+ Investigating genetic variation's connection to genes, this study employs the correlation of DNase I hypersensitive sites (DHS) and gene promoters. The analysis spans 125 cell and tissue types from the ENCODE project, providing a broad understanding of the regulatory interactions across diverse biological contexts. DOI: 10.1038/nature11232
+
+4. **Promoter Capture Hi-C (Jung et al., 2019):**
+ _Title:_ "A compendium of promoter-centered long-range chromatin interactions in the human genome".
+ This study compiles a compendium of promoter-centered long-range chromatin interactions in the human genome. By focusing on the three-dimensional organization of chromatin, the research contributes to our understanding of the spatial arrangement of genetic elements and their implications in gene regulation. DOI: 10.1038/s41588-019-0494-8
+
+For in-depth details on each study, you may refer to the respective publications.
diff --git a/docs/components/datasource/intervals/andersson.md b/docs/python_api/datasource/intervals/andersson.md
similarity index 63%
rename from docs/components/datasource/intervals/andersson.md
rename to docs/python_api/datasource/intervals/andersson.md
index bc0637335..f9037613e 100644
--- a/docs/components/datasource/intervals/andersson.md
+++ b/docs/python_api/datasource/intervals/andersson.md
@@ -1 +1,5 @@
+---
+title: Andersson et al.
+---
+
::: otg.datasource.intervals.andersson.IntervalsAndersson
diff --git a/docs/components/datasource/intervals/javierre.md b/docs/python_api/datasource/intervals/javierre.md
similarity index 63%
rename from docs/components/datasource/intervals/javierre.md
rename to docs/python_api/datasource/intervals/javierre.md
index 8a9f0e650..3349465c8 100644
--- a/docs/components/datasource/intervals/javierre.md
+++ b/docs/python_api/datasource/intervals/javierre.md
@@ -1 +1,5 @@
+---
+title: Javierre et al.
+---
+
::: otg.datasource.intervals.javierre.IntervalsJavierre
diff --git a/docs/components/datasource/intervals/jung.md b/docs/python_api/datasource/intervals/jung.md
similarity index 63%
rename from docs/components/datasource/intervals/jung.md
rename to docs/python_api/datasource/intervals/jung.md
index 78eb8e1ba..7cb5adc8d 100644
--- a/docs/components/datasource/intervals/jung.md
+++ b/docs/python_api/datasource/intervals/jung.md
@@ -1 +1,5 @@
+---
+title: Jung et al.
+---
+
::: otg.datasource.intervals.jung.IntervalsJung
diff --git a/docs/python_api/datasource/intervals/thurman.md b/docs/python_api/datasource/intervals/thurman.md
new file mode 100644
index 000000000..ff13e8ea3
--- /dev/null
+++ b/docs/python_api/datasource/intervals/thurman.md
@@ -0,0 +1,5 @@
+---
+title: Thurman et al.
+---
+
+::: otg.datasource.intervals.thurman.IntervalsThurman
diff --git a/docs/python_api/datasource/open_targets/_open_targets.md b/docs/python_api/datasource/open_targets/_open_targets.md
new file mode 100644
index 000000000..4138f6597
--- /dev/null
+++ b/docs/python_api/datasource/open_targets/_open_targets.md
@@ -0,0 +1,23 @@
+---
+title: Open Targets
+---
+
+
+
+
+
+
+The Open Targets Platform is a comprehensive resource that aims to aggregate and harmonize various types of data to facilitate the identification, prioritization, and validation of drug targets. By integrating publicly available datasets, including data generated by the Open Targets consortium, the Platform builds and scores target-disease associations to assist in drug target identification and prioritization. It also integrates relevant annotation information about targets, diseases, phenotypes, and drugs, as well as their most relevant relationships.
+
+Within our analyses, we utilize Open Targets to infer two datasets:
+
+1. **The list of targets:**
+ This dataset provides a compilation of targets. In the Open Targets Platform, a target is understood as any naturally-occurring molecule that can be targeted by a medicinal product. The EMBL-EBI Ensembl database serves as the source for human targets in the Platform, with the Ensembl gene ID as the primary identifier. For more details, refer to [this link](https://platform-docs.opentargets.org/target).
+
+2. **The list of Gold Standard Positives:**
+ We use this dataset for training the Locus-to-Gene model. The current list contains 496 Gold Standard Positives.
diff --git a/docs/python_api/datasource/open_targets/l2g_gold_standard.md b/docs/python_api/datasource/open_targets/l2g_gold_standard.md
new file mode 100644
index 000000000..406b0f51c
--- /dev/null
+++ b/docs/python_api/datasource/open_targets/l2g_gold_standard.md
@@ -0,0 +1,5 @@
+---
+title: L2G Gold Standard
+---
+
+::: otg.datasource.open_targets.l2g_gold_standard.OpenTargetsL2GGoldStandard
diff --git a/docs/components/datasource/open_targets/target.md b/docs/python_api/datasource/open_targets/target.md
similarity index 71%
rename from docs/components/datasource/open_targets/target.md
rename to docs/python_api/datasource/open_targets/target.md
index b6dcc93a6..969618381 100644
--- a/docs/components/datasource/open_targets/target.md
+++ b/docs/python_api/datasource/open_targets/target.md
@@ -1 +1,5 @@
+---
+title: Target
+---
+
::: otg.datasource.open_targets.target.OpenTargetsTarget
diff --git a/docs/python_api/method/_method.md b/docs/python_api/method/_method.md
new file mode 100644
index 000000000..94a1008c9
--- /dev/null
+++ b/docs/python_api/method/_method.md
@@ -0,0 +1,7 @@
+---
+title: Method
+---
+
+# Method
+
+TBC
diff --git a/docs/components/method/clumping.md b/docs/python_api/method/clumping.md
similarity index 92%
rename from docs/components/method/clumping.md
rename to docs/python_api/method/clumping.md
index 18895c502..2975b010e 100644
--- a/docs/components/method/clumping.md
+++ b/docs/python_api/method/clumping.md
@@ -1,8 +1,11 @@
+---
+title: Clumping
+---
+
# Clumping
Clumping is a commonly used post-processing method that allows for identification of independent association signals from GWAS summary statistics and curated associations. This process is critical because of the complex linkage disequilibrium (LD) structure in human populations, which can result in multiple statistically significant associations within the same genomic region. Clumping methods help reduce redundancy in GWAS results and ensure that each reported association represents an independent signal.
We have implemented 2 clumping methods:
-## Clumping based on Linkage Disequilibrium (LD)
::: otg.method.clump.LDclumping
diff --git a/docs/components/method/coloc.md b/docs/python_api/method/coloc.md
similarity index 63%
rename from docs/components/method/coloc.md
rename to docs/python_api/method/coloc.md
index 4629c092b..56e9e0b7c 100644
--- a/docs/components/method/coloc.md
+++ b/docs/python_api/method/coloc.md
@@ -1,3 +1,5 @@
-# coloc
+---
+title: Coloc
+---
::: otg.method.colocalisation.Coloc
diff --git a/docs/components/method/ecaviar.md b/docs/python_api/method/ecaviar.md
similarity index 62%
rename from docs/components/method/ecaviar.md
rename to docs/python_api/method/ecaviar.md
index 3b6482dd1..de10b0d91 100644
--- a/docs/components/method/ecaviar.md
+++ b/docs/python_api/method/ecaviar.md
@@ -1,3 +1,5 @@
-# eCAVIAR
+---
+title: eCAVIAR
+---
:::otg.method.colocalisation.ECaviar
diff --git a/docs/python_api/method/l2g/_l2g.md b/docs/python_api/method/l2g/_l2g.md
new file mode 100644
index 000000000..d62ab9588
--- /dev/null
+++ b/docs/python_api/method/l2g/_l2g.md
@@ -0,0 +1,5 @@
+---
+title: Locus to Gene (L2G) classifier
+---
+
+TBC
diff --git a/docs/python_api/method/l2g/evaluator.md b/docs/python_api/method/l2g/evaluator.md
new file mode 100644
index 000000000..dfa4d128c
--- /dev/null
+++ b/docs/python_api/method/l2g/evaluator.md
@@ -0,0 +1,5 @@
+---
+title: W&B evaluator
+---
+
+::: otg.method.l2g.evaluator.WandbEvaluator
diff --git a/docs/python_api/method/l2g/feature_factory.md b/docs/python_api/method/l2g/feature_factory.md
new file mode 100644
index 000000000..d0cf7014a
--- /dev/null
+++ b/docs/python_api/method/l2g/feature_factory.md
@@ -0,0 +1,7 @@
+---
+title: L2G Feature Factory
+---
+
+::: otg.method.l2g.feature_factory.ColocalisationFactory
+
+::: otg.method.l2g.feature_factory.StudyLocusFactory
diff --git a/docs/python_api/method/l2g/model.md b/docs/python_api/method/l2g/model.md
new file mode 100644
index 000000000..7f4ef1023
--- /dev/null
+++ b/docs/python_api/method/l2g/model.md
@@ -0,0 +1,5 @@
+---
+title: L2G Model
+---
+
+::: otg.method.l2g.model.LocusToGeneModel
diff --git a/docs/python_api/method/l2g/trainer.md b/docs/python_api/method/l2g/trainer.md
new file mode 100644
index 000000000..8901e3e5f
--- /dev/null
+++ b/docs/python_api/method/l2g/trainer.md
@@ -0,0 +1,5 @@
+---
+title: L2G Trainer
+---
+
+::: otg.method.l2g.trainer.LocusToGeneTrainer
diff --git a/docs/components/method/ld_annotator.md b/docs/python_api/method/ld_annotator.md
similarity index 52%
rename from docs/components/method/ld_annotator.md
rename to docs/python_api/method/ld_annotator.md
index 831516a75..69ccd4463 100644
--- a/docs/components/method/ld_annotator.md
+++ b/docs/python_api/method/ld_annotator.md
@@ -1,3 +1,5 @@
-# LD annotator
+---
+title: LDAnnotator
+---
:::otg.method.ld.LDAnnotator
diff --git a/docs/components/method/pics.md b/docs/python_api/method/pics.md
similarity index 55%
rename from docs/components/method/pics.md
rename to docs/python_api/method/pics.md
index 4e8051ad2..462c430be 100644
--- a/docs/components/method/pics.md
+++ b/docs/python_api/method/pics.md
@@ -1,3 +1,5 @@
-# PICS
+---
+title: PICS
+---
:::otg.method.pics.PICS
diff --git a/docs/components/method/window_based_clumping.md b/docs/python_api/method/window_based_clumping.md
similarity index 60%
rename from docs/components/method/window_based_clumping.md
rename to docs/python_api/method/window_based_clumping.md
index 6c4329f8c..43c1e888d 100644
--- a/docs/components/method/window_based_clumping.md
+++ b/docs/python_api/method/window_based_clumping.md
@@ -1,3 +1,5 @@
-# Window-based clumping
+---
+title: Window-based clumping
+---
:::otg.method.window_based_clumping.WindowBasedClumping
diff --git a/docs/python_api/step/_step.md b/docs/python_api/step/_step.md
new file mode 100644
index 000000000..987f31b91
--- /dev/null
+++ b/docs/python_api/step/_step.md
@@ -0,0 +1,7 @@
+---
+title: Step
+---
+
+# Step
+
+TBC
diff --git a/docs/python_api/step/clump.md b/docs/python_api/step/clump.md
new file mode 100644
index 000000000..aae56ad9e
--- /dev/null
+++ b/docs/python_api/step/clump.md
@@ -0,0 +1,5 @@
+---
+title: Clump
+---
+
+::: otg.clump.ClumpStep
diff --git a/docs/python_api/step/colocalisation.md b/docs/python_api/step/colocalisation.md
new file mode 100644
index 000000000..7a7012bb5
--- /dev/null
+++ b/docs/python_api/step/colocalisation.md
@@ -0,0 +1,5 @@
+---
+title: Colocalisation
+---
+
+::: otg.colocalisation.ColocalisationStep
diff --git a/docs/python_api/step/eqtl_catalogue.md b/docs/python_api/step/eqtl_catalogue.md
new file mode 100644
index 000000000..e152c8ac8
--- /dev/null
+++ b/docs/python_api/step/eqtl_catalogue.md
@@ -0,0 +1,5 @@
+---
+title: eQTL Catalogue
+---
+
+::: otg.eqtl_catalogue.EqtlCatalogueStep
diff --git a/docs/python_api/step/finngen_studies.md b/docs/python_api/step/finngen_studies.md
new file mode 100644
index 000000000..cfd7342e9
--- /dev/null
+++ b/docs/python_api/step/finngen_studies.md
@@ -0,0 +1,5 @@
+---
+title: FinnGen Studies
+---
+
+::: otg.finngen_studies.FinnGenStudiesStep
diff --git a/docs/python_api/step/finngen_sumstat_preprocess.md b/docs/python_api/step/finngen_sumstat_preprocess.md
new file mode 100644
index 000000000..0b374a278
--- /dev/null
+++ b/docs/python_api/step/finngen_sumstat_preprocess.md
@@ -0,0 +1,5 @@
+---
+title: FinnGen Preprocess Summary Stats
+---
+
+::: otg.finngen_sumstat_preprocess.FinnGenSumstatPreprocessStep
diff --git a/docs/python_api/step/gene_index.md b/docs/python_api/step/gene_index.md
new file mode 100644
index 000000000..dad07417c
--- /dev/null
+++ b/docs/python_api/step/gene_index.md
@@ -0,0 +1,5 @@
+---
+title: Gene Index
+---
+
+::: otg.gene_index.GeneIndexStep
diff --git a/docs/python_api/step/gwas_catalog_ingestion.md b/docs/python_api/step/gwas_catalog_ingestion.md
new file mode 100644
index 000000000..ecac99f8c
--- /dev/null
+++ b/docs/python_api/step/gwas_catalog_ingestion.md
@@ -0,0 +1,5 @@
+---
+title: GWAS Catalog
+---
+
+::: otg.gwas_catalog_ingestion.GWASCatalogIngestionStep
diff --git a/docs/python_api/step/gwas_catalog_sumstat_preprocess.md b/docs/python_api/step/gwas_catalog_sumstat_preprocess.md
new file mode 100644
index 000000000..1dd1d7c79
--- /dev/null
+++ b/docs/python_api/step/gwas_catalog_sumstat_preprocess.md
@@ -0,0 +1,5 @@
+---
+title: GWAS Catalog sumstat preprocess
+---
+
+::: otg.gwas_catalog_sumstat_preprocess.GWASCatalogSumstatsPreprocessStep
diff --git a/docs/python_api/step/l2g.md b/docs/python_api/step/l2g.md
new file mode 100644
index 000000000..2364c797a
--- /dev/null
+++ b/docs/python_api/step/l2g.md
@@ -0,0 +1,5 @@
+---
+title: Locus-to-gene (L2G)
+---
+
+::: otg.l2g.LocusToGeneStep
diff --git a/docs/python_api/step/ld_index.md b/docs/python_api/step/ld_index.md
new file mode 100644
index 000000000..5f769422a
--- /dev/null
+++ b/docs/python_api/step/ld_index.md
@@ -0,0 +1,5 @@
+---
+title: LD Index
+---
+
+::: otg.ld_index.LDIndexStep
diff --git a/docs/python_api/step/pics.md b/docs/python_api/step/pics.md
new file mode 100644
index 000000000..c4b7c4291
--- /dev/null
+++ b/docs/python_api/step/pics.md
@@ -0,0 +1,5 @@
+---
+title: PICS
+---
+
+::: otg.pics.PICSStep
diff --git a/docs/python_api/step/ukbiobank.md b/docs/python_api/step/ukbiobank.md
new file mode 100644
index 000000000..34724ea51
--- /dev/null
+++ b/docs/python_api/step/ukbiobank.md
@@ -0,0 +1,5 @@
+---
+title: UK Biobank
+---
+
+::: otg.ukbiobank.UKBiobankStep
diff --git a/docs/python_api/step/variant_annotation_step.md b/docs/python_api/step/variant_annotation_step.md
new file mode 100644
index 000000000..1b3eff6f8
--- /dev/null
+++ b/docs/python_api/step/variant_annotation_step.md
@@ -0,0 +1,5 @@
+---
+title: Variant Annotation
+---
+
+::: otg.variant_annotation.VariantAnnotationStep
diff --git a/docs/python_api/step/variant_index_step.md b/docs/python_api/step/variant_index_step.md
new file mode 100644
index 000000000..345f98401
--- /dev/null
+++ b/docs/python_api/step/variant_index_step.md
@@ -0,0 +1,5 @@
+---
+title: Variant Index
+---
+
+::: otg.variant_index.VariantIndexStep
diff --git a/docs/python_api/step/variant_to_gene_step.md b/docs/python_api/step/variant_to_gene_step.md
new file mode 100644
index 000000000..198ab01ec
--- /dev/null
+++ b/docs/python_api/step/variant_to_gene_step.md
@@ -0,0 +1,5 @@
+---
+title: Variant-to-gene
+---
+
+::: otg.v2g.V2GStep
diff --git a/docs/roadmap.md b/docs/roadmap.md
index ff7e99be4..33ddf5eb2 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -1,3 +1,9 @@
+---
+title: Roadmap
+hide:
+ - navigation
+ - toc
+---
# Roadmap
diff --git a/docs/usage.md b/docs/usage.md
new file mode 100644
index 000000000..4d6c97d1b
--- /dev/null
+++ b/docs/usage.md
@@ -0,0 +1,10 @@
+---
+Title: How-to
+hide:
+ - navigation
+ - toc
+---
+
+# How-to
+
+TBC
diff --git a/mkdocs.yml b/mkdocs.yml
index 8e0d41f32..e15a1af8d 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,14 +1,21 @@
-site_name: Genetics Portal Pipeline
+site_name: Open Targets Genetics
+
+nav:
+ - installation.md
+ - usage.md
+ - ... | development/**
+ - ... | python_api/**
plugins:
- search
- awesome-pages
- mkdocstrings:
handlers:
- crystal:
- selection:
- filters:
- - "!^_[^_]"
+ python:
+ options:
+ filters: ["!^_", "!__new__"]
+ show_signature_annotations: true
+ show_root_heading: true
- section-index
- git-revision-date-localized:
type: timeago
@@ -16,8 +23,6 @@ plugins:
exclude:
- index.md
- autolinks
- - minify:
- minify_html: true
- exclude:
glob:
- assets/schemas/*
@@ -32,26 +37,31 @@ markdown_extensions:
- pymdownx.superfences
- pymdownx.snippets:
base_path: "docs"
+ - pymdownx.highlight
+ - pymdownx.superfences
+ - toc:
+ permalink: true
hooks:
- - src/scripts/schemadocs.py
+ - src/utils/schemadocs.py
repo_name: opentargets/genetics_etl_python
repo_url: https://github.com/opentargets/genetics_etl_python
theme:
name: "material"
- favicon: assets/favicon.png
- logo: assets/otlogo.png
+ favicon: assets/imgs/favicon.png
+ logo: assets/imgs/otlogo.png
custom_dir: docs/assets/overrides
features:
- navigation.instant
- navigation.top
+ - navigation.tabs
+ - navigation.tabs.sticky
- content.code.annotate
- search.suggest
- search.highlight
-
palette:
# Light mode
- media: "(prefers-color-scheme: light)"
diff --git a/notebooks/Finngen_PICS_run.ipynb b/notebooks/Finngen_PICS_run.ipynb
new file mode 100644
index 000000000..3dc6ec0d7
--- /dev/null
+++ b/notebooks/Finngen_PICS_run.ipynb
@@ -0,0 +1,1572 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "2dd3bf11",
+ "metadata": {},
+ "source": [
+ "# Running PICS finemapping on Finngen summary statistics\n",
+ "\n",
+ "1. Read summary stats.\n",
+ "2. Apply window based clumping.\n",
+ "3. LD expansion.\n",
+ "4. lD clumping.\n",
+ "5. PICS."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "0deeb686",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-13T09:53:43.429135Z",
+ "start_time": "2023-10-13T09:53:23.566141Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ "
\n",
+ "
Loading BokehJS ... \n",
+ "
\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ "\n",
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
+ " root._bokeh_onload_callbacks = [];\n",
+ " root._bokeh_is_loading = undefined;\n",
+ " }\n",
+ "\n",
+ "const JS_MIME_TYPE = 'application/javascript';\n",
+ " const HTML_MIME_TYPE = 'text/html';\n",
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
+ "\n",
+ " /**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ " function render(props, node) {\n",
+ " const script = document.createElement(\"script\");\n",
+ " node.appendChild(script);\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when an output is cleared or removed\n",
+ " */\n",
+ " function handleClearOutput(event, handle) {\n",
+ " const cell = handle.cell;\n",
+ "\n",
+ " const id = cell.output_area._bokeh_element_id;\n",
+ " const server_id = cell.output_area._bokeh_server_id;\n",
+ " // Clean up Bokeh references\n",
+ " if (id != null && id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ "\n",
+ " if (server_id !== undefined) {\n",
+ " // Clean up Bokeh references\n",
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
+ " iopub: {\n",
+ " output: function(msg) {\n",
+ " const id = msg.content.text.trim();\n",
+ " if (id in Bokeh.index) {\n",
+ " Bokeh.index[id].model.document.clear();\n",
+ " delete Bokeh.index[id];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " // Destroy server and session\n",
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " /**\n",
+ " * Handle when a new output is added\n",
+ " */\n",
+ " function handleAddOutput(event, handle) {\n",
+ " const output_area = handle.output_area;\n",
+ " const output = handle.output;\n",
+ "\n",
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
+ " return\n",
+ " }\n",
+ "\n",
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
+ "\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
+ " // store reference to embed id on output_area\n",
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
+ " }\n",
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
+ " const bk_div = document.createElement(\"div\");\n",
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
+ " const script_attrs = bk_div.children[0].attributes;\n",
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
+ " }\n",
+ " // store reference to server id on output_area\n",
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function register_renderer(events, OutputArea) {\n",
+ "\n",
+ " function append_mime(data, metadata, element) {\n",
+ " // create a DOM node to render to\n",
+ " const toinsert = this.create_output_subarea(\n",
+ " metadata,\n",
+ " CLASS_NAME,\n",
+ " EXEC_MIME_TYPE\n",
+ " );\n",
+ " this.keyboard_manager.register_events(toinsert);\n",
+ " // Render to node\n",
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
+ " render(props, toinsert[toinsert.length - 1]);\n",
+ " element.append(toinsert);\n",
+ " return toinsert\n",
+ " }\n",
+ "\n",
+ " /* Handle when an output is cleared or removed */\n",
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
+ " events.on('delete.Cell', handleClearOutput);\n",
+ "\n",
+ " /* Handle when a new output is added */\n",
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
+ "\n",
+ " /**\n",
+ " * Register the mime type and append_mime function with output_area\n",
+ " */\n",
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
+ " /* Is output safe? */\n",
+ " safe: true,\n",
+ " /* Index of renderer in `output_area.display_order` */\n",
+ " index: 0\n",
+ " });\n",
+ " }\n",
+ "\n",
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
+ " if (root.Jupyter !== undefined) {\n",
+ " const events = require('base/js/events');\n",
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
+ "\n",
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
+ " register_renderer(events, OutputArea);\n",
+ " }\n",
+ " }\n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_failed_load = false;\n",
+ " }\n",
+ "\n",
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
+ " \"\\n\"+\n",
+ " \"
\\n\"+\n",
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
+ " \"
\\n\"+\n",
+ " \"
\\n\"+\n",
+ " \"re-rerun `output_notebook()` to attempt to load from CDN again, or \\n\"+\n",
+ " \"use INLINE resources instead, as so: \\n\"+\n",
+ " \" \\n\"+\n",
+ " \"
\\n\"+\n",
+ " \"from bokeh.resources import INLINE\\n\"+\n",
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
+ " \"
\\n\"+\n",
+ " \"
\"}};\n",
+ "\n",
+ " function display_loaded() {\n",
+ " const el = document.getElementById(\"cb01f13c-6396-4b85-99db-68f8056c07dd\");\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS is loading...\";\n",
+ " }\n",
+ " if (root.Bokeh !== undefined) {\n",
+ " if (el != null) {\n",
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
+ " }\n",
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(display_loaded, 100)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " try {\n",
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
+ " if (callback != null)\n",
+ " callback();\n",
+ " });\n",
+ " } finally {\n",
+ " delete root._bokeh_onload_callbacks\n",
+ " }\n",
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(css_urls, js_urls, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
+ "\n",
+ " function on_load() {\n",
+ " root._bokeh_is_loading--;\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " function on_error(url) {\n",
+ " console.error(\"failed to load \" + url);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const element = document.createElement(\"link\");\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.rel = \"stylesheet\";\n",
+ " element.type = \"text/css\";\n",
+ " element.href = url;\n",
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const element = document.createElement('script');\n",
+ " element.onload = on_load;\n",
+ " element.onerror = on_error.bind(null, url);\n",
+ " element.async = false;\n",
+ " element.src = url;\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " function inject_raw_css(css) {\n",
+ " const element = document.createElement(\"style\");\n",
+ " element.appendChild(document.createTextNode(css));\n",
+ " document.body.appendChild(element);\n",
+ " }\n",
+ "\n",
+ " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.2.2.min.js\"];\n",
+ " const css_urls = [];\n",
+ "\n",
+ " const inline_js = [ function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ "function(Bokeh) {\n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " if (root.Bokeh !== undefined || force === true) {\n",
+ " for (let i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " }\n",
+ "if (force === true) {\n",
+ " display_loaded();\n",
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
+ " setTimeout(run_inline_js, 100);\n",
+ " } else if (!root._bokeh_failed_load) {\n",
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
+ " root._bokeh_failed_load = true;\n",
+ " } else if (force !== true) {\n",
+ " const cell = $(document.getElementById(\"cb01f13c-6396-4b85-99db-68f8056c07dd\")).parents('.cell').data().cell;\n",
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " if (root._bokeh_is_loading === 0) {\n",
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(css_urls, js_urls, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(window));"
+ ],
+ "application/vnd.bokehjs_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"\\n\"+\n \"
\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"
\\n\"+\n \"
\\n\"+\n \"re-rerun `output_notebook()` to attempt to load from CDN again, or \\n\"+\n \"use INLINE resources instead, as so: \\n\"+\n \" \\n\"+\n \"
\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"
\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"cb01f13c-6396-4b85-99db-68f8056c07dd\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.2.2.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"cb01f13c-6396-4b85-99db-68f8056c07dd\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Setting default log level to \"WARN\".\n",
+ "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n",
+ "23/10/13 09:53:40 INFO SparkEnv: Registering MapOutputTracker\n",
+ "23/10/13 09:53:40 INFO SparkEnv: Registering BlockManagerMaster\n",
+ "23/10/13 09:53:40 INFO SparkEnv: Registering BlockManagerMasterHeartbeat\n",
+ "23/10/13 09:53:40 INFO SparkEnv: Registering OutputCommitCoordinator\n",
+ "23/10/13 09:53:42 WARN GhfsStorageStatistics: Detected potential high latency for operation op_get_file_status. latencyMs=198; previousMaxLatencyMs=0; operationCount=1; context=gs://dataproc-temp-europe-west1-426265110888-ymkbpaze/64dcfdf8-46d3-4b5c-aad4-0a12ee0ba91a/spark-job-history\n",
+ "23/10/13 09:53:42 WARN GhfsStorageStatistics: Detected potential high latency for operation op_mkdirs. latencyMs=166; previousMaxLatencyMs=0; operationCount=1; context=gs://dataproc-temp-europe-west1-426265110888-ymkbpaze/64dcfdf8-46d3-4b5c-aad4-0a12ee0ba91a/spark-job-history\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Import:\n",
+ "from pyspark.sql import functions as f, types as t\n",
+ "\n",
+ "from otg.common.session import Session\n",
+ "\n",
+ "from otg.dataset.summary_statistics import SummaryStatistics\n",
+ "from otg.dataset.study_locus import StudyLocus\n",
+ "from otg.dataset.study_index import StudyIndex\n",
+ "from otg.dataset.ld_index import LDIndex\n",
+ "from otg.method.ld import LDAnnotator\n",
+ "\n",
+ "from otg.method.pics import PICS\n",
+ "\n",
+ "# Initialize session:\n",
+ "session = Session()\n",
+ "\n",
+ "# Input:\n",
+ "sumstats = 'gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/*'\n",
+ "ld_index_path = 'gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/ld_index/'\n",
+ "\n",
+ "# Parameters:\n",
+ "clump_window_length = 500_000 # Distance between semi-indices.\n",
+ "locus_window_length = 250_000 # Distance around semi-indices from where the tags are collected.\n",
+ "\n",
+ "# Output:\n",
+ "window_based_clumped_output = 'gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus'\n",
+ "ld_clumped_output = 'gs://ot-team/dsuveges/finngen/2023.10.13_ld_clumped_w_locus'\n",
+ "picsed_output = 'gs://ot-team/dsuveges/finngen/2023.10.06_PICSed'\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3bdbcfbf",
+ "metadata": {},
+ "source": [
+ "## 1. Read summary statistics"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "c893433c",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T08:46:39.186806Z",
+ "start_time": "2023-10-06T08:46:04.601886Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/06 08:46:37 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=236; previousMaxLatencyMs=147; operationCount=276; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_AB1_ACTINOMYCOSIS/chromosome=1/part-00011-33e31f88-435f-4200-9adc-3e909d706910.c000.snappy.parquet\n",
+ "23/10/06 08:46:37 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=269; previousMaxLatencyMs=236; operationCount=282; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_HEIGHT_IRN/chromosome=2/part-00020-774f0990-ad3d-46ae-9648-f39c18fae314.c000.snappy.parquet\n",
+ "23/10/06 08:46:38 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=417; previousMaxLatencyMs=269; operationCount=288; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_HEIGHT_IRN/chromosome=2/part-00020-774f0990-ad3d-46ae-9648-f39c18fae314.c000.snappy.parquet\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+-----------+--------+--------------+--------------+-----------+-------------+-------------------------------+---------------------------+---------------------------+----------+\n",
+ "| studyId| variantId|position|pValueMantissa|pValueExponent| beta|standardError|effectAlleleFrequencyFromSource|betaConfidenceIntervalLower|betaConfidenceIntervalUpper|chromosome|\n",
+ "+--------------------+-----------+--------+--------------+--------------+-----------+-------------+-------------------------------+---------------------------+---------------------------+----------+\n",
+ "|FINNGEN_R9_HEIGHT...|2_10603_A_C| 10603| 8.515| -1| 0.0117813| 0.0629271| 2.30629E-4| -0.0511458| 0.0747084| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_10610_G_A| 10610| 8.814| -3| 0.0187529| 0.00715985| 0.0194828| 0.01159305| 0.02591275| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_10659_G_A| 10659| 9.292| -1|-0.00289323| 0.0325443| 8.5694E-4| -0.03543752999999...| 0.029651069999999998| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_10756_T_C| 10756| 2.368| -1| -0.180083| 0.15223| 5.62468E-5| -0.33231299999999997| -0.02785299999999999| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_10797_C_T| 10797| 8.506| -1|-0.00190634| 0.01012| 0.00847354| -0.01202634| 0.008213660000000001| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_10823_G_C| 10823| 6.834| -2| -0.259102| 0.142146| 1.48813E-4| -0.401248| -0.116956| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_10847_C_T| 10847| 5.97| -1| 0.0487634| 0.0922252| 1.03478E-4| -0.04346179999999...| 0.1409886| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11305_G_C| 11305| 6.992| -1|-0.00333638| 0.00863326| 0.013513| -0.01196964| 0.00529688| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11311_C_G| 11311| 1.676| -1| 0.112938| 0.0818501| 1.30145E-4| 0.0310879| 0.1947881| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11320_G_A| 11320| 2.484| -7| -0.0106449| 0.0020634| 0.302909| -0.0127083| -0.0085815| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11486_A_G| 11486| 6.829| -3| 0.0135765| 0.00501887| 0.035261| 0.00855763| 0.01859537| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11573_A_C| 11573| 7.428| -1| 0.00483333| 0.0147283| 0.00424829| -0.00989497| 0.01956163| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11594_G_T| 11594| 5.291| -1|-0.00908649| 0.014438| 0.0045864| -0.02352449| 0.00535151| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11607_T_C| 11607| 5.666| -3| 0.0139369| 0.00503765| 0.0350636| 0.008899250000000001| 0.01897455| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11609_T_G| 11609| 8.231| -2| -0.065766| 0.0378528| 7.11595E-4| -0.10361880000000001| -0.02791320000000...| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11620_G_C| 11620| 5.866| -1| -0.0235368| 0.0432809| 5.48483E-4| -0.0668177| 0.019744099999999997| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11677_C_G| 11677| 3.944| -1| -0.0888112| 0.104287| 1.01977E-4| -0.1930982| 0.015475799999999998| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11694_C_T| 11694| 8.855| -2| -0.0468924| 0.0275339| 0.00127759| -0.0744263| -0.0193585| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11696_C_T| 11696| 2.446| -1| -0.0384871| 0.0330789| 8.17298E-4| -0.071566| -0.00540820000000...| 2|\n",
+ "|FINNGEN_R9_HEIGHT...|2_11834_A_G| 11834| 5.664| -3| 0.0139372| 0.00503766| 0.0350634| 0.008899540000000001| 0.01897486| 2|\n",
+ "+--------------------+-----------+--------+--------------+--------------+-----------+-------------+-------------------------------+---------------------------+---------------------------+----------+\n",
+ "only showing top 20 rows\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "finngen_sumstats = SummaryStatistics(\n",
+ " _df=(\n",
+ " session.spark.read.parquet(sumstats, recursiveFileLookup=True)\n",
+ " # We need to add chromosome column as this is a partition column:\n",
+ " .withColumn('chromosome',f.split(f.col('variantId'), '_')[0])\n",
+ " ),\n",
+ " _schema=SummaryStatistics.get_schema()\n",
+ ")\n",
+ "finngen_sumstats.df.show()\n",
+ "print(finngen_sumstats.df.count())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a76b27ce",
+ "metadata": {},
+ "source": [
+ "## 2. Apply window based clumping.\n",
+ "\n",
+ "- Clumping distance: +/-500kbp\n",
+ "- Locus collected: +/-250kbp"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "fc0dd4f0",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T10:22:38.264681Z",
+ "start_time": "2023-10-06T10:10:29.768171Z"
+ },
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/06 10:22:32 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=1812; previousMaxLatencyMs=253; operationCount=415; context=gs://ot-team/dsuveges/finngen/2023.10.06_window_clumped/_temporary/0/_temporary/attempt_202310061022254599137247441201519_0051_m_000011_106753/part-00011-53e48f6d-d432-40c5-9201-d4c8f03e6dee-c000.snappy.parquet\n",
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "# This process takes ~1h on a 32 cores:\n",
+ "(\n",
+ " SummaryStatistics(\n",
+ " _df=(\n",
+ " session.spark.read.parquet(sumstats, recursiveFileLookup=True)\n",
+ " .withColumn(\n",
+ " 'chromosome',\n",
+ " f.split(f.col('variantId'), '_')[0]\n",
+ " )\n",
+ " ),\n",
+ " _schema=SummaryStatistics.get_schema()\n",
+ " )\n",
+ " .window_based_clumping(\n",
+ " distance=clump_window_length,\n",
+ " locus_collect_distance=locus_window_length,\n",
+ " with_locus=True\n",
+ " )\n",
+ " .df.write.mode('overwrite')\n",
+ " .parquet(window_based_clumped_output)\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a1cd0172",
+ "metadata": {},
+ "source": [
+ "## 3. LD expansion\n",
+ "\n",
+ "- For FINNGEN, study table needs to be mocked."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "1305f6c3",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T08:13:10.050554Z",
+ "start_time": "2023-10-06T08:13:05.901762Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 5:===============================================> (15 + 3) / 18]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+---------------------+---------+---------+---------------+\n",
+ "| studyId|ldPopulationStructure|projectId|studyType|traitFromSource|\n",
+ "+--------------------+---------------------+---------+---------+---------------+\n",
+ "|FINNGEN_R9_K11_EN...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_P16_IN...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "| FINNGEN_R9_C_STROKE| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_G6_HER...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_RHEUMA...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_N14_EN...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "| FINNGEN_R9_PAIN| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_D3_COA...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_F5_UNSORG| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_HEIGHT...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_M13_SY...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_APPEND...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_ALLERG...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_M13_FI...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_E4_DM2...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_AUTOIM...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_CD2_BE...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_F5_DIS...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_E4_DMN...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_E4_FH_IHD| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "+--------------------+---------------------+---------+---------+---------------+\n",
+ "only showing top 20 rows\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "# Generating a \"fake\" study index, just for providing ld_population structure for each finngen study:\n",
+ "studies_df = (\n",
+ " session.spark.read.parquet('gs://ot-team/dsuveges/finngen_semi_indices_250kbp')\n",
+ " # Generating a list of study identifiers:\n",
+ " .select('studyId')\n",
+ " .distinct()\n",
+ " # Adding fabricated values required to parse as gwas catalog study:\n",
+ " .select(\n",
+ " 'studyId',\n",
+ " StudyIndex.aggregate_and_map_ancestries(\n",
+ " f.array(\n",
+ " f.struct(\n",
+ " f.lit('Finnish').alias('ancestry'),\n",
+ " f.lit(100).cast('long').alias('sampleSize')\n",
+ " )\n",
+ " )\n",
+ " ).alias('ldPopulationStructure'),\n",
+ " f.lit('FINNGEN').alias('projectId'),\n",
+ " f.lit('gwas').alias('studyType'),\n",
+ " f.lit('cicaful').alias('traitFromSource')\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "study_index = (\n",
+ " StudyIndex(\n",
+ " _df=studies_df,\n",
+ " _schema=StudyIndex.get_schema()\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "study_index.df.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "cb2d5030",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T09:09:22.063715Z",
+ "start_time": "2023-10-06T09:09:21.359206Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Loading ld index:\n",
+ "ld_index = LDIndex.from_parquet(session, ld_index_path)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3d13ae41",
+ "metadata": {},
+ "source": [
+ "## 4. LD based clumping.\n",
+ "\n",
+ "- Persist resulting dataset.\n",
+ "- Save dataset."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "20449e76",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T09:42:11.040193Z",
+ "start_time": "2023-10-06T09:09:52.968139Z"
+ },
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/06 09:11:42 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=1312; previousMaxLatencyMs=1306; operationCount=59583672; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_RX_N05C/chromosome=1/part-00012-a13aba14-79f4-45c0-9af0-937d599fa3f0.c000.snappy.parquet\n",
+ "23/10/06 09:11:43 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=1316; previousMaxLatencyMs=1312; operationCount=59631953; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_RX_CODEINE_TRAMADOL/chromosome=1/part-00012-36e099c5-3f60-4091-bf73-6fa15d48af6c.c000.snappy.parquet\n",
+ "23/10/06 09:16:19 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=1489; previousMaxLatencyMs=1316; operationCount=76331604; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/ld_index/chromosome=7/part-00010-ff42773a-494c-46d2-bc22-322062b5e715.c000.snappy.parquet\n",
+ "23/10/06 09:16:21 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=1735; previousMaxLatencyMs=1489; operationCount=76482674; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/ld_index/chromosome=7/part-00010-ff42773a-494c-46d2-bc22-322062b5e715.c000.snappy.parquet\n",
+ "23/10/06 09:16:23 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_operations. latencyMs=460; previousMaxLatencyMs=337; operationCount=17471; context=gs://dataproc-temp-europe-west1-426265110888-ymkbpaze/64dcfdf8-46d3-4b5c-aad4-0a12ee0ba91a/spark-job-history/local-1696579691428.inprogress\n",
+ "23/10/06 09:27:35 WARN GhfsStorageStatistics: Detected potential high latency for operation op_open. latencyMs=1041; previousMaxLatencyMs=1034; operationCount=215062; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_M13_DORSOPATHYNAS/chromosome=19/part-00009-09e75b10-c64d-4b79-9c84-6b0ca039c439.c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=126; previousMaxLatencyMs=93; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909552056325521918358154_0027_m_000008_57347/part-00008-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=134; previousMaxLatencyMs=126; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909555844252084106444775_0027_m_000028_57367/part-00028-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=134; previousMaxLatencyMs=126; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909556216099889261123757_0027_m_000015_57354/part-00015-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=137; previousMaxLatencyMs=134; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909553770650668910223592_0027_m_000020_57359/part-00020-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=134; previousMaxLatencyMs=126; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909552371970894888794726_0027_m_000025_57364/part-00025-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=136; previousMaxLatencyMs=134; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955320032532820679068_0027_m_000009_57348/part-00009-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=139; previousMaxLatencyMs=136; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554704118087127617221_0027_m_000031_57370/part-00031-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=139; previousMaxLatencyMs=136; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955146935648450954616_0027_m_000021_57360/part-00021-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=140; previousMaxLatencyMs=139; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909557457999139377546046_0027_m_000026_57365/part-00026-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=141; previousMaxLatencyMs=140; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909557648490159907156305_0027_m_000017_57356/part-00017-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=144; previousMaxLatencyMs=141; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909556136722862237844168_0027_m_000013_57352/part-00013-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=143; previousMaxLatencyMs=141; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955993438161489409499_0027_m_000016_57355/part-00016-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=144; previousMaxLatencyMs=141; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909552708616931813844767_0027_m_000006_57345/part-00006-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=145; previousMaxLatencyMs=144; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909555919710644676214353_0027_m_000004_57343/part-00004-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=145; previousMaxLatencyMs=144; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551292246187607294419_0027_m_000002_57341/part-00002-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=146; previousMaxLatencyMs=145; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551853556311935071964_0027_m_000030_57369/part-00030-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=147; previousMaxLatencyMs=146; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909555640079838863826112_0027_m_000022_57361/part-00022-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=147; previousMaxLatencyMs=146; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955962380753726438814_0027_m_000000_57339/part-00000-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=149; previousMaxLatencyMs=147; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551603246466691698658_0027_m_000001_57340/part-00001-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=150; previousMaxLatencyMs=149; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554079176040000118228_0027_m_000027_57366/part-00027-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=154; previousMaxLatencyMs=150; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909553545408253172771512_0027_m_000005_57344/part-00005-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=156; previousMaxLatencyMs=154; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909556087040172921209608_0027_m_000018_57357/part-00018-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=160; previousMaxLatencyMs=156; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955995307818437095879_0027_m_000024_57363/part-00024-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=161; previousMaxLatencyMs=160; operationCount=32; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909552743075067405201713_0027_m_000014_57353/part-00014-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:56 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=106; previousMaxLatencyMs=95; operationCount=30; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551603246466691698658_0027_m_000001_57340/part-00001-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=138; previousMaxLatencyMs=106; operationCount=31; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909552371970894888794726_0027_m_000025_57364/part-00025-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=165; previousMaxLatencyMs=0; operationCount=30; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955320032532820679068_0027_m_000009_57348/part-00009-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00009-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=183; previousMaxLatencyMs=165; operationCount=30; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955962380753726438814_0027_m_000000_57339/part-00000-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00000-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=186; previousMaxLatencyMs=183; operationCount=30; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909552708616931813844767_0027_m_000006_57345/part-00006-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00006-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=191; previousMaxLatencyMs=186; operationCount=30; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909555919710644676214353_0027_m_000004_57343/part-00004-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00004-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=227; previousMaxLatencyMs=186; operationCount=30; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554079176040000118228_0027_m_000027_57366/part-00027-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00027-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=233; previousMaxLatencyMs=227; operationCount=30; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909556216099889261123757_0027_m_000015_57354/part-00015-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00015-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=239; previousMaxLatencyMs=233; operationCount=31; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554704118087127617221_0027_m_000031_57370/part-00031-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00031-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=284; previousMaxLatencyMs=239; operationCount=31; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551853556311935071964_0027_m_000030_57369/part-00030-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00030-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=128; previousMaxLatencyMs=0; operationCount=28; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909555919710644676214353_0027_m_000004_57343\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=318; previousMaxLatencyMs=284; operationCount=31; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955146935648450954616_0027_m_000021_57360/part-00021-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00021-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=150; previousMaxLatencyMs=128; operationCount=29; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909555920613268130744433_0027_m_000010_57349\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=190; previousMaxLatencyMs=150; operationCount=29; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955320032532820679068_0027_m_000009_57348\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=226; previousMaxLatencyMs=190; operationCount=30; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554079176040000118228_0027_m_000027_57366\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=172; previousMaxLatencyMs=161; operationCount=53; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909557479860471944928338_0027_m_000035_57374/part-00035-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:57 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=146; previousMaxLatencyMs=138; operationCount=53; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909557479860471944928338_0027_m_000035_57374/part-00035-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:58 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=150; previousMaxLatencyMs=146; operationCount=60; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551578112291921242039_0027_m_000054_57393/part-00054-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:58 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=1259; previousMaxLatencyMs=226; operationCount=53; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551853556311935071964_0027_m_000030_57369\n",
+ "23/10/06 09:41:58 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=1497; previousMaxLatencyMs=1259; operationCount=56; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909557355876953011052025_0027_m_000019_57358\n",
+ "23/10/06 09:41:58 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=711; previousMaxLatencyMs=318; operationCount=75; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909557693125728422191174_0027_m_000050_57389/part-00050-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00050-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:59 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=157; previousMaxLatencyMs=150; operationCount=93; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551476648569527086024_0027_m_000080_57419/part-00080-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:41:59 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=752; previousMaxLatencyMs=711; operationCount=91; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554631887941475021153_0027_m_000057_57396/part-00057-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00057-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:41:59 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=182; previousMaxLatencyMs=157; operationCount=96; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909556932256815778386100_0027_m_000093_57432/part-00093-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:42:00 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=201; previousMaxLatencyMs=182; operationCount=128; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554714655772639032866_0027_m_000122_57461/part-00122-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:42:01 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=253; previousMaxLatencyMs=201; operationCount=187; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909555299227751328654817_0027_m_000175_57513/part-00175-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:42:02 WARN GhfsStorageStatistics: Detected potential high latency for operation op_rename. latencyMs=1159; previousMaxLatencyMs=752; operationCount=198; context=rename(gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909556191692784728530413_0027_m_000172_57510/part-00172-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet -> gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/part-00172-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet)\n",
+ "23/10/06 09:42:02 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=1051; previousMaxLatencyMs=172; operationCount=200; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_20231006090955452778920582844510_0027_m_000198_57536/part-00198-a0adc7ff-71a9-4671-ad1e-0093f9d7d260-c000.snappy.parquet\n",
+ "23/10/06 09:42:08 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=11057; previousMaxLatencyMs=1497; operationCount=199; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909557457999139377546046_0027_m_000026_57365\n",
+ "23/10/06 09:42:08 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=11233; previousMaxLatencyMs=11057; operationCount=199; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909551292246187607294419_0027_m_000002_57341\n",
+ "23/10/06 09:42:08 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=11402; previousMaxLatencyMs=11233; operationCount=199; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909552371970894888794726_0027_m_000025_57364\n",
+ "23/10/06 09:42:08 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=11583; previousMaxLatencyMs=11402; operationCount=199; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909556136722862237844168_0027_m_000013_57352\n",
+ "23/10/06 09:42:09 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=12651; previousMaxLatencyMs=11583; operationCount=199; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909553722108484298157195_0027_m_000023_57362\n",
+ "23/10/06 09:42:10 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=13120; previousMaxLatencyMs=12651; operationCount=199; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909554704118087127617221_0027_m_000031_57370\n",
+ "23/10/06 09:42:10 WARN GhfsStorageStatistics: Detected potential high latency for operation op_delete. latencyMs=13440; previousMaxLatencyMs=13120; operationCount=199; context=gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped/_temporary/0/_temporary/attempt_202310060909553545408253172771512_0027_m_000005_57344\n",
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "(\n",
+ " # To annotate study/locus, study level info and ld panel is needed:\n",
+ " LDAnnotator.ld_annotate(\n",
+ " StudyLocus.from_parquet(session, window_based_clumped_output),\n",
+ " study_index, \n",
+ " ld_index\n",
+ " )\n",
+ " # Clumping linked study-loci together:\n",
+ " .clump()\n",
+ " .df.write.mode('overwrite').parquet(ld_clumped_output)\n",
+ ")\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3ec08141",
+ "metadata": {},
+ "source": [
+ "## 5. PICS - finemapping."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "aab9d72e",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T09:50:46.179833Z",
+ "start_time": "2023-10-06T09:49:25.408253Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/06 09:50:16 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=1081; previousMaxLatencyMs=1051; operationCount=396; context=gs://ot-team/dsuveges/finngen/2023.10.06_PICSed/_temporary/0/_temporary/attempt_202310060949259143728196112407547_0033_m_000193_57732/part-00193-9d4ae5b4-a18c-4406-bd26-9387e62477de-c000.snappy.parquet\n",
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "(\n",
+ " # The previously generated LD clumped dataset is read as StudyLocus:\n",
+ " PICS.finemap(StudyLocus.from_parquet(session, ld_clumped_output))\n",
+ " .annotate_credible_sets()\n",
+ " .df.write.mode('overwrite').parquet(picsed_output)\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0bc2cb6e",
+ "metadata": {},
+ "source": [
+ "## QC results - Sumstats"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "7cbeab8b",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T10:40:53.295506Z",
+ "start_time": "2023-10-06T10:26:04.284592Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/06 10:26:41 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_operations. latencyMs=572; previousMaxLatencyMs=460; operationCount=925353; context=gs://dataproc-temp-europe-west1-426265110888-ymkbpaze/64dcfdf8-46d3-4b5c-aad4-0a12ee0ba91a/spark-job-history/local-1696579691428.inprogress\n",
+ "[Stage 57:===========================================> (3 + 1) / 4]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "In the Finngen dataset, there are 45,820,490,260 associations from 2,272 studies.\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "assoc_count = finngen_sumstats.df.count()\n",
+ "study_count = finngen_sumstats.df.select('studyId').distinct().count()\n",
+ "\n",
+ "print(f'In the Finngen dataset, there are {assoc_count:,} associations from {study_count:,} studies.')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "19f94399",
+ "metadata": {},
+ "source": [
+ "## QC results - Window based clumping"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "5ff794d4",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T10:41:39.724996Z",
+ "start_time": "2023-10-06T10:41:38.322389Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "In the window based cluped dataset, there are 19,005 semi-indices, from 1,387 studies.\n"
+ ]
+ }
+ ],
+ "source": [
+ "windowed_count = session.spark.read.parquet(window_based_clumped_output).count()\n",
+ "windowed_studies = session.spark.read.parquet(window_based_clumped_output).select('studyId').distinct().count()\n",
+ "\n",
+ "print(f'In the window based cluped dataset, there are {windowed_count:,} semi-indices, from {windowed_studies:,} studies.')\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d88b0d87",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T10:08:22.129308Z",
+ "start_time": "2023-10-06T10:08:18.802493Z"
+ }
+ },
+ "source": [
+ "## QC results - LD clumping"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "3cd88471",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T10:43:29.370733Z",
+ "start_time": "2023-10-06T10:43:26.646342Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 87:======================================================> (28 + 1) / 29]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "In the LD based cluped dataset, there are 19,005 semi-indices, from 1,387 studies.\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "ld_clumped_df = session.spark.read.parquet(ld_clumped_output)\n",
+ "\n",
+ "windowed_count = ld_clumped_df.count()\n",
+ "windowed_studies = ld_clumped_df.select('studyId').distinct().count()\n",
+ "\n",
+ "print(f'In the LD based cluped dataset, there are {windowed_count:,} semi-indices, from {windowed_studies:,} studies.')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "d9d002d0",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T10:44:36.008520Z",
+ "start_time": "2023-10-06T10:44:34.483964Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 93:====================================================> (27 + 2) / 29]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------------------------------------------------+-----+\n",
+ "|qualityControls |count|\n",
+ "+--------------------------------------------------------------+-----+\n",
+ "|[Variant not found in LD reference] |4706 |\n",
+ "|[] |13714|\n",
+ "|[Explained by a more significant variant in high LD (clumped)]|585 |\n",
+ "+--------------------------------------------------------------+-----+\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "ld_clumped_df.groupBy('qualityControls').count().show(truncate=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7a3be915",
+ "metadata": {},
+ "source": [
+ "## QC results - PICS"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "id": "b1ddd53c",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T10:59:16.339543Z",
+ "start_time": "2023-10-06T10:59:15.930105Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-RECORD 0-----------------------------------------------\n",
+ " variantId | 20_35437976_G_A \n",
+ " chromosome | 20 \n",
+ " studyId | FINNGEN_R9_HEIGHT... \n",
+ " position | 35437976 \n",
+ " pValueMantissa | 3.811 \n",
+ " pValueExponent | -193 \n",
+ " beta | -0.0551669 \n",
+ " standardError | 0.00186085 \n",
+ " effectAlleleFrequencyFromSource | 0.5599 \n",
+ " betaConfidenceIntervalLower | -0.05702774999999... \n",
+ " betaConfidenceIntervalUpper | -0.05330605 \n",
+ " studyLocusId | 5242723067793949472 \n",
+ " qualityControls | [Variant not foun... \n",
+ " ldSet | null \n",
+ " locus | null \n",
+ "only showing top 1 row\n",
+ "\n",
+ "root\n",
+ " |-- variantId: string (nullable = true)\n",
+ " |-- chromosome: string (nullable = true)\n",
+ " |-- studyId: string (nullable = true)\n",
+ " |-- position: integer (nullable = true)\n",
+ " |-- pValueMantissa: float (nullable = true)\n",
+ " |-- pValueExponent: integer (nullable = true)\n",
+ " |-- beta: double (nullable = true)\n",
+ " |-- standardError: double (nullable = true)\n",
+ " |-- effectAlleleFrequencyFromSource: float (nullable = true)\n",
+ " |-- betaConfidenceIntervalLower: double (nullable = true)\n",
+ " |-- betaConfidenceIntervalUpper: double (nullable = true)\n",
+ " |-- studyLocusId: long (nullable = true)\n",
+ " |-- qualityControls: array (nullable = true)\n",
+ " | |-- element: string (containsNull = true)\n",
+ " |-- ldSet: array (nullable = true)\n",
+ " | |-- element: struct (containsNull = true)\n",
+ " | | |-- tagVariantId: string (nullable = true)\n",
+ " | | |-- r2Overall: double (nullable = true)\n",
+ " |-- locus: array (nullable = true)\n",
+ " | |-- element: struct (containsNull = true)\n",
+ " | | |-- variantId: string (nullable = true)\n",
+ " | | |-- r2Overall: double (nullable = true)\n",
+ " | | |-- posteriorProbability: double (nullable = true)\n",
+ " | | |-- standardError: double (nullable = true)\n",
+ " | | |-- is95CredibleSet: boolean (nullable = true)\n",
+ " | | |-- is99CredibleSet: boolean (nullable = true)\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/06 10:59:16 WARN CacheManager: Asked to cache already cached data.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "19005"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "picsed_df = session.spark.read.parquet(picsed_output).persist()\n",
+ "picsed_df.show(1, vertical=True)\n",
+ "picsed_df.printSchema()\n",
+ "picsed_df.count()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "id": "937e1eb0",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-06T11:11:55.487431Z",
+ "start_time": "2023-10-06T11:11:54.898030Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 59,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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zZs317Rp02Sz2RQdHa1du3bp7bffNts8cOBApa6gTJkyRS+//LIef/xxSdLbb7+tdevWafr06frjH/9Y6XE7f/683n//fd1+++2SpBEjRuj111+XJNWvX18+Pj4qLS1VSEhIpdusiloViAAAqMsWLFigp59+Wrfeeqs8PDx0zz33KCkpSTt27JAkDRgwwKyNiYlRbGysIiIitGLFCvXr10+GYVzT98XGxpr//vrrr3Xu3DkzIF1UVlamu+++W9KPDytu3769y13WF8PTRZW5m7u4uFhHjx5Vx44dXfZ37NhRX3755TWdg6+vrxmGJCk0NFSFhYXX1IY7EIgAAHCT22+/XRs2bNDp06dVXFys0NBQDRgwQJGRkZetDw0NVUREhDkzdPEOsn//+98Vgsrl+Pn5mf++cOGCJGnFihW69dZbXersdrskVSpwRUVFae/evT9bJ1390Ti33HJLhe88f/58hTa8vLwqtHmtwdAdavxJ1QAA3Gz8/PwUGhqqoqIirVq16rLrcSTpxIkTOnz4sPl4mYSEBAUGBmry5MmXrb/as4Jat24tu92ub7/9Vi1atHDZLj42pnXr1hVu8b/0c1JSkvbv369PP/20wncYhiGn06kGDRooLCzMZW2UJG3atEmtWrWSJDVp0kSSzAXS0o+Lqq+Vt7e3y/tJbxQCEQAAbrJq1SplZmYqLy9PWVlZ6tKli6Kjo/XUU0+ppKREqamp2rx5sw4ePKj169froYceUmBgoB555BFJPwapP/3pT1qxYoUSExO1Zs0aHTx4UNu3b9e4ceM0fPjwK363v7+/UlNT9dJLL2n+/Pn65ptvtHPnTv3xj380n300fPhwffPNNxozZoz27dunxYsXa968eS7t9O/fXwMGDNATTzyh9PR0bd++XYcOHdJnn32m7t27a926dZKkX/3qV3r77bf18ccfa9++fXrllVeUm5ur0aNHS5IZxNLS0rR//36tWLFC77zzzjWP6W233aavvvpK+/bt0/fff3/ZWSZ3IBABAOAmTqdTL774ou644w4NGjRI9913n1avXi0vLy95eHho165d6tu3r6KiojR48GBFRUVp8+bNLndP9+3bV5s2bZKXl5eSkpJ0xx136IknnpDT6dTEiROv+v1vvPGG/u///k/p6elq1aqVevbsqb///e/mJbtmzZrpk08+0d///ne1bdtW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R1fPyQIAgFqr1q4hysvLU0FBgRISEsx9drtdnTp10qZNmyRJOTk5On/+vEtNWFiYYmJizJrNmzfL4XCYYUiS2rdvL4fDYdZcTmlpqYqLi102AABwc6q1gaigoECSFBwc7LI/ODjYPFZQUCBvb281atToqjVBQUEV2g8KCjJrLic9Pd1cc+RwOBQeHn5d5wMAAGqvWhuILrLZbC6fDcOosO9Sl9Zcrv7n2hk/frycTqe5HT58+Bp7DgAA6opaG4hCQkIkqcIsTmFhoTlrFBISorKyMhUVFV215tixYxXaP378eIXZp5+y2+1q0KCBywYAAG5OtTYQRUZGKiQkRFlZWea+srIybdiwQR06dJAktWvXTl5eXi41+fn52r17t1kTHx8vp9OprVu3mjVbtmyR0+k0awAAgLXV6F1mJSUl+s9//mN+zsvLU25urgICAtSsWTOlpKRo0qRJatmypVq2bKlJkybJ19dXSUlJkiSHw6GhQ4dq7Nixaty4sQICApSamqo2bdqYd521atVKvXr10rBhwzRr1ixJ0rPPPqs+ffpwhxkAAJBUw4Fo+/bt6tKli/l5zJgxkqTBgwdr3rx5GjdunM6ePasXXnhBRUVFiouL0+rVq+Xv72/+zLRp0+Tp6an+/fvr7Nmz6tatm+bNmycPDw+zZtGiRRo1apR5N1piYuIVn30EAACsx2YYhlHTnagLiouL5XA45HQ63b6eaPOcVLe2V1vED51S010AAFhcZf9+19o1RAAAANWFQAQAACyPQAQAACyvRhdV4+Y2LWu/W9p5qUeUW9oBAOBKmCECAACWRyACAACWRyACAACWxxoi3DDtv/3ATS3xPCMAwI3FDBEAALA8AhEAALA8AhEAALA8AhEAALA8AhEAALA8AhEAALA8brtHreeuV4BIvAYEAHB5zBABAADLIxABAADLIxABAADLIxABAADLY1E1aj33vRNN4r1oAIDLYYYIAABYHoEIAABYHoEIAABYHoEIAABYHoEIAABYHneZwVLc9RoQXgECADcXZogAAIDlMUMES3HfM414nhEA3EyYIQIAAJZHIAIAAJZHIAIAAJZXqwNRWlqabDabyxYSEmIeNwxDaWlpCgsLk4+Pjzp37qw9e/a4tFFaWqqRI0cqMDBQfn5+SkxM1JEjR6r7VAAAQC1WqwORJN15553Kz883t127dpnHJk+erKlTp2rGjBnatm2bQkJC1KNHD506dcqsSUlJ0bJly5SRkaGNGzeqpKREffr0UXl5eU2cDgAAqIVq/V1mnp6eLrNCFxmGoenTp+vVV19Vv379JEnz589XcHCwFi9erOeee05Op1Nz5szRggUL1L17d0nSwoULFR4erjVr1qhnz57Vei4AAKB2qvWB6MCBAwoLC5PdbldcXJwmTZqk5s2bKy8vTwUFBUpISDBr7Xa7OnXqpE2bNum5555TTk6Ozp8/71ITFhammJgYbdq06aqBqLS0VKWlpebn4uLiG3OCqJN4wCMA3Fxq9SWzuLg4ffTRR1q1apVmz56tgoICdejQQSdOnFBBQYEkKTg42OVngoODzWMFBQXy9vZWo0aNrlhzJenp6XI4HOYWHh7uxjMDAAC1Sa0ORL1799ajjz6qNm3aqHv37lqxYoWkHy+NXWSz2Vx+xjCMCvsuVZma8ePHy+l0mtvhw4ereBYAAKC2q9WB6FJ+fn5q06aNDhw4YK4runSmp7Cw0Jw1CgkJUVlZmYqKiq5YcyV2u10NGjRw2QAAwM2pTgWi0tJS7d27V6GhoYqMjFRISIiysrLM42VlZdqwYYM6dOggSWrXrp28vLxcavLz87V7926zBgAAoFYvqk5NTdVDDz2kZs2aqbCwUBMnTlRxcbEGDx4sm82mlJQUTZo0SS1btlTLli01adIk+fr6KikpSZLkcDg0dOhQjR07Vo0bN1ZAQIBSU1PNS3AAAABSLQ9ER44c0RNPPKHvv/9eTZo0Ufv27ZWdna2IiAhJ0rhx43T27Fm98MILKioqUlxcnFavXi1/f3+zjWnTpsnT01P9+/fX2bNn1a1bN82bN08eHh41dVoAAKCWsRmGYdR0J+qC4uJiORwOOZ1Ot68n2jwn1a3t4cbLbvasW9rhtnsAuLEq+/e7Vs8QAbVV+28/cFNLU9zUDgDgehCIgBrEAx4BoHaoU3eZAQAA3AgEIgAAYHkEIgAAYHkEIgAAYHksqgZqkLvuVpuWxWMAAOB6MEMEAAAsj0AEAAAsj0AEAAAsjzVEwE2AtUgAcH2YIQIAAJZHIAIAAJbHJTMAbsc72gDUNQQiACZ3rUXKbuaetUgAUF24ZAYAACyPGSIAtRaX3gBUFwIRgFrLXZfwpCluagfAzYpLZgAAwPKYIQKASnLXJTx34VIg4D4EIgBu575LXe5R24KMu7DGCnAfAhEAVBKPJQBuXqwhAgAAlscMEQBUs9o208SlN4BABABwE4IV6jICEYCbXm1b5I2rI1hdHeNzYxCIAAA3pZv17kJ3IVi5IhABQB1V22a+uHsOdRmBCABQq9S2ReewBgIRAMAtatuMFarHzXLpjUAEALgpMdOEa2GpBzO+9957ioyMVL169dSuXTv985//rOkuAQCAWsAyM0Qff/yxUlJS9N5776ljx46aNWuWevfura+//lrNmjWr6e4BAGopZpqswTIzRFOnTtXQoUP1zDPPqFWrVpo+fbrCw8M1c+bMmu4aAACoYZaYISorK1NOTo5eeeUVl/0JCQnatGnTZX+mtLRUpaWl5men0ylJKi4udnv/Tp8t/fkiAECd1mbfH9zSzramT7mlndrmRvx9/Wm7hmFctc4Sgej7779XeXm5goODXfYHBweroKDgsj+Tnp6u3/72txX2h4eH35A+AgBQOTNqugM3xIQb3P6pU6fkcDiueNwSgegim83m8tkwjAr7Lho/frzGjBljfr5w4YL+97//qXHjxlf8mcooLi5WeHi4Dh8+rAYNGlS5HVQO4129GO/qxXhXL8a7erlrvA3D0KlTpxQWFnbVOksEosDAQHl4eFSYDSosLKwwa3SR3W6X3W532dewYUO39alBgwb8F6oaMd7Vi/GuXox39WK8q5c7xvtqM0MXWWJRtbe3t9q1a6esrCyX/VlZWerQoUMN9QoAANQWlpghkqQxY8YoOTlZsbGxio+P1wcffKBvv/1Ww4cPr+muAQCAGmaZQDRgwACdOHFCr7/+uvLz8xUTE6OVK1cqIiKiWvtht9v1m9/8psLlONwYjHf1YryrF+NdvRjv6lXd420zfu4+NAAAgJucJdYQAQAAXA2BCAAAWB6BCAAAWB6BCAAAWB6BqBq99957ioyMVL169dSuXTv985//rOku3RTS09N17733yt/fX0FBQXr44Ye1b98+lxrDMJSWlqawsDD5+Pioc+fO2rNnTw31+OaSnp4um82mlJQUcx/j7V7fffedBg4cqMaNG8vX11e/+MUvlJOTYx5nvN3nhx9+0K9//WtFRkbKx8dHzZs31+uvv64LFy6YNYx31X3xxRd66KGHFBYWJpvNpr/97W8uxysztqWlpRo5cqQCAwPl5+enxMREHTly5Po7Z6BaZGRk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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "(\n",
+ " picsed_df\n",
+ " .filter(f.col('locus').isNotNull())\n",
+ " .select(\n",
+ " 'studyId',\n",
+ " 'variantId',\n",
+ " f.aggregate(\n",
+ " f.transform(\n",
+ " f.col('locus'),\n",
+ " lambda locus: f.when(locus.is99CredibleSet, f.lit(1.0)).otherwise( f.lit(0.0))\n",
+ " ),\n",
+ " f.lit(0.0),\n",
+ " lambda summa, value: summa + value\n",
+ " ).alias('99CredCount'),\n",
+ " f.aggregate(\n",
+ " f.transform(\n",
+ " f.col('locus'),\n",
+ " lambda locus: f.when(locus.is95CredibleSet, f.lit(1.0)).otherwise( f.lit(0.0))\n",
+ " ),\n",
+ " f.lit(0.0),\n",
+ " lambda summa, value: summa + value\n",
+ " ).alias('95CredCount'),\n",
+ " )\n",
+ "# .orderBy(f.col('99CredCount').desc())\n",
+ "# .show()\n",
+ " .filter(f.col('99CredCount') < 100)\n",
+ "# .count()\n",
+ " .toPandas()\n",
+ " [['99CredCount', '95CredCount']]\n",
+ " .plot.hist(bins=25, alpha=0.5, label='Credible set size')\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a8b99c39",
+ "metadata": {},
+ "source": [
+ "## Finngen clumping with locus\n",
+ "\n",
+ "- Window width: 500kbp\n",
+ "- Locus width: 250kbp\n",
+ "- LD threshold: 0.5\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "09f14d49",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-13T09:54:35.337711Z",
+ "start_time": "2023-10-13T09:54:34.446422Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Import:\n",
+ "from pyspark.sql import functions as f, types as t\n",
+ "\n",
+ "from otg.common.session import Session\n",
+ "\n",
+ "from otg.dataset.summary_statistics import SummaryStatistics\n",
+ "from otg.dataset.study_locus import StudyLocus\n",
+ "from otg.dataset.study_index import StudyIndex\n",
+ "from otg.dataset.ld_index import LDIndex\n",
+ "from otg.method.ld import LDAnnotator\n",
+ "\n",
+ "from otg.method.pics import PICS\n",
+ "\n",
+ "# Initialize session:\n",
+ "session = Session()\n",
+ "\n",
+ "# Input:\n",
+ "sumstats = 'gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/*'\n",
+ "ld_index_path = 'gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/ld_index/'\n",
+ "\n",
+ "# Output:\n",
+ "ld_clumped_output = 'gs://ot-team/dsuveges/finngen/2023.10.06_LD_clumped'\n",
+ "picsed_output = 'gs://ot-team/dsuveges/finngen/2023.10.06_PICSed'\n",
+ "window_based_clumped_output = 'gs://ot-team/dsuveges/finngen/2023.10.06_window_clumped'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "52861491",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-13T11:39:14.790777Z",
+ "start_time": "2023-10-13T10:47:20.349271Z"
+ },
+ "code_folding": [],
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/13 10:47:53 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for right outer join.\n",
+ "23/10/13 10:47:53 WARN package: Truncated the string representation of a plan since it was too large. This behavior can be adjusted by setting 'spark.sql.debug.maxToStringFields'.\n",
+ "23/10/13 10:48:19 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=1248; previousMaxLatencyMs=1230; operationCount=59116581; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_OTHER_SYSTCON_FG/chromosome=2/part-00019-1d683f00-9247-401b-846c-8b2498bc68bf.c000.snappy.parquet\n",
+ "23/10/13 10:49:02 WARN GhfsStorageStatistics: Detected potential high latency for operation op_get_file_status. latencyMs=1039; previousMaxLatencyMs=1037; operationCount=126124; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_K11_SCISS_BITE_INCLAVO/chromosome=2/part-00018-e37f4a01-bdb4-442f-8dcd-681da303e876.c000.snappy.parquet\n",
+ "23/10/13 10:52:37 WARN GhfsStorageStatistics: Detected potential high latency for operation op_get_file_status. latencyMs=1917; previousMaxLatencyMs=1039; operationCount=144264; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_AUTOIMMUNE_NONTHYROID_STRICT/chromosome=5/part-00006-02537c5f-2dea-47c5-8655-b0d84827115a.c000.snappy.parquet\n",
+ "23/10/13 10:52:38 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_read_operations. latencyMs=1942; previousMaxLatencyMs=1248; operationCount=94444057; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_K11_PULPITIS_1_ONLYAVO/chromosome=5/part-00006-de277609-305a-4cec-8bb1-5b37a70be48b.c000.snappy.parquet\n",
+ "23/10/13 11:07:41 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for right outer join.\n",
+ "23/10/13 11:12:32 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for right outer join.\n",
+ "23/10/13 11:12:48 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for right outer join.\n",
+ "23/10/13 11:21:40 WARN GoogleCloudStorageReadChannel: Failed read retry #1/10 for 'gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_H7_CONJUHAEMOR/chromosome=12/part-00016-03e2c019-d707-414b-b4e1-8b6474ccfb26.c000.snappy.parquet'. Sleeping...\n",
+ "java.net.SocketException: Connection reset\n",
+ "\tat java.net.SocketInputStream.read(SocketInputStream.java:186) ~[?:?]\n",
+ "\tat java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:920) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:884) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.readUntilDataAvailable(ConscryptEngineSocket.java:799) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:772) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat java.io.BufferedInputStream.read1(BufferedInputStream.java:290) ~[?:?]\n",
+ "\tat java.io.BufferedInputStream.read(BufferedInputStream.java:351) ~[?:?]\n",
+ "\tat sun.net.www.MeteredStream.read(MeteredStream.java:134) ~[?:?]\n",
+ "\tat java.io.FilterInputStream.read(FilterInputStream.java:133) ~[?:?]\n",
+ "\tat sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3529) ~[?:?]\n",
+ "\tat com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.http.javanet.NetHttpResponse$SizeValidatingInputStream.read(NetHttpResponse.java:164) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat java.io.BufferedInputStream.read1(BufferedInputStream.java:290) ~[?:?]\n",
+ "\tat java.io.BufferedInputStream.read(BufferedInputStream.java:351) ~[?:?]\n",
+ "\tat java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:388) ~[?:?]\n",
+ "\tat com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageReadChannel.read(GoogleCloudStorageReadChannel.java:315) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat com.google.cloud.hadoop.fs.gcs.GoogleHadoopFSInputStream.lambda$read$1(GoogleHadoopFSInputStream.java:170) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat com.google.cloud.hadoop.fs.gcs.GhfsStorageStatistics.trackDuration(GhfsStorageStatistics.java:77) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat com.google.cloud.hadoop.fs.gcs.GoogleHadoopFSInputStream.read(GoogleHadoopFSInputStream.java:159) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat java.io.DataInputStream.read(DataInputStream.java:149) ~[?:?]\n",
+ "\tat org.apache.parquet.io.DelegatingSeekableInputStream.readFully(DelegatingSeekableInputStream.java:102) ~[parquet-common-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.io.DelegatingSeekableInputStream.readFullyHeapBuffer(DelegatingSeekableInputStream.java:127) ~[parquet-common-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.io.DelegatingSeekableInputStream.readFully(DelegatingSeekableInputStream.java:91) ~[parquet-common-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.hadoop.ParquetFileReader$ConsecutivePartList.readAll(ParquetFileReader.java:1704) ~[parquet-hadoop-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.hadoop.ParquetFileReader.readNextRowGroup(ParquetFileReader.java:925) ~[parquet-hadoop-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.hadoop.ParquetFileReader.readNextFilteredRowGroup(ParquetFileReader.java:972) ~[parquet-hadoop-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.SpecificParquetRecordReaderBase$ParquetRowGroupReaderImpl.readNextRowGroup(SpecificParquetRecordReaderBase.java:320) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.checkEndOfRowGroup(VectorizedParquetRecordReader.java:403) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextBatch(VectorizedParquetRecordReader.java:324) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextKeyValue(VectorizedParquetRecordReader.java:227) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.RecordReaderIterator.hasNext(RecordReaderIterator.scala:39) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:116) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.nextIterator(FileScanRDD.scala:274) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:116) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.FileSourceScanExec$$anon$1.hasNext(DataSourceScanExec.scala:565) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.columnartorow_nextBatch_0$(Unknown Source) ~[?:?]\n",
+ "\tat org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source) ~[?:?]\n",
+ "\tat org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.WholeStageCodegenExec$$anon$1.hasNext(WholeStageCodegenExec.scala:760) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460) ~[scala-library-2.12.14.jar:?]\n",
+ "\tat org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:142) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.shuffle.ShuffleWriteProcessor.write(ShuffleWriteProcessor.scala:59) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:52) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.scheduler.Task.run(Task.scala:136) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$3(Executor.scala:548) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1504) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:551) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]\n",
+ "\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]\n",
+ "\tat java.lang.Thread.run(Thread.java:829) ~[?:?]\n",
+ "23/10/13 11:21:41 WARN GoogleCloudStorageReadChannel: Failed read retry #1/10 for 'gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/preprocess/finngen/summary_stats/FINNGEN_R9_AMN2/chromosome=12/part-00016-6c463da6-b063-495d-8b62-8ad766491cfb.c000.snappy.parquet'. Sleeping...\n",
+ "java.net.SocketException: Connection reset\n",
+ "\tat java.net.SocketInputStream.read(SocketInputStream.java:186) ~[?:?]\n",
+ "\tat java.net.SocketInputStream.read(SocketInputStream.java:140) ~[?:?]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:920) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:884) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.readUntilDataAvailable(ConscryptEngineSocket.java:799) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:772) ~[conscrypt-openjdk-2.5.2-linux-x86_64.jar:2.5.2]\n",
+ "\tat java.io.BufferedInputStream.read1(BufferedInputStream.java:290) ~[?:?]\n",
+ "\tat java.io.BufferedInputStream.read(BufferedInputStream.java:351) ~[?:?]\n",
+ "\tat sun.net.www.MeteredStream.read(MeteredStream.java:134) ~[?:?]\n",
+ "\tat java.io.FilterInputStream.read(FilterInputStream.java:133) ~[?:?]\n",
+ "\tat sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3529) ~[?:?]\n",
+ "\tat com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.http.javanet.NetHttpResponse$SizeValidatingInputStream.read(NetHttpResponse.java:164) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat java.io.BufferedInputStream.read1(BufferedInputStream.java:290) ~[?:?]\n",
+ "\tat java.io.BufferedInputStream.read(BufferedInputStream.java:351) ~[?:?]\n",
+ "\tat java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:388) ~[?:?]\n",
+ "\tat com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageReadChannel.read(GoogleCloudStorageReadChannel.java:315) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat com.google.cloud.hadoop.fs.gcs.GoogleHadoopFSInputStream.lambda$read$1(GoogleHadoopFSInputStream.java:170) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat com.google.cloud.hadoop.fs.gcs.GhfsStorageStatistics.trackDuration(GhfsStorageStatistics.java:77) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat com.google.cloud.hadoop.fs.gcs.GoogleHadoopFSInputStream.read(GoogleHadoopFSInputStream.java:159) ~[gcs-connector-hadoop3-2.2.16.jar:?]\n",
+ "\tat java.io.DataInputStream.read(DataInputStream.java:149) ~[?:?]\n",
+ "\tat org.apache.parquet.io.DelegatingSeekableInputStream.readFully(DelegatingSeekableInputStream.java:102) ~[parquet-common-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.io.DelegatingSeekableInputStream.readFullyHeapBuffer(DelegatingSeekableInputStream.java:127) ~[parquet-common-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.io.DelegatingSeekableInputStream.readFully(DelegatingSeekableInputStream.java:91) ~[parquet-common-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.hadoop.ParquetFileReader$ConsecutivePartList.readAll(ParquetFileReader.java:1704) ~[parquet-hadoop-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.hadoop.ParquetFileReader.readNextRowGroup(ParquetFileReader.java:925) ~[parquet-hadoop-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.parquet.hadoop.ParquetFileReader.readNextFilteredRowGroup(ParquetFileReader.java:972) ~[parquet-hadoop-1.12.2.jar:1.12.2]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.SpecificParquetRecordReaderBase$ParquetRowGroupReaderImpl.readNextRowGroup(SpecificParquetRecordReaderBase.java:320) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.checkEndOfRowGroup(VectorizedParquetRecordReader.java:403) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextBatch(VectorizedParquetRecordReader.java:324) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextKeyValue(VectorizedParquetRecordReader.java:227) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.RecordReaderIterator.hasNext(RecordReaderIterator.scala:39) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:116) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.nextIterator(FileScanRDD.scala:274) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:116) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.FileSourceScanExec$$anon$1.hasNext(DataSourceScanExec.scala:565) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.columnartorow_nextBatch_0$(Unknown Source) ~[?:?]\n",
+ "\tat org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source) ~[?:?]\n",
+ "\tat org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.sql.execution.WholeStageCodegenExec$$anon$1.hasNext(WholeStageCodegenExec.scala:760) ~[spark-sql_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460) ~[scala-library-2.12.14.jar:?]\n",
+ "\tat org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:170) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.shuffle.ShuffleWriteProcessor.write(ShuffleWriteProcessor.scala:59) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:52) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.scheduler.Task.run(Task.scala:136) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$3(Executor.scala:548) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1504) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:551) ~[spark-core_2.12-3.3.0.jar:3.3.0]\n",
+ "\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]\n",
+ "\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]\n",
+ "\tat java.lang.Thread.run(Thread.java:829) ~[?:?]\n",
+ "23/10/13 11:36:03 WARN HintErrorLogger: Hint (strategy=broadcast) is not supported in the query: build right for right outer join.\n",
+ "23/10/13 11:39:00 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=202; previousMaxLatencyMs=190; operationCount=105; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_20231013113900962145652452525416_0067_m_000009_79286/part-00009-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ "23/10/13 11:39:00 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=216; previousMaxLatencyMs=202; operationCount=105; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_202310131139003257422348970599913_0067_m_000028_79305/part-00028-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ "23/10/13 11:39:00 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=218; previousMaxLatencyMs=216; operationCount=105; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_202310131139006484121277706965747_0067_m_000003_79280/part-00003-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ "23/10/13 11:39:01 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=243; previousMaxLatencyMs=218; operationCount=105; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_202310131139004953018478188900860_0067_m_000023_79300/part-00023-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ "23/10/13 11:39:02 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=165; previousMaxLatencyMs=153; operationCount=92; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_202310131139003598197994288369319_0067_m_000026_79303/part-00026-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ "23/10/13 11:39:02 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=193; previousMaxLatencyMs=165; operationCount=99; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_202310131139004279983947938826985_0067_m_000025_79302/part-00025-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ "23/10/13 11:39:02 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=243; previousMaxLatencyMs=193; operationCount=103; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_202310131139004602145763603687891_0067_m_000030_79307/part-00030-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ "23/10/13 11:39:02 WARN GhfsStorageStatistics: Detected potential high latency for operation stream_write_close_operations. latencyMs=329; previousMaxLatencyMs=243; operationCount=104; context=gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus/_temporary/0/_temporary/attempt_20231013113900353649088592248874_0067_m_000005_79282/part-00005-65e9ae61-ec7d-4672-a525-8de91e583465-c000.snappy.parquet\n",
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "window_based_clumped_output = 'gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus'\n",
+ "\n",
+ "clump_window_length = 500_000\n",
+ "locus_window_length = 250_000\n",
+ "\n",
+ "(\n",
+ " SummaryStatistics(\n",
+ " _df=(\n",
+ " session.spark.read.parquet(sumstats, recursiveFileLookup=True)\n",
+ " .withColumn(\n",
+ " 'chromosome',\n",
+ " f.split(f.col('variantId'), '_')[0]\n",
+ " )\n",
+ " ),\n",
+ " _schema=SummaryStatistics.get_schema()\n",
+ " )\n",
+ " .window_based_clumping(\n",
+ " distance=clump_window_length,\n",
+ " locus_collect_distance=locus_window_length,\n",
+ " with_locus=True\n",
+ " )\n",
+ " .df.write.mode('overwrite')\n",
+ " .parquet(window_based_clumped_output)\n",
+ ")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "6b234362",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-13T12:39:15.023402Z",
+ "start_time": "2023-10-13T11:50:42.603425Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+---------------------+---------+---------+---------------+\n",
+ "| studyId|ldPopulationStructure|projectId|studyType|traitFromSource|\n",
+ "+--------------------+---------------------+---------+---------+---------------+\n",
+ "|FINNGEN_R9_K11_EN...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_H7_KER...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_H8_EXT...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_H7_RET...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_RHEUMA...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_H7_KER...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_HEIGHT...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_M13_SY...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_M13_DO...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_M13_PY...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "| FINNGEN_R9_GOUT_NOS| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_M13_FI...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_ALLERG...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_E4_DM2...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_G6_CER...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_L12_UR...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_AUTOIM...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_I9_HYP...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_M13_AR...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "|FINNGEN_R9_K11_AP...| [{fin, 1.0}]| FINNGEN| gwas| cicaful|\n",
+ "+--------------------+---------------------+---------+---------+---------------+\n",
+ "only showing top 20 rows\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "23/10/13 11:55:34 WARN GhfsStorageStatistics: Detected potential high latency for operation op_open. latencyMs=676; previousMaxLatencyMs=470; operationCount=333148; context=gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/ld_index/chromosome=5/part-00076-ff42773a-494c-46d2-bc22-322062b5e715.c000.snappy.parquet\n",
+ "23/10/13 12:39:11 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=279; previousMaxLatencyMs=243; operationCount=140; context=gs://ot-team/dsuveges/finngen/2023.10.13_ld_clumped_w_locus/_temporary/0/_temporary/attempt_202310131239103300432709600941830_0086_m_000000_80535/part-00000-17d449c4-f0c3-4617-b378-b74b864ab64a-c000.snappy.parquet\n",
+ "23/10/13 12:39:11 WARN GhfsStorageStatistics: Detected potential high latency for operation op_create. latencyMs=335; previousMaxLatencyMs=279; operationCount=140; context=gs://ot-team/dsuveges/finngen/2023.10.13_ld_clumped_w_locus/_temporary/0/_temporary/attempt_202310131239106417331548307580589_0086_m_000027_80562/part-00027-17d449c4-f0c3-4617-b378-b74b864ab64a-c000.snappy.parquet\n",
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "ld_clumped_output = 'gs://ot-team/dsuveges/finngen/2023.10.13_ld_clumped_w_locus'\n",
+ "\n",
+ "studies_df = (\n",
+ " session.spark.read.parquet(window_based_clumped_output)\n",
+ " # Generating a list of study identifiers:\n",
+ " .select('studyId')\n",
+ " .distinct()\n",
+ " # Adding fabricated values required to parse as gwas catalog study:\n",
+ " .select(\n",
+ " 'studyId',\n",
+ " StudyIndex.aggregate_and_map_ancestries(\n",
+ " f.array(\n",
+ " f.struct(\n",
+ " f.lit('Finnish').alias('ancestry'),\n",
+ " f.lit(100).cast('long').alias('sampleSize')\n",
+ " )\n",
+ " )\n",
+ " ).alias('ldPopulationStructure'),\n",
+ " f.lit('FINNGEN').alias('projectId'),\n",
+ " f.lit('gwas').alias('studyType'),\n",
+ " f.lit('cicaful').alias('traitFromSource')\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "study_index = (\n",
+ " StudyIndex(\n",
+ " _df=studies_df,\n",
+ " _schema=StudyIndex.get_schema()\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "study_index.df.show()\n",
+ "\n",
+ "# Loading ld index:\n",
+ "ld_index = LDIndex.from_parquet(session, ld_index_path)\n",
+ "\n",
+ "(\n",
+ " # To annotate study/locus, study level info and ld panel is needed:\n",
+ " LDAnnotator.ld_annotate(\n",
+ " StudyLocus.from_parquet(session, window_based_clumped_output),\n",
+ " study_index, \n",
+ " ld_index\n",
+ " )\n",
+ " # Clumping linked study-loci together:\n",
+ " .clump()\n",
+ " .df.write.mode('overwrite').parquet(ld_clumped_output)\n",
+ ")\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "f637e3c0",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-13T10:43:26.766382Z",
+ "start_time": "2023-10-13T10:43:25.980232Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------------------------------------------------+-----+\n",
+ "|qualityControls |count|\n",
+ "+--------------------------------------------------------------+-----+\n",
+ "|[Variant not found in LD reference] |4607 |\n",
+ "|[] |13813|\n",
+ "|[Explained by a more significant variant in high LD (clumped)]|585 |\n",
+ "+--------------------------------------------------------------+-----+\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "(\n",
+ " session.spark.read.parquet(ld_clumped_output)\n",
+ " .groupBy('qualityControls')\n",
+ " .count()\n",
+ "# .show(1, False, True)\n",
+ " .show(truncate=False)\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "5bf42196",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-13T12:55:39.212186Z",
+ "start_time": "2023-10-13T12:55:38.131092Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "[Row(locus=[Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99764322_T_C', pValueMantissa=2.3949999809265137, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0201963, standardError=0.00665169, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99764860_G_A', pValueMantissa=1.0499999523162842, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00813303, standardError=0.00248194, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99765280_C_T', pValueMantissa=7.499000072479248, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0147615, standardError=0.00437943, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99765335_A_G', pValueMantissa=1.2640000581741333, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107816, standardError=0.00189456, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99766311_C_T', pValueMantissa=1.0579999685287476, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.010837, standardError=0.00189422, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99766702_A_G', pValueMantissa=1.2059999704360962, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107966, standardError=0.00189453, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99766923_T_C', pValueMantissa=1.3300000429153442, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010765, standardError=0.00189451, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99767090_TTTG_T', pValueMantissa=1.2740000486373901, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107778, standardError=0.00189432, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99768341_T_C', pValueMantissa=1.2289999723434448, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107887, standardError=0.00189422, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99768718_A_G', pValueMantissa=1.2649999856948853, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107795, standardError=0.0018942, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99768993_G_A', pValueMantissa=1.1629999876022339, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108066, standardError=0.00189423, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99769297_T_C', pValueMantissa=1.2929999828338623, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0113037, standardError=0.00186275, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99769386_C_T', pValueMantissa=1.7280000448226929, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00670209, standardError=0.00281514, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99769548_A_G', pValueMantissa=1.7280000448226929, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0067021, standardError=0.00281514, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99769607_C_T', pValueMantissa=1.2710000276565552, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107775, standardError=0.00189416, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99770233_A_AT', pValueMantissa=1.1360000371932983, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108149, standardError=0.00189434, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99771038_C_A', pValueMantissa=1.1039999723434448, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0108218, standardError=0.00189392, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99771332_T_C', pValueMantissa=1.284999966621399, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00972726, standardError=0.00390986, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99771548_C_T', pValueMantissa=1.1369999647140503, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108168, standardError=0.00189473, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99774249_G_A', pValueMantissa=1.0410000085830688, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00813435, standardError=0.00248058, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99774476_AT_A', pValueMantissa=1.1540000438690186, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0108061, standardError=0.0018937, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99777761_G_A', pValueMantissa=2.9170000553131104, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0857961, standardError=0.0393337, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99777984_T_G', pValueMantissa=9.097999572753906, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108749, standardError=0.00189236, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99778063_G_A', pValueMantissa=1.2730000019073486, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00887632, standardError=0.00203368, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99778821_G_A', pValueMantissa=1.6679999828338623, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00682868, standardError=0.00285271, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99779613_C_G', pValueMantissa=7.630000114440918, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109299, standardError=0.00189215, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99781296_A_G', pValueMantissa=8.560999870300293, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.010892, standardError=0.00189195, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99781822_G_A', pValueMantissa=1.4390000104904175, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00689344, standardError=0.00281655, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99781826_A_G', pValueMantissa=7.65500020980835, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0109284, standardError=0.00189207, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99782821_C_T', pValueMantissa=1.3680000305175781, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00573303, standardError=0.00232523, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99783206_A_G', pValueMantissa=7.632999897003174, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99783290_A_C', pValueMantissa=8.821999549865723, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108841, standardError=0.00189224, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99784269_C_T', pValueMantissa=9.149999618530273, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108721, standardError=0.00189218, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99784331_G_A', pValueMantissa=4.435999870300293, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0327234, standardError=0.0162747, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99784751_C_A', pValueMantissa=3.0409998893737793, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.149822, standardError=0.0692119, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99785581_A_G', pValueMantissa=7.164000034332275, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0113888, standardError=0.00423514, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99786875_C_T', pValueMantissa=5.257999897003174, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0110515, standardError=0.00189278, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787050_C_G', pValueMantissa=6.671999931335449, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109731, standardError=0.00189226, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787264_C_A', pValueMantissa=7.834000110626221, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109198, standardError=0.00189186, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787285_C_T', pValueMantissa=9.189000129699707, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108723, standardError=0.00189246, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787359_T_G', pValueMantissa=7.504000186920166, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109356, standardError=0.00189222, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787460_G_T', pValueMantissa=6.499000072479248, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.010984, standardError=0.00189269, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787461_G_T', pValueMantissa=6.499000072479248, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.010984, standardError=0.00189269, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787483_G_A', pValueMantissa=7.631999969482422, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787568_C_T', pValueMantissa=7.631999969482422, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787571_C_T', pValueMantissa=7.631999969482422, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787694_A_AT', pValueMantissa=7.631999969482422, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787855_C_T', pValueMantissa=8.937999725341797, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108798, standardError=0.00189223, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787860_C_T', pValueMantissa=7.64300012588501, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0231471, standardError=0.0086776, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787890_G_A', pValueMantissa=7.631999969482422, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787906_T_A', pValueMantissa=7.631999969482422, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99787915_T_G', pValueMantissa=7.631999969482422, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99788026_C_T', pValueMantissa=7.7870001792907715, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109255, standardError=0.00189252, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99788420_A_C', pValueMantissa=7.001999855041504, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109573, standardError=0.00189216, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99788711_G_A', pValueMantissa=1.0420000553131104, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0108302, standardError=0.00189215, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99788859_C_T', pValueMantissa=7.632999897003174, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99788952_C_T', pValueMantissa=9.12399959564209, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108727, standardError=0.00189214, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99789038_A_G', pValueMantissa=7.164000034332275, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109498, standardError=0.00189212, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99789217_G_C', pValueMantissa=7.72599983215332, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109277, standardError=0.00189247, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99789506_G_C', pValueMantissa=7.671000003814697, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109278, standardError=0.00189209, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99789829_T_G', pValueMantissa=7.632999897003174, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99790008_G_A', pValueMantissa=7.603000164031982, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109305, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99790154_G_A', pValueMantissa=7.632999897003174, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99790319_T_G', pValueMantissa=7.857999801635742, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109213, standardError=0.00189229, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99791174_G_A', pValueMantissa=7.623000144958496, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0276216, standardError=0.00820577, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99791224_A_G', pValueMantissa=7.632999897003174, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109293, standardError=0.00189206, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99793129_A_T', pValueMantissa=9.17300033569336, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108711, standardError=0.00189215, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99793502_C_T', pValueMantissa=1.0099999904632568, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108395, standardError=0.00189201, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99793829_C_CGTAT', pValueMantissa=3.756999969482422, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.201946, standardError=0.0971122, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99794292_T_A', pValueMantissa=1.8420000076293945, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0427514, standardError=0.0181376, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99794803_C_G', pValueMantissa=3.76200008392334, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0754336, standardError=0.0362844, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99797363_G_A', pValueMantissa=2.696000099182129, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0451691, standardError=0.0204184, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99797572_A_C', pValueMantissa=7.729000091552734, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0109255, standardError=0.0018921, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99798877_A_T', pValueMantissa=5.47599983215332, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111187, standardError=0.0019065, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99798989_G_T', pValueMantissa=4.708000183105469, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00645552, standardError=0.00184611, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99799669_G_A', pValueMantissa=1.3769999742507935, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0283588, standardError=0.0115134, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99801055_G_A', pValueMantissa=5.751999855041504, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0863438, standardError=0.0312661, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99801648_T_C', pValueMantissa=5.201000213623047, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.35431, standardError=0.126797, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99802216_C_T', pValueMantissa=8.795999526977539, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0312825, standardError=0.00584722, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99803737_A_G', pValueMantissa=4.105000019073486, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0838538, standardError=0.0410448, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99804058_G_A', pValueMantissa=9.253999710083008, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00819335, standardError=0.00247362, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99804255_C_G', pValueMantissa=8.798999786376953, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0312823, standardError=0.00584723, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99804875_C_T', pValueMantissa=2.2079999446868896, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0532293, standardError=0.023254, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99805400_A_G', pValueMantissa=5.626999855041504, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0215236, standardError=0.00777382, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99805994_G_A', pValueMantissa=1.6449999809265137, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0125221, standardError=0.00522031, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99806253_C_T', pValueMantissa=1.2120000123977661, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00800751, standardError=0.00247451, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99806469_CAT_C', pValueMantissa=1.996999979019165, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.01596, standardError=0.00685871, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99807109_T_A', pValueMantissa=3.994999885559082, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0097045, standardError=0.00274107, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99807669_A_G', pValueMantissa=4.577000141143799, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111561, standardError=0.00190316, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99807962_A_G', pValueMantissa=3.7709999084472656, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0677375, standardError=0.0325981, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99809156_C_A', pValueMantissa=1.4980000257492065, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00696552, standardError=0.0028632, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99809726_T_C', pValueMantissa=4.446000099182129, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111654, standardError=0.00190318, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99809873_G_A', pValueMantissa=4.642000198364258, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.122379, standardError=0.0614495, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99811236_C_A', pValueMantissa=7.059999942779541, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0110215, standardError=0.00190371, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99811771_C_T', pValueMantissa=4.526000022888184, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0111597, standardError=0.00190317, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99815174_G_C', pValueMantissa=6.111000061035156, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0110649, standardError=0.00190324, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99815628_A_G', pValueMantissa=9.194999694824219, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0211397, standardError=0.00637879, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99815640_A_G', pValueMantissa=8.413999557495117, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0902758, standardError=0.0342605, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99816387_G_A', pValueMantissa=4.604000091552734, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0346061, standardError=0.0173466, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99816562_G_A', pValueMantissa=3.677000045776367, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00976812, standardError=0.00274214, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99816570_G_A', pValueMantissa=1.152999997138977, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00804666, standardError=0.00247569, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99817203_T_C', pValueMantissa=7.421999931335449, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0110057, standardError=0.00190374, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99818525_T_C', pValueMantissa=1.4880000352859497, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0186574, standardError=0.0076615, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99819195_T_G', pValueMantissa=6.382999897003174, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0124767, standardError=0.0045745, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99820908_A_G', pValueMantissa=1.4980000257492065, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00696602, standardError=0.0028633, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99821086_GA_G', pValueMantissa=3.259999990463257, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0113261, standardError=0.00272622, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99821094_C_T', pValueMantissa=4.098999977111816, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0112471, standardError=0.00191273, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99821955_T_G', pValueMantissa=4.670000076293945, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0112087, standardError=0.00191323, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99822427_T_C', pValueMantissa=2.058000087738037, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115151, standardError=0.00192136, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99822696_T_C', pValueMantissa=7.763000011444092, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.162918, standardError=0.0611962, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99823047_A_G', pValueMantissa=7.198999881744385, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0110742, standardError=0.0019139, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99823280_T_C', pValueMantissa=1.1619999408721924, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00804213, standardError=0.00247592, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99825419_A_G', pValueMantissa=1.2710000276565552, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0826158, standardError=0.0331567, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99825752_T_C', pValueMantissa=6.0370001792907715, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0111297, standardError=0.00191372, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99825835_C_T', pValueMantissa=6.0320000648498535, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0111299, standardError=0.00191372, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99827260_C_T', pValueMantissa=3.6500000953674316, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0489284, standardError=0.0233964, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99828083_C_T', pValueMantissa=3.938999891281128, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0959414, standardError=0.0465714, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99828402_T_A', pValueMantissa=9.142000198364258, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0211518, standardError=0.00637931, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99828407_A_T', pValueMantissa=9.133999824523926, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0211533, standardError=0.0063793, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99829453_A_AT', pValueMantissa=6.083000183105469, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0111253, standardError=0.00191338, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99829545_ATATTT_A', pValueMantissa=4.810999870300293, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0112061, standardError=0.00191441, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99830168_G_A', pValueMantissa=1.218999981880188, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00801018, standardError=0.00247653, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99830263_G_A', pValueMantissa=1.6970000267028809, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0179959, standardError=0.00753787, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99832187_T_C', pValueMantissa=4.421000003814697, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0112213, standardError=0.0019124, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99832400_AAC_A', pValueMantissa=6.706999778747559, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0110021, standardError=0.00189753, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99832402_C_CTGTGTGT', pValueMantissa=6.710999965667725, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0110019, standardError=0.00189753, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99832563_A_G', pValueMantissa=1.4479999542236328, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0090241, standardError=0.00187287, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99832865_A_G', pValueMantissa=4.169000148773193, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0105412, standardError=0.00192234, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99834145_G_C', pValueMantissa=6.802999973297119, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.260334, standardError=0.0961939, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99834214_T_C', pValueMantissa=1.784000039100647, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0474718, standardError=0.0200386, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99835361_G_A', pValueMantissa=2.0769999027252197, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0595141, standardError=0.0257408, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99841479_C_T', pValueMantissa=6.188000202178955, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104861, standardError=0.00193711, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99842816_A_G', pValueMantissa=8.645000457763672, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00723726, standardError=0.00184352, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99844024_C_G', pValueMantissa=2.3450000286102295, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107969, standardError=0.00193341, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99844450_C_T', pValueMantissa=2.874000072479248, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107269, standardError=0.00193316, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99845178_C_T', pValueMantissa=4.0320000648498535, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0656125, standardError=0.0319983, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99845936_A_G', pValueMantissa=3.069999933242798, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00675859, standardError=0.00312767, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99848765_C_G', pValueMantissa=2.8910000324249268, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114511, standardError=0.00192855, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99850966_A_G', pValueMantissa=8.373000144958496, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101864, standardError=0.00190084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99852563_C_T', pValueMantissa=4.5329999923706055, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0113089, standardError=0.0019287, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99853411_T_TG', pValueMantissa=9.414999961853027, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011087, standardError=0.00193121, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99856822_A_G', pValueMantissa=2.7119998931884766, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114876, standardError=0.00193129, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99856987_G_C', pValueMantissa=5.239999771118164, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010358, standardError=0.001903, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99857429_C_T', pValueMantissa=1.718000054359436, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116617, standardError=0.00193637, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99857502_A_G', pValueMantissa=6.296000003814697, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010296, standardError=0.00190308, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99857670_G_A', pValueMantissa=2.7939999103546143, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011478, standardError=0.00193126, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99857979_C_T', pValueMantissa=2.5840001106262207, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00775769, standardError=0.00184386, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99858035_C_T', pValueMantissa=2.7939999103546143, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011478, standardError=0.00193127, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99858181_G_C', pValueMantissa=2.7920000553131104, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114783, standardError=0.00193127, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99858624_T_C', pValueMantissa=6.314000129699707, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0103011, standardError=0.0019042, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99859267_C_A', pValueMantissa=1.5019999742507935, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0239274, standardError=0.00753783, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99859558_G_A', pValueMantissa=6.2779998779296875, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0321283, standardError=0.00593792, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99859674_G_A', pValueMantissa=1.1050000190734863, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100907, standardError=0.00190082, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99861014_C_G', pValueMantissa=1.350000023841858, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0080568, standardError=0.00185135, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99861191_A_G', pValueMantissa=2.062000036239624, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00788332, standardError=0.00185141, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99861743_A_C', pValueMantissa=1.621999979019165, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00893977, standardError=0.00186417, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99861975_TTGG_T', pValueMantissa=1.5509999990463257, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00895366, standardError=0.00186357, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99862766_C_T', pValueMantissa=1.7289999723434448, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00993376, standardError=0.0019007, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99863009_T_C', pValueMantissa=1.3009999990463257, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0535743, standardError=0.0215732, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99863999_T_C', pValueMantissa=1.4730000495910645, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0137073, standardError=0.00361145, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99864093_A_C', pValueMantissa=5.741000175476074, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0322238, standardError=0.00593803, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99864115_G_T', pValueMantissa=7.295000076293945, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.150642, standardError=0.0445916, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99865012_T_C', pValueMantissa=2.450000047683716, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00781456, standardError=0.00185205, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99865013_G_A', pValueMantissa=1.7259999513626099, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0159887, standardError=0.00510203, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99865261_T_C', pValueMantissa=1.4459999799728394, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00999453, standardError=0.00190036, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99865337_G_GAAGA', pValueMantissa=1.3170000314712524, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00806712, standardError=0.00185143, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99865513_C_G', pValueMantissa=1.3250000476837158, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0080656, standardError=0.00185165, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99866792_C_T', pValueMantissa=1.4500000476837158, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00803164, standardError=0.00185225, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99867170_C_T', pValueMantissa=8.121000289916992, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111182, standardError=0.00192825, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99867197_T_C', pValueMantissa=2.680999994277954, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0171717, standardError=0.00775509, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99867487_C_G', pValueMantissa=2.8310000896453857, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.359987, standardError=0.164156, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99867528_G_T', pValueMantissa=2.8389999866485596, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0077156, standardError=0.0018432, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99868259_G_A', pValueMantissa=2.265000104904175, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.119984, standardError=0.0392983, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99868412_T_G', pValueMantissa=1.6779999732971191, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00994383, standardError=0.00190064, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99868443_A_G', pValueMantissa=1.4809999465942383, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00801978, standardError=0.0018515, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99868585_TC_T', pValueMantissa=1.437999963760376, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0080333, standardError=0.00185188, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99868691_T_G', pValueMantissa=1.4730000495910645, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00802444, standardError=0.00185208, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99869742_G_A', pValueMantissa=4.677000045776367, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101608, standardError=0.00185986, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99870037_G_A', pValueMantissa=3.996999979019165, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0939625, standardError=0.0326443, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99870234_G_A', pValueMantissa=2.5759999752044678, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0270256, standardError=0.00896575, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99871164_A_T', pValueMantissa=9.444999694824219, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101485, standardError=0.0019015, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99871248_A_C', pValueMantissa=4.265999794006348, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011332, standardError=0.00192934, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99871256_C_T', pValueMantissa=1.0980000495910645, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100932, standardError=0.00190087, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99871596_T_C', pValueMantissa=1.097000002861023, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100928, standardError=0.00190078, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99871838_G_C', pValueMantissa=4.270999908447266, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0113316, standardError=0.00192933, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99871912_T_C', pValueMantissa=1.0989999771118164, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100928, standardError=0.00190087, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99872008_T_C', pValueMantissa=1.0989999771118164, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100927, standardError=0.00190087, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99872112_C_T', pValueMantissa=1.093000054359436, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100944, standardError=0.00190084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99872802_A_G', pValueMantissa=2.828000068664551, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0103237, standardError=0.00185953, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99873074_C_T', pValueMantissa=4.716000080108643, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112996, standardError=0.00192927, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99873158_C_T', pValueMantissa=1.1759999990463257, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010069, standardError=0.00190084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99873263_C_T', pValueMantissa=1.1440000534057617, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010071, standardError=0.00189938, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99873471_G_A', pValueMantissa=6.283999919891357, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0723658, standardError=0.0264824, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99873553_C_T', pValueMantissa=1.8109999895095825, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0122764, standardError=0.00286365, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99873602_C_T', pValueMantissa=3.7880001068115234, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102286, standardError=0.00185958, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99874022_C_T', pValueMantissa=3.7920000553131104, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102286, standardError=0.00185966, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99874186_C_CT', pValueMantissa=1.2230000495910645, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100561, standardError=0.00190097, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99875195_T_C', pValueMantissa=4.964000225067139, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112867, standardError=0.00192988, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99875202_G_T', pValueMantissa=1.312999963760376, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100339, standardError=0.00190142, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99875320_C_A', pValueMantissa=1.2369999885559082, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100535, standardError=0.00190119, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99875381_T_C', pValueMantissa=1.2410000562667847, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100525, standardError=0.00190121, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99875452_C_T', pValueMantissa=2.5290000438690186, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0135056, standardError=0.00447237, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99875704_T_A', pValueMantissa=2.9600000381469727, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00410906, standardError=0.00188882, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99875760_A_AG', pValueMantissa=1.2430000305175781, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010052, standardError=0.00190125, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99876031_G_GT', pValueMantissa=1.3940000534057617, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0240895, standardError=0.00753787, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99876891_T_C', pValueMantissa=3.986999988555908, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102146, standardError=0.0018601, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99878758_G_A', pValueMantissa=2.763000011444092, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.151851, standardError=0.0689453, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99878850_C_G', pValueMantissa=4.1519999504089355, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102024, standardError=0.0018603, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99880039_G_A', pValueMantissa=4.0960001945495605, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102077, standardError=0.00186045, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99880120_A_C', pValueMantissa=4.75, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0113026, standardError=0.00193019, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99880736_G_C', pValueMantissa=2.4639999866485596, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.11912, standardError=0.039343, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99882938_G_A', pValueMantissa=4.218999862670898, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102002, standardError=0.00186086, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99883489_C_T', pValueMantissa=7.486000061035156, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0140267, standardError=0.00524475, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99884754_C_T', pValueMantissa=2.5510001182556152, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011665, standardError=0.00195783, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99885306_C_T', pValueMantissa=7.618000030517578, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0122854, standardError=0.00460381, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99885741_T_C', pValueMantissa=4.251999855041504, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101963, standardError=0.00186062, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99887218_A_G', pValueMantissa=1.3589999675750732, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100249, standardError=0.00190197, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99887854_C_T', pValueMantissa=1.3580000400543213, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010025, standardError=0.00190197, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99888103_G_A', pValueMantissa=3.808000087738037, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0456176, standardError=0.0219955, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99889239_G_C', pValueMantissa=1.3580000400543213, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0100256, standardError=0.00190207, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99890983_C_T', pValueMantissa=1.3830000162124634, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.01002, standardError=0.00190223, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99891336_A_G', pValueMantissa=3.815000057220459, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102374, standardError=0.00186162, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99891408_C_T', pValueMantissa=1.6360000371932983, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00996155, standardError=0.00190233, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99891590_G_A', pValueMantissa=6.8420000076293945, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114132, standardError=0.00422021, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99891697_T_C', pValueMantissa=4.46999979019165, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010205, standardError=0.00186523, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99892983_T_C', pValueMantissa=3.4000000953674316, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.177641, standardError=0.083791, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99893179_G_C', pValueMantissa=5.1570000648498535, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112781, standardError=0.00193051, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99893428_C_T', pValueMantissa=4.14300012588501, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0102059, standardError=0.00186081, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99894094_G_C', pValueMantissa=4.321000099182129, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0249459, standardError=0.00708754, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99894492_G_T', pValueMantissa=8.531999588012695, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101123, standardError=0.00188821, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99894565_A_G', pValueMantissa=4.785999774932861, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00954874, standardError=0.00273411, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99894939_T_C', pValueMantissa=8.916999816894531, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00988844, standardError=0.00184916, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99895167_T_C', pValueMantissa=4.169000148773193, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00948941, standardError=0.00187497, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99895555_C_T', pValueMantissa=4.659999847412109, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0340557, standardError=0.0120355, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99896225_G_A', pValueMantissa=1.0920000076293945, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110344, standardError=0.0019305, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99896692_A_G', pValueMantissa=3.4130001068115234, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110917, standardError=0.00187665, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99896979_T_G', pValueMantissa=3.2119998931884766, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0401381, standardError=0.0187308, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99897831_T_C', pValueMantissa=1.9040000438690186, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.14616, standardError=0.0623359, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99898123_G_A', pValueMantissa=1.1069999933242798, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110304, standardError=0.00193059, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99898484_T_A', pValueMantissa=1.1139999628067017, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110285, standardError=0.00193061, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99898828_T_C', pValueMantissa=3.2699999809265137, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111045, standardError=0.00187657, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99899677_C_CTTGT', pValueMantissa=3.51200008392334, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110858, standardError=0.00187714, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99900290_T_G', pValueMantissa=7.426000118255615, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0109405, standardError=0.00189249, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99900292_A_AT', pValueMantissa=1.1360000371932983, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00988613, standardError=0.00390553, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99900500_A_C', pValueMantissa=2.2009999752044678, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0412365, standardError=0.0180062, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99901642_T_C', pValueMantissa=5.086999893188477, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.113465, standardError=0.0405014, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99901731_C_T', pValueMantissa=1.5379999876022339, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0140283, standardError=0.00442901, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99902496_G_A', pValueMantissa=1.2289999723434448, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0224604, standardError=0.00897057, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99902603_C_T', pValueMantissa=4.140999794006348, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0854585, standardError=0.0419028, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99902712_G_C', pValueMantissa=1.1929999589920044, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110082, standardError=0.00193099, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99902720_C_G', pValueMantissa=3.492000102996826, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011087, standardError=0.00187705, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99902757_G_A', pValueMantissa=4.366000175476074, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110198, standardError=0.00187741, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99903008_A_C', pValueMantissa=3.4590001106262207, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.01109, standardError=0.00187705, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99903292_G_A', pValueMantissa=3.4660000801086426, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110895, standardError=0.00187709, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99903681_G_T', pValueMantissa=6.072000026702881, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110979, standardError=0.00190858, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99904413_A_G', pValueMantissa=3.4719998836517334, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110894, standardError=0.00187714, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99904499_G_A', pValueMantissa=1.1369999647140503, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110237, standardError=0.00193097, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99904588_G_A', pValueMantissa=9.54800033569336, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0142134, standardError=0.00430252, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99905340_C_T', pValueMantissa=1.184000015258789, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110128, standardError=0.00193138, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99905534_G_C', pValueMantissa=1.2209999561309814, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0379664, standardError=0.0151507, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99905541_A_G', pValueMantissa=3.575000047683716, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110805, standardError=0.00187717, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99905693_A_G', pValueMantissa=3.490999937057495, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110881, standardError=0.00187721, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99906210_T_C', pValueMantissa=3.5, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110874, standardError=0.00187724, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99906644_G_A', pValueMantissa=1.0570000410079956, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110495, standardError=0.00193126, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99906718_T_C', pValueMantissa=3.4709999561309814, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110901, standardError=0.00187726, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99908035_C_T', pValueMantissa=7.296000003814697, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0148557, standardError=0.00439751, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99908057_A_G', pValueMantissa=7.160999774932861, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0149937, standardError=0.00443164, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99908221_T_C', pValueMantissa=3.878000020980835, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110578, standardError=0.0018776, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99908813_T_C', pValueMantissa=5.124000072479248, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112768, standardError=0.00192994, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99909229_T_C', pValueMantissa=8.24899959564209, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00998922, standardError=0.0018631, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99909454_A_C', pValueMantissa=7.598999977111816, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0109359, standardError=0.00189297, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99910263_C_T', pValueMantissa=5.330999851226807, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111417, standardError=0.00190898, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99910368_T_C', pValueMantissa=3.302999973297119, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011106, standardError=0.00187736, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99910580_T_G', pValueMantissa=1.1369999647140503, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110251, standardError=0.00193122, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99911338_T_C', pValueMantissa=3.4579999446868896, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011092, standardError=0.00187738, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99911811_G_A', pValueMantissa=2.575000047683716, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.118741, standardError=0.0393917, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99912354_A_G', pValueMantissa=5.099999904632568, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112784, standardError=0.00192997, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99912584_A_G', pValueMantissa=3.447999954223633, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011093, standardError=0.00187739, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99913097_C_G', pValueMantissa=3.181999921798706, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111182, standardError=0.00187747, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99913702_T_C', pValueMantissa=1.0369999408721924, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0108274, standardError=0.00422404, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99914373_T_G', pValueMantissa=3.0360000133514404, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.248118, standardError=0.114583, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99915372_A_G', pValueMantissa=3.250999927520752, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111123, standardError=0.0018776, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99915373_G_A', pValueMantissa=3.3289999961853027, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0111042, standardError=0.00187747, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99915884_T_C', pValueMantissa=5.684999942779541, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0109318, standardError=0.00187645, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99915918_T_G', pValueMantissa=1.281000018119812, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00983696, standardError=0.00186253, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99916127_T_C', pValueMantissa=5.081999778747559, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112798, standardError=0.00193, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99916503_A_T', pValueMantissa=6.974999904632568, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00734427, standardError=0.00184662, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99916552_T_C', pValueMantissa=2.9839999675750732, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0122137, standardError=0.00562257, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99917731_C_T', pValueMantissa=5.0289998054504395, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112837, standardError=0.0019301, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99919106_C_T', pValueMantissa=2.8299999237060547, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0131403, standardError=0.00440112, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99920364_C_T', pValueMantissa=4.159999847412109, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0219416, standardError=0.0076565, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99921641_GC_G', pValueMantissa=5.14900016784668, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112777, standardError=0.00193036, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99922010_GAAGA_G', pValueMantissa=3.134999990463257, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0255599, standardError=0.00709237, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99922205_A_G', pValueMantissa=8.65999984741211, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00997687, standardError=0.00186386, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99922419_C_T', pValueMantissa=5.785999774932861, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112417, standardError=0.00193063, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99923392_A_AAAT', pValueMantissa=7.868000030517578, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010012, standardError=0.00186439, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99924208_C_T', pValueMantissa=6.610000133514404, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112121, standardError=0.00193293, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99924251_CACGGTGAA_C', pValueMantissa=5.901000022888184, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0112486, standardError=0.0019329, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99924611_T_C', pValueMantissa=3.5799999237060547, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.028521, standardError=0.0135863, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99924854_A_G', pValueMantissa=4.103000164031982, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.135756, standardError=0.0664409, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99925030_G_A', pValueMantissa=7.132999897003174, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0123943, standardError=0.00460661, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99925171_T_C', pValueMantissa=2.7660000324249268, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0131669, standardError=0.00439981, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99925527_C_T', pValueMantissa=3.3429999351501465, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011112, standardError=0.00187899, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99926307_T_C', pValueMantissa=1.2309999465942383, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00985993, standardError=0.0018643, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99926344_G_A', pValueMantissa=7.146999835968018, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0123917, standardError=0.00460668, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99928121_C_T', pValueMantissa=2.6080000400543213, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0237748, standardError=0.0106854, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99928961_T_A', pValueMantissa=7.409999847412109, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0092492, standardError=0.00274137, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99929621_G_C', pValueMantissa=2.4159998893737793, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00965232, standardError=0.00186913, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99930293_C_T', pValueMantissa=2.371000051498413, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00891412, standardError=0.00188903, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99930622_A_G', pValueMantissa=2.9200000762939453, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0122713, standardError=0.0019469, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99930880_C_G', pValueMantissa=6.189000129699707, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0126631, standardError=0.00193652, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99931871_G_T', pValueMantissa=1.0870000123977661, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132779, standardError=0.00195421, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99932501_G_T', pValueMantissa=7.144999980926514, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130514, standardError=0.0020025, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99932525_C_G', pValueMantissa=3.86299991607666, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132541, standardError=0.00190924, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99932591_G_A', pValueMantissa=3.625999927520752, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0057824, standardError=0.00276148, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99933095_G_A', pValueMantissa=6.820000171661377, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.041325, standardError=0.0152743, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99933333_G_A', pValueMantissa=7.736000061035156, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130529, standardError=0.00190738, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99933398_T_G', pValueMantissa=1.1490000486373901, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132623, standardError=0.00195424, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99933499_T_C', pValueMantissa=7.710999965667725, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130536, standardError=0.00190735, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99933515_AG_A', pValueMantissa=6.0929999351501465, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130982, standardError=0.00200234, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99933811_A_C', pValueMantissa=3.0450000762939453, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0271544, standardError=0.009164, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99933841_A_G', pValueMantissa=7.820000171661377, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130497, standardError=0.00190735, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99935601_G_A', pValueMantissa=6.01200008392334, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131034, standardError=0.00200253, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99935839_G_A', pValueMantissa=1.9040000438690186, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0088457, standardError=0.00185702, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99936985_A_C', pValueMantissa=8.661999702453613, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130204, standardError=0.00190715, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99937543_C_A', pValueMantissa=6.139999866485596, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130966, standardError=0.00200245, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99938738_G_A', pValueMantissa=1.0329999923706055, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132869, standardError=0.00195344, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99939547_T_C', pValueMantissa=6.979000091552734, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130948, standardError=0.00190939, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99939652_G_A', pValueMantissa=4.034999847412109, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132546, standardError=0.00191099, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99940864_C_T', pValueMantissa=5.973999977111816, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131208, standardError=0.0020049, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99941429_ACCTCAGGGTTACC_A', pValueMantissa=4.370999813079834, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.187402, standardError=0.0929166, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99941625_T_C', pValueMantissa=7.7729997634887695, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130649, standardError=0.00190932, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99942056_T_C', pValueMantissa=4.118000030517578, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0832392, standardError=0.0407701, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99942622_C_G', pValueMantissa=4.414999961853027, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132329, standardError=0.00191137, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99942695_T_C', pValueMantissa=5.933000087738037, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131229, standardError=0.0020049, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99942879_G_C', pValueMantissa=4.004000186920166, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132567, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99943051_G_T', pValueMantissa=5.098999977111816, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0153013, standardError=0.00335503, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99943272_T_C', pValueMantissa=4.004000186920166, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132567, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99943700_G_A', pValueMantissa=1.340000033378601, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0629333, standardError=0.0254482, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99943766_A_G', pValueMantissa=3.8440001010894775, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0136334, standardError=0.00196368, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99944281_T_C', pValueMantissa=7.932000160217285, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130606, standardError=0.00190951, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99944562_A_T', pValueMantissa=4.39300012588501, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0135957, standardError=0.0019636, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99944721_TC_T', pValueMantissa=4.39300012588501, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0135957, standardError=0.0019636, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99945215_A_G', pValueMantissa=4.004000186920166, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132567, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99946139_G_A', pValueMantissa=1.3140000104904175, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00899244, standardError=0.00185887, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99946260_A_G', pValueMantissa=4.004000186920166, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132567, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99946307_A_C', pValueMantissa=4.873000144958496, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.12509, standardError=0.063468, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99946514_A_C', pValueMantissa=4.004000186920166, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132567, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99946634_G_A', pValueMantissa=4.004000186920166, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132567, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99947232_A_G', pValueMantissa=5.947999954223633, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131222, standardError=0.00200491, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99947807_T_C', pValueMantissa=4.004000186920166, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132567, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99947876_G_A', pValueMantissa=4.059000015258789, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132552, standardError=0.00191131, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99948681_A_G', pValueMantissa=7.769999980926514, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130649, standardError=0.00190932, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99949062_G_A', pValueMantissa=4.873000144958496, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.12509, standardError=0.063468, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99950056_G_A', pValueMantissa=4.761000156402588, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.107573, standardError=0.0543081, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99952120_T_C', pValueMantissa=1.062000036239624, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0236237, standardError=0.00721645, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99953194_G_A', pValueMantissa=5.874000072479248, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131262, standardError=0.00200494, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99953842_C_T', pValueMantissa=4.118000030517578, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132617, standardError=0.00191282, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99953915_A_G', pValueMantissa=3.8420000076293945, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132682, standardError=0.00191106, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99954520_G_A', pValueMantissa=6.242000102996826, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131087, standardError=0.00200505, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99954533_T_G', pValueMantissa=4.175000190734863, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132459, standardError=0.00191108, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99956142_G_A', pValueMantissa=4.054999828338623, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132533, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99956727_G_A', pValueMantissa=2.9579999446868896, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0132311, standardError=0.00445185, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99958027_A_G', pValueMantissa=7.925000190734863, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130596, standardError=0.00190933, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99959825_G_A', pValueMantissa=4.172999858856201, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0163596, standardError=0.00803454, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99959911_G_A', pValueMantissa=2.3239998817443848, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0134674, standardError=0.00201484, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99962154_T_G', pValueMantissa=6.442999839782715, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130988, standardError=0.002005, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99962896_A_G', pValueMantissa=4.985000133514404, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.018755, standardError=0.00956281, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99963747_T_C', pValueMantissa=3.8350000381469727, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.10415, standardError=0.0360205, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99963755_G_A', pValueMantissa=4.4070000648498535, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132354, standardError=0.00191167, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99963792_C_T', pValueMantissa=1.0329999923706055, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133147, standardError=0.0019575, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99963855_G_A', pValueMantissa=6.202000141143799, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131113, standardError=0.00200516, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99963858_G_C', pValueMantissa=4.052000045776367, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132537, standardError=0.00191104, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99964474_C_A', pValueMantissa=1.5709999799728394, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.013808, standardError=0.0020483, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99964716_C_T', pValueMantissa=3.6579999923706055, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.022367, standardError=0.00769613, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99965353_C_T', pValueMantissa=4.11899995803833, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0832401, standardError=0.0407717, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99965381_C_T', pValueMantissa=3.3989999294281006, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0154555, standardError=0.00728972, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99965782_C_T', pValueMantissa=1.2259999513626099, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0312055, standardError=0.00547846, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99966311_G_A', pValueMantissa=4.085000038146973, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132514, standardError=0.00191102, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99966874_G_A', pValueMantissa=9.85099983215332, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133219, standardError=0.00195661, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99967655_A_C', pValueMantissa=4.085999965667725, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132548, standardError=0.00191151, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99968174_T_C', pValueMantissa=6.03000020980835, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131184, standardError=0.00200495, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99970196_C_T', pValueMantissa=1.940999984741211, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0134874, standardError=0.00191619, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99971874_A_G', pValueMantissa=4.980999946594238, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132011, standardError=0.0019115, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99973080_C_CATTT', pValueMantissa=9.527999877929688, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00936982, standardError=0.00191176, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99973080_CATTT_C', pValueMantissa=3.311000108718872, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.013347, standardError=0.00191661, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99973360_A_G', pValueMantissa=1.6030000448226929, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0940323, standardError=0.0390452, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99973664_T_C', pValueMantissa=4.126999855041504, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.013249, standardError=0.00191107, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99973694_T_C', pValueMantissa=3.937000036239624, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.13666, standardError=0.0663293, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99973733_A_G', pValueMantissa=4.34499979019165, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132363, standardError=0.00191125, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99974260_C_T', pValueMantissa=2.316999912261963, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0316527, standardError=0.0139405, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99975197_T_C', pValueMantissa=2.117000102996826, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0134651, standardError=0.00191633, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99975489_C_G', pValueMantissa=5.743000030517578, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0354502, standardError=0.0128345, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99976504_G_A', pValueMantissa=8.508999824523926, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0819298, standardError=0.031138, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99977161_A_G', pValueMantissa=4.061999797821045, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132532, standardError=0.00191106, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99977721_G_A', pValueMantissa=6.2829999923706055, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0246959, standardError=0.00903733, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99979375_G_A', pValueMantissa=3.937000036239624, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.13666, standardError=0.0663293, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99979565_C_T', pValueMantissa=4.479000091552734, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0275515, standardError=0.0137302, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99979592_G_A', pValueMantissa=3.3989999294281006, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133022, standardError=0.00191119, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99980479_A_C', pValueMantissa=7.7230000495910645, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0930047, standardError=0.0349125, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99980767_T_TG', pValueMantissa=3.1600000858306885, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133205, standardError=0.001911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99981303_T_C', pValueMantissa=1.0260000228881836, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0129016, standardError=0.0019962, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99982408_C_T', pValueMantissa=4.807000160217285, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131845, standardError=0.00200471, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99982941_G_A', pValueMantissa=3.236999988555908, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133135, standardError=0.00191092, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99983547_G_T', pValueMantissa=1.378000020980835, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0138444, standardError=0.00204793, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99983965_C_T', pValueMantissa=1.3339999914169312, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.276188, standardError=0.0722979, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99984671_A_G', pValueMantissa=1.090999960899353, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.012885, standardError=0.00199651, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99984912_C_T', pValueMantissa=3.328000068664551, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133085, standardError=0.00191128, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99986015_T_C', pValueMantissa=1.0609999895095825, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.012891, standardError=0.00199615, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99988026_G_T', pValueMantissa=7.709000110626221, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0122774, standardError=0.0046077, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99988174_G_A', pValueMantissa=3.121999979019165, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133243, standardError=0.0019111, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99988593_A_C', pValueMantissa=4.09499979019165, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0833533, standardError=0.0407789, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99988730_T_C', pValueMantissa=3.1760001182556152, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133191, standardError=0.00191101, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99988731_G_A', pValueMantissa=5.669000148773193, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0144037, standardError=0.00520681, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99988980_A_G', pValueMantissa=4.874000072479248, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131807, standardError=0.00200475, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99989148_T_C', pValueMantissa=4.875, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131806, standardError=0.00200475, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99989685_T_C', pValueMantissa=4.556000232696533, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132006, standardError=0.00200472, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99989906_C_T', pValueMantissa=3.2639999389648438, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133133, standardError=0.00191121, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99990445_G_A', pValueMantissa=6.452000141143799, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.090219, standardError=0.0331213, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99990521_G_A', pValueMantissa=2.9019999504089355, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.013345, standardError=0.00191124, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99990640_T_A', pValueMantissa=1.5579999685287476, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0139907, standardError=0.00442234, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99992006_G_GA', pValueMantissa=3.0260000228881836, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133329, standardError=0.00191111, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99992015_T_C', pValueMantissa=3.5850000381469727, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.013291, standardError=0.00191165, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99992806_A_G', pValueMantissa=3.0290000438690186, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133327, standardError=0.00191112, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99993453_A_G', pValueMantissa=3.0329999923706055, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133323, standardError=0.00191113, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99993852_T_C', pValueMantissa=3.0360000133514404, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133322, standardError=0.00191113, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99994177_C_T', pValueMantissa=4.533999919891357, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0132032, standardError=0.00200489, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99994349_A_T', pValueMantissa=1.0379999876022339, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0287633, standardError=0.00422921, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99995001_T_C', pValueMantissa=3.2860000133514404, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133152, standardError=0.00191176, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99995032_G_C', pValueMantissa=4.89900016784668, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131854, standardError=0.00200569, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99995714_T_C', pValueMantissa=3.374000072479248, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133048, standardError=0.00191128, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99995753_C_CTT', pValueMantissa=3.372999906539917, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133049, standardError=0.00191128, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99996207_C_G', pValueMantissa=3.384000062942505, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133041, standardError=0.00191129, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99997268_A_G', pValueMantissa=3.378999948501587, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133047, standardError=0.00191132, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99997438_CCA_C', pValueMantissa=6.603000164031982, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.109829, standardError=0.0404341, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99997720_A_G', pValueMantissa=2.815999984741211, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133548, standardError=0.00191149, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99998079_C_CA', pValueMantissa=4.61299991607666, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0922906, standardError=0.0462786, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99998104_G_A', pValueMantissa=1.2979999780654907, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00911911, standardError=0.0018841, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_99999971_A_G', pValueMantissa=2.9570000171661377, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.030431, standardError=0.0102384, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100000235_C_T', pValueMantissa=5.6519999504089355, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.014492, standardError=0.00201036, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100000486_G_A', pValueMantissa=4.172999858856201, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.305198, standardError=0.149885, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100002038_G_A', pValueMantissa=3.7739999294281006, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0211624, standardError=0.0073064, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100002628_A_C', pValueMantissa=2.953000068664551, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0138093, standardError=0.00189258, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100004140_G_A', pValueMantissa=2.6459999084472656, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0994314, standardError=0.0448022, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100004827_A_C', pValueMantissa=6.945000171661377, pValueExponent=-14, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0142296, standardError=0.0019001, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100005233_T_C', pValueMantissa=3.111999988555908, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0216712, standardError=0.00733013, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100005358_G_C', pValueMantissa=4.872000217437744, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0145472, standardError=0.00201239, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100005438_A_G', pValueMantissa=1.093000054359436, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0533162, standardError=0.02095, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100006780_C_T', pValueMantissa=5.067999839782715, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0145408, standardError=0.002013, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100007241_C_T', pValueMantissa=6.783999919891357, pValueExponent=-14, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0142505, standardError=0.0019021, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100007404_G_GC', pValueMantissa=1.3420000076293945, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0198944, standardError=0.00377285, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100008640_A_G', pValueMantissa=5.019999980926514, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0145435, standardError=0.002013, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100009013_G_A', pValueMantissa=6.611999988555908, pValueExponent=-14, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0142475, standardError=0.00190084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100009635_T_G', pValueMantissa=1.0549999475479126, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0134968, standardError=0.0018948, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100011477_C_G', pValueMantissa=2.444999933242798, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0148805, standardError=0.00203232, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100011685_CAAAT_C', pValueMantissa=4.139999866485596, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101715, standardError=0.00185449, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100011812_A_T', pValueMantissa=1.2029999494552612, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0141145, standardError=0.00190314, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100013275_A_T', pValueMantissa=2.174999952316284, pValueExponent=-14, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0145924, standardError=0.00191005, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100013744_G_A', pValueMantissa=4.76800012588501, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.51719, standardError=0.261177, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100014566_A_G', pValueMantissa=8.550999641418457, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119513, standardError=0.00358432, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100014970_T_C', pValueMantissa=3.993000030517578, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0146099, standardError=0.00201355, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100015400_G_A', pValueMantissa=5.646999835968018, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0160357, standardError=0.00222448, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100015645_T_C', pValueMantissa=2.236999988555908, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0145559, standardError=0.00207384, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100015854_C_T', pValueMantissa=6.158999919891357, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0160044, standardError=0.0022238, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100016635_T_G', pValueMantissa=1.718999981880188, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0147181, standardError=0.00218755, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100016645_C_T', pValueMantissa=4.622000217437744, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0256776, standardError=0.00906606, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100017027_A_T', pValueMantissa=6.242000102996826, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0160069, standardError=0.0022247, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100017624_A_G', pValueMantissa=1.7170000076293945, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0147203, standardError=0.00218782, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100018116_C_T', pValueMantissa=2.197000026702881, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0145668, standardError=0.00207465, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100018135_G_C', pValueMantissa=1.4559999704360962, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.275534, standardError=0.0725377, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100018265_A_T', pValueMantissa=2.7190001010894775, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00874366, standardError=0.00186392, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100020857_T_C', pValueMantissa=9.112000465393066, pValueExponent=-14, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0156784, standardError=0.00210358, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100021675_C_A', pValueMantissa=3.066999912261963, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0233385, standardError=0.0107983, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100021907_C_T', pValueMantissa=7.229000091552734, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0159723, standardError=0.00222609, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100022313_C_CT', pValueMantissa=6.171999931335449, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0504229, standardError=0.0184125, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100023134_T_G', pValueMantissa=1.3980000019073486, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0268617, standardError=0.0109298, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100024168_G_A', pValueMantissa=2.3359999656677246, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00880598, standardError=0.00186491, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100024869_C_T', pValueMantissa=3.556999921798706, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0162101, standardError=0.00222929, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100025927_T_TA', pValueMantissa=3.621999979019165, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.014426, standardError=0.00207534, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100026878_C_T', pValueMantissa=9.258999824523926, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0185461, standardError=0.00712673, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100027354_G_A', pValueMantissa=1.968000054359436, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.103617, standardError=0.0444235, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100027592_G_C', pValueMantissa=1.965999960899353, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.103629, standardError=0.0444216, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100027903_T_C', pValueMantissa=2.75600004196167, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0384662, standardError=0.0128487, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100028049_C_T', pValueMantissa=4.144000053405762, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.130023, standardError=0.0637634, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100029663_A_G', pValueMantissa=8.883999824523926, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0147895, standardError=0.00206939, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100030853_G_A', pValueMantissa=7.5980000495910645, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0158245, standardError=0.00220759, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100030993_G_A', pValueMantissa=3.437000036239624, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0224965, standardError=0.00768921, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100031808_C_T', pValueMantissa=5.959000110626221, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0212214, standardError=0.00771671, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100032684_A_C', pValueMantissa=5.459000110626221, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.014926, standardError=0.00206922, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100033239_T_A', pValueMantissa=1.3669999837875366, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0463194, standardError=0.0187842, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100033337_C_T', pValueMantissa=9.138999938964844, pValueExponent=-14, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0165264, standardError=0.00221749, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100033635_G_GT', pValueMantissa=1.0110000371932983, pValueExponent=-13, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0164902, standardError=0.00221658, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100035604_T_A', pValueMantissa=3.4110000133514404, pValueExponent=-12, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.01433, standardError=0.002059, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100037190_G_A', pValueMantissa=3.2070000171661377, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0120692, standardError=0.00203849, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100037544_C_T', pValueMantissa=1.6990000009536743, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00996527, standardError=0.00417483, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100037655_A_G', pValueMantissa=6.13100004196167, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0127317, standardError=0.00219016, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100038188_C_T', pValueMantissa=7.738999843597412, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0126728, standardError=0.00219478, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100038589_T_C', pValueMantissa=3.734999895095825, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010628, standardError=0.00193133, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100038648_G_A', pValueMantissa=1.7230000495910645, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00994355, standardError=0.00417478, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100039544_T_C', pValueMantissa=5.021999835968018, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0126227, standardError=0.00202988, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100039545_G_T', pValueMantissa=1.5509999990463257, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130939, standardError=0.00204582, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100039976_C_T', pValueMantissa=1.7209999561309814, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00994495, standardError=0.00417473, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100039997_T_C', pValueMantissa=5.01800012588501, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0126197, standardError=0.00202937, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100040770_T_G', pValueMantissa=3.059999942779541, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.120454, standardError=0.0557085, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100042338_T_C', pValueMantissa=2.61899995803833, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.189007, standardError=0.085007, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100042505_G_A', pValueMantissa=3.4860000610351562, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101879, standardError=0.00482832, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100042848_C_CT', pValueMantissa=4.413000106811523, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0093599, standardError=0.00185336, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100043308_C_T', pValueMantissa=5.076000213623047, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0126162, standardError=0.00202939, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100044357_C_T', pValueMantissa=5.36299991607666, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0127797, standardError=0.00218999, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100044501_A_G', pValueMantissa=1.7130000591278076, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00995148, standardError=0.00417441, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100044818_C_T', pValueMantissa=4.927000045776367, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0204248, standardError=0.00726406, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100044839_G_T', pValueMantissa=4.875, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0126274, standardError=0.00202913, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100045047_A_C', pValueMantissa=4.922999858856201, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0204266, standardError=0.00726404, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100045603_T_A', pValueMantissa=1.6740000247955322, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00998325, standardError=0.00417297, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100045685_C_T', pValueMantissa=1.3309999704360962, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0131383, standardError=0.00204533, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100045864_G_A', pValueMantissa=1.6770000457763672, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00998092, standardError=0.00417295, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100046495_A_G', pValueMantissa=4.683000087738037, pValueExponent=-11, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133938, standardError=0.00203532, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100046569_C_T', pValueMantissa=1.6740000247955322, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0129058, standardError=0.00202014, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100047823_TA_T', pValueMantissa=1.5670000314712524, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0129238, standardError=0.00201974, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100049106_G_A', pValueMantissa=1.690000057220459, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130999, standardError=0.00217423, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100049236_C_T', pValueMantissa=1.690000057220459, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00996986, standardError=0.00417357, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100049902_G_A', pValueMantissa=1.8940000534057617, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130591, standardError=0.00217409, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100050211_A_T', pValueMantissa=2.1419999599456787, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0633556, standardError=0.0275398, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100050359_GAACA_G', pValueMantissa=1.6019999980926514, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0129195, standardError=0.00202015, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100051409_C_G', pValueMantissa=1.7120000123977661, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130944, standardError=0.00217407, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100051504_G_A', pValueMantissa=1.7549999952316284, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00990516, standardError=0.00417051, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100052545_C_G', pValueMantissa=1.5299999713897705, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0129286, standardError=0.00201936, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100052742_T_C', pValueMantissa=1.687000036239624, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00997036, standardError=0.00417237, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100054045_C_T', pValueMantissa=1.3009999990463257, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0129769, standardError=0.0020191, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100054117_T_C', pValueMantissa=4.938000202178955, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0716183, standardError=0.0364414, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100054574_T_G', pValueMantissa=1.6629999876022339, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00999072, standardError=0.00417196, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100055122_T_C', pValueMantissa=6.368000030517578, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0124774, standardError=0.00214876, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100055153_G_A', pValueMantissa=1.6540000438690186, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00999801, standardError=0.0041714, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100055199_C_G', pValueMantissa=1.8609999418258667, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0130598, standardError=0.00217319, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100055816_G_A', pValueMantissa=3.3589999675750732, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0126847, standardError=0.00201947, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100055862_T_G', pValueMantissa=4.1529998779296875, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0446939, standardError=0.0219282, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100056323_C_T', pValueMantissa=4.943999767303467, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0267439, standardError=0.0136118, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100056440_C_T', pValueMantissa=4.486999988555908, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00779499, standardError=0.00388601, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100057584_A_G', pValueMantissa=5.919000148773193, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011644, standardError=0.00200103, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100057785_T_C', pValueMantissa=4.816999912261963, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0128495, standardError=0.00219523, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100057800_C_T', pValueMantissa=1.0049999952316284, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0122603, standardError=0.00200707, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100059207_A_C', pValueMantissa=3.622999906539917, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0143322, standardError=0.00401899, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100059401_T_TAACAAC', pValueMantissa=3.5920000076293945, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00695612, standardError=0.00194938, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100059401_T_TAACAACAAC', pValueMantissa=3.884999990463257, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133237, standardError=0.00644961, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100059657_G_A', pValueMantissa=3.880000114440918, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133275, standardError=0.00645004, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100060102_G_C', pValueMantissa=3.874000072479248, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133327, standardError=0.00645048, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100060272_A_G', pValueMantissa=4.5370001792907715, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0594699, standardError=0.0297173, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100060908_A_G', pValueMantissa=2.742000102996826, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0113896, standardError=0.00204953, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100061298_C_T', pValueMantissa=2.503000020980835, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0150616, standardError=0.00672123, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100061574_G_C', pValueMantissa=2.7809998989105225, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0113862, standardError=0.00204983, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100061627_C_T', pValueMantissa=1.6690000295639038, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0323984, standardError=0.00537545, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100061926_T_C', pValueMantissa=1.1759999990463257, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0122155, standardError=0.00200796, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100062022_C_T', pValueMantissa=9.611000061035156, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0212829, standardError=0.00821882, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100062212_C_T', pValueMantissa=3.7899999618530273, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0133927, standardError=0.00645157, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100062744_C_A', pValueMantissa=3.752000093460083, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0134223, standardError=0.00645282, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100062935_C_T', pValueMantissa=3.7669999599456787, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0134118, standardError=0.00645294, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100063173_T_G', pValueMantissa=2.7899999618530273, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011387, standardError=0.00205019, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100063265_C_T', pValueMantissa=2.61299991607666, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0142012, standardError=0.00638472, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100063639_C_T', pValueMantissa=2.7750000953674316, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0276973, standardError=0.0125851, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100063786_T_C', pValueMantissa=2.9630000591278076, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011365, standardError=0.00205011, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100064214_T_C', pValueMantissa=5.559999942779541, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0128066, standardError=0.00219686, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100064301_T_C', pValueMantissa=2.427999973297119, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0540203, standardError=0.0239811, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100064486_T_C', pValueMantissa=2.484999895095825, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0271265, standardError=0.00428678, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100064533_A_G', pValueMantissa=8.324000358581543, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00771332, standardError=0.00196024, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100064544_T_C', pValueMantissa=8.236000061035156, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00771787, standardError=0.00196013, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100065403_C_G', pValueMantissa=1.7259999513626099, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00799338, standardError=0.00185995, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100066509_T_C', pValueMantissa=3.444999933242798, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0925747, standardError=0.0437751, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100066929_C_A', pValueMantissa=4.581999778747559, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0250808, standardError=0.012559, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100067656_G_A', pValueMantissa=2.6489999294281006, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143151, standardError=0.00645107, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100067862_G_A', pValueMantissa=7.921999931335449, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0119879, standardError=0.00195036, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100068504_C_T', pValueMantissa=6.7170000076293945, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00746427, standardError=0.00187258, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100068843_C_A', pValueMantissa=1.2430000305175781, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115969, standardError=0.00203679, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100068866_G_GT', pValueMantissa=1.312000036239624, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115787, standardError=0.00203689, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100069305_A_T', pValueMantissa=2.6449999809265137, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143181, standardError=0.00645098, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100069570_T_C', pValueMantissa=2.6549999713897705, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0151566, standardError=0.00504359, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100069757_C_T', pValueMantissa=2.5869998931884766, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0145205, standardError=0.00481941, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100070175_A_G', pValueMantissa=2.000999927520752, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0130301, standardError=0.00421666, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100072279_G_C', pValueMantissa=1.2419999837875366, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115973, standardError=0.00203683, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100073428_G_T', pValueMantissa=2.609999895095825, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143509, standardError=0.00645062, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100073963_C_T', pValueMantissa=1.0750000476837158, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116458, standardError=0.00203655, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100074034_T_TC', pValueMantissa=2.005000114440918, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0113741, standardError=0.0020269, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100074335_C_T', pValueMantissa=1.0729999542236328, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116458, standardError=0.00203643, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100074511_G_A', pValueMantissa=4.894000053405762, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0166749, standardError=0.00478271, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100074712_C_T', pValueMantissa=1.2990000247955322, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0487079, standardError=0.0196078, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100075164_G_A', pValueMantissa=1.2369999885559082, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115989, standardError=0.00203683, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100075228_C_T', pValueMantissa=2.6029999256134033, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143577, standardError=0.00645054, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100075751_C_A', pValueMantissa=1.7940000295639038, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0172016, standardError=0.00726754, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100076243_C_A', pValueMantissa=2.6019999980926514, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143585, standardError=0.00645053, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100077499_A_G', pValueMantissa=4.675000190734863, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00753971, standardError=0.00185191, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100077617_C_A', pValueMantissa=8.185999870300293, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.013965, standardError=0.00417311, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100078024_G_A', pValueMantissa=4.400000095367432, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0760544, standardError=0.0267049, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100078160_G_A', pValueMantissa=2.5989999771118164, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143609, standardError=0.00645053, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100078351_A_T', pValueMantissa=5.255000114440918, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0358513, standardError=0.0103395, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100078510_A_C', pValueMantissa=8.102999687194824, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0119828, standardError=0.00195067, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100078923_G_A', pValueMantissa=1.805999994277954, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0171834, standardError=0.00726738, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100079042_G_A', pValueMantissa=2.5889999866485596, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143712, standardError=0.00645058, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100080295_T_C', pValueMantissa=5.934000015258789, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0121315, standardError=0.00195916, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100080362_T_A', pValueMantissa=9.142000198364258, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0117746, standardError=0.00204921, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100081203_A_G', pValueMantissa=7.883999824523926, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0119901, standardError=0.00195049, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100082411_T_C', pValueMantissa=2.5829999446868896, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143766, standardError=0.00645057, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100083012_C_A', pValueMantissa=3.0209999084472656, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0125696, standardError=0.0019959, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100083306_C_T', pValueMantissa=2.5810000896453857, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143789, standardError=0.00645062, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100083442_A_T', pValueMantissa=4.665999889373779, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00754005, standardError=0.0018518, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100083679_C_T', pValueMantissa=2.5810000896453857, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143785, standardError=0.00645064, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100083851_G_A', pValueMantissa=7.6570000648498535, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0119987, standardError=0.00195041, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100083869_GTGGA_G', pValueMantissa=2.5769999027252197, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143832, standardError=0.00645065, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100084120_A_G', pValueMantissa=2.5739998817443848, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143853, standardError=0.00645064, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085028_A_G', pValueMantissa=1.2200000286102295, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116042, standardError=0.00203692, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085123_T_C', pValueMantissa=2.569999933242798, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143893, standardError=0.00645068, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085191_A_C', pValueMantissa=1.0609999895095825, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116492, standardError=0.00203632, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085317_T_C', pValueMantissa=2.6549999713897705, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0151555, standardError=0.00504327, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085356_CT_C', pValueMantissa=2.989000082015991, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.012573, standardError=0.00199591, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085677_T_C', pValueMantissa=7.4720001220703125, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0120068, standardError=0.0019505, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085790_C_T', pValueMantissa=9.621999740600586, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0119266, standardError=0.0019502, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100085791_G_A', pValueMantissa=6.89300012588501, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0076585, standardError=0.00283442, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100086416_A_C', pValueMantissa=4.2779998779296875, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00757727, standardError=0.00185176, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100087170_C_T', pValueMantissa=4.797999858856201, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0249466, standardError=0.0126147, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100088100_T_C', pValueMantissa=1.2690000534057617, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115908, standardError=0.00203699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100088206_G_A', pValueMantissa=1.8480000495910645, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0171185, standardError=0.00726652, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100088307_G_A', pValueMantissa=8.534000396728516, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0258604, standardError=0.00421546, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100088565_A_AGAG', pValueMantissa=2.5799999237060547, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.01438, standardError=0.00645071, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100088687_C_T', pValueMantissa=4.041999816894531, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0124937, standardError=0.00199821, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100088994_G_C', pValueMantissa=4.744999885559082, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.26271, standardError=0.13253, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100089654_C_A', pValueMantissa=1.2940000295639038, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115954, standardError=0.00203897, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100090029_G_T', pValueMantissa=3.2170000076293945, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0322465, standardError=0.00583203, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100093119_C_T', pValueMantissa=3.0880000591278076, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.379152, standardError=0.0909911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100095173_CA_C', pValueMantissa=1.1920000314712524, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116127, standardError=0.00203702, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100095421_C_T', pValueMantissa=4.376999855041504, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00756736, standardError=0.00185174, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100095474_G_C', pValueMantissa=1.0429999828338623, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011657, standardError=0.00203668, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100095491_G_A', pValueMantissa=2.575000047683716, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143845, standardError=0.00645073, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100095666_A_G', pValueMantissa=2.997999906539917, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0125726, standardError=0.001996, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100095766_C_T', pValueMantissa=2.5769999027252197, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143829, standardError=0.00645074, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100096097_G_A', pValueMantissa=4.854000091552734, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.159194, standardError=0.0807015, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100096882_A_T', pValueMantissa=1.875, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0170779, standardError=0.00726586, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100097204_C_G', pValueMantissa=4.326000213623047, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00757235, standardError=0.00185173, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100097630_G_A', pValueMantissa=6.629000186920166, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0183017, standardError=0.0067411, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100097685_G_A', pValueMantissa=2.1630001068115234, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00784104, standardError=0.00341393, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100098591_G_A', pValueMantissa=7.1529998779296875, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00762397, standardError=0.00283455, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100099448_G_A', pValueMantissa=2.5399999618530273, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0110489, standardError=0.00198346, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100100113_A_G', pValueMantissa=2.996000051498413, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.012573, standardError=0.00199604, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100100236_G_A', pValueMantissa=2.565000057220459, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143946, standardError=0.00645086, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100101678_G_A', pValueMantissa=1.065000057220459, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116505, standardError=0.00203676, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100101681_G_A', pValueMantissa=2.572999954223633, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143872, standardError=0.00645085, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100101734_C_T', pValueMantissa=2.805000066757202, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0388904, standardError=0.0177047, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100101865_T_C', pValueMantissa=7.827000141143799, pValueExponent=-6, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00939164, standardError=0.0021011, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100101978_T_A', pValueMantissa=2.565000057220459, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0143954, standardError=0.00645086, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100102891_G_A', pValueMantissa=3.0280001163482666, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0125699, standardError=0.00199607, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100102937_T_C', pValueMantissa=1.0709999799728394, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116485, standardError=0.00203677, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100103034_T_C', pValueMantissa=1.062000036239624, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116512, standardError=0.00203676, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100103075_C_T', pValueMantissa=2.5480000972747803, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0144117, standardError=0.0064509, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100103232_C_T', pValueMantissa=1.059999942779541, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116519, standardError=0.00203676, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100103284_T_C', pValueMantissa=1.2389999628067017, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115998, standardError=0.00203711, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100103427_G_A', pValueMantissa=2.5409998893737793, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0144177, standardError=0.0064504, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100103653_C_A', pValueMantissa=1.2389999628067017, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116, standardError=0.00203711, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100104060_G_C', pValueMantissa=1.0570000410079956, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011653, standardError=0.00203678, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100104416_A_G', pValueMantissa=1.062999963760376, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116511, standardError=0.00203678, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100104538_T_A', pValueMantissa=3.0250000953674316, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0125704, standardError=0.0019961, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100104974_T_C', pValueMantissa=2.5460000038146973, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0144144, standardError=0.00645109, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100105358_T_A', pValueMantissa=1.246000051498413, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115981, standardError=0.00203714, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100105587_G_A', pValueMantissa=1.0700000524520874, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116489, standardError=0.0020368, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100105759_A_T', pValueMantissa=1.253000020980835, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115962, standardError=0.00203715, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100106124_T_C', pValueMantissa=1.0019999742507935, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116787, standardError=0.00203801, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100106127_T_C', pValueMantissa=1.0019999742507935, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116787, standardError=0.00203801, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100106157_C_A', pValueMantissa=2.5399999618530273, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.01442, standardError=0.00645108, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100106705_G_GGCAGAGTAA', pValueMantissa=3.0460000038146973, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0125685, standardError=0.00199613, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100107060_CG_C', pValueMantissa=1.2519999742507935, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115965, standardError=0.00203718, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100107246_C_T', pValueMantissa=1.8339999914169312, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.148529, standardError=0.0629731, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100107759_T_C', pValueMantissa=3.5490000247955322, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00765844, standardError=0.00185209, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100107761_A_G', pValueMantissa=5.459000110626221, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.272006, standardError=0.0786791, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100108013_C_T', pValueMantissa=2.561000108718872, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0243527, standardError=0.00807438, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100108920_T_G', pValueMantissa=9.07699966430664, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011727, standardError=0.00204049, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100109874_G_A', pValueMantissa=4.85099983215332, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0248793, standardError=0.0126104, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100110231_C_T', pValueMantissa=7.883999824523926, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0117687, standardError=0.00203931, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100110702_T_G', pValueMantissa=3.5929999351501465, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0606656, standardError=0.0289201, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100110795_TTA_T', pValueMantissa=6.190999984741211, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118518, standardError=0.00203936, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100111161_G_A', pValueMantissa=2.000999927520752, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0497915, standardError=0.0161136, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100111179_C_T', pValueMantissa=6.201000213623047, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118489, standardError=0.00203896, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100111991_C_A', pValueMantissa=6.7820000648498535, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118202, standardError=0.00203929, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100112419_TA_T', pValueMantissa=5.803999900817871, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118714, standardError=0.00203896, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100112828_C_T', pValueMantissa=2.8289999961853027, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0388309, standardError=0.0177045, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100112930_A_C', pValueMantissa=6.804999828338623, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118191, standardError=0.0020393, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100114067_A_G', pValueMantissa=1.0110000371932983, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104825, standardError=0.00196864, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100115072_C_T', pValueMantissa=1.034999966621399, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104694, standardError=0.00196776, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100115087_C_T', pValueMantissa=5.876999855041504, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118682, standardError=0.00203912, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100115453_T_C', pValueMantissa=1.0360000133514404, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104692, standardError=0.00196776, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100116179_G_C', pValueMantissa=5.88100004196167, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118679, standardError=0.00203913, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100116494_A_T', pValueMantissa=1.0360000133514404, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.010469, standardError=0.00196776, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100116607_C_T', pValueMantissa=1.0160000324249268, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104762, standardError=0.00196781, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100116979_C_G', pValueMantissa=1.0180000066757202, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104755, standardError=0.0019678, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100117013_G_A', pValueMantissa=1.0379999876022339, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104684, standardError=0.00196777, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100118204_T_G', pValueMantissa=1.0509999990463257, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104641, standardError=0.00196778, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100118462_G_A', pValueMantissa=5.9079999923706055, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0118664, standardError=0.00203914, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100118652_C_T', pValueMantissa=1.128999948501587, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0104375, standardError=0.00196763, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100119929_C_G', pValueMantissa=8.840999603271484, pValueExponent=-10, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0121944, standardError=0.0019896, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100120722_G_A', pValueMantissa=5.441999912261963, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0106837, standardError=0.00196527, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100121497_C_T', pValueMantissa=1.5360000133514404, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.573298, standardError=0.23652, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100124748_T_C', pValueMantissa=2.8399999141693115, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0388018, standardError=0.0177043, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100125143_C_CA', pValueMantissa=3.8269999027252197, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0260846, standardError=0.0125892, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100125152_C_A', pValueMantissa=7.866000175476074, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105533, standardError=0.00196517, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100125180_C_T', pValueMantissa=7.633999824523926, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105635, standardError=0.00196509, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100125779_A_G', pValueMantissa=7.78000020980835, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105568, standardError=0.00196509, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100126618_A_C', pValueMantissa=4.631999969482422, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.133295, standardError=0.0668985, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100126748_A_G', pValueMantissa=7.800000190734863, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105558, standardError=0.00196509, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100127494_A_T', pValueMantissa=1.8029999732971191, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0082724, standardError=0.00349777, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100128204_G_GAGAGAA', pValueMantissa=5.4019999504089355, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0107556, standardError=0.00197804, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100128221_A_G', pValueMantissa=6.446000099182129, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0106227, standardError=0.001965, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100128550_G_A', pValueMantissa=8.194000244140625, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105396, standardError=0.00196532, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100128651_T_C', pValueMantissa=7.315000057220459, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105796, standardError=0.00196528, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100128763_C_T', pValueMantissa=7.829999923706055, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105544, standardError=0.00196508, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100128883_C_T', pValueMantissa=8.057000160217285, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0105443, standardError=0.00196508, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100128958_G_A', pValueMantissa=2.124000072479248, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00680841, standardError=0.00295533, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100129035_C_A', pValueMantissa=3.3989999294281006, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0925999, standardError=0.043676, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100129320_C_T', pValueMantissa=2.13100004196167, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00680465, standardError=0.00295531, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100129629_A_C', pValueMantissa=1.8580000400543213, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.148278, standardError=0.0629939, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100129660_T_C', pValueMantissa=8.699000358581543, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115118, standardError=0.00200055, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100129776_G_A', pValueMantissa=1.690000057220459, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0884659, standardError=0.0281741, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100130207_C_T', pValueMantissa=3.569000005722046, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0140895, standardError=0.00483524, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100130573_C_G', pValueMantissa=2.9149999618530273, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00674022, standardError=0.00186053, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100130860_A_G', pValueMantissa=9.043999671936035, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114981, standardError=0.00200046, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100131042_G_A', pValueMantissa=3.619999885559082, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.179459, standardError=0.0503203, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100131063_C_G', pValueMantissa=2.2909998893737793, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00671867, standardError=0.00295325, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100131465_G_T', pValueMantissa=8.934000015258789, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115031, standardError=0.00200061, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100132172_C_G', pValueMantissa=2.128000020980835, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00680593, standardError=0.00295533, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100132602_T_TTAAA', pValueMantissa=4.828000068664551, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00431663, standardError=0.00218576, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100132602_T_TTAAATAAA', pValueMantissa=4.5980000495910645, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0519863, standardError=0.0260513, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100132602_TTAAATAAATAAA_T', pValueMantissa=7.363999843597412, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116156, standardError=0.00200877, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100133539_G_T', pValueMantissa=2.6610000133514404, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00678474, standardError=0.00186073, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100133661_G_A', pValueMantissa=2.6619999408721924, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00678444, standardError=0.00186073, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100134226_T_TAAAC', pValueMantissa=9.397000312805176, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114918, standardError=0.00200162, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100134368_G_T', pValueMantissa=2.305999994277954, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00685323, standardError=0.0018608, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100134849_C_G', pValueMantissa=2.5420000553131104, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00680611, standardError=0.00186063, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100136849_G_A', pValueMantissa=2.4240000247955322, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00682879, standardError=0.00186061, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100137626_G_C', pValueMantissa=4.564000129699707, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.133964, standardError=0.067025, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100139939_C_T', pValueMantissa=2.2850000858306885, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0168361, standardError=0.00739727, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100140109_A_G', pValueMantissa=8.161999702453613, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0116036, standardError=0.00201274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100140433_T_C', pValueMantissa=8.460000038146973, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00745523, standardError=0.00283129, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100140822_C_T', pValueMantissa=4.0370001792907715, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00653853, standardError=0.00184827, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100140993_C_T', pValueMantissa=8.553999900817871, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00744479, standardError=0.00283137, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100141769_G_C', pValueMantissa=4.497000217437744, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.134653, standardError=0.0671606, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100142018_C_T', pValueMantissa=8.651000022888184, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00615783, standardError=0.00184859, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100142970_A_T', pValueMantissa=3.749000072479248, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0279115, standardError=0.00962947, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100143128_C_A', pValueMantissa=2.7290000915527344, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0151084, standardError=0.0050416, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100143200_T_G', pValueMantissa=8.8100004196167, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00751992, standardError=0.00191775, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100143201_T_C', pValueMantissa=8.812999725341797, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00751979, standardError=0.00191775, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100143322_A_G', pValueMantissa=8.62600040435791, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0074353, standardError=0.00283084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100143412_T_C', pValueMantissa=3.306999921798706, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0244099, standardError=0.00588015, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100143655_T_C', pValueMantissa=5.8420000076293945, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0063633, standardError=0.00185041, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100144149_T_G', pValueMantissa=5.2210001945495605, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0106098, standardError=0.00194903, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100144392_A_ACGTG', pValueMantissa=1.059999942779541, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0122106, standardError=0.00200172, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100144587_G_A', pValueMantissa=4.710000038146973, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0106442, standardError=0.00194881, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100144738_C_T', pValueMantissa=3.628999948501587, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00387717, standardError=0.00185181, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100145180_CA_C', pValueMantissa=7.709000110626221, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00754349, standardError=0.00283104, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100145446_T_C', pValueMantissa=4.289000034332275, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00722839, standardError=0.0025309, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100145462_G_A', pValueMantissa=1.184999942779541, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00704211, standardError=0.00279842, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100145533_C_T', pValueMantissa=6.809999942779541, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0688508, standardError=0.0254439, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100145864_T_C', pValueMantissa=2.5959999561309814, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00556169, standardError=0.00184654, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100146576_G_A', pValueMantissa=2.239000082015991, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0102862, standardError=0.0027873, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100147206_C_G', pValueMantissa=2.24399995803833, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0102847, standardError=0.00278728, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100148436_A_G', pValueMantissa=7.232999801635742, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.01072, standardError=0.00317104, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100148745_A_G', pValueMantissa=9.111000061035156, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011124, standardError=0.00335401, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100150256_TG_T', pValueMantissa=1.621000051498413, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0058237, standardError=0.00184761, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100151385_A_G', pValueMantissa=2.200000047683716, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0102977, standardError=0.002787, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100151760_T_G', pValueMantissa=1.680999994277954, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0116223, standardError=0.00369954, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100151918_T_C', pValueMantissa=1.305999994277954, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.01191, standardError=0.00370485, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100152307_T_C', pValueMantissa=9.949999809265137, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108402, standardError=0.00189131, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100152437_C_T', pValueMantissa=1.0140000581741333, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108394, standardError=0.00189222, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100153963_AT_A', pValueMantissa=3.984999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00551895, standardError=0.00191674, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100155294_C_T', pValueMantissa=5.695000171661377, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0370698, standardError=0.0134074, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100155300_C_A', pValueMantissa=3.9560000896453857, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.013611, standardError=0.0066127, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100155337_G_C', pValueMantissa=9.121999740600586, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0129497, standardError=0.00390489, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100155409_G_C', pValueMantissa=1.305999994277954, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.01191, standardError=0.00370485, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100155608_A_G', pValueMantissa=2.359999895095825, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0102538, standardError=0.00278865, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100157105_C_T', pValueMantissa=1.9290000200271606, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114702, standardError=0.00369896, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100157116_T_A', pValueMantissa=1.4279999732971191, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00588326, standardError=0.00184495, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100157609_G_A', pValueMantissa=2.1989998817443848, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0103034, standardError=0.00278846, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100157763_C_T', pValueMantissa=3.859999895095825, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00711467, standardError=0.00343966, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100158037_G_A', pValueMantissa=4.420000076293945, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0259169, standardError=0.00910471, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100158360_A_G', pValueMantissa=1.7910000085830688, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115545, standardError=0.0037, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100158691_C_T', pValueMantissa=6.251999855041504, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0131114, standardError=0.00327532, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100159080_T_C', pValueMantissa=8.289999961853027, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0343476, standardError=0.0102747, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100159144_G_A', pValueMantissa=1.3380000591278076, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00857697, standardError=0.00346768, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100159600_GAAATCAACAATAA_G', pValueMantissa=1.7860000133514404, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115575, standardError=0.0037, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100159706_T_TTTAAA', pValueMantissa=2.239000082015991, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0102922, standardError=0.00278886, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100161011_T_C', pValueMantissa=1.305999994277954, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.01191, standardError=0.00370485, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100161641_G_T', pValueMantissa=1.305999994277954, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.01191, standardError=0.00370485, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100162586_C_T', pValueMantissa=1.5570000410079956, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0117095, standardError=0.00370097, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100162599_A_G', pValueMantissa=1.7910000085830688, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115545, standardError=0.0037, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100164449_A_T', pValueMantissa=8.289999961853027, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0343476, standardError=0.0102747, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100164555_T_C', pValueMantissa=1.8140000104904175, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0162269, standardError=0.00686797, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100164661_T_C', pValueMantissa=1.065000057220459, pValueExponent=-8, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0108199, standardError=0.00189161, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100166335_G_A', pValueMantissa=1.569000005722046, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370099, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100167234_TA_T', pValueMantissa=1.9529999494552612, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114517, standardError=0.00369739, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100167290_A_G', pValueMantissa=1.9539999961853027, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114514, standardError=0.00369739, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100167685_C_T', pValueMantissa=3.9630000591278076, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0526946, standardError=0.0256104, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100167711_G_A', pValueMantissa=1.3270000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011893, standardError=0.00370488, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100168884_G_A', pValueMantissa=1.815000057220459, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.01154, standardError=0.00370004, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100169073_T_A', pValueMantissa=1.659000039100647, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0164986, standardError=0.00688708, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100170367_T_A', pValueMantissa=1.8220000267028809, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115361, standardError=0.00370004, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100170447_T_C', pValueMantissa=1.8200000524520874, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011537, standardError=0.00370004, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100170652_A_G', pValueMantissa=8.133000373840332, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0162704, standardError=0.00614785, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100170743_T_C', pValueMantissa=1.819000005722046, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115379, standardError=0.00370004, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100171278_T_G', pValueMantissa=1.965999960899353, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114445, standardError=0.00369739, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100171408_C_CTATT', pValueMantissa=1.8220000267028809, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115357, standardError=0.00370003, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100171892_C_A', pValueMantissa=4.783999919891357, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0290312, standardError=0.0146713, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100171937_A_T', pValueMantissa=3.7090001106262207, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0264529, standardError=0.0126887, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100172580_C_A', pValueMantissa=1.8209999799728394, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115368, standardError=0.00370004, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100172766_C_T', pValueMantissa=1.3320000171661377, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0118891, standardError=0.00370488, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100173406_G_C', pValueMantissa=3.993000030517578, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0276948, standardError=0.00962055, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100173454_A_G', pValueMantissa=1.8220000267028809, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011536, standardError=0.00370004, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100174322_A_AT', pValueMantissa=1.9670000076293945, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114438, standardError=0.00369738, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100174478_C_T', pValueMantissa=5.164999961853027, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114058, standardError=0.00195247, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100175179_A_G', pValueMantissa=1.968000054359436, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114433, standardError=0.00369738, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100175211_T_C', pValueMantissa=9.72700023651123, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0910994, standardError=0.02762, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100175305_C_T', pValueMantissa=1.8240000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011535, standardError=0.00370003, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100175350_T_C', pValueMantissa=1.8240000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011535, standardError=0.00370003, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100176550_CAAAAGACCGTTTTTA_C', pValueMantissa=1.8869999647140503, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115298, standardError=0.00371041, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100177021_C_G', pValueMantissa=1.8309999704360962, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115307, standardError=0.00370003, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100177437_T_C', pValueMantissa=4.168000221252441, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00536168, standardError=0.00187135, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100177850_C_T', pValueMantissa=7.14300012588501, pValueExponent=-5, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0216516, standardError=0.00545178, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100178264_G_A', pValueMantissa=1.8339999914169312, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011529, standardError=0.00370002, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100178377_T_A', pValueMantissa=3.9769999980926514, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0277079, standardError=0.00962096, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100178824_A_C', pValueMantissa=1.1480000019073486, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0273359, standardError=0.0108138, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100178873_G_C', pValueMantissa=3.313999891281128, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00845972, standardError=0.00288043, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100178957_A_G', pValueMantissa=1.8370000123977661, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011527, standardError=0.00370001, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100181244_T_A', pValueMantissa=9.291000366210938, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0116765, standardError=0.00352639, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100182158_GT_G', pValueMantissa=1.440999984741211, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0118051, standardError=0.00370502, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100182496_T_C', pValueMantissa=2.2899999618530273, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0102733, standardError=0.00278807, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100182799_A_G', pValueMantissa=2.365000009536743, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0102471, standardError=0.00278728, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100183196_T_C', pValueMantissa=1.8519999980926514, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011518, standardError=0.00369996, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100183255_G_A', pValueMantissa=1.3580000400543213, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0118679, standardError=0.0037048, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100183966_G_A', pValueMantissa=1.8609999418258667, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0115126, standardError=0.00369993, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100184256_T_C', pValueMantissa=4.7220001220703125, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.029124, standardError=0.0146772, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100184474_G_A', pValueMantissa=3.7109999656677246, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00543283, standardError=0.00187227, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100184568_G_A', pValueMantissa=2.1500000953674316, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0103173, standardError=0.00278792, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100186257_C_G', pValueMantissa=1.2259999513626099, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00596993, standardError=0.00184663, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100186688_C_T', pValueMantissa=1.9229999780654907, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114751, standardError=0.00369939, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100187980_C_T', pValueMantissa=4.630000114440918, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00813035, standardError=0.00287118, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100189674_T_G', pValueMantissa=9.279999732971191, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.126539, standardError=0.0486397, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100190351_G_A', pValueMantissa=4.619999885559082, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00813223, standardError=0.00287113, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100190395_G_A', pValueMantissa=2.0, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0760922, standardError=0.024623, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100192759_T_C', pValueMantissa=1.9559999704360962, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114555, standardError=0.00369915, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100193524_C_T', pValueMantissa=9.555000305175781, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0122529, standardError=0.0037093, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100193948_A_C', pValueMantissa=3.0179998874664307, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115477, standardError=0.00194714, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100195245_A_T', pValueMantissa=4.635000228881836, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0081285, standardError=0.00287091, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100195684_C_CA', pValueMantissa=4.2270002365112305, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.137066, standardError=0.0674911, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100195855_G_A', pValueMantissa=4.870999813079834, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00807719, standardError=0.00286889, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100197192_T_C', pValueMantissa=4.242000102996826, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.136954, standardError=0.067486, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100197458_C_A', pValueMantissa=4.629000186920166, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00812979, standardError=0.00287088, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100197612_C_G', pValueMantissa=4.498000144958496, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815595, standardError=0.00287088, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100197640_T_C', pValueMantissa=1.965000033378601, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114501, standardError=0.00369901, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100197675_G_A', pValueMantissa=2.75600004196167, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0386379, standardError=0.0175348, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100197920_A_G', pValueMantissa=2.384999990463257, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0167093, standardError=0.00739523, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100198475_T_C', pValueMantissa=1.9639999866485596, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114509, standardError=0.00369901, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100199282_C_G', pValueMantissa=1.1059999465942383, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0127328, standardError=0.00390313, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100199476_G_A', pValueMantissa=1.319000005722046, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0118973, standardError=0.00370432, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100200167_G_A', pValueMantissa=3.1589999198913574, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0376207, standardError=0.012745, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100201209_C_T', pValueMantissa=1.097000002861023, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00602792, standardError=0.0018465, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100201414_G_A', pValueMantissa=4.788000106811523, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0068162, standardError=0.00344526, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100201633_T_A', pValueMantissa=1.3179999589920044, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0118983, standardError=0.00370432, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100202455_T_C', pValueMantissa=1.9600000381469727, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114531, standardError=0.00369901, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100202467_G_A', pValueMantissa=3.875999927520752, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0277856, standardError=0.00962082, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100202772_A_T', pValueMantissa=1.9600000381469727, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114531, standardError=0.00369901, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100203494_T_C', pValueMantissa=1.9589999914169312, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114534, standardError=0.00369901, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100203542_G_T', pValueMantissa=1.6130000352859497, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00697446, standardError=0.00184854, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100203788_C_A', pValueMantissa=4.110000133514404, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.113144, standardError=0.0394286, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100204779_C_A', pValueMantissa=4.3379998207092285, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0101425, standardError=0.00502088, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100205801_A_G', pValueMantissa=4.5329999923706055, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00814881, standardError=0.00287085, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100206194_A_T', pValueMantissa=1.9570000171661377, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114546, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100206333_A_G', pValueMantissa=4.160999774932861, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0263098, standardError=0.0129133, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100206660_A_G', pValueMantissa=2.4539999961853027, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.113651, standardError=0.0505422, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100206733_C_T', pValueMantissa=1.315999984741211, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119003, standardError=0.00370432, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100207009_TA_T', pValueMantissa=1.9559999704360962, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114549, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100207455_C_G', pValueMantissa=1.305999994277954, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00593547, standardError=0.00184639, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100207653_G_A', pValueMantissa=3.6470000743865967, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114874, standardError=0.00194719, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100207898_CAAGTT_C', pValueMantissa=3.384999990463257, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0921644, standardError=0.0434369, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100208164_G_C', pValueMantissa=3.874000072479248, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0277875, standardError=0.0096208, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100209200_T_C', pValueMantissa=1.315000057220459, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119009, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100210277_C_T', pValueMantissa=1.3040000200271606, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119097, standardError=0.00370434, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100211064_G_A', pValueMantissa=1.9550000429153442, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114558, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100211240_A_G', pValueMantissa=7.230000019073486, pValueExponent=-7, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00932586, standardError=0.00188208, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100212531_T_C', pValueMantissa=3.874000072479248, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0277872, standardError=0.00962078, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100212621_T_C', pValueMantissa=1.6109999418258667, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00697491, standardError=0.00184852, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100213072_C_T', pValueMantissa=1.9529999494552612, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114567, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100213340_T_C', pValueMantissa=1.6119999885559082, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00697479, standardError=0.00184851, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100213631_T_C', pValueMantissa=1.6119999885559082, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00697476, standardError=0.00184851, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100214977_G_T', pValueMantissa=4.242000102996826, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.136966, standardError=0.0674913, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100215512_G_A', pValueMantissa=4.473999977111816, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00816059, standardError=0.0028708, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100215525_C_CA', pValueMantissa=1.9509999752044678, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0114578, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100215535_T_A', pValueMantissa=9.406000137329102, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0122847, standardError=0.00371395, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100215669_A_G', pValueMantissa=1.9509999752044678, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011458, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100216129_G_T', pValueMantissa=1.312000036239624, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119034, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100216744_G_C', pValueMantissa=2.9519999027252197, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115543, standardError=0.00194705, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100217073_T_TCATA', pValueMantissa=4.507999897003174, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815394, standardError=0.00287084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100218126_C_T', pValueMantissa=1.055999994277954, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00604851, standardError=0.00184672, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100218867_A_G', pValueMantissa=3.3550000190734863, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.205837, standardError=0.0968422, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100218929_A_C', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100219439_G_A', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100219496_T_C', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100219653_G_A', pValueMantissa=8.52400016784668, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0210222, standardError=0.00799145, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100219661_T_C', pValueMantissa=7.915999889373779, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0163115, standardError=0.00614227, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100220164_T_C', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100220814_T_TA', pValueMantissa=4.504000186920166, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815468, standardError=0.00287084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100220831_C_A', pValueMantissa=4.275000095367432, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.136751, standardError=0.0674941, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100221396_C_T', pValueMantissa=2.944000005722046, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115551, standardError=0.00194705, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100221486_T_G', pValueMantissa=1.3890000581741333, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0160699, standardError=0.00653242, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100221517_C_A', pValueMantissa=2.5439999103546143, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00413576, standardError=0.00185074, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100221594_C_G', pValueMantissa=2.0799999237060547, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0779801, standardError=0.0337333, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100223656_G_A', pValueMantissa=3.621000051498413, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114895, standardError=0.00194717, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100223788_T_C', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100224059_G_A', pValueMantissa=3.621000051498413, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114895, standardError=0.00194717, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100224086_A_ACT', pValueMantissa=1.0759999752044678, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00473991, standardError=0.00185855, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100224086_A_ACTCTCTCT', pValueMantissa=9.140999794006348, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0123865, standardError=0.00373569, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100224729_G_A', pValueMantissa=9.512999534606934, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0122608, standardError=0.00371028, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100224788_C_T', pValueMantissa=4.552000045776367, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00814496, standardError=0.00287083, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100224846_CA_C', pValueMantissa=4.505000114440918, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815457, standardError=0.00287084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100225330_C_T', pValueMantissa=4.679999828338623, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00811972, standardError=0.0028709, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100225460_G_A', pValueMantissa=1.4520000219345093, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0138989, standardError=0.00568655, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100227298_T_G', pValueMantissa=4.505000114440918, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815457, standardError=0.00287084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100227436_A_C', pValueMantissa=2.1089999675750732, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0204774, standardError=0.00887858, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100227710_T_C', pValueMantissa=2.624000072479248, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115932, standardError=0.00194728, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100228161_T_C', pValueMantissa=1.1180000305175781, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0127208, standardError=0.00390316, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100228188_C_G', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100228581_G_GGGA', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100228620_A_G', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100229692_G_T', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100229731_G_C', pValueMantissa=4.275000095367432, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.136751, standardError=0.0674941, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100230118_T_C', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100230958_C_A', pValueMantissa=3.694000005722046, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0264656, standardError=0.0126847, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100231193_T_TTTG', pValueMantissa=2.11299991607666, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0113217, standardError=0.00368321, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100231368_T_A', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100231561_G_GT', pValueMantissa=4.546000003814697, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815129, standardError=0.00287266, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100231791_G_C', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100233804_CAG_C', pValueMantissa=3.674999952316284, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0114848, standardError=0.00194718, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100235720_T_G', pValueMantissa=4.255000114440918, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0683751, standardError=0.0337137, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100236254_A_G', pValueMantissa=1.8240000009536743, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.621107, standardError=0.263096, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100236529_C_T', pValueMantissa=1.5670000314712524, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00698791, standardError=0.00184852, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100236538_A_G', pValueMantissa=1.5640000104904175, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00698861, standardError=0.00184852, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100236603_C_T', pValueMantissa=3.1489999294281006, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115356, standardError=0.00194738, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100237030_C_T', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100237733_G_A', pValueMantissa=4.505000114440918, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815457, standardError=0.00287084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100237772_G_A', pValueMantissa=9.51200008392334, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0122572, standardError=0.00370917, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100237893_A_T', pValueMantissa=4.275000095367432, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.136751, standardError=0.0674941, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100238295_A_G', pValueMantissa=4.505000114440918, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815457, standardError=0.00287084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100238581_A_G', pValueMantissa=6.859000205993652, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0255013, standardError=0.00751108, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100238657_T_C', pValueMantissa=2.809000015258789, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.01157, standardError=0.00194702, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100239610_G_T', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100239637_A_G', pValueMantissa=1.1369999647140503, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00600877, standardError=0.00184638, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100239850_T_C', pValueMantissa=1.9490000009536743, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011459, standardError=0.003699, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100239989_G_A', pValueMantissa=3.2009999752044678, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011529, standardError=0.00194715, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100240726_T_G', pValueMantissa=4.000999927520752, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0525952, standardError=0.0256104, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100240944_C_T', pValueMantissa=2.8889999389648438, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0115616, standardError=0.00194713, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100242014_C_T', pValueMantissa=4.505000114440918, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00815457, standardError=0.00287084, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100242478_A_G', pValueMantissa=9.51200008392334, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0122572, standardError=0.00370917, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100242630_C_T', pValueMantissa=1.253999948501587, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011921, standardError=0.00369498, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100242920_TGA_T', pValueMantissa=4.275000095367432, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.136751, standardError=0.0674941, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100243390_G_A', pValueMantissa=8.79800033569336, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0252612, standardError=0.00439142, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100244149_G_C', pValueMantissa=3.316999912261963, pValueExponent=-9, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.011525, standardError=0.0019484, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100244398_T_C', pValueMantissa=3.694000005722046, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00834099, standardError=0.00287304, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100244540_A_G', pValueMantissa=1.8240000009536743, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.621107, standardError=0.263096, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100244650_T_C', pValueMantissa=1.8240000009536743, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.621107, standardError=0.263096, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100244773_C_G', pValueMantissa=1.8240000009536743, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.621107, standardError=0.263096, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100244991_G_C', pValueMantissa=1.8240000009536743, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.621107, standardError=0.263096, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100245546_T_C', pValueMantissa=1.472000002861023, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0117796, standardError=0.00370405, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100245863_C_T', pValueMantissa=1.472000002861023, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0117796, standardError=0.00370405, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100246645_C_T', pValueMantissa=3.694000005722046, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00834099, standardError=0.00287304, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100246672_T_C', pValueMantissa=1.1399999856948853, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00600727, standardError=0.00184638, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100246924_C_T', pValueMantissa=3.4030001163482666, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0281666, standardError=0.00961714, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100247616_T_C', pValueMantissa=3.694000005722046, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00834089, standardError=0.00287304, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100248412_C_G', pValueMantissa=1.4470000267028809, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00702484, standardError=0.00184863, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100248726_A_G', pValueMantissa=3.694999933242798, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00834082, standardError=0.00287304, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100249239_A_C', pValueMantissa=2.0339999198913574, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0353474, standardError=0.0152353, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100249267_A_T', pValueMantissa=1.472000002861023, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0117796, standardError=0.00370405, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100249476_T_TC', pValueMantissa=3.694999933242798, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00834082, standardError=0.00287304, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100249705_T_C', pValueMantissa=1.472000002861023, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0117796, standardError=0.00370405, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100250941_T_C', pValueMantissa=1.8240000009536743, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.621107, standardError=0.263096, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100250976_T_A', pValueMantissa=6.709000110626221, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0690304, standardError=0.0254633, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100251390_T_A', pValueMantissa=2.9049999713897705, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0055723, standardError=0.00187139, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100251454_A_G', pValueMantissa=1.1790000200271606, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00712036, standardError=0.00184919, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100251790_C_T', pValueMantissa=3.497999906539917, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00593413, standardError=0.00281426, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100252662_G_A', pValueMantissa=1.5770000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100252768_G_A', pValueMantissa=1.5770000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100252920_T_G', pValueMantissa=1.5770000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100254207_CCAGA_C', pValueMantissa=3.382999897003174, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0921782, standardError=0.0434383, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100254700_T_C', pValueMantissa=1.3079999685287476, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.0884636, standardError=0.0275222, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100254749_C_A', pValueMantissa=3.940999984741211, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00710422, standardError=0.00344885, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100255058_C_G', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100255162_C_T', pValueMantissa=3.9679999351501465, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00827516, standardError=0.00287265, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100256000_C_A', pValueMantissa=1.5770000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100256287_C_T', pValueMantissa=4.053999900817871, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00825485, standardError=0.00287235, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100256511_G_A', pValueMantissa=1.0700000524520874, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00604016, standardError=0.00184634, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100257612_C_T', pValueMantissa=1.9170000553131104, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0082026, standardError=0.00350204, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100258083_A_G', pValueMantissa=2.7039999961853027, pValueExponent=-2, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0635849, standardError=0.0287601, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100258094_C_T', pValueMantissa=1.5770000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100258332_C_T', pValueMantissa=3.9760000705718994, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0082729, standardError=0.00287251, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100260000_A_G', pValueMantissa=1.6239999532699585, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0116706, standardError=0.00370306, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100260586_A_G', pValueMantissa=3.8919999599456787, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.00829222, standardError=0.00287251, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100260869_C_T', pValueMantissa=4.205999851226807, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0082302, standardError=0.00287541, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100262992_C_T', pValueMantissa=1.5770000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100263055_G_C', pValueMantissa=1.3109999895095825, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.0119039, standardError=0.00370431, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100263140_C_T', pValueMantissa=1.5770000219345093, pValueExponent=-3, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=0.011701, standardError=0.00370274, betaConditioned=None, standardErrorConditioned=None, r2Overall=None), Row(is95CredibleSet=None, is99CredibleSet=None, logABF=None, posteriorProbability=None, variantId='10_100263249_C_T', pValueMantissa=1.1790000200271606, pValueExponent=-4, pValueMantissaConditioned=None, pValueExponentConditioned=None, beta=-0.00711917, standardError=0.00184892, betaConditioned=None, standardErrorConditioned=None, r2Overall=None)], size=1001)]"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "window_based_clumped_output = 'gs://ot-team/dsuveges/finngen/2023.10.13_window_clumped_w_locus'\n",
+ "\n",
+ "(\n",
+ " session.spark.read.parquet(ld_clumped_output)\n",
+ " .filter(f.size(f.col('qualityControls')) == 0)\n",
+ "# .show(1, False, True)\n",
+ " .select('locus', f.size(f.col('locus')).alias('size'))\n",
+ " .limit(1)\n",
+ " .collect()\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e242acdd",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "gist": {
+ "data": {
+ "description": "GCS/dsuveges/PICS/2023.10.06 - PICS FINNGEN from top to bottom.ipynb",
+ "public": false
+ },
+ "id": ""
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/Productionizing_LD_matrix.ipynb b/notebooks/Productionizing_LD_matrix.ipynb
new file mode 100644
index 000000000..84f8677b0
--- /dev/null
+++ b/notebooks/Productionizing_LD_matrix.ipynb
@@ -0,0 +1,1505 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "baf71347",
+ "metadata": {},
+ "source": [
+ "# Extracting square sub-matrices from reference\n",
+ "\n",
+ "\n",
+ "### Conceptual considerations:\n",
+ "\n",
+ "```\n",
+ "Summary statistics\n",
+ "↓\n",
+ "[window based clumping]\n",
+ "[ld based clumping]\n",
+ "↓\n",
+ "StudyLocus\n",
+ "↓\n",
+ "[ld matrix extraction] <- StudyIndex (studyId, ldPopulations), ldIndex, ldMatrix\n",
+ "↓\n",
+ "\n",
+ "```\n",
+ "\n",
+ "\n",
+ "- Assume we have only one ancestry"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "d75ac655",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-25T11:18:41.257715Z",
+ "start_time": "2023-10-25T11:18:14.728571Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "SLF4J: No SLF4J providers were found.\n",
+ "SLF4J: Defaulting to no-operation (NOP) logger implementation\n",
+ "SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\n",
+ "SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.\n",
+ "SLF4J: Ignoring binding found at [jar:file:/usr/lib/spark/jars/log4j-slf4j-impl-2.18.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]\n",
+ "SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.\n",
+ "Setting default log level to \"WARN\".\n",
+ "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n",
+ "pip-installed Hail requires additional configuration options in Spark referring\n",
+ " to the path to the Hail Python module directory HAIL_DIR,\n",
+ " e.g. /path/to/python/site-packages/hail:\n",
+ " spark.jars=HAIL_DIR/backend/hail-all-spark.jar\n",
+ " spark.driver.extraClassPath=HAIL_DIR/backend/hail-all-spark.jar\n",
+ " spark.executor.extraClassPath=./hail-all-spark.jarRunning on Apache Spark version 3.3.0\n",
+ "SparkUI available at http://ds-genetics-etl-test-m.c.open-targets-eu-dev.internal:37397\n",
+ "Welcome to\n",
+ " __ __ <>__\n",
+ " / /_/ /__ __/ /\n",
+ " / __ / _ `/ / /\n",
+ " /_/ /_/\\_,_/_/_/ version 0.2.122-be9d88a80695\n",
+ "LOGGING: writing to /dev/null\n"
+ ]
+ }
+ ],
+ "source": [
+ "from otg.common.session import Session\n",
+ "from otg.dataset.study_locus import StudyLocus\n",
+ "from otg.dataset.study_index import StudyIndex\n",
+ "from otg.datasource.gnomad.ld import GnomADLDMatrix\n",
+ "from otg.datasource.finngen.study_index import FinnGenStudyIndex\n",
+ "\n",
+ "import hail as hl\n",
+ "from hail.linalg import BlockMatrix\n",
+ "\n",
+ "from pyspark.sql import Window\n",
+ "import pyspark.sql.functions as f\n",
+ "from pyspark.sql import Column, DataFrame\n",
+ "\n",
+ "from urllib.request import urlopen\n",
+ "\n",
+ "\n",
+ "session = Session(hail_home='/opt/conda/miniconda3/lib/python3.10/site-packages/hail')\n",
+ "hl.init(sc=session.spark.sparkContext, log=\"/dev/null\")\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9eac3419",
+ "metadata": {},
+ "source": [
+ "## Generate FINNGEN Study table\n",
+ "\n",
+ "- Executed in 2.22s\n",
+ "- Building a Finngen study table from source."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "51b4cd9c",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-25T11:19:13.439965Z",
+ "start_time": "2023-10-25T11:19:11.603603Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-RECORD 0--------------------------------------------------------------------------------------------------------------------\n",
+ " studyId | FINNGEN_R9_AB1_ACTINOMYCOSIS \n",
+ " traitFromSource | Actinomycosis \n",
+ " nCases | 93 \n",
+ " nControls | 332343 \n",
+ " nSamples | 332436 \n",
+ " projectId | FINNGEN_R9 \n",
+ " studyType | gwas \n",
+ " hasSumstats | true \n",
+ " initialSampleSize | 377,277 (210,870 females and 166,407 males) \n",
+ " discoverySamples | [{377277, Finnish}] \n",
+ " summarystatsLocation | https://storage.googleapis.com/finngen-public-data-r9/summary_stats/finngen_R9_AB1_ACTINOMYCOSIS.gz \n",
+ " ldPopulationStructure | [{fin, 1.0}] \n",
+ "only showing top 1 row\n",
+ "\n",
+ "+--------------------+------------+\n",
+ "| studyId|ldPopulation|\n",
+ "+--------------------+------------+\n",
+ "|FINNGEN_R9_ASTHMA...| fin|\n",
+ "|FINNGEN_R9_E4_PIT...| fin|\n",
+ "|FINNGEN_R9_E4_VIT...| fin|\n",
+ "|FINNGEN_R9_H8_MID...| fin|\n",
+ "|FINNGEN_R9_L12_PI...| fin|\n",
+ "|FINNGEN_R9_M13_HA...| fin|\n",
+ "|FINNGEN_R9_M13_SP...| fin|\n",
+ "|FINNGEN_R9_Q17_LV...| fin|\n",
+ "|FINNGEN_R9_ALCOHO...| fin|\n",
+ "|FINNGEN_R9_CHRONL...| fin|\n",
+ "|FINNGEN_R9_C_DIFF...| fin|\n",
+ "|FINNGEN_R9_E4_OBE...| fin|\n",
+ "|FINNGEN_R9_GOUT_S...| fin|\n",
+ "|FINNGEN_R9_I9_LYM...| fin|\n",
+ "|FINNGEN_R9_I9_VAR...| fin|\n",
+ "|FINNGEN_R9_J10_CH...| fin|\n",
+ "|FINNGEN_R9_K11_HY...| fin|\n",
+ "|FINNGEN_R9_K11_RE...| fin|\n",
+ "|FINNGEN_R9_M13_OS...| fin|\n",
+ "|FINNGEN_R9_O15_PR...| fin|\n",
+ "+--------------------+------------+\n",
+ "only showing top 20 rows\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Processing studies:\n",
+ "def update_population(ld_pop: Column) -> Column:\n",
+ " return f.when(\n",
+ " f.size(ld_pop) == 1,\n",
+ " ld_pop.getItem(0).ldPopulation\n",
+ " )\n",
+ "\n",
+ "\n",
+ "# Read the JSON data from the URL.\n",
+ "json_data = urlopen('https://r9.finngen.fi/api/phenos').read().decode(\"utf-8\")\n",
+ "rdd = session.spark.sparkContext.parallelize([json_data])\n",
+ "df = session.spark.read.json(rdd)\n",
+ "\n",
+ "\n",
+ "finngen_release_prefix = 'FINNGEN_R9'\n",
+ "finngen_summary_stats_url_prefix = 'https://storage.googleapis.com/finngen-public-data-r9/summary_stats/finngen_R9_'\n",
+ "finngen_summary_stats_url_suffix = '.gz'\n",
+ "\n",
+ "# Parse the study index data.\n",
+ "studies = FinnGenStudyIndex.from_source(\n",
+ " df, \n",
+ " finngen_release_prefix, \n",
+ " finngen_summary_stats_url_prefix, \n",
+ " finngen_summary_stats_url_suffix\n",
+ ")\n",
+ "\n",
+ "studies.df.show(1, False, True)\n",
+ "\n",
+ "# From the study table we only need study identifier and the ld population\n",
+ "# We only need ld population if the study is based on single ancestry.\n",
+ "studies = (\n",
+ " studies.df\n",
+ " .select(\n",
+ " 'studyId',\n",
+ " update_population(f.col('ldPopulationStructure')).alias('ldPopulation'), \n",
+ " )\n",
+ " .distinct()\n",
+ " .persist()\n",
+ ")\n",
+ "\n",
+ "studies.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6452e680",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-24T10:24:17.267975Z",
+ "start_time": "2023-10-24T10:24:11.432842Z"
+ }
+ },
+ "source": [
+ "## Reading distance and ld clumped Finngen dataset\n",
+ "\n",
+ "- Extract two random loci for prototyping purposes.\n",
+ "- Input dataset: 19,005 study locus from 1,387 studies."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "46e851ca",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-25T11:25:04.824517Z",
+ "start_time": "2023-10-25T11:25:00.848659Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 63:===================================================> (33 + 3) / 36]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+-----------------------------------------+---------------+--------------+--------------+\n",
+ "|studyId |variantId |pValueMantissa|pValueExponent|\n",
+ "+-----------------------------------------+---------------+--------------+--------------+\n",
+ "|FINNGEN_R9_C3_BASAL_CELL_CARCINOMA_EXALLC|15_29035680_G_A|2.076 |-21 |\n",
+ "|FINNGEN_R9_G6_SLEEPAPNO |16_53771295_C_A|2.149 |-26 |\n",
+ "+-----------------------------------------+---------------+--------------+--------------+\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "sl = StudyLocus(\n",
+ " _df= (\n",
+ " session.spark.read\n",
+ " .parquet('gs://genetics_etl_python_playground/XX.XX/output/python_etl/parquet/finngen/2023.10.13_ld_clumped_w_locus/')\n",
+ " .filter(\n",
+ " (f.size(f.col('qualityControls')) == 0) &\n",
+ " (f.size(f.col('locus')) > 100)\n",
+ " )\n",
+ " .orderBy(f.rand(seed=23))\n",
+ " .limit(2)\n",
+ " ),\n",
+ " _schema=StudyLocus.get_schema()\n",
+ ").persist()\n",
+ "\n",
+ "# Get list of leads and studies:\n",
+ "sl.df.select('studyId', 'variantId', 'pValueMantissa', 'pValueExponent', ).show(truncate=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 148,
+ "id": "661d9633",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:16:21.754731Z",
+ "start_time": "2023-10-27T11:16:20.553762Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+---------------+---------+---------+---------+-----------------------------------+\n",
+ "|studyLocusId |variantId |pValue |locusSize|ldSetSize|qualityControls |\n",
+ "+--------------------+---------------+---------+---------+---------+-----------------------------------+\n",
+ "|-6067699795164145074|15_27427129_A_G|9.592E-13|738 |35 |[] |\n",
+ "|-8027743839728879857|15_27983407_C_T|4.618E-61|837 |78 |[] |\n",
+ "|4889075444063922922 |15_28519016_G_A|2.786E-33|277 |-1 |[Variant not found in LD reference]|\n",
+ "|2224601896262245870 |15_29035680_G_A|2.076E-21|647 |5 |[] |\n",
+ "|-7676564604508510836|15_48134287_A_G|3.572E-12|442 |34 |[] |\n",
+ "+--------------------+---------------+---------+---------+---------+-----------------------------------+\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "# Let's get all top-loci from this study on chromosome 15:\n",
+ "(\n",
+ " session.spark.read\n",
+ " .parquet('gs://genetics_etl_python_playground/XX.XX/output/python_etl/parquet/finngen/2023.10.13_ld_clumped_w_locus/')\n",
+ " .filter(\n",
+ " (f.col('studyId') == 'FINNGEN_R9_C3_BASAL_CELL_CARCINOMA_EXALLC') &\n",
+ " (f.col('chromosome') == '15') \n",
+ "# f.col('ldSet').isNotNull()\n",
+ " )\n",
+ " .orderBy(f.col('position'))\n",
+ " .select(\n",
+ " 'studyLocusId',\n",
+ " 'variantId', \n",
+ " f.concat_ws('E','pValueMantissa', 'pValueExponent').alias('pValue'), \n",
+ "# 'studyLocusId', \n",
+ " f.size(f.col('locus')).alias('locusSize'),\n",
+ " f.size(f.col('ldSet')).alias('ldSetSize'),\n",
+ " f.col('qualityControls')\n",
+ " )\n",
+ "# .count()\n",
+ " .show(20, truncate=False)\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d101a072",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "attachments": {
+ "image.png": {
+ "image/png": "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8IseYXz/ww2TU+jEN2tzYM2N9Rs2ar+4T3TYG8mUMaNOU/r090vvvv2087bt2yVvntzGS7TtazWqS19lcunWW2+Nds6bQ1x4OsODQsFuYqpkiVf1rA7MZoGACxREUD7g9/Mv62Tt2p/1uWJFi8rjObLrffz76bo79pFP9rU3wBtmoDp27orT8t33P8rT+W88I9qR/0iABEiABEiABEiABEiABEiABEiABEiABEiABEiABJIUgfCwsLAESfCBAwcFI+whWTJnko4d2lqKCu2o/j3wQHrp3KmDOZRP535u7WOWBRbRRkc31m8wigrLg9rB4stG/v77b7OrF2iev+ALfYyZB2+/9aalqDCeoCyoX6+OOYzRFkoCI18tXWZ2re3CRV9a+zWqV7X2L1y8YHXe16ldy3K372TN+ph16DTjZJ1QO+AycMA7rhUVceFpjxf75cqW8VBUwA0mnzDTwsiZM1GmqMyxv+1vhw5Zpy8p019OKVWqhLRo3lT/cj71pPM0j0mABEiABEiABEiABEiABEiABEiABEiABEiABEiABJIYgQSbWbF7zx4LTVnVue1cLNqcfP65G+aBflp7Y80CKFUWLrihvDD+sYWZpaNHj8mYsR/Yna39HTt+tfZfr1nDq6IDHl6rXk1mzPzQ8ut2p7y6n/4DBmnvXyz8Ui3+3NtaIByzLWDCCYIZAXbzRzmyZ5elSxbpc85/ULbs3rNXr1fhPOftuH69utYi1t7OO93iwtMZVuVKFZxO+jiHbbbE3471MrxecN0Rs0eMSa4aNWtLa7Xgevny5SRH9mxawZXmttuke9fO/oLgORIgARIgARIgARIgARIgARIgARIgARIgARIgARIggSREIMGUFVhHwsjUaTPk++9/MIc+t4cPH4l2DosvY22In9TiyzC9dPC3Q9YC0tE8X3c4fORGOFmyZPHlTR5++CGf5/ydwIyQl18qrEwS/aBNQcHE0QuFnteXfLvyO+tSzJ6ISJXKOjY7UExgTYtNmzfr9TYOKlZQcsREMmfOFBPvlt/Y8LQuvr5zz913O5308e1qFouRyMhrZjfgtm6d2jJ/wUKLwfvjxgt+mBUD81KvFC8qL75QyDKnFTBAeiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEghpAhEJZQbq0KHDFgh0xG/Zus06druDNQ569OylO/S9XYOZC2fPRjc3ZFd63HVXOm+XajezloRPD35OVKtaRSsr4GXp0uWWssJuAsrbDISZH86WwUOGWR3zzijQQe9GcXHzTTc5Lw14HFuezoDvuOMOp1OcjrF+xfzP52gu365cZYUFDjAlZsyJwWzX2716elUAWRdxhwRIgARIgARIgARIgARIgARIgARIgARIgARIgARIIOQJJJiy4o7bb7dglC1TWp4t8Ix17GsnIiLCOnXkyFF57fW61jF2TDiPPPKwZMuaVbAYdfYncnn4wUGa22+M8P/vv/+inTcO9nUujJvb7SvFi1leP1cd6r3VQtfn//c/MQtMY00MLARul4WLFkuvt/taTlC2lFbrMeTKmVNwTzB7tG/f/mj3bV0Qh5248HRGGwyFF0xkTZsyUY6fOCE//rhaflz9k6z45lsPxQ1MdqWOSC293urhTBKPSYAESIAESIAESIAESIAESIAESIAESIAESIAESIAEkhCBG9qAICc6U+aMVgz58uaRBvU9FQ/WSR87n8z51DpTpMhLMn7smGiLSZ8+/bvlx76TKeONuI+otS18yYmTJ32dCuh+2223Si21HsbHn3yqO9TXr98gx44dt66r+VoNa9/sTJ4y1exKh3ZtpF3b1tEWHf9l3XrLT3zuxIVnfKYjUFgZHnxQaqi1RPC7du2a7Ny5S2bMmi1zPp2rL/1YPRc93+ymF/QOFBbPkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJhCaB8IRKln1WAdZ28CUHDhyU/AWe17/OXbtb3n5VndRGWjZvFk1RgXPr1nvv2M/46CPmUpk3b75ERkZax/adxUuW2g9jvF+5UkXrmqXLlsvCL7+0jkuVfNXax86VK1c8TGG1btUimqIC/n766Wds4l3iwjPeE2MLcP/+A1b+j37vfdsZ0QqJp556UoYOHmAtVA7TUCdPnfLwxwMSIAESIAESIAESIAESIAESIAESIAESIAESIAESIIGkRSDBlBV58+QWmDmC/KDM+qxTMw+cgpHzg98dptedwNoTzzz9tOUlPPxGUrGwtlNOnTotY94f53TWx3nVTA4TNxb6Xvjl4mj+cP3kKdOiucfEocAzT8uDDzygL5k2faasWvW93q9erYo413Ww3w88HTh4UPu1/1u/YaPApFQwxB5/THnGd3ouXrxoBZkhw4NW/mOWii/F0sULF6xrfC3wbXngDgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQEgTCPfVGewm1c2at5I3mrUM+Dt58pTcrtas6NWzuxVstRq19ELJZ86ckUuXLsmOHb9Kg0ZvyLJlX2s/6PQvV7a05T93rpzW/vtjP9DrF1y4cFHQ0f7JnLlSulxF2blrt+Xn2LFjgjUooAC59dZbPeJu266jTJ46TQ4dPiznVaf3j6vX6OvdLGRtReBlBwoAmIJyStXKlZxOepaAfd2Od/oNlA0bNwo67jdt2ixj1D1WrV7TY42G3347rM9HCywWDnHhGYvool0C805Gxn0wQWDuCgoj5FXhF1/Qp2CWq1nL1sqc1jGttLhy9aps275d3urVx5qVAr8333yzCYpbEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBJEgg7OrVq5H2Ufb+7uHy5cuSNcdT/rx4Pff1ssWSPVs23eHcqk17WbzkK6/+7I6Lvpgn9g51zLQoXOQVj857u3/sF3q+oPyulB/2mQJjRo+UCuXLirpPad6yjbXgtfNaHOfLl1crCrCP2RDDhg7Gbozk4G+/SZFiJaxroHRZ8+Mqr2sqrF37c8DFs+vUriUfzv7YCg87a9d8r2dwjBw9RkapH2TB55/q9OsD27+vli7T9w2n3r16SqOG9fXZuPLs3befTJ8xS4f17ddL5bHHsuh9+z+Y9Cr6Sknt5OS5ddt2KV+xit27XrejvVq7A/n3SskyHud8HaxcsUyyZMns6zTdSYAESIAESIAESIAESIAESIAESIAESIAESIAESIAEkgCB8LCwMNfJjIlfe6ARqaLW8cb1Y8eMkkED+tlPe+wXK1pEFi+c76GogAeYcfrko1mSLVtWD/84SJMmjbRu2VxmzZwmPbp18TgfKVHrU6RKlUrGjxsjHdu39ThvDqDomK2uf/T6+hYREbFbexxrc0DpYeT1Wq95VVTgfMGCz8nokcN0+o1/s4WSA4qWAf36SovmTY2z3kaq2SKQVDbTWOHq/rxJePgNd/s9xZWnyVPEGZ7qhokuexrs7va44efJJ5+Qhg3q2b1b+8jjj2fPtEx3WSdsO2D85cJ5VFTYmHCXBEiABEiABEiABEiABEiABEiABEiABEiABEiABJIqgTBlBiqqNz+B7wAml3bt3i1Y6Pnff/+T9PffL7lz55RMGTP6TQlmd2xUZpKwEHPq1Kklv+q0zpw5k4dCAOaDDh8+IhERqeTJJ56Ithj32XPnZMuWrXoEP67Nkzu3pE9/vySW/PnnX7J5yxY5dOiwTke+vHmjpWfP3r1y7uw5SZs2reTIkd3jfuOS7vjgGZf4YQbs9zNn5SaVl1AUIU+NIG3bt+/QJp/++PNPfe7RRx7R/vLkzuV1QXJzLbckQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJJh0CMzEAlndtiSkmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABJIKgUSbWZFUADGdJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACwSXgfbGB4MbJ0EmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEjAIhB+9epV64A7JEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJDQBGgGKqGJMz4SIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEPAjQD5YGDByRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAglNgMqKhCbO+EiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABDwIUFnhgYMHJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACCU0gPDIyMqHjZHwkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkYBGgssJCwR0SIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIHEIBCmZlZwakVikGecJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACmgDXrOCDQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkKgEwq9du5aoCWDkJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACKZtAeFhYWMomwLsnARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARJIVAJcYDtR8TNyEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABzqzgM0ACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJCoBCIiIyMlJqagDh48KLt375YzZ87I1atXEzXxjDzuBFKlSiX33nuv5MiRQzJnzhz3ABkCCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACcSQQJhSVkS6vWb9+vVy8uRJyZMnj2TIkEHQ0U1J2gSgcDp+/Lhs2bJF30i5cuWS9g0x9SRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAkmOQLjbFGNGBRQVpUuXlkceeYSKCrfgQtwfFE7IzxIlSuiUIp8pJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJCQBFwvsA3TT5hRwdkUCZk9CRfXTTfdpPMX+UwhARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggYQk4HqBbaxRAdNPlORLAPmLfKaQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQEIScD2zAmsbcFZFQmZNwseF/OWi6QnPnTGSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQEon4FpZkdJB8f5JgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgASCQ8C1GajgRM9QSYAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEUjoBKitS+hPA+ycBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBRCYQnsjxM3oSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIEUToDKihT+APD2SYAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCCxCVBZkdg5wPhJgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIIUTCI+MjEwwBIhr7969cu7cuQSJc8WKFbJw4UIrrrlz58r8+fP18enTp2X69Oly/Phx67y3neXLl8vixYu9nYqx25UrV2Tfvn1y9OhRSUjuMU5oErngjz/+lLmfzZPjJ07oFJ86dVomTpoiv//+u887cOPH58VxPIG0bt++I46h8HISIAESIAESIAESIAESIAESIAESIAESIAESIAESSH4EEkRZAQVF7dq1JW3atJI9e3a555575JFHHrEUB8HC+v7770vfvn118FevXpUaNWpI/fr19fGBAwekYcOG8uuvv/qNfsSIETJo0CC/fgKdvHTpkrRo0UJSp04t2bJl0/cOFhMmTAh0abTza9asEfxCTZYt+1oy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Z/defb5e3drWGhdY46Rundd9Kiv0BS7+QdlQsOBzlqIClzytFF45cz4lW7dt9wihqHo2jTz33LN6d/PmLVpZEegezHXckgAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJRCcQ4a1zPbq32LlgXQXIrl27XAeQNm1aD79GWfHCCy94uONgy5Yt2m3jxo0Cc05OQfy///6709nj2K4YwYlMmTLp83v27NFb+7+dO3fqw06dboy2t58/oWYA+FKQYA2Odu3a6R9G8k+aNEkvLo7ZFVhfIrZh33vvvdosFta+qF+/vk4OFi7v37+/No1lT1+o7N+eJo1HUvbt2y8dO3eVLVu3ebibgwPXTXc98vBDxklvMz76qMdxbA4QZ62aNaJdmiVzJlm9xtO012233VC6pUubTl+DxbQhge5Be+I/EiABEiABEiABEiABEiABEiABEiABEiABEiABEiABrwTCvbrGkyM66DHrwJd5JKz3MG3aNMGaE74kZ86c+hSUDujkt//MItuY6XD48OFoQTjXp4jmQTkcO3bMw/n48eP6+FEvHeFmFgMWxranw+xjPQWn4BxMNWEdBSP33HOPXsi7Zs2acvToUa1QiU3YJjzMIoFCaMeOHTJixAg5pBaHLlmypGANkKQgrdu2l337D8jokcNk9fcrZcfWjQJTUWmuKzUeUut+QDDrwi4n1XoncZUnHs8hJ9SsF6ccP35CMmfK6HT2eRzoHnxeyBMkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAISVGUF+FaqVEkvdG3WeDDMYX6qTZs20qhRI72wsnF3bo1pp23btun1F7CwNX7ffPONtaj1008/rdY3WOahsICCwNvsCGf4H3/8scdC1PPmzdNesNi2U7BOBmTNmjUeaYGSYOHChU7v+nj79u16TYuZM2dGO481JbCGBZQXMQkbMziMQGED81J//vmnNk+FtTbGjx+vT8dkRosJL6G3//33n+zctVvKlC6p15Z4WM2euEWZDVutGBvJniOb3l285CvjpLdYCNufmMXj//jjT5/esC7JunUb9LoYxtNvStmDtTDyXs9v4+5r6+YefF1LdxIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAZGgLrANwCNHjpT169drM01YW6J06dJy/vx5mThxol7nAQtFw5SRLylfvrzuhK9YsaL06dNHMmfOrBUD06dPl7Fjx+rLsPYDFuBG2OisR+fx4MGDfQXp4b5q1SqpVauWVKlSRbAgeL9+/aRYsWICBYhTYCIKppZ69+6t76FgwYICZQQW+a5evbo0aNDAeYkULlxYsmfPLs2aNZMDBw7o40uXLgmUJF999ZVW2KBT3W3YWKgb61OABdhAkH6s9dG5c2e5+eabZejQodq9UKFCehvK/5BezG7AQthQDtynnoWP5syRAwd/s2ZWZMqYUS9sPUkteA2BYuc7tZj5V0uX+b21nNcXzB4/cZJcvnxJSpcqGc0/FvWe8+lcadS4qTSoX0+uXbsmkyZP0XHXfr1mNP/eHNzcg7fr6EYCJEACJEACJEACJEACJEACJEACJEACJEACJEACJBBFIAI298PCwoLGA4tXL1iwQLp27apnAGCtBghmFGAh6xYtWnjEbUbDG0esYbFkyRJp1aqVmLUicO2QIUOsa5955hm9YDWUCGbtCnTmY3YF1oOwizN8KE2mTp2qO/zhDwqAKVOmCBZwhtj9g9OECRMEC4ZDWWKUApgdMmrUKO3f+Q/XYyZG48aNdZqRbiNQ1GBtCYjbsOvVqydLly6Vvn37CkxWIf0zZsyQLl26SLly5XRYMIu1evVqueuuu/RxYvyzcwsU/+hRw6V5i9bSs1dv7bWCWoC7Tu1aMn9B1GwVsHl3yEDNyCgsoOAYNeJdad+xixW88zm+8847pWP7tjJi1HvSoVNXee7ZAtGedYTz8eyZMnzEKOnWo6cO69kCz8iwdwerRd0z62NnuHA0r4w5F+gedED6uuC9ayYObkmABEiABEiABEiABEiABEiABEiABEiABEiABEggqREIU+aYIt10LKND3CzgHNubvHLlip69kC5dOvG2JkSgcDEj4Y8//pD77rvPQ4lgv+7MmTNaEYLR7jERhItroFxxI1DynFJrJsCEU+rUqd1cotet2Lt3r9xyyy2qIzyL+Frc3E3YFy9e1PEapQoScO7cOe0GZU5sJT7yObZx//nnXyr9EdaMCm/h4Bk4f/6CUsRELXDtzY/T7YoyOXbl8mXN3XnOfnzhwkV9aF9I237ezb6be3ATDv2QAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQEoiEOFGURFfQNCxjjUCYis33XSTYNFuf+LPpJS/62I6CwEj6h944AF/QUY7ByWFt7UwnB7dhI3ZHU7BWh5JWdKlSxsw+XgG8IuJRKRKJfgFkrgoKUzYbu7B+OWWBEiABEiABEiABEiABEiABEiABEiABEiABEiABEggikDQF9gmaBIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARLwRyAcCwpTSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCCxCISbBYITKwGMlwRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIGUTCMdizhQSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESSCwCnFmRWOQZLwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgCbAmRV8EEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABBKVQLiSRE0AIycBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEkjZBKipSNn5z7snARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggUQnQDNQiZ4FTAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJpGwCEWFhYSmbAO8+GoEZM2ZEc6MDCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACQSLQNi1a9ciqbAIFl6GSwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkEIgAzUAFIsTzJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACQSUQzlkVQeXLwEmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABAIQoLIiACCeJgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCC6B8OAGz9BJgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIwD8BKiv88+FZEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBIBOgsiLIgBk8CZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZCAfwLhkZGR/n3wLAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAkEkQCVFUGEy6BJgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAQCEwgPCwsL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BOo9A6BHQJbUewQoIQOKQL1nAPQMzpI6z2AFZFD21HsGgc/gbKn3DFZABmRPnWcA9GSypE6SARSlh9VOYS8EFqX1Y7VIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAQinAAtFRGuIBaPBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABKKdQBxWHaeQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQEYRiOPi2hmFnvmSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmAQJxlWSRBAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAhlGgDMrMgw9MyYBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEgABzqzgdUACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJChBOJUMrQAzJwESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCC2CdBSEdv6Z+1JgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIMMJ0A1UhquABSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCB2CbABbZjW/+sPQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlkOAHOrMhwFbAAJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJBDbBGisiG39s/YkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkOEE6AYqw1XAApAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBAbBOgsSK29c/akwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkECGE4jL8BKwACRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAjFNgMaKmFY/K08CJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACGU+AxoqM1wFLQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIxTSDOsqyYBsDKkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZCwBGisylj9zJwESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIGYJxCXJUuWmIdAACRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAhlHgMaKjGPPnEmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABJRA3NmzZzMdiBw5cmS6MrPAmYMAr63MoafMWEpeW5lRa2krM3WeNn6Z9WzqPbNqLm3lpt7Txi+znk29Z1bNpb7c1Hnq2WXmM6n3zKy91Jedek89u8x6JnUeeZqjTiJPJ+lRojiV9MiHeZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBAQAK0VATEwkASIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IhB35syZ9MqL+ZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBAIgJxWbNmTRTIABIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARJILwLZ0iuj9MrnyJEjcuLECbEsK72yZD6ZiECWLFkkZ86ckitXrhSXmtdWipHF1Am8tmJK3aay1Hns6Rw1pt6p95QS4PtDSolFTnze75Gji/QqCXWeXqQjKx/qPbL0kV6lod7Ti3Tk5EOdR44unJJQJw6J2PpNTu9ZtFM/pF79nTt3St68eSOC3qlTpyR79uyJyoI/g2fPnpX4+HjJli3q7DCJ6suAlBM4ffq0HDt2TLCwfCCDBa+tlDPlGTYBXluxdyVQ57Gnc9SYeqfe+f4QO9cA7/fY0bVTU+rcIRFbv9R7bOnbqS317pCInV/qPPJ0TZ1Enk7So0TJ6T2qFtjGjAoaKtLjssq8ecCIhWsE10pKhNdWSmjFZlxeW7Gnd+o89nSOGlPv1HtKCPD9ISW0Ii8u7/fI08m5LhF1fq4JR2b61Htk6uVcl4p6P9eEIy996pw6iTwCsVmi5O7FuBAnVmQKeqgLKkwhgWAEcI2k9LrntRWMKI85BHhtOSRi55c6jx1du2tKvbtpxM429R47unbXlHp304iNbeo8NvTsX0vq3Z9IbOxT77GhZ3ctqXM3jcjYpk4iQw/pXYpgeo8qY0V6g2V+JEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACaSegrvujyhNU2okwBRIgARIgARIgAQlvA4QAAEAASURBVBIgARIgARIgARIgARIgARIgARIgARIggXQlQEtFuuJmZiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAv4E4s6ePesfxn0SIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESSDcCcVmyZEm3zJgRCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACfgT4ALb/kS4TwIkQAIRSOCbb76Rq666SmBgPnPmjKeEM2bMMGEI9//s27fPE48bJEACJEACJEACJEACJEACJEACJEACJEACJBDJBLJxZkUkq4dlIwESiHUClmXJsGHDpFu3bgFR7Nmzx4T37ds30fELL7wwURgDSIAESIAESIAESIAESIAESIAESIAESIAESCASCWRDRxgNFpGoGpaJBEiABESGDBkiPXr0kFatWskFF1wgY8eO9cGC2ROlSpWSF154wSecOyRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQmQjEqWSm8rKsJEACJBBTBA4dOiSjRo2SN954Q+Lj4xPVHTMrChQokCicASRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQmQhky0yFZVlJgARIINYIPP/885IjR44kq71r1y658sorZerUqfLxxx9Lrly5pFq1atKkSRPJnj17kufxAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlEEgEusB1J2mBZSIAESMCPQDBDBaLCWDF9+nTp1KmTnDhxQj7//HN5+OGHpU2bNj4Lcfsly10SIAESIAESIAESIAESIAESIAESIAESIAESiCgCcVyvIqL0wcKQAAmQQIoI7N69W8qVKyebNm2SBQsWyJ9//ildu3aVGTNmyNy5c1OUFiOTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQEYR4MyKjCLPfEmABEggDAQ2btwo33//vVx11VWe1Pr162e2v/vuO08YN0iABEiABEiABEiABEiABEiABEiABEiABEggkgnQWBHJ2mHZSIAESCAIgf/++082bNggR48e9YmVM2dOsxj33r17fcK5QwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKRSoBuoCJVMywXCZAACSRD4OzZs3L33XdLz549fWKuXLlSjh07JpUqVfIJ5w4JkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJRCqBbFyzIlJVw3KRAAmQQHACWHy7devWMnLkSLn00kulQYMG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CZAACZAACZBAVBOgsSKq1cvKkQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEDkE6CxIvJ1xBKSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQFQTiLMsK6oryMqRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlENgEaKyJbPywdCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACUQ9gTiVqK8kK0gCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJBC5BGipiFzdsGQkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkEBME4s6ePRsTFWUlSYAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEIpNAFjVWWFmyZEm2dDt37pT4+Phk4zECCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACaSEQDbLsiQUYwUSjRRjxalTpyR79uwpqSfjkkBIBHhthYSJkVJBgNdWKqBl8lOo80yuwFQWn3pPJbhMfhr1nskVmMriU++pBJeJT6POM7Hy0lB06j0N8DLxqdR7JlZeKotOnacS3Dk8jTo5h3AjOOm4UA0VEVwHFo0ESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCATE4jDzAoKCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACWQUgTiVjMqb+ZIACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZCA0FLBi4AESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCBDCdANVIbiZ+YkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJcYJvXAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQIYS4MyKDMXPzEmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABGis4DVAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQoQToBipD8TNzEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABGit4DZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACWQogbgMzT2TZG5ZIr/tFfnzcNoLvHm/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KZLbMk4k9f4utP5Q5xbWQbycexhh/N+pU3J1jhAdqHXhZfayyy6lkcKQTdtfoc6tUEeOEbn79kWbEfB46aSkHgIJ7fNIjhAGrZ9+/tkonZHXIJTgeoOwI6HCgSA05AHNX5ExU0aTEyNUfVwXmEBC+h1huhASyC3os7NnzwhG1QcTPMYh1EsOvd9ACRqpINwXEnjfcvPNvBdFCs9RPly/I0zI5ZdfZrzlHJuZyWD97y7H+ZRHIFS/w5sCo5cRysf9Eo0+zxgbws/rUSGkD/LZFChQwC+UnHt7PIMilwVy2zD0j5vOhc+H6nPUDi/Cc+fPSZ7Y3ELOPQb6ryf2fRf72B+9XzJlzkSPGif8C5wO1+94VofHbKBk6oH6Hc0Jtc0FNjfo5mjL4V8Pm7ZiwAMlNIFw/Q49B8J4F1DbMwaPhpN/Tlv6IAxcdSfLDrct118cAuH6/OK0gntxEmCfOGmkn+l0ZaxIP93KI00oAV4IE0qO24UjwHMrHKG0t559nvb61MsRsd+9UEp7Zdjvaa9PvRwR+90LpbRVhn2etvrT69Gw372SSlvl2O9pqz+9HA373Auli1uGfXJxeaeUvUVhRB6FBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABJKLAI0VyUWe+yUBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEjAENJQpE/PxXCABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEkg+ArRUJB977pkESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESEAJRJ0/f54gSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCDZCERlyJAh2XbOHZMACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAAE2zzHCABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEkhWAvSsSFb83DkJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAA9K3gOkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJJCuBKJVkbQB3TgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkL4JZIhR8YLg0KFDkjVrVi9FWYYESIAESIAESIAESIAESIAESIAESIAE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yZUrV7zDQn4Idx/jMQ3PYCf+/scYwN3r7UpQDmGkcujo7HBKTnsb/iYegXD9HsmecB5kVA1DICVVJPWwbNITSGi/o4/hIXOLKhTdz5X4L5/TkG/B/uuJdVTYD0INZslyuS+kXGLVnZbrCdfnkV7jL5QV2vPj3n1yba6cfE68UJghtg/X7/v2RWuIr2sC/pcC3duxq1DbhGiKb1Wo64hdCOEjf/r5ZxNqskD+/PZi/nokEKrfkc9h1++WzuamC9D9oCnwykD0DoRzQqjxlCbRf2kISh0QW+wGy5iS0tqXmO0J1eeJuR/W5Z1AqD7BdXB/9H7JlDmTL2qA95pZMiUTyKAJuWK8KC7SgrEiJXcE25YyCIS6EKaMFrIVqZUAz63U2nMJbzf7POHsUvOW7PfU3HsJbzv7PeHsUvOW7PfU3HsJazv7PGHcUvtW7PfU3oMJaz/7PWHcUvNW7POU13vsk5TXJxejRZo7mC7kFwM090ECJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJBCYQBRcgCkkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkFwE6FmRXOS5XxIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAUOAnhU8EUiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABJKVgObWjkrWBnDnJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEAC6ZsALRXpu/959CRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQ7AQYBirZu4ANIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIH0TYAJttN3//PoSYAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCDZCdCzItm7gA0gARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggfRNgMaK9N3/PHoSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESSHYCGc6fPx+TIUOGsA05dOiQZM2aNWw5FiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBSAhk8mKosCtMKcaKM2fOSObMme1m8ZcEEo0Az61EQ8mKXAR4brmApINZ9nk66OQAh8h+DwAlHSxiv6eDTg5wiOz3AFDS+CL2eRrv4CCHx34PAiaNL2a/p/EODnB47PMAUJJ5EfskmTsgmXYflUz75W5JgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIwBCgsYInAgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQLISoLEiWfFz5yRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAlExMTGkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQALJRoDGimRDzx2TAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmAQFSGDBlIggRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgASSjQCNFcmGnjsmARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIAgajz58+TBAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAkkG4EolWTbOXdMAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAArRU8BwgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARJIVgJR586dS9YGcOckQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQALpm0BUxowZ0zcBHj0JkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkECyEmAYqGTFz52TAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnQWMFzgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIFkJ0FiRrPi5cxIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggaiYmBhSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIFkI0BjRbKh545JgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARA4P/YeNeOUSE9MQAAAABJRU5ErkJggg=="
+ }
+ },
+ "cell_type": "markdown",
+ "id": "9db8b8ab",
+ "metadata": {},
+ "source": [
+ "## Comparing with Finngen finemapping.\n",
+ "\n",
+ "The same [trait](https://r9.finngen.fi/pheno/C3_BASAL_CELL_CARCINOMA_EXALLC) has 3 finemapped credible sets.\n",
+ "\n",
+ "![image.png](attachment:image.png)\n",
+ "\n",
+ "- `15:27983407:C:T` and `15:27985172:C:T` are very close, I could find `27983407`.\n",
+ "- Also `15_48134287_A_G` is found by both approach.\n",
+ "- One of the other three snps was not found in the LD set (`15_28519016_G_A`). \n",
+ "- `15_27427129_A_G` and `15_29035680_G_A` were resolved in the LD matrix, and were found to be not linked. But they are not in the.\n",
+ "\n",
+ "What are the r between these variants?\n",
+ "\n",
+ "- 15_27983407_C_T vs 15_27427129_A_G -> r = \n",
+ "- 15_27983407_C_T vs 15_29035680_G_A -> r ="
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 144,
+ "id": "d8da5802",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T10:19:25.494510Z",
+ "start_time": "2023-10-27T10:19:23.020596Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+---------------+---------+---------+---------+---------------+----------+--------+--------+------------+\n",
+ "| variantId| pValue|locusSize|ldSetSize|qualityControls|chromosome|position| idx|ldPopulation|\n",
+ "+---------------+---------+---------+---------+---------------+----------+--------+--------+------------+\n",
+ "|15_27427129_A_G|9.592E-13| 738| 35| []| 15|27427129|11130387| fin|\n",
+ "|15_27983407_C_T|4.618E-61| 837| 78| []| 15|27983407|11133253| fin|\n",
+ "|15_29035680_G_A|2.076E-21| 647| 5| []| 15|29035680|11136878| fin|\n",
+ "+---------------+---------+---------+---------+---------------+----------+--------+--------+------------+\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Extracting and resolving ld:\n",
+ "resolved_ld_index = (\n",
+ " session.spark.read\n",
+ " .parquet('gs://genetics_etl_python_playground/XX.XX/output/python_etl/parquet/finngen/2023.10.13_ld_clumped_w_locus/')\n",
+ " .filter(\n",
+ " (f.col('studyId') == 'FINNGEN_R9_C3_BASAL_CELL_CARCINOMA_EXALLC') &\n",
+ " f.col('variantId').isin(['15_27983407_C_T', '15_27427129_A_G', '15_29035680_G_A'])\n",
+ " )\n",
+ " .orderBy(f.col('position'))\n",
+ " .select(\n",
+ " 'variantId', \n",
+ " f.concat_ws('E','pValueMantissa', 'pValueExponent').alias('pValue'), \n",
+ "# 'studyLocusId', \n",
+ " f.size(f.col('locus')).alias('locusSize'),\n",
+ " f.size(f.col('ldSet')).alias('ldSetSize'),\n",
+ " f.col('qualityControls')\n",
+ " )\n",
+ "# .count()\n",
+ " .join(ld_index, on = 'variantId', how='left')\n",
+ " .persist()\n",
+ ")\n",
+ "\n",
+ "resolved_ld_index.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 147,
+ "id": "722eb21d",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T10:24:03.123125Z",
+ "start_time": "2023-10-27T10:23:32.607310Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2023-10-27 10:23:48.619 Hail: INFO: Coerced sorted dataset \n",
+ "[Stage 942:> (0 + 1) / 1]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+---+---+------------------+\n",
+ "|i |j |entry |\n",
+ "+---+---+------------------+\n",
+ "|0 |0 |2.0000000000000084|\n",
+ "|0 |1 |0.4201370447477838|\n",
+ "|0 |2 |0.0 |\n",
+ "|1 |0 |0.4201370447477838|\n",
+ "|1 |1 |2.0000000000000004|\n",
+ "|1 |2 |0.0 |\n",
+ "|2 |0 |0.0 |\n",
+ "|2 |1 |0.0 |\n",
+ "|2 |2 |1.9999999999999996|\n",
+ "+---+---+------------------+\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "# Accessing r data from the LD matrix:\n",
+ "half_matrix = (\n",
+ " BlockMatrix\n",
+ " .read(ld_matrix_template.format(POP=ld_population))\n",
+ " .filter(\n",
+ " [row['idx'] for row in resolved_ld_index.select('idx').collect()],\n",
+ " [row['idx'] for row in resolved_ld_index.select('idx').collect()]\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "# matrix = half_matrix + half_matrix.T\n",
+ "matrix.entries().to_spark().show(100, truncate=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 153,
+ "id": "c316e0d0",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:18:11.801945Z",
+ "start_time": "2023-10-27T11:18:06.718163Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+---------------+----------+--------------------+--------------------+--------+--------+---------+--------------------------------+--------------------------------+---------------------------+---------------------------+--------------+--------------+-------------------------------+-------------+-------------------+---------------+-----------------+--------------------+--------------------+\n",
+ "| variantId|chromosome| studyId| studyLocusId|position| beta|oddsRatio|oddsRatioConfidenceIntervalLower|oddsRatioConfidenceIntervalUpper|betaConfidenceIntervalLower|betaConfidenceIntervalUpper|pValueMantissa|pValueExponent|effectAlleleFrequencyFromSource|standardError|subStudyDescription|qualityControls|finemappingMethod| locus| ldSet|\n",
+ "+---------------+----------+--------------------+--------------------+--------+--------+---------+--------------------------------+--------------------------------+---------------------------+---------------------------+--------------+--------------+-------------------------------+-------------+-------------------+---------------+-----------------+--------------------+--------------------+\n",
+ "|15_27983407_C_T| 15|FINNGEN_R9_C3_BAS...|-8027743839728879857|27983407|0.413866| null| null| null| 0.388762| 0.43897| 4.618| -61| 0.0443583| 0.025104| null| []| null|[{null, null, nul...|[{15_28482553_T_C...|\n",
+ "+---------------+----------+--------------------+--------------------+--------+--------+---------+--------------------------------+--------------------------------+---------------------------+---------------------------+--------------+--------------+-------------------------------+-------------+-------------------+---------------+-----------------+--------------------+--------------------+\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "study_locus_id = -8027743839728879857\n",
+ "\n",
+ "# Running susie for a specific study locus:\n",
+ "sl = StudyLocus(\n",
+ " _df= (\n",
+ " session.spark.read\n",
+ " .parquet('gs://genetics_etl_python_playground/XX.XX/output/python_etl/parquet/finngen/2023.10.13_ld_clumped_w_locus/')\n",
+ " .filter(f.col('studyLocusId') == study_locus_id)\n",
+ " ),\n",
+ " _schema=StudyLocus.get_schema()\n",
+ ").persist()\n",
+ "\n",
+ "sl.df.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "947d112a",
+ "metadata": {},
+ "source": [
+ "## Annotating study locus with ld population + Get list of ancestires"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 154,
+ "id": "8be0fd89",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:20:59.482466Z",
+ "start_time": "2023-10-27T11:20:59.062418Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-RECORD 0------------------------------------------------\n",
+ " studyId | FINNGEN_R9_C3_BAS... \n",
+ " variantId | 15_27983407_C_T \n",
+ " chromosome | 15 \n",
+ " studyLocusId | -8027743839728879857 \n",
+ " position | 27983407 \n",
+ " beta | 0.413866 \n",
+ " oddsRatio | null \n",
+ " oddsRatioConfidenceIntervalLower | null \n",
+ " oddsRatioConfidenceIntervalUpper | null \n",
+ " betaConfidenceIntervalLower | 0.388762 \n",
+ " betaConfidenceIntervalUpper | 0.43897 \n",
+ " pValueMantissa | 4.618 \n",
+ " pValueExponent | -61 \n",
+ " effectAlleleFrequencyFromSource | 0.0443583 \n",
+ " standardError | 0.025104 \n",
+ " subStudyDescription | null \n",
+ " qualityControls | [] \n",
+ " finemappingMethod | null \n",
+ " locus | [{null, null, nul... \n",
+ " ldSet | [{15_28482553_T_C... \n",
+ " ldPopulation | fin \n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "['fin']"
+ ]
+ },
+ "execution_count": 154,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Adding ld population to study locus:\n",
+ "dl_df = (\n",
+ " sl.df\n",
+ " .join(studies, on='studyId', how='left')\n",
+ " .persist()\n",
+ ")\n",
+ "\n",
+ "dl_df.show(1, vertical=True)\n",
+ "\n",
+ "# Extract the required ld populations:\n",
+ "ld_populations = [row['ldPopulation'] for row in dl_df.select('ldPopulation').distinct().collect()]\n",
+ "\n",
+ "ld_populations"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b69aad94",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-24T10:34:37.443692Z",
+ "start_time": "2023-10-24T10:34:37.436917Z"
+ }
+ },
+ "source": [
+ "## Read ld index"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 155,
+ "id": "5465b9d3",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:21:03.778148Z",
+ "start_time": "2023-10-27T11:21:03.770967Z"
+ },
+ "code_folding": [
+ 2
+ ]
+ },
+ "outputs": [],
+ "source": [
+ "from otg.common.utils import _liftover_loci, convert_gnomad_position_to_ensembl\n",
+ "\n",
+ "def _process_ld_indices(\n",
+ " ld_index_raw: hl.Table, \n",
+ " grch37_to_grch38_chain_path: str\n",
+ ") -> DataFrame:\n",
+ " \"\"\"Creates a look up table between variants and their coordinates in the LD Matrix.\n",
+ "\n",
+ " !!! info \"Gnomad's LD Matrix and Index are based on GRCh37 coordinates. This function will lift over the coordinates to GRCh38 to build the lookup table.\"\n",
+ "\n",
+ " Args:\n",
+ " ld_index_raw (hl.Table): LD index table from GnomAD\n",
+ " grch37_to_grch38_chain_path (str): Path to the chain file used to lift over the coordinates\n",
+ "\n",
+ " Returns:\n",
+ " DataFrame: Look up table between variants in build hg38 and their coordinates in the LD Matrix\n",
+ " \"\"\"\n",
+ " ld_index_38 = _liftover_loci(\n",
+ " ld_index_raw, grch37_to_grch38_chain_path, \"GRCh38\"\n",
+ " )\n",
+ "\n",
+ " return (\n",
+ " ld_index_38.to_spark()\n",
+ " # Filter out variants where the liftover failed\n",
+ " .filter(f.col(\"`locus_GRCh38.position`\").isNotNull())\n",
+ " .withColumn(\n",
+ " \"chromosome\", f.regexp_replace(\"`locus_GRCh38.contig`\", \"chr\", \"\")\n",
+ " )\n",
+ " # Temporary filter:\n",
+ " .filter(f.col('chromosome').isin(['16', '15']))\n",
+ " .withColumn(\n",
+ " \"position\",\n",
+ " convert_gnomad_position_to_ensembl(\n",
+ " f.col(\"`locus_GRCh38.position`\"),\n",
+ " f.col(\"`alleles`\").getItem(0),\n",
+ " f.col(\"`alleles`\").getItem(1),\n",
+ " ),\n",
+ " )\n",
+ " .select(\n",
+ " \"chromosome\",\n",
+ " \"position\",\n",
+ " f.concat_ws(\n",
+ " \"_\",\n",
+ " f.col(\"chromosome\"),\n",
+ " f.col(\"position\"),\n",
+ " f.col(\"`alleles`\").getItem(0),\n",
+ " f.col(\"`alleles`\").getItem(1),\n",
+ " ).alias(\"variantId\"),\n",
+ " f.col(\"idx\"),\n",
+ " )\n",
+ " # Filter out ambiguous liftover results: multiple indices for the same variant\n",
+ " .withColumn(\"count\", f.count(\"*\").over(Window.partitionBy([\"variantId\"])))\n",
+ " .filter(f.col(\"count\") == 1)\n",
+ " .drop(\"count\")\n",
+ " )\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15eab28a",
+ "metadata": {},
+ "source": [
+ "- Full genome: 5min"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 156,
+ "id": "e231cc9a",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:25:47.523343Z",
+ "start_time": "2023-10-27T11:21:07.729708Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 975:=================================================>(9996 + 4) / 10000]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+----------+---------+--------------------+--------+------------+\n",
+ "|chromosome| position| variantId| idx|ldPopulation|\n",
+ "+----------+---------+--------------------+--------+------------+\n",
+ "| 15|100068435| 15_100068435_C_T|11488485| fin|\n",
+ "| 15|100074914| 15_100074914_T_C|11488528| fin|\n",
+ "| 15|100082112| 15_100082112_C_G|11488600| fin|\n",
+ "| 15|100084933| 15_100084933_C_T|11488622| fin|\n",
+ "| 15|100086055| 15_100086055_C_T|11488643| fin|\n",
+ "| 15|100102338|15_100102338_CGAA...|11488802| fin|\n",
+ "| 15|100102474| 15_100102474_A_G|11488806| fin|\n",
+ "| 15|100140453| 15_100140453_G_GAC|11489087| fin|\n",
+ "| 15|100141050| 15_100141050_G_A|11489092| fin|\n",
+ "| 15|100149133| 15_100149133_G_T|11489141| fin|\n",
+ "| 15|100270659| 15_100270659_G_A|11490053| fin|\n",
+ "| 15|100317282| 15_100317282_T_C|11490464| fin|\n",
+ "| 15|100376040| 15_100376040_ACTT_A|11490958| fin|\n",
+ "| 15|100391254| 15_100391254_CA_C|11491027| fin|\n",
+ "| 15|100394474| 15_100394474_T_C|11491043| fin|\n",
+ "| 15|100466861| 15_100466861_T_C|11491614| fin|\n",
+ "| 15|100516200| 15_100516200_T_C|11492028| fin|\n",
+ "| 15|100525848| 15_100525848_T_G|11492086| fin|\n",
+ "| 15|100588385| 15_100588385_A_T|11492713| fin|\n",
+ "| 15|100605649| 15_100605649_A_T|11492813| fin|\n",
+ "+----------+---------+--------------------+--------+------------+\n",
+ "only showing top 20 rows\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "grch37_to_grch38_chain_path = 'gs://hail-common/references/grch37_to_grch38.over.chain.gz'\n",
+ "ld_index_raw_template = 'gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.ld.variant_indices.ht'\n",
+ "ld_matrix_template ='gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.adj.ld.bm'\n",
+ "\n",
+ "\n",
+ "ld_population = 'fin'\n",
+ "ld_index_raw_path = ld_index_raw_template.format(POP=ld_population)\n",
+ "\n",
+ "ld_index = (\n",
+ " _process_ld_indices(\n",
+ " hl.read_table(ld_index_raw_path),\n",
+ " grch37_to_grch38_chain_path,\n",
+ " )\n",
+ " .withColumn('ldPopulation', f.lit(ld_population))\n",
+ " .persist()\n",
+ ")\n",
+ "\n",
+ "ld_index.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 157,
+ "id": "e43d0dbf",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:26:04.794300Z",
+ "start_time": "2023-10-27T11:26:04.691498Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# how to do the join?\n",
+ "window_size = 250_000\n",
+ "tags = (\n",
+ " # Pre-process study locus:\n",
+ " f.broadcast(dl_df)\n",
+ " .select('studyLocusId', 'chromosome', 'position', 'ldPopulation')\n",
+ " .alias('study_locus')\n",
+ " .join(\n",
+ " (\n",
+ " ld_index\n",
+ " .selectExpr(*[f\"{col} as ld_index_{col}\" for col in ld_index.columns])\n",
+ " .alias('ld_index')\n",
+ " ),\n",
+ " on = [\n",
+ " (f.col('ld_index.ld_index_chromosome') == f.col('study_locus.chromosome')) & \n",
+ " (f.col('ld_index.ld_index_ldPopulation') == f.col('study_locus.ldPopulation')) &\n",
+ " (f.col('ld_index.ld_index_position') >= f.col('study_locus.position') - window_size) & \n",
+ " (f.col('ld_index.ld_index_position') <= f.col('study_locus.position') + window_size)\n",
+ " ],\n",
+ " how='left'\n",
+ " )\n",
+ " .select(\n",
+ " 'studyLocusId',\n",
+ " 'chromosome',\n",
+ " f.col('ld_index_variantId').alias('variantId'),\n",
+ " f.col('ld_index_idx').alias('idx'),\n",
+ " f.col('ld_index_position'),\n",
+ " f.col('ld_index_ldPopulation').alias('ldPopulation')\n",
+ " )\n",
+ " .persist()\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 158,
+ "id": "45fb0df5",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:26:08.409160Z",
+ "start_time": "2023-10-27T11:26:06.312358Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 979:============================================> (173 + 27) / 200]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+-----+\n",
+ "| studyLocusId|count|\n",
+ "+--------------------+-----+\n",
+ "|-8027743839728879857| 2079|\n",
+ "+--------------------+-----+\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "tags.groupby('studyLocusId').count().show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 159,
+ "id": "858894fc",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:26:14.204291Z",
+ "start_time": "2023-10-27T11:26:12.440937Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+----------+--------------+-------------+-------------+---------+--------+--------------+\n",
+ "|studyLocusId |chromosome|first_position|last_position|window_length|first_idx|last_idx|ldVariantCount|\n",
+ "+--------------------+----------+--------------+-------------+-------------+---------+--------+--------------+\n",
+ "|-8027743839728879857|15 |27733460 |28232552 |499092 |11131979 |11134057|2079 |\n",
+ "+--------------------+----------+--------------+-------------+-------------+---------+--------+--------------+\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 159,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Collecting region:\n",
+ "ld_windows = (\n",
+ " tags\n",
+ " .orderBy('studyLocusId', 'ld_index_position')\n",
+ " .groupBy('studyLocusId', 'chromosome', 'ldPopulation')\n",
+ " .agg(\n",
+ " f.first(f.col('ld_index_position')).alias('first_position'),\n",
+ " f.first(f.col('variantId')).alias('first_variantId'),\n",
+ " f.first(f.col('idx')).alias('first_idx'),\n",
+ " f.last(f.col('ld_index_position')).alias('last_position'),\n",
+ " f.last(f.col('variantId')).alias('last_variantId'),\n",
+ " f.last(f.col('idx')).alias('last_idx'),\n",
+ " f.size(f.collect_list(f.col('variantId'))).alias('ldVariantCount')\n",
+ " )\n",
+ " .withColumn('window_length', f.col('last_position') - f.col('first_position'))\n",
+ " .persist()\n",
+ ")\n",
+ "\n",
+ "(\n",
+ " ld_windows\n",
+ " .select(\n",
+ " 'studyLocusId',\n",
+ " 'chromosome',\n",
+ " 'first_position',\n",
+ " 'last_position',\n",
+ " 'window_length',\n",
+ " 'first_idx',\n",
+ " 'last_idx',\n",
+ " 'ldVariantCount'\n",
+ " )\n",
+ " .show(truncate=False)\n",
+ ")\n",
+ "\n",
+ "\n",
+ "ld_windows.count()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 160,
+ "id": "61d51efe",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:26:22.608155Z",
+ "start_time": "2023-10-27T11:26:22.421535Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Row(studyLocusId=-8027743839728879857, chromosome='15', ldPopulation='fin', first_position=27733460, first_variantId='15_27733460_AGCCAAACTGGCTCATGGCC_A', first_idx=11131979, last_position=28232552, last_variantId='15_28232552_G_GA', last_idx=11134057, ldVariantCount=2079, window_length=499092)"
+ ]
+ },
+ "execution_count": 160,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "row = ld_windows.collect()[0]\n",
+ "row"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 161,
+ "id": "d4d006bd",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:26:31.400420Z",
+ "start_time": "2023-10-27T11:26:30.851547Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "ld_population = row['ldPopulation']\n",
+ "study_locus_id = row['studyLocusId']\n",
+ "chromosome = row['chromosome']\n",
+ "first_index = row['first_idx']\n",
+ "last_index = row['last_idx']\n",
+ "\n",
+ "# For each row, we need to open the gnomad \n",
+ "half_matrix = (\n",
+ " BlockMatrix\n",
+ " .read(ld_matrix_template.format(POP=ld_population))\n",
+ " .filter(\n",
+ " range(first_index, last_index),\n",
+ " range(first_index, last_index)\n",
+ " )\n",
+ ")\n",
+ "\n",
+ "matrix = half_matrix + half_matrix.T\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 162,
+ "id": "e24da4ca",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:27:24.435664Z",
+ "start_time": "2023-10-27T11:26:35.945855Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2023-10-27 11:26:58.169 Hail: INFO: Coerced sorted dataset \n",
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "(\n",
+ " matrix.entries().to_spark()\n",
+ " .select(\n",
+ " (f.col('i')+first_index).alias('idx_i'),\n",
+ " (f.col('j')+first_index).alias('idx_j'),\n",
+ " f.when(f.col('i') == f.col('j'), f.col('entry')/2).otherwise(f.col('entry')).alias('r'),\n",
+ " f.lit(study_locus_id).alias('study_locus_ids')\n",
+ " )\n",
+ " # Joining with i:\n",
+ " .join(\n",
+ " (\n",
+ " tags\n",
+ " .select(\n",
+ " f.col('variantId').alias('variantIdLeft'), \n",
+ " f.col('idx').alias('idx_i')\n",
+ " )\n",
+ " ), \n",
+ " on='idx_i', how='outer'\n",
+ " )\n",
+ " # Joining with i:\n",
+ " .join(\n",
+ " (\n",
+ " tags\n",
+ " .select(\n",
+ " 'chromosome', \n",
+ " f.col('variantId').alias('variantIdRight'), \n",
+ " f.col('idx').alias('idx_j')\n",
+ " )\n",
+ " ), \n",
+ " on='idx_j', how='outer'\n",
+ " )\n",
+ " .select(\n",
+ " 'variantIdLeft',\n",
+ " 'variantIdRight',\n",
+ " 'study_locus_ids',\n",
+ " 'r'\n",
+ " )\n",
+ " .distinct()\n",
+ " .write.mode('overwrite').parquet(f'gs://ot-team/dsuveges/ld_matrix-{study_locus_id}')\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 164,
+ "id": "3cb94848",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:28:28.344710Z",
+ "start_time": "2023-10-27T11:28:27.670811Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-RECORD 0---------------------------------------------------\n",
+ " studyId | FINNGEN_R9_C3_BASAL_CELL_CARCINOMA_EXALLC \n",
+ " variantIdLead | 15_27983407_C_T \n",
+ " studyLocusId | -8027743839728879857 \n",
+ " variantId | 15_27733459_AGCCAAACTGGCTCATGGCC_A \n",
+ " pValueMantissa | 1.937 \n",
+ " pValueExponent | -2 \n",
+ " beta | 0.0267247 \n",
+ " standardError | 0.011429 \n",
+ "only showing top 1 row\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "837"
+ ]
+ },
+ "execution_count": 164,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "study_locus_id = -8027743839728879857\n",
+ "\n",
+ "# Get data:\n",
+ "ld_matrix = session.spark.read.parquet(f'gs://ot-team/dsuveges/ld_matrix-{study_locus_id}')\n",
+ "\n",
+ "# Select one study locus:\n",
+ "selected_locus = (\n",
+ " dl_df\n",
+ " .filter(f.col('studyLocusId') == study_locus_id)\n",
+ " .select(\n",
+ " '*',\n",
+ " f.explode_outer('locus').alias('exploded_locus')\n",
+ " )\n",
+ " .select(\n",
+ " 'studyId',\n",
+ " f.col('variantId').alias('variantIdLead'),\n",
+ " f.col('studyLocusId'),\n",
+ " *[f'exploded_locus.{col}' for col in ['variantId', 'pValueMantissa', 'pValueExponent', 'beta', 'standardError']]\n",
+ " )\n",
+ " .persist()\n",
+ ")\n",
+ "\n",
+ "selected_locus.show(1, False, True)\n",
+ "selected_locus.count()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 189,
+ "id": "0e571433",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T13:49:41.356331Z",
+ "start_time": "2023-10-27T13:49:40.463119Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+--------------------+---------------+---------------+---------------+-------------------+-------------------+----------+------------------+--------------------+\n",
+ "| studyId| studyLocusId| variantIdLead| variantIdLeft| variantIdRight|pValueMantissaRight|pValueExponentRight| betaRight|standardErrorRight| r|\n",
+ "+--------------------+--------------------+---------------+---------------+---------------+-------------------+-------------------+----------+------------------+--------------------+\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27792793_C_T|15_27772290_T_C| 9.979| -6| 0.0730063| 0.0165261| 0.3188276023578284|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27950388_C_T|15_27778556_C_T| 1.142| -2| 0.119731| 0.0473309| -0.1845689041174883|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28104601_A_T|15_27809200_G_A| 1.397| -2|-0.0286999| 0.0116763| 0.01919714154020592|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27970325_G_A|15_27809200_G_A| 1.397| -2|-0.0286999| 0.0116763|-0.12413267238343029|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27899878_T_C|15_27851307_A_G| 5.606| -4|-0.0424098| 0.0122927|-0.45516734696600447|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27914364_C_T|15_27851307_A_G| 5.606| -4|-0.0424098| 0.0122927| -0.4029686644067302|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27828335_G_A|15_27858692_G_A| 3.599| -4| 0.0427448| 0.0119804| 0.09141477739652863|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27845815_A_G|15_27858692_G_A| 3.599| -4| 0.0427448| 0.0119804| 0.7803430284267874|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27820229_G_A|15_27858692_G_A| 3.599| -4| 0.0427448| 0.0119804|-0.08881336794530735|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27825631_G_C|15_27915426_C_A| 1.001| -6| 0.0654293| 0.0133765| 0.13879209804155437|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28211160_A_T|15_27915426_C_A| 1.001| -6| 0.0654293| 0.0133765| 0.05996001018362227|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28019021_G_T|15_27915426_C_A| 1.001| -6| 0.0654293| 0.0133765| 0.03843623265438152|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28081390_A_T|15_27938863_T_A| 2.109| -3| 0.157002| 0.0510665|-0.04189151880774...|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27907664_A_T|15_27938914_G_T| 2.725| -2| 0.0355862| 0.0161172|-0.16859090364294946|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27819940_C_T|15_27938914_G_T| 2.725| -2| 0.0355862| 0.0161172| 0.11697321459267764|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27853556_T_G|15_27938914_G_T| 2.725| -2| 0.0355862| 0.0161172| -0.1404576556679461|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28052911_T_C|15_27951206_G_A| 1.437| -2| 0.0695541| 0.0284131| 0.04461220378655805|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27790520_G_A|15_27951206_G_A| 1.437| -2| 0.0695541| 0.0284131| 0.04420892575950266|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27879868_C_A|15_27989264_G_T| 2.454| -17| 0.147291| 0.0173896| 0.2404542405419156|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27822551_G_A|15_27989264_G_T| 2.454| -17| 0.147291| 0.0173896|-0.04613729472121665|\n",
+ "+--------------------+--------------------+---------------+---------------+---------------+-------------------+-------------------+----------+------------------+--------------------+\n",
+ "only showing top 20 rows\n",
+ "\n",
+ "385641\n",
+ "621.0\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "621"
+ ]
+ },
+ "execution_count": 189,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Filtering matrix:\n",
+ "processed_matrix = (\n",
+ " ld_matrix\n",
+ " .join(\n",
+ " selected_locus.select(f.col('variantId').alias('variantIdLeft')),\n",
+ " on='variantIdLeft', how='inner'\n",
+ " )\n",
+ " .join(\n",
+ " selected_locus.withColumnRenamed('variantId', 'variantIdRight'), \n",
+ " on='variantIdRight', how='inner'\n",
+ " )\n",
+ " .select(\n",
+ " 'studyId',\n",
+ " 'studyLocusId',\n",
+ " 'variantIdLead',\n",
+ " 'variantIdLeft',\n",
+ " 'variantIdRight',\n",
+ " f.col('pValueMantissa').alias('pValueMantissaRight'),\n",
+ " f.col('pValueExponent').alias('pValueExponentRight'),\n",
+ " f.col('beta').alias('betaRight'),\n",
+ " f.col('standardError').alias('standardErrorRight'),\n",
+ " 'r'\n",
+ " )\n",
+ " .persist()\n",
+ ")\n",
+ "\n",
+ "processed_matrix.show()\n",
+ "print(processed_matrix.count())\n",
+ "print(sqrt(processed_matrix.count()))\n",
+ "processed_matrix.select('variantIdRight').distinct().count()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 167,
+ "id": "381f093b",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:29:01.779404Z",
+ "start_time": "2023-10-27T11:28:57.285168Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "array([[1. , 0.88019644, 0.28333008, 0.25666969, 0.26345801],\n",
+ " [0.88019644, 1. , 0.26027515, 0.24115952, 0.2442993 ],\n",
+ " [0.28333008, 0.26027515, 1. , 0.85898573, 0.89168227],\n",
+ " [0.25666969, 0.24115952, 0.85898573, 1. , 0.96268566],\n",
+ " [0.26345801, 0.2442993 , 0.89168227, 0.96268566, 1. ]])"
+ ]
+ },
+ "execution_count": 167,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "pivoted_matrix = (\n",
+ " processed_matrix\n",
+ " .orderBy(f.col('variantIdLeft'), f.col('variantIdRight'))\n",
+ " .groupBy('variantIdLeft')\n",
+ " .pivot(\"variantIdRight\")\n",
+ " .agg(f.first('r'))\n",
+ " .orderBy('variantIdLeft')\n",
+ " # Convert to numpy array ingested by SuSie:\n",
+ " .toPandas().set_index('variantIdLeft').to_numpy()\n",
+ ")\n",
+ "\n",
+ "pivoted_matrix[0:5, 0:5]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 90,
+ "id": "444e2ca2",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-26T08:49:13.002374Z",
+ "start_time": "2023-10-26T08:49:12.604741Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 1. , 0.99851182, 0.85089485, ..., 0.04532387,\n",
+ " 0.02258468, 0.02476075],\n",
+ " [ 0.99851182, 1. , 0.85111292, ..., 0.0465783 ,\n",
+ " 0.02253374, 0.02470884],\n",
+ " [ 0.85089485, 0.85111292, 1. , ..., 0.04748182,\n",
+ " 0.01191697, 0.01652519],\n",
+ " ...,\n",
+ " [ 0.04532387, 0.0465783 , 0.04748182, ..., 1. ,\n",
+ " -0.05908013, -0.05417476],\n",
+ " [ 0.02258468, 0.02253374, 0.01191697, ..., -0.05908013,\n",
+ " 1. , 0.96019982],\n",
+ " [ 0.02476075, 0.02470884, 0.01652519, ..., -0.05417476,\n",
+ " 0.96019982, 1. ]])"
+ ]
+ },
+ "execution_count": 90,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pivoted_matrix.toPandas().set_index('variantIdLeft').to_numpy()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 190,
+ "id": "8ed590f1",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T13:50:01.812451Z",
+ "start_time": "2023-10-27T13:49:58.985895Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "(\n",
+ " processed_matrix\n",
+ " # Convert to numpy array ingested by SuSie:\n",
+ " .write.mode('overwrite').parquet(f'gs://ot-team/dsuveges/processed-ld-matrix-{study_locus_id}')\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 169,
+ "id": "5fc2f7ac",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T11:30:11.297300Z",
+ "start_time": "2023-10-27T11:30:09.400659Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "# selected_locus.write.mode('overwrite').parquet('gs://ot-team/dsuveges/selected_studyLocus_2224601896262245870')\n",
+ "(\n",
+ " processed_matrix\n",
+ " .select(\n",
+ " 'studyId',\n",
+ " f.col('variantIdRight').alias('variantId'),\n",
+ " f.col('pValueMantissaRight').alias('pValueMantissa'),\n",
+ " f.col('pValueExponentRight').alias('pValueExponent'),\n",
+ " f.col('betaRight').alias('beta'),\n",
+ " f.col('standardErrorRight').alias('standardError'),\n",
+ " )\n",
+ " .distinct()\n",
+ " .write.mode('overwrite').parquet(f'gs://ot-team/dsuveges/selected_studyLocus_{study_locus_id}')\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 187,
+ "id": "a4d47348",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T13:33:39.686914Z",
+ "start_time": "2023-10-27T13:33:39.682284Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1.00, 0.18, 0.18, 0.97, 0.97, 0.15, 0.18, 0.11, 0.13, 0.12\n",
+ "0.18, 1.00, 0.99, 0.15, 0.15, 0.03, 0.03, 0.02, 0.01, 0.02\n",
+ "0.18, 0.99, 1.00, 0.15, 0.15, 0.03, 0.03, 0.02, 0.01, 0.02\n",
+ "0.97, 0.15, 0.15, 1.00, 1.00, 0.14, 0.17, 0.11, 0.12, 0.12\n",
+ "0.97, 0.15, 0.15, 1.00, 1.00, 0.14, 0.17, 0.11, 0.12, 0.12\n",
+ "0.15, 0.03, 0.03, 0.14, 0.14, 1.00, 0.32, 0.45, 0.50, 0.25\n",
+ "0.18, 0.03, 0.03, 0.17, 0.17, 0.32, 1.00, 0.29, 0.33, 0.52\n",
+ "0.11, 0.02, 0.02, 0.11, 0.11, 0.45, 0.29, 1.00, 0.91, 0.29\n",
+ "0.13, 0.01, 0.01, 0.12, 0.12, 0.50, 0.33, 0.91, 1.00, 0.33\n",
+ "0.12, 0.02, 0.02, 0.12, 0.12, 0.25, 0.52, 0.29, 0.33, 1.00\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\n",
+ " '\\n'.join(\n",
+ " [\n",
+ " ', '.join([f'{value**2:.2f}' for value in row]) \n",
+ " for row in\n",
+ " (\n",
+ " pivoted_matrix\n",
+ " [[291, 293, 295, 322, 323, 508, 514, 529, 534, 515]]\n",
+ " [:,[291, 293, 295, 322, 323, 508, 514, 529, 534, 515]]\n",
+ " )\n",
+ " ]\n",
+ " )\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 188,
+ "id": "f3910534",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T13:45:22.792801Z",
+ "start_time": "2023-10-27T13:45:22.721043Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "+--------------------+--------------------+---------------+---------------+---------------+-------------------+-------------------+----------+------------------+--------------------+\n",
+ "| studyId| studyLocusId| variantIdLead| variantIdLeft| variantIdRight|pValueMantissaRight|pValueExponentRight| betaRight|standardErrorRight| r|\n",
+ "+--------------------+--------------------+---------------+---------------+---------------+-------------------+-------------------+----------+------------------+--------------------+\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27792793_C_T|15_27772290_T_C| 9.979| -6| 0.0730063| 0.0165261| 0.3188276023578284|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27950388_C_T|15_27778556_C_T| 1.142| -2| 0.119731| 0.0473309| -0.1845689041174883|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28104601_A_T|15_27809200_G_A| 1.397| -2|-0.0286999| 0.0116763| 0.01919714154020592|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27970325_G_A|15_27809200_G_A| 1.397| -2|-0.0286999| 0.0116763|-0.12413267238343029|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27899878_T_C|15_27851307_A_G| 5.606| -4|-0.0424098| 0.0122927|-0.45516734696600447|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27914364_C_T|15_27851307_A_G| 5.606| -4|-0.0424098| 0.0122927| -0.4029686644067302|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27828335_G_A|15_27858692_G_A| 3.599| -4| 0.0427448| 0.0119804| 0.09141477739652863|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27845815_A_G|15_27858692_G_A| 3.599| -4| 0.0427448| 0.0119804| 0.7803430284267874|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27820229_G_A|15_27858692_G_A| 3.599| -4| 0.0427448| 0.0119804|-0.08881336794530735|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27825631_G_C|15_27915426_C_A| 1.001| -6| 0.0654293| 0.0133765| 0.13879209804155437|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28211160_A_T|15_27915426_C_A| 1.001| -6| 0.0654293| 0.0133765| 0.05996001018362227|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28019021_G_T|15_27915426_C_A| 1.001| -6| 0.0654293| 0.0133765| 0.03843623265438152|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28081390_A_T|15_27938863_T_A| 2.109| -3| 0.157002| 0.0510665|-0.04189151880774...|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27907664_A_T|15_27938914_G_T| 2.725| -2| 0.0355862| 0.0161172|-0.16859090364294946|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27819940_C_T|15_27938914_G_T| 2.725| -2| 0.0355862| 0.0161172| 0.11697321459267764|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27853556_T_G|15_27938914_G_T| 2.725| -2| 0.0355862| 0.0161172| -0.1404576556679461|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_28052911_T_C|15_27951206_G_A| 1.437| -2| 0.0695541| 0.0284131| 0.04461220378655805|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27790520_G_A|15_27951206_G_A| 1.437| -2| 0.0695541| 0.0284131| 0.04420892575950266|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27879868_C_A|15_27989264_G_T| 2.454| -17| 0.147291| 0.0173896| 0.2404542405419156|\n",
+ "|FINNGEN_R9_C3_BAS...|-8027743839728879857|15_27983407_C_T|15_27822551_G_A|15_27989264_G_T| 2.454| -17| 0.147291| 0.0173896|-0.04613729472121665|\n",
+ "+--------------------+--------------------+---------------+---------------+---------------+-------------------+-------------------+----------+------------------+--------------------+\n",
+ "only showing top 20 rows\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "processed_matrix.show()"
+ ]
+ }
+ ],
+ "metadata": {
+ "_draft": {
+ "nbviewer_url": "https://gist.github.com/DSuveges/df6768b7d5637842e009aa945f3ea062"
+ },
+ "gist": {
+ "data": {
+ "description": "Issue-3131-Productionizing_LD_matrix.ipynb",
+ "public": false
+ },
+ "id": "df6768b7d5637842e009aa945f3ea062"
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/l2g_benchmark.ipynb b/notebooks/l2g_benchmark.ipynb
new file mode 100644
index 000000000..98a7cf70f
--- /dev/null
+++ b/notebooks/l2g_benchmark.ipynb
@@ -0,0 +1,603 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Benchmarking L2G predictions\n",
+ "\n",
+ "The objective of this notebook is to compare the new implementation of L2G with the last results we display in production (22.09.1).\n",
+ "\n",
+ "The notebook is divided in 3 parts:\n",
+ "1. Data preparation\n",
+ "2. Describe the data\n",
+ "3. Compare the results\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Setting default log level to \"WARN\".\n",
+ "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "23/12/11 16:18:49 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n"
+ ]
+ }
+ ],
+ "source": [
+ "from datetime import datetime\n",
+ "from otg.dataset.study_locus import StudyLocus\n",
+ "from otg.dataset.l2g_prediction import L2GPrediction\n",
+ "from otg.common.session import Session\n",
+ "\n",
+ "import pyspark.sql.functions as f\n",
+ "from pyspark.sql import DataFrame\n",
+ "\n",
+ "import wandb\n",
+ "\n",
+ "%matplotlib inline\n",
+ "\n",
+ "session = Session(spark_uri=\"local[*]\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Data preparation"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def prepare_predictions(credible_set: StudyLocus, predictions: L2GPrediction) -> DataFrame:\n",
+ " \"\"\"Prepares predictions dataframe for testing and comparison.\"\"\"\n",
+ " return (\n",
+ " credible_set.df\n",
+ " .select(\"studyLocusId\", \"variantId\", \"studyId\").distinct()\n",
+ " .join(\n",
+ " predictions.df, on=\"studyLocusId\"\n",
+ " )\n",
+ " .select(\"studyLocusId\", \"variantId\", \"studyId\", \"geneId\", \"score\")\n",
+ " .distinct()\n",
+ " )\n",
+ "\n",
+ "def prepare_production_predictions(old_predictions: DataFrame) -> DataFrame:\n",
+ " \"\"\"Prepares L2G predictions for testing and comparison.\"\"\"\n",
+ " return (\n",
+ " old_predictions\n",
+ " .select(\n",
+ " f.col(\"study_id\").alias(\"studyId\"),\n",
+ " f.concat_ws(\"_\", f.col(\"chrom\"), f.col(\"pos\"), f.col(\"ref\"), f.col(\"alt\")).alias(\"variantId\"),\n",
+ " f.col(\"gene_id\").alias(\"geneId\"),\n",
+ " f.col(\"y_proba_full_model\").alias(\"score\"),\n",
+ " )\n",
+ " .withColumn(\"studyLocusId\", StudyLocus.assign_study_locus_id(f.col(\"studyId\"), f.col(\"variantId\")))\n",
+ " .distinct()\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "# RAW DATA\n",
+ "credible_set_path = \"gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/credible_set\"\n",
+ "predictions_path = \"gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/l2g_predictions\"\n",
+ "old_predictions_path = \"gs://genetics-portal-dev-data/22.09.1/outputs/l2g\"\n",
+ "\n",
+ "predictions = L2GPrediction.from_parquet(session, predictions_path)\n",
+ "old_predictions = session.spark.read.parquet(old_predictions_path)\n",
+ "credible_set = StudyLocus.from_parquet(session, credible_set_path, recursiveFileLookup=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "predictions_prepared = prepare_predictions(credible_set, predictions).persist()\n",
+ "old_predictions_prepared = prepare_production_predictions(old_predictions).persist()\n",
+ "\n",
+ "joining_cols = [\"studyLocusId\", \"geneId\", \"variantId\", \"studyId\"]\n",
+ "comparison_df = (\n",
+ " predictions_prepared.selectExpr(*joining_cols, \"score as new_score\")\n",
+ " .join(\n",
+ " old_predictions_prepared.selectExpr(*joining_cols, \"score as old_score\"), on=joining_cols, how=\"inner\"\n",
+ " )\n",
+ " .distinct()\n",
+ " .persist()\n",
+ " )\n",
+ "\n",
+ "comparison_output_path = f\"gs://ot-team/irene/l2g_results_comparison-{datetime.today().strftime('%Y-%m-%d')}\"\n",
+ "# comparison_df.write.parquet(\"gs://ot-team/irene/l2g_results_comparison\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Data description\n",
+ "\n",
+ "Note: Comparison_df is the result of intersecting the L2G datasets with both the production and the new implementation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "COUNT PER DATASET\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "predictions_prepared: 9061746\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "old_predictions_prepared: 4083797\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 23:====================================================> (196 + 4) / 200]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "comparison_df: 2194371\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "## 1. L2G predicted credible sets count\n",
+ "\n",
+ "datasets = {\n",
+ " \"predictions_prepared\": predictions_prepared,\n",
+ " \"old_predictions_prepared\": old_predictions_prepared,\n",
+ " \"comparison_df\": comparison_df\n",
+ "}\n",
+ "\n",
+ "print(\"COUNT PER DATASET\")\n",
+ "for dataset in datasets.items():\n",
+ " print(f\"{dataset[0]}: {dataset[1].count()}\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AVERAGE SCORES PER DATASET\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "predictions_prepared: 0.20072320074989783\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "old_predictions_prepared: 0.0720378814046517\n",
+ "MEDIAN SCORE PER DATASET\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "predictions_prepared: 0.023215007036924362\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Stage 74:==============================================> (171 + 8) / 200]\r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "old_predictions_prepared: 0.012324056588113308\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ }
+ ],
+ "source": [
+ "## 2. Descriptive stats for L2G scores\n",
+ "\n",
+ "print(\"AVERAGE SCORES PER DATASET\")\n",
+ "for dataset in datasets.items():\n",
+ " if dataset[0] != \"comparison_df\":\n",
+ " print(f\"{dataset[0]}: {dataset[1].agg(f.avg('score')).collect()[0][0]}\")\n",
+ "\n",
+ "print(\"MEDIAN SCORE PER DATASET\")\n",
+ "for dataset in datasets.items():\n",
+ " if dataset[0] != \"comparison_df\":\n",
+ " print(f\"{dataset[0]}: {dataset[1].approxQuantile('score',[0.5],0.1)[0]}\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "# OF ASSOCIATIONS WITH SCORE > 0.9\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "predictions_prepared: 5275 (0.06 from total)\n",
+ "old_predictions_prepared: 3942 (0.1 from total)\n"
+ ]
+ }
+ ],
+ "source": [
+ "## How many associations with a score > 0.9\n",
+ "\n",
+ "print(\"# OF ASSOCIATIONS WITH SCORE > 0.9\")\n",
+ "for dataset in datasets.items():\n",
+ " if dataset[0] != \"comparison_df\":\n",
+ " print(f\"{dataset[0]}: {dataset[1].filter(f.col('score') >= 0.9).count()} ({round(dataset[1].filter(f.col('score') >= 0.9).count()/dataset[1].count() * 100, 2)} from total)\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Results comparison\n",
+ "\n",
+ "The comparisons dataset represents the intersection of the predictions of the production and the new implementation. The objective is to compare the L2G scores of both implementations for the same studyLoci."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " \r"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " studyLocusId \n",
+ " geneId \n",
+ " variantId \n",
+ " studyId \n",
+ " new_score \n",
+ " old_score \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " -9221872607204368224 \n",
+ " ENSG00000065717 \n",
+ " 19_3414090_G_A \n",
+ " GCST010241 \n",
+ " 0.001887 \n",
+ " 0.008250 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " -9219397145747036852 \n",
+ " ENSG00000168056 \n",
+ " 11_65619907_T_A \n",
+ " GCST007234 \n",
+ " 0.038177 \n",
+ " 0.014908 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " -9219397145747036852 \n",
+ " ENSG00000175376 \n",
+ " 11_65619907_T_A \n",
+ " GCST007234 \n",
+ " 0.015846 \n",
+ " 0.011380 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " -9217975156633736203 \n",
+ " ENSG00000187475 \n",
+ " 6_26325235_T_C \n",
+ " GCST009456 \n",
+ " 0.039668 \n",
+ " 0.010985 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " -9216978755013122322 \n",
+ " ENSG00000157617 \n",
+ " 21_41816125_G_A \n",
+ " GCST005945 \n",
+ " 0.271009 \n",
+ " 0.024520 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " studyLocusId geneId variantId studyId \\\n",
+ "0 -9221872607204368224 ENSG00000065717 19_3414090_G_A GCST010241 \n",
+ "1 -9219397145747036852 ENSG00000168056 11_65619907_T_A GCST007234 \n",
+ "2 -9219397145747036852 ENSG00000175376 11_65619907_T_A GCST007234 \n",
+ "3 -9217975156633736203 ENSG00000187475 6_26325235_T_C GCST009456 \n",
+ "4 -9216978755013122322 ENSG00000157617 21_41816125_G_A GCST005945 \n",
+ "\n",
+ " new_score old_score \n",
+ "0 0.001887 0.008250 \n",
+ "1 0.038177 0.014908 \n",
+ "2 0.015846 0.011380 \n",
+ "3 0.039668 0.010985 \n",
+ "4 0.271009 0.024520 "
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "comparison_pdf = comparison_df.toPandas()\n",
+ "comparison_pdf.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "SCORES CORRELATION 0.3968047070256464\n",
+ "Split by chromosome...\n",
+ "Chromosome 1: 0.4283002148537705\n",
+ "Chromosome 10: 0.4548083324805242\n",
+ "Chromosome 11: 0.3952137911268187\n",
+ "Chromosome 12: 0.4185634370780096\n",
+ "Chromosome 13: 0.42117917239984404\n",
+ "Chromosome 14: 0.39845735792304493\n",
+ "Chromosome 15: 0.40346861517903765\n",
+ "Chromosome 16: 0.39846240000598415\n",
+ "Chromosome 17: 0.395304979654295\n",
+ "Chromosome 18: 0.41437506238370103\n",
+ "Chromosome 19: 0.4425118135710343\n",
+ "Chromosome 2: 0.3889598461816933\n",
+ "Chromosome 20: 0.43686865328167446\n",
+ "Chromosome 21: 0.3849138600053731\n",
+ "Chromosome 22: 0.43046292359639526\n",
+ "Chromosome 3: 0.4111657046267522\n",
+ "Chromosome 4: 0.4291713768129795\n",
+ "Chromosome 5: 0.39581618467547613\n",
+ "Chromosome 6: 0.37446130946623823\n",
+ "Chromosome 7: 0.4059565003311735\n",
+ "Chromosome 8: 0.44203370064434944\n",
+ "Chromosome 9: 0.40815294157407295\n",
+ "Chromosome X: 0.12625008528673395\n"
+ ]
+ }
+ ],
+ "source": [
+ "## Correlation between old and new scores\n",
+ "\n",
+ "overall_corr = comparison_pdf[\"old_score\"].corr(comparison_pdf[\"new_score\"])\n",
+ "print(\"SCORES CORRELATION\", overall_corr)\n",
+ "\n",
+ "print(\"Split by chromosome...\")\n",
+ "\n",
+ "comparison_pdf[\"chromosome\"] = comparison_pdf[\"variantId\"].str.split(\"_\", expand=True)[0]\n",
+ "\n",
+ "for group in comparison_pdf.sort_values(\"chromosome\").groupby(\"chromosome\"):\n",
+ " corr = group[1][\"old_score\"].corr(group[1][\"new_score\"])\n",
+ " print(f\"Chromosome {group[0]}: {corr}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "## Add correlation coefficient to finished run in W&B\n",
+ "# See dashboard here to find run ID: https://wandb.ai/open-targets/otg_l2g/table?workspace=user-opentargets\n",
+ "my_run = \"4cyi1qvz\"\n",
+ "\n",
+ "wandb.init(id=my_run, project=\"otg_l2g\", resume=True)\n",
+ "wandb.log({\"correlationProduction\": overall_corr})\n",
+ "wandb.finish()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB7pklEQVR4nO3dd3hUZdoG8HsySSa9kEpCICREpBcp0kFRVBRxdRdxFeQDdRXEFV27YAV210Vc1I+VtYuIoquuIIL0Ji0EUGkhCYSSZNIrqef7gy9jJnPmnHnPnJlJuX/Xlesi5z3nzJtJyHnylucxSJIkgYiIiKiN8PJ0B4iIiIj0xOCGiIiI2hQGN0RERNSmMLghIiKiNoXBDREREbUpDG6IiIioTWFwQ0RERG0KgxsiIiJqUxjcEBERUZvC4IbIhV544QUYDAa3vNbYsWMxduxYy+dbt26FwWDAmjVr3PL69957LxITE93yWlqVl5dj1qxZiI2NhcFgwJ///GdPd4mIXIDBDZGDPvjgAxgMBsuHn58f4uLiMGHCBPzzn/9EWVmZLq9z4cIFvPDCC0hLS9PlfnpqyX1zxMKFC/HBBx/gwQcfxMcff4x77rnH7rmJiYm4+eabFe/31VdfYcqUKUhKSkJAQAC6d++Oxx57DMXFxbLnV1dXY9myZRg5ciTCw8Ph6+uLuLg4TJo0CatWrUJ9fb0zXx4R/T9vT3eAqLV56aWX0LVrV9TW1iInJwdbt27Fn//8ZyxZsgTffvst+vbtazn3ueeew1NPPSV0/wsXLuDFF19EYmIi+vfv7/B1GzZsEHodLZT6tmLFCjQ0NLi8D87YvHkzrr76aixYsECX+91///2Ii4vD3Xffjc6dO+Po0aN48803sW7dOqSmpsLf399yrtlsxo033oiDBw9iwoQJeO6559ChQwfk5OTgxx9/xF133YX09HQ8//zzuvSNqD1jcEMk6MYbb8SgQYMsnz/99NPYvHkzbr75ZkyaNAnHjh2zPNS8vb3h7e3a/2aVlZUICAiAr6+vS19HjY+Pj0df3xF5eXno2bOnbvdbs2aN1VQgAFx11VWYPn06Vq5ciVmzZlmO33PPPTh06BC+/PJL/O53v7O65umnn8aBAwdw4sQJ3frmKg0NDaipqYGfn5+nu0JkF6eliHRwzTXX4Pnnn8eZM2fwySefWI7LrbnZuHEjRo4cibCwMAQFBaF79+545plnAFxeJzN48GAAwIwZMyxTYB988AGAy+tqevfujYMHD2L06NEICAiwXNt8zU2j+vp6PPPMM4iNjUVgYCAmTZqE7Oxsq3MSExNx77332lzb9J5qfZNbc1NRUYHHHnsMCQkJMJlM6N69O1577TVIkmR1nsFgwJw5c/D111+jd+/eMJlM6NWrF9avXy//hjeTl5eHmTNnIiYmBn5+fujXrx8+/PBDS3vj+qPMzEysXbvW0vesrCyH7m+P3Pt92223AQCOHTtmObZnzx788MMPuP/++20Cm0aDBg3CH//4R9XXVPr5aXTp0iW88MILuOKKK+Dn54eOHTvid7/7HU6fPm05R/R7s3LlSvTq1Qsmk8nyfTl//jz+53/+BzExMZbv2XvvvWfT52XLlqFXr14ICAhAeHg4Bg0ahE8//VT1ayXSiiM3RDq555578Mwzz2DDhg247777ZM/55ZdfcPPNN6Nv37546aWXYDKZkJ6ejl27dgEAevTogZdeegnz58/H/fffj1GjRgEAhg8fbrlHQUEBbrzxRtx55524++67ERMTo9ivV199FQaDAU8++STy8vKwdOlSjB8/HmlpaVbTJmoc6VtTkiRh0qRJ2LJlC2bOnIn+/fvjhx9+wF/+8hecP38er7/+utX5O3fuxFdffYWHHnoIwcHB+Oc//4nbb78dZ8+eRUREhN1+VVVVYezYsUhPT8ecOXPQtWtXfPHFF7j33ntRXFyMRx55BD169MDHH3+MRx99FJ06dcJjjz0GAIiKinL463dUTk4OACAyMtJy7L///S8A4O6773bq3mo/P8DlYPbmm2/Gpk2bcOedd+KRRx5BWVkZNm7ciJ9//hnJycnC35vNmzfj888/x5w5cxAZGYnExETk5ubi6quvtgQ/UVFR+P777zFz5kyUlpZaFmuvWLECc+fOxR133IFHHnkEly5dwpEjR7B3717cddddTr0fRHZJROSQ999/XwIg7d+/3+45oaGh0oABAyyfL1iwQGr63+z111+XAEhms9nuPfbv3y8BkN5//32btjFjxkgApOXLl8u2jRkzxvL5li1bJABSfHy8VFpaajn++eefSwCkN954w3KsS5cu0vTp01XvqdS36dOnS126dLF8/vXXX0sApFdeecXqvDvuuEMyGAxSenq65RgAydfX1+rY4cOH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K1ciMTERwOWg6cYbb8SuXbvwySef4Ndff8XixYthNBoBAAcPHsQf/vAH3HnnnTh69CheeOEFPP/88/jggw+sXuO1115Dv379cOjQITz//PM4ffo0brjhBtx+++04cuQIVq9ejZ07d2LOnDn6vLFEJM7TlTuJqPUbM2aMNHLkSKtjgwcPlp588klpx44dUkhIiHTp0iWr9uTkZOlf//qXJEmSNG/ePGnixImSJEnS0qVLpSlTpkj9+vWTvv/+e0mSJKlbt27SO++8o9qPhx9+WLrmmmukhoYGm7YffvhB8vLykk6cOCF77V133SVdd911Vsf+8pe/SD179rR83qVLF2ny5MlW58ycOVO6//77rY7t2LFD8vLykqqqqlT7TET648gNEemib9++Vp937NgReXl5OHz4MMrLyxEREYGgoCDLR2ZmJk6fPg0AGDNmDHbu3In6+nps27YNY8eOxdixY7F161ZcuHAB6enpGDt2rGof7r33XqSlpaF79+6YO3cuNmzYYGlLS0tDp06dcMUVV8hee+zYMYwYMcLq2IgRI3Dq1CnU19dbjg0aNMjqnMOHD+ODDz6w+tomTJiAhoYGZGZmqvaZiPTn7ekOEFHb4OPjY/W5wWBAQ0MDysvL0bFjR8u0U1NhYWEAgNGjR6OsrAypqanYvn07Fi5ciNjYWCxevBj9+vVDXFwcUlJSVPswcOBAZGZm4vvvv8ePP/6IP/zhDxg/fjzWrFkDf39/Pb5MBAYGWn1eXl6OBx54AHPnzrU5t3Pnzrq8JhGJYXBDRC41cOBA5OTkwNvb27L+pbmwsDD07dsXb775Jnx8fHDllVciOjoaU6ZMwXfffefQeptGISEhmDJlCqZMmYI77rgDN9xwAwoLC9G3b1+cO3cOJ0+elB296dGjB3bt2mV1bNeuXbjiiiss63LsfX2//vorunXr5nAfici1OC1FRC41fvx4DBs2DJMnT8aGDRuQlZWF3bt349lnn7XskAIu77hauXKlJZDp0KEDevTogdWrVzsc3CxZsgSrVq3C8ePHcfLkSXzxxReIjY1FWFgYxowZg9GjR+P222/Hxo0bLSM869evBwA89thj2LRpE15++WWcPHkSH374Id588008/vjjiq/55JNPYvfu3ZgzZw7S0tJw6tQpfPPNN1xQTORBDG6IyKUMBgPWrVuH0aNHY8aMGbjiiitw55134syZM4iJibGcN2bMGNTX11utrRk7dqzNMSXBwcH429/+hkGDBmHw4MHIysrCunXr4OV1+Vfdl19+icGDB2Pq1Kno2bMnnnjiCct6moEDB+Lzzz/HZ599ht69e2P+/Pl46aWXcO+99yq+Zt++fbFt2zacPHkSo0aNwoABAzB//nzExcUJvU9EpB+DJEmSpztBREREpBeO3BAREVGbwuCGiFqNhQsXWm25bvpx4403erp7RNRCcFqKiFqNwsJCFBYWyrb5+/sjPj7ezT0iopaIwQ0RERG1KZyWIiIiojaFwQ0RERG1KQxuiIiIqE1hcENERERtCoMbIiIialMY3BAREVGbwuCGiIiI2hQGN0RERNSm/B+aYjrtMdzCDAAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "comparison_pdf.plot.scatter(\n",
+ " x=\"new_score\",\n",
+ " y=\"old_score\",\n",
+ " title=\"Distribution of L2G scores\",\n",
+ ")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/poetry.lock b/poetry.lock
index 722c656df..4a90e0186 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
[[package]]
name = "aiodns"
@@ -27,98 +27,98 @@ files = [
[[package]]
name = "aiohttp"
-version = "3.8.4"
+version = "3.8.6"
description = "Async http client/server framework (asyncio)"
optional = false
python-versions = ">=3.6"
files = [
- {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1"},
- {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a"},
- {file = "aiohttp-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b"},
- {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3"},
- {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc"},
- {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd"},
- {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5"},
- {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e"},
- {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd"},
- {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6"},
- {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9"},
- {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949"},
- {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea"},
- {file = "aiohttp-3.8.4-cp310-cp310-win32.whl", hash = "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1"},
- {file = "aiohttp-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f"},
- {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4"},
- {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4"},
- {file = "aiohttp-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef"},
- {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f"},
- {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e"},
- {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f"},
- {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05"},
- {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654"},
- {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a"},
- {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb"},
- {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531"},
- {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b"},
- {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24"},
- {file = "aiohttp-3.8.4-cp311-cp311-win32.whl", hash = "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d"},
- {file = "aiohttp-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc"},
- {file = "aiohttp-3.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51"},
- {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6"},
- {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131"},
- {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75"},
- {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01"},
- {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622"},
- {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41"},
- {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36"},
- {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99"},
- {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71"},
- {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff"},
- {file = "aiohttp-3.8.4-cp36-cp36m-win32.whl", hash = "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777"},
- {file = "aiohttp-3.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e"},
- {file = "aiohttp-3.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519"},
- {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f"},
- {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9"},
- {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b"},
- {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab"},
- {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332"},
- {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333"},
- {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9"},
- {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699"},
- {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6"},
- {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241"},
- {file = "aiohttp-3.8.4-cp37-cp37m-win32.whl", hash = "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a"},
- {file = "aiohttp-3.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480"},
- {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f"},
- {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15"},
- {file = "aiohttp-3.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945"},
- {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da"},
- {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd"},
- {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10"},
- {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8"},
- {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a"},
- {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074"},
- {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52"},
- {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71"},
- {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275"},
- {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d"},
- {file = "aiohttp-3.8.4-cp38-cp38-win32.whl", hash = "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54"},
- {file = "aiohttp-3.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f"},
- {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed"},
- {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567"},
- {file = "aiohttp-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643"},
- {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a"},
- {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf"},
- {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719"},
- {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2"},
- {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e"},
- {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57"},
- {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391"},
- {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2"},
- {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14"},
- {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4"},
- {file = "aiohttp-3.8.4-cp39-cp39-win32.whl", hash = "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a"},
- {file = "aiohttp-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04"},
- {file = "aiohttp-3.8.4.tar.gz", hash = "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c"},
+ {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"},
+ {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"},
+ {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"},
+ {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"},
+ {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"},
+ {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"},
+ {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"},
+ {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"},
+ {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"},
+ {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"},
+ {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"},
+ {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"},
+ {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"},
+ {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"},
+ {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"},
+ {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"},
+ {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"},
+ {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"},
+ {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"},
+ {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"},
+ {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"},
]
[package.dependencies]
@@ -149,13 +149,13 @@ frozenlist = ">=1.1.0"
[[package]]
name = "alembic"
-version = "1.11.3"
+version = "1.12.1"
description = "A database migration tool for SQLAlchemy."
optional = false
python-versions = ">=3.7"
files = [
- {file = "alembic-1.11.3-py3-none-any.whl", hash = "sha256:d6c96c2482740592777c400550a523bc7a9aada4e210cae2e733354ddae6f6f8"},
- {file = "alembic-1.11.3.tar.gz", hash = "sha256:3db4ce81a9072e1b5aa44c2d202add24553182672a12daf21608d6f62a8f9cf9"},
+ {file = "alembic-1.12.1-py3-none-any.whl", hash = "sha256:47d52e3dfb03666ed945becb723d6482e52190917fdb47071440cfdba05d92cb"},
+ {file = "alembic-1.12.1.tar.gz", hash = "sha256:bca5877e9678b454706347bc10b97cb7d67f300320fa5c3a94423e8266e2823f"},
]
[package.dependencies]
@@ -166,6 +166,17 @@ typing-extensions = ">=4"
[package.extras]
tz = ["python-dateutil"]
+[[package]]
+name = "annotated-types"
+version = "0.6.0"
+description = "Reusable constraint types to use with typing.Annotated"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
+ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
+]
+
[[package]]
name = "antlr4-python3-runtime"
version = "4.9.3"
@@ -178,34 +189,34 @@ files = [
[[package]]
name = "anyio"
-version = "3.7.1"
+version = "4.0.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"},
- {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"},
+ {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"},
+ {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"},
]
[package.dependencies]
-exceptiongroup = {version = "*", markers = "python_version < \"3.11\""}
+exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
idna = ">=2.8"
sniffio = ">=1.1"
[package.extras]
-doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"]
-test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
-trio = ["trio (<0.22)"]
+doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"]
+test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
+trio = ["trio (>=0.22)"]
[[package]]
name = "apache-airflow"
-version = "2.7.0"
+version = "2.8.0"
description = "Programmatically author, schedule and monitor data pipelines"
optional = false
-python-versions = "~=3.8"
+python-versions = "<3.12,~=3.8"
files = [
- {file = "apache-airflow-2.7.0.tar.gz", hash = "sha256:06fba3df5943b6eda5e2f033e7e45b6ea557d89909ca36e61614ea61075f9722"},
- {file = "apache_airflow-2.7.0-py3-none-any.whl", hash = "sha256:8e3cf4b3cd8583a2e76bd04827af8d34747e0cf30a28cf0e70f4f4f39ce61f6d"},
+ {file = "apache-airflow-2.8.0.tar.gz", hash = "sha256:5917ee148125892764f4306ec76a62c66a5801218a99edfd3fe46e968cb1a344"},
+ {file = "apache_airflow-2.8.0-py3-none-any.whl", hash = "sha256:4ee532b97ef6520ad8e1ffda325aabe265f007a14166570d5f710d4999c9ad1c"},
]
[package.dependencies]
@@ -219,21 +230,21 @@ argcomplete = ">=1.10"
asgiref = "*"
attrs = ">=22.1.0"
blinker = "*"
-cattrs = ">=22.1.0"
colorlog = ">=4.0.2,<5.0"
configupdater = ">=3.1.1"
-connexion = {version = ">=2.10.0", extras = ["flask"]}
+connexion = {version = ">=2.10.0,<3.0", extras = ["flask"]}
cron-descriptor = ">=1.2.24"
croniter = ">=0.3.17"
cryptography = ">=0.9.3"
deprecated = ">=1.2.13"
dill = ">=0.2.2"
flask = ">=2.2,<2.3"
-flask-appbuilder = "4.3.3"
+flask-appbuilder = "4.3.10"
flask-caching = ">=1.5.0"
flask-login = ">=0.6.2"
flask-session = ">=0.4.0"
flask-wtf = ">=0.15"
+fsspec = ">=2023.10.0"
google-re2 = ">=1.0"
graphviz = ">=0.12"
gunicorn = ">=20.1.0"
@@ -249,14 +260,14 @@ markdown-it-py = ">=2.1.0"
markupsafe = ">=1.1.1"
marshmallow-oneofschema = ">=2.0.1"
mdit-py-plugins = ">=0.3.0"
-opentelemetry-api = "1.15.0"
+opentelemetry-api = ">=1.15.0"
opentelemetry-exporter-otlp = "*"
packaging = ">=14.0"
pathspec = ">=0.9.0"
-pendulum = ">=2.0"
+pendulum = ">=2.0,<3.0"
pluggy = ">=1.0"
psutil = ">=4.2.0"
-pydantic = ">=1.10.0,<2.0.0"
+pydantic = ">=2.3.0"
pygments = ">=2.0.1"
pyjwt = ">=2.0.0"
python-daemon = ">=3.0.0"
@@ -267,21 +278,22 @@ rfc3339-validator = ">=0.1.4"
rich = ">=12.4.4"
rich-argparse = ">=1.0.0"
setproctitle = ">=1.1.8"
-sqlalchemy = ">=1.4,<2.0"
+sqlalchemy = ">=1.4.28,<2.0"
sqlalchemy-jsonfield = ">=1.0"
tabulate = ">=0.7.5"
tenacity = ">=6.2.0,<8.2.0 || >8.2.0"
termcolor = ">=1.1.0"
typing-extensions = ">=4.0.0"
unicodecsv = ">=0.14.1"
-werkzeug = ">=2.0"
+universal-pathlib = ">=0.1.4"
+werkzeug = ">=2.0,<3"
[package.extras]
aiobotocore = ["aiobotocore (>=2.1.1)"]
airbyte = ["apache-airflow-providers-airbyte"]
alibaba = ["apache-airflow-providers-alibaba"]
-all = ["PyGithub (!=1.58)", "PyOpenSSL", "adal (>=1.2.7)", "aiobotocore (>=2.1.1)", "aiohttp", "aiohttp (>=3.6.3,<4)", "alibabacloud-adb20211201 (>=1.0.0)", "alibabacloud-tea-openapi (>=0.3.7)", "amqp", "analytics-python (>=1.2.9)", "apache-airflow (>=2.4.0)", "apache-airflow (>=2.7.0)", "apache-airflow-providers-airbyte", "apache-airflow-providers-alibaba", "apache-airflow-providers-amazon", "apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-spark", "apache-airflow-providers-apache-sqoop", "apache-airflow-providers-apprise", "apache-airflow-providers-arangodb", "apache-airflow-providers-asana", "apache-airflow-providers-atlassian-jira", "apache-airflow-providers-celery", "apache-airflow-providers-cloudant", "apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-common-sql", "apache-airflow-providers-daskexecutor", "apache-airflow-providers-databricks", "apache-airflow-providers-datadog", "apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dingding", "apache-airflow-providers-discord", "apache-airflow-providers-docker", "apache-airflow-providers-elasticsearch", "apache-airflow-providers-exasol", "apache-airflow-providers-facebook", "apache-airflow-providers-ftp", "apache-airflow-providers-github", "apache-airflow-providers-google", "apache-airflow-providers-grpc", "apache-airflow-providers-hashicorp", "apache-airflow-providers-http", "apache-airflow-providers-imap", "apache-airflow-providers-influxdb", "apache-airflow-providers-jdbc", "apache-airflow-providers-jenkins", "apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-odbc", "apache-airflow-providers-openfaas", "apache-airflow-providers-openlineage", "apache-airflow-providers-opsgenie", "apache-airflow-providers-oracle", "apache-airflow-providers-pagerduty", "apache-airflow-providers-papermill", "apache-airflow-providers-plexus", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-qubole", "apache-airflow-providers-redis", "apache-airflow-providers-salesforce", "apache-airflow-providers-samba", "apache-airflow-providers-segment", "apache-airflow-providers-sendgrid", "apache-airflow-providers-sftp", "apache-airflow-providers-singularity", "apache-airflow-providers-slack", "apache-airflow-providers-smtp", "apache-airflow-providers-snowflake", "apache-airflow-providers-sqlite", "apache-airflow-providers-ssh", "apache-airflow-providers-tableau", "apache-airflow-providers-tabular", "apache-airflow-providers-telegram", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "apache-airflow-providers-zendesk", "apache-beam (>=2.47.0)", "apprise", "arrow (>=0.16.0)", "asana (>=0.10,<4.0.0)", "asgiref", "asgiref (>=3.5.2)", "atlasclient (>=0.1.2)", "atlassian-python-api (>=1.14.2)", "attrs (>=22.2)", "authlib (>=1.0.0)", "azure-batch (>=8.0.0)", "azure-cosmos (>=4.0.0)", "azure-datalake-store (>=0.0.45)", "azure-identity (>=1.3.1)", "azure-keyvault-secrets (>=4.1.0)", "azure-kusto-data (>=0.0.43,<0.1)", "azure-mgmt-containerinstance (>=1.5.0,<2.0)", "azure-mgmt-datafactory (>=1.0.0,<2.0)", "azure-mgmt-datalake-store (>=0.5.0)", "azure-mgmt-resource (>=2.2.0)", "azure-servicebus (>=7.6.1)", "azure-storage-blob (>=12.14.0)", "azure-storage-common (>=2.1.0)", "azure-storage-file (>=2.1.0)", "azure-storage-file-datalake (>=12.9.1)", "azure-synapse-spark", "bcrypt (>=2.0.0)", "blinker (>=1.1)", "boto3 (>=1.24.0)", "cassandra-driver (>=3.13.0)", "celery (>=5.2.3,<6)", "cgroupspy (>=0.2.2)", "cloudant (>=2.0)", "cloudpickle (>=1.4.1)", "confluent-kafka (>=1.8.2)", "cryptography (>=2.0.0)", "dask (>=2.9.0,!=2022.10.1,!=2023.5.0)", "databricks-sql-connector (>=2.0.0,<3.0.0)", "datadog (>=0.14.0)", "distributed (>=2.11.1,!=2023.5.0)", "dnspython (>=1.13.0)", "docker (>=5.0.3)", "elasticsearch (>7,<7.15.0)", "eventlet (>=0.33.3)", "facebook-business (>=6.0.2)", "flask-appbuilder[oauth] (==4.3.3)", "flask-bcrypt (>=0.7.1)", "flower (>=1.0.0)", "gcloud-aio-auth (>=4.0.0,<5.0.0)", "gcloud-aio-bigquery (>=6.1.2)", "gcloud-aio-storage", "gevent (>=0.13)", "google-ads (>=21.2.0)", "google-api-core (>=2.11.0)", "google-api-python-client (>=1.6.0)", "google-auth (>=1.0.0)", "google-auth (>=1.0.0,<3.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-aiplatform (>=1.22.1)", "google-cloud-automl (>=2.11.0)", "google-cloud-bigquery-datatransfer (>=3.11.0)", "google-cloud-bigtable (>=2.17.0)", "google-cloud-build (>=3.13.0)", "google-cloud-compute (>=1.10.0)", "google-cloud-container (>=2.17.4)", "google-cloud-datacatalog (>=3.11.1)", "google-cloud-dataflow-client (>=0.8.2)", "google-cloud-dataform (>=0.5.0)", "google-cloud-dataplex (>=1.4.2)", "google-cloud-dataproc (>=5.4.0)", "google-cloud-dataproc-metastore (>=1.12.0)", "google-cloud-dlp (>=3.12.0)", "google-cloud-kms (>=2.15.0)", "google-cloud-language (>=2.9.0)", "google-cloud-logging (>=3.5.0)", "google-cloud-memcache (>=1.7.0)", "google-cloud-monitoring (>=2.14.1)", "google-cloud-orchestration-airflow (>=1.7.0)", "google-cloud-os-login (>=2.9.1)", "google-cloud-pubsub (>=2.15.0)", "google-cloud-redis (>=2.12.0)", "google-cloud-secret-manager (>=2.16.0)", "google-cloud-spanner (>=3.11.1)", "google-cloud-speech (>=2.18.0)", "google-cloud-storage (>=2.7.0)", "google-cloud-storage-transfer (>=1.4.1)", "google-cloud-tasks (>=2.13.0)", "google-cloud-texttospeech (>=2.14.1)", "google-cloud-translate (>=3.11.0)", "google-cloud-videointelligence (>=2.11.0)", "google-cloud-vision (>=3.4.0)", "google-cloud-workflows (>=1.10.0)", "greenlet (>=0.4.9)", "grpcio (>=1.15.0)", "grpcio-gcp (>=0.2.2)", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "httpx", "hvac (>=0.10)", "impyla (>=0.18.0,<1.0)", "influxdb-client (>=1.19.0)", "jaydebeapi (>=1.1.1)", "json-merge-patch (>=0.2)", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)", "kylinpy (>=2.6)", "ldap3 (>=2.5.1)", "looker-sdk (>=22.2.0)", "mypy-boto3-appflow (>=1.24.0,<1.28.12)", "mypy-boto3-rds (>=1.24.0)", "mypy-boto3-redshift-data (>=1.24.0)", "mypy-boto3-s3 (>=1.24.0)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "openlineage-integration-common (>=0.28.0)", "openlineage-python (>=0.28.0)", "opentelemetry-exporter-prometheus", "opsgenie-sdk (>=2.1.5)", "oracledb (>=1.0.0)", "oss2 (>=2.14.0)", "pandas (>=0.17.1)", "pandas-gbq", "papermill[all] (>=1.2.1)", "paramiko (>=2.6.0)", "pdpyras (>=4.1.2)", "pinotdb (>0.4.7)", "plyvel", "presto-python-client (>=0.8.2)", "proto-plus (>=1.19.6)", "psycopg2-binary (>=2.8.0)", "pyarrow (>=9.0.0)", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "pymongo (>=3.6.0)", "pymssql (>=2.1.5)", "pyodbc", "pypsrp (>=0.8.0)", "pyspark", "python-arango (>=7.3.2)", "python-dotenv (>=0.21.0)", "python-jenkins (>=1.0.0)", "python-ldap", "python-telegram-bot (>=20.0.0)", "pywinrm (>=0.4)", "qds-sdk (>=1.10.4)", "redis (>=3.2.0)", "redshift-connector (>=2.0.888)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "requests-kerberos (>=0.10.0)", "requests-toolbelt", "sasl (>=0.3.1)", "scrapbook[all]", "sendgrid (>=6.0.0)", "sentry-sdk (>=0.8.0)", "simple-salesforce (>=1.0.0)", "slack-sdk (>=3.0.0)", "smbprotocol (>=1.5.0)", "snowflake-connector-python (>=2.4.1)", "snowflake-sqlalchemy (>=1.1.0)", "spython (>=0.0.56)", "sqlalchemy-bigquery (>=1.2.1)", "sqlalchemy-drill (>=1.1.0)", "sqlalchemy-redshift (>=0.8.6)", "sqlalchemy-spanner (>=1.6.2)", "sqlparse (>=0.4.2)", "sshtunnel (>=0.3.2)", "statsd (>=3.3.0)", "tableauserverclient", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "trino (>=0.318.0)", "vertica-python (>=0.5.1)", "virtualenv", "watchtower (>=2.0.1,<2.1.0)", "zenpy (>=2.0.24)"]
-all-dbs = ["aiohttp (>=3.6.3,<4)", "apache-airflow (>=2.4.0)", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-arangodb", "apache-airflow-providers-cloudant", "apache-airflow-providers-common-sql (>=1.3.1)", "apache-airflow-providers-common-sql (>=1.5.0)", "apache-airflow-providers-databricks", "apache-airflow-providers-exasol", "apache-airflow-providers-influxdb", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "cassandra-driver (>=3.13.0)", "cloudant (>=2.0)", "databricks-sql-connector (>=2.0.0,<3.0.0)", "dnspython (>=1.13.0)", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "impyla (>=0.18.0,<1.0)", "influxdb-client (>=1.19.0)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "pandas (>=0.17.1)", "pinotdb (>0.4.7)", "presto-python-client (>=0.8.2)", "psycopg2-binary (>=2.8.0)", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pyhive[hive] (>=0.6.0)", "pymongo (>=3.6.0)", "pymssql (>=2.1.5)", "python-arango (>=7.3.2)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "sasl (>=0.3.1)", "sqlalchemy-drill (>=1.1.0)", "thrift (>=0.9.2)", "trino (>=0.318.0)", "vertica-python (>=0.5.1)"]
+all = ["PyGithub (!=1.58)", "PyOpenSSL", "adal (>=1.2.7)", "adlfs (>=2023.10.0)", "aiobotocore (>=2.1.1)", "aiofiles (>=23.2.0)", "aiohttp", "aiohttp (>=3.6.3,<4)", "alibabacloud-adb20211201 (>=1.0.0)", "alibabacloud-tea-openapi (>=0.3.7)", "amqp", "analytics-python (>=1.2.9)", "apache-airflow (>=2.6.0)", "apache-airflow (>=2.7.0)", "apache-airflow (>=2.8.0)", "apache-airflow-providers-airbyte", "apache-airflow-providers-alibaba", "apache-airflow-providers-amazon", "apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-spark", "apache-airflow-providers-apprise", "apache-airflow-providers-arangodb", "apache-airflow-providers-asana", "apache-airflow-providers-atlassian-jira", "apache-airflow-providers-celery", "apache-airflow-providers-cloudant", "apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-cohere", "apache-airflow-providers-common-io", "apache-airflow-providers-common-sql", "apache-airflow-providers-databricks", "apache-airflow-providers-datadog", "apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dingding", "apache-airflow-providers-discord", "apache-airflow-providers-docker", "apache-airflow-providers-elasticsearch", "apache-airflow-providers-exasol", "apache-airflow-providers-facebook", "apache-airflow-providers-ftp", "apache-airflow-providers-github", "apache-airflow-providers-google", "apache-airflow-providers-grpc", "apache-airflow-providers-hashicorp", "apache-airflow-providers-http", "apache-airflow-providers-imap", "apache-airflow-providers-influxdb", "apache-airflow-providers-jdbc", "apache-airflow-providers-jenkins", "apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-odbc", "apache-airflow-providers-openai", "apache-airflow-providers-openfaas", "apache-airflow-providers-openlineage", "apache-airflow-providers-opensearch", "apache-airflow-providers-opsgenie", "apache-airflow-providers-oracle", "apache-airflow-providers-pagerduty", "apache-airflow-providers-papermill", "apache-airflow-providers-pgvector", "apache-airflow-providers-pinecone", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-redis", "apache-airflow-providers-salesforce", "apache-airflow-providers-samba", "apache-airflow-providers-segment", "apache-airflow-providers-sendgrid", "apache-airflow-providers-sftp", "apache-airflow-providers-singularity", "apache-airflow-providers-slack", "apache-airflow-providers-smtp", "apache-airflow-providers-snowflake", "apache-airflow-providers-sqlite", "apache-airflow-providers-ssh", "apache-airflow-providers-tableau", "apache-airflow-providers-tabular", "apache-airflow-providers-telegram", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "apache-airflow-providers-weaviate", "apache-airflow-providers-yandex", "apache-airflow-providers-zendesk", "apache-beam (>=2.47.0)", "apprise", "asana (>=0.10,<4.0.0)", "asgiref", "asgiref (>=3.5.2)", "atlasclient (>=0.1.2)", "atlassian-python-api (>=1.14.2)", "attrs (>=22.2)", "authlib (>=1.0.0)", "azure-batch (>=8.0.0)", "azure-cosmos (>=4.0.0)", "azure-datalake-store (>=0.0.45)", "azure-identity (>=1.3.1)", "azure-keyvault-secrets (>=4.1.0)", "azure-kusto-data (>=4.1.0)", "azure-mgmt-containerinstance (>=9.0.0)", "azure-mgmt-containerregistry (>=8.0.0)", "azure-mgmt-cosmosdb", "azure-mgmt-datafactory (>=2.0.0)", "azure-mgmt-datalake-store (>=0.5.0)", "azure-mgmt-resource (>=2.2.0)", "azure-mgmt-storage (>=16.0.0)", "azure-servicebus (>=7.6.1)", "azure-storage-blob (>=12.14.0)", "azure-storage-file-datalake (>=12.9.1)", "azure-storage-file-share", "azure-synapse-artifacts (>=0.17.0)", "azure-synapse-spark", "bcrypt (>=2.0.0)", "blinker (>=1.1)", "boto3 (>=1.28.0)", "botocore (>=1.31.0)", "cassandra-driver (>=3.13.0)", "celery (>=5.3.0,!=5.3.2,!=5.3.3,<6)", "cgroupspy (>=0.2.2)", "cloudant (>=2.0)", "cohere (>=4.27)", "confluent-kafka (>=1.8.2)", "cryptography (>=2.0.0)", "databricks-sql-connector (>=2.0.0,!=2.9.0,<3.0.0)", "datadog (>=0.14.0)", "dnspython (>=1.13.0)", "docker (>=5.0.3)", "elasticsearch (>=8.10,<9)", "eventlet (>=0.33.3)", "facebook-business (>=6.0.2)", "flask-appbuilder[oauth] (==4.3.10)", "flask-bcrypt (>=0.7.1)", "flower (>=1.0.0)", "gcloud-aio-auth (>=4.0.0,<5.0.0)", "gcloud-aio-bigquery (>=6.1.2)", "gcloud-aio-storage", "gcsfs (>=2023.10.0)", "gevent (>=0.13)", "google-ads (>=22.1.0)", "google-api-core (>=2.11.0)", "google-api-python-client (>=1.6.0)", "google-auth (>=1.0.0)", "google-auth (>=1.0.0,<3.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-aiplatform (>=1.22.1)", "google-cloud-automl (>=2.12.0)", "google-cloud-batch (>=0.13.0)", "google-cloud-bigquery-datatransfer (>=3.13.0)", "google-cloud-bigtable (>=2.17.0)", "google-cloud-build (>=3.22.0)", "google-cloud-compute (>=1.10.0)", "google-cloud-container (>=2.17.4)", "google-cloud-datacatalog (>=3.11.1)", "google-cloud-dataflow-client (>=0.8.6)", "google-cloud-dataform (>=0.5.0)", "google-cloud-dataplex (>=1.10.0)", "google-cloud-dataproc (>=5.8.0)", "google-cloud-dataproc-metastore (>=1.12.0)", "google-cloud-dlp (>=3.12.0)", "google-cloud-kms (>=2.15.0)", "google-cloud-language (>=2.9.0)", "google-cloud-logging (>=3.5.0)", "google-cloud-memcache (>=1.7.0)", "google-cloud-monitoring (>=2.18.0)", "google-cloud-orchestration-airflow (>=1.10.0)", "google-cloud-os-login (>=2.9.1)", "google-cloud-pubsub (>=2.19.0)", "google-cloud-redis (>=2.12.0)", "google-cloud-run (>=0.9.0)", "google-cloud-secret-manager (>=2.16.0)", "google-cloud-spanner (>=3.11.1)", "google-cloud-speech (>=2.18.0)", "google-cloud-storage (>=2.7.0)", "google-cloud-storage-transfer (>=1.4.1)", "google-cloud-tasks (>=2.13.0)", "google-cloud-texttospeech (>=2.14.1)", "google-cloud-translate (>=3.11.0)", "google-cloud-videointelligence (>=2.11.0)", "google-cloud-vision (>=3.4.0)", "google-cloud-workflows (>=1.10.0)", "google-re2 (>=1.0)", "greenlet (>=0.4.9)", "grpcio (>=1.15.0)", "grpcio-gcp (>=0.2.2)", "grpcio-status", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "httpx", "hvac (>=0.10)", "impyla (>=0.18.0,<1.0)", "inflection (>=0.5.1)", "influxdb-client (>=1.19.0)", "ipykernel", "jaydebeapi (>=1.1.1)", "json-merge-patch (>=0.2)", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)", "kylinpy (>=2.6)", "ldap3 (>=2.5.1)", "looker-sdk (>=22.2.0)", "mysql-connector-python (>=8.0.11)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "openai[datalib] (>=1.0)", "openlineage-integration-common (>=0.28.0)", "openlineage-python (>=0.28.0)", "opensearch-py (>=2.2.0)", "opentelemetry-exporter-prometheus", "opsgenie-sdk (>=2.1.5)", "oracledb (>=1.0.0)", "oss2 (>=2.14.0)", "pandas (>=0.17.1)", "pandas-gbq", "papermill[all] (>=1.2.1)", "paramiko (>=2.6.0)", "paramiko (>=2.8.0)", "pdpyras (>=4.1.2)", "pgvector (>=0.2.3)", "pinecone-client (>=2.2.4)", "pinotdb (>0.4.7)", "plyvel", "presto-python-client (>=0.8.4)", "proto-plus (>=1.19.6)", "psycopg2-binary (>=2.8.0)", "pyarrow (>=9.0.0)", "pyarrow-hotfix", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pyhive[hive-pure-sasl] (>=0.7.0)", "pykerberos (>=1.1.13)", "pymongo (>=3.6.0)", "pymssql (>=2.1.8)", "pyodbc", "pypsrp (>=0.8.0)", "pyspark", "python-arango (>=7.3.2)", "python-dotenv (>=0.21.0)", "python-jenkins (>=1.0.0)", "python-ldap", "python-telegram-bot (>=20.0.0)", "python3-saml (>=1.16.0)", "pywinrm (>=0.4)", "redis (>=4.5.2,!=4.5.5,<5.0.0)", "redshift-connector (>=2.0.888)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "requests-kerberos (>=0.10.0)", "requests-toolbelt", "s3fs (>=2023.10.0)", "scrapbook[all]", "sendgrid (>=6.0.0)", "sentry-sdk (>=1.32.0,!=1.33.0)", "simple-salesforce (>=1.0.0)", "slack-sdk (>=3.0.0)", "smbprotocol (>=1.5.0)", "snowflake-connector-python (>=2.7.8)", "snowflake-sqlalchemy (>=1.1.0)", "spython (>=0.0.56)", "sqlalchemy-bigquery (>=1.2.1)", "sqlalchemy-drill (>=1.1.0)", "sqlalchemy-redshift (>=0.8.6)", "sqlalchemy-spanner (>=1.6.2)", "sqlparse (>=0.4.2)", "sshtunnel (>=0.3.2)", "statsd (>=3.3.0)", "tableauserverclient", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "trino (>=0.318.0)", "vertica-python (>=0.5.1)", "virtualenv", "watchtower (>=2.0.1,<4)", "weaviate-client (>=3.24.2)", "yandexcloud (>=0.228.0)", "zenpy (>=2.0.24)"]
+all-dbs = ["aiohttp (>=3.6.3,<4)", "apache-airflow (>=2.6.0)", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-arangodb", "apache-airflow-providers-cloudant", "apache-airflow-providers-common-sql (>=1.3.1)", "apache-airflow-providers-common-sql (>=1.8.1)", "apache-airflow-providers-databricks", "apache-airflow-providers-exasol", "apache-airflow-providers-influxdb", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "cassandra-driver (>=3.13.0)", "cloudant (>=2.0)", "databricks-sql-connector (>=2.0.0,!=2.9.0,<3.0.0)", "dnspython (>=1.13.0)", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "impyla (>=0.18.0,<1.0)", "influxdb-client (>=1.19.0)", "mysql-connector-python (>=8.0.11)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "pandas (>=0.17.1)", "pinotdb (>0.4.7)", "presto-python-client (>=0.8.4)", "psycopg2-binary (>=2.8.0)", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pyhive[hive-pure-sasl] (>=0.7.0)", "pymongo (>=3.6.0)", "pymssql (>=2.1.8)", "python-arango (>=7.3.2)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "sqlalchemy-drill (>=1.1.0)", "thrift (>=0.9.2)", "trino (>=0.318.0)", "vertica-python (>=0.5.1)"]
amazon = ["apache-airflow-providers-amazon"]
apache-atlas = ["atlasclient (>=0.1.2)"]
apache-beam = ["apache-airflow-providers-apache-beam"]
@@ -298,7 +310,6 @@ apache-livy = ["apache-airflow-providers-apache-livy"]
apache-pig = ["apache-airflow-providers-apache-pig"]
apache-pinot = ["apache-airflow-providers-apache-pinot"]
apache-spark = ["apache-airflow-providers-apache-spark"]
-apache-sqoop = ["apache-airflow-providers-apache-sqoop"]
apache-webhdfs = ["hdfs[avro,dataframe,kerberos] (>=2.0.4)"]
apprise = ["apache-airflow-providers-apprise"]
arangodb = ["apache-airflow-providers-arangodb"]
@@ -309,24 +320,24 @@ atlassian-jira = ["apache-airflow-providers-atlassian-jira"]
aws = ["apache-airflow-providers-amazon"]
azure = ["apache-airflow-providers-microsoft-azure"]
cassandra = ["apache-airflow-providers-apache-cassandra"]
-celery = ["apache-airflow (>=2.4.0)", "apache-airflow-providers-celery", "celery (>=5.2.3,<6)", "flower (>=1.0.0)"]
+celery = ["apache-airflow (>=2.6.0)", "apache-airflow-providers-celery", "celery (>=5.3.0,!=5.3.2,!=5.3.3,<6)", "flower (>=1.0.0)", "google-re2 (>=1.0)"]
cgroups = ["cgroupspy (>=0.2.2)"]
cloudant = ["apache-airflow-providers-cloudant"]
-cncf-kubernetes = ["apache-airflow (>=2.4.0)", "apache-airflow-providers-cncf-kubernetes", "asgiref (>=3.5.2)", "cryptography (>=2.0.0)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)"]
+cncf-kubernetes = ["aiofiles (>=23.2.0)", "apache-airflow (>=2.6.0)", "apache-airflow-providers-cncf-kubernetes", "asgiref (>=3.5.2)", "cryptography (>=2.0.0)", "google-re2 (>=1.0)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)"]
+cohere = ["apache-airflow-providers-cohere"]
+common-io = ["apache-airflow-providers-common-io"]
common-sql = ["apache-airflow-providers-common-sql"]
-dask = ["apache-airflow (>=2.4.0)", "apache-airflow-providers-daskexecutor", "cloudpickle (>=1.4.1)", "dask (>=2.9.0,!=2022.10.1,!=2023.5.0)", "distributed (>=2.11.1,!=2023.5.0)"]
-daskexecutor = ["apache-airflow (>=2.4.0)", "apache-airflow-providers-daskexecutor", "cloudpickle (>=1.4.1)", "dask (>=2.9.0,!=2022.10.1,!=2023.5.0)", "distributed (>=2.11.1,!=2023.5.0)"]
databricks = ["apache-airflow-providers-databricks"]
datadog = ["apache-airflow-providers-datadog"]
dbt-cloud = ["apache-airflow-providers-dbt-cloud"]
deprecated-api = ["requests (>=2.26.0)"]
-devel = ["aiobotocore (>=2.1.1)", "aioresponses", "apache-airflow (>=2.4.0)", "apache-airflow-providers-common-sql", "astroid (>=2.12.3)", "aws-xray-sdk", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "bowler", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "coverage", "cryptography (>=2.0.0)", "docutils (<0.17.0)", "eralchemy2", "filelock", "flask-bcrypt (>=0.7.1)", "gitpython", "ipdb", "jira", "jsondiff", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "mongomock", "moto[cloudformation,glue] (>=4.0)", "mypy (==1.2.0)", "mysqlclient (>=1.3.6)", "pandas (>=0.17.1)", "paramiko", "pipdeptree", "pre-commit", "pyarrow (>=9.0.0)", "pygithub", "pypsrp", "pytest", "pytest-asyncio", "pytest-capture-warnings", "pytest-cov", "pytest-httpx", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python-jose", "pywinrm", "qds-sdk (>=1.9.6)", "requests-mock", "rich-click (>=1.5)", "ruff (>=0.0.219)", "semver", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "time-machine", "towncrier", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-boto", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "wheel", "yamllint"]
-devel-all = ["PyGithub (!=1.58)", "PyOpenSSL", "adal (>=1.2.7)", "aiobotocore (>=2.1.1)", "aiohttp", "aiohttp (>=3.6.3,<4)", "aioresponses", "alibabacloud-adb20211201 (>=1.0.0)", "alibabacloud-tea-openapi (>=0.3.7)", "amqp", "analytics-python (>=1.2.9)", "apache-airflow (>=2.4.0)", "apache-airflow (>=2.7.0)", "apache-airflow-providers-airbyte", "apache-airflow-providers-alibaba", "apache-airflow-providers-amazon", "apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-spark", "apache-airflow-providers-apache-sqoop", "apache-airflow-providers-apprise", "apache-airflow-providers-arangodb", "apache-airflow-providers-asana", "apache-airflow-providers-atlassian-jira", "apache-airflow-providers-celery", "apache-airflow-providers-cloudant", "apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-common-sql", "apache-airflow-providers-daskexecutor", "apache-airflow-providers-databricks", "apache-airflow-providers-datadog", "apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dingding", "apache-airflow-providers-discord", "apache-airflow-providers-docker", "apache-airflow-providers-elasticsearch", "apache-airflow-providers-exasol", "apache-airflow-providers-facebook", "apache-airflow-providers-ftp", "apache-airflow-providers-github", "apache-airflow-providers-google", "apache-airflow-providers-grpc", "apache-airflow-providers-hashicorp", "apache-airflow-providers-http", "apache-airflow-providers-imap", "apache-airflow-providers-influxdb", "apache-airflow-providers-jdbc", "apache-airflow-providers-jenkins", "apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-odbc", "apache-airflow-providers-openfaas", "apache-airflow-providers-openlineage", "apache-airflow-providers-opsgenie", "apache-airflow-providers-oracle", "apache-airflow-providers-pagerduty", "apache-airflow-providers-papermill", "apache-airflow-providers-plexus", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-qubole", "apache-airflow-providers-redis", "apache-airflow-providers-salesforce", "apache-airflow-providers-samba", "apache-airflow-providers-segment", "apache-airflow-providers-sendgrid", "apache-airflow-providers-sftp", "apache-airflow-providers-singularity", "apache-airflow-providers-slack", "apache-airflow-providers-smtp", "apache-airflow-providers-snowflake", "apache-airflow-providers-sqlite", "apache-airflow-providers-ssh", "apache-airflow-providers-tableau", "apache-airflow-providers-tabular", "apache-airflow-providers-telegram", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "apache-airflow-providers-zendesk", "apache-beam (>=2.47.0)", "apprise", "arrow (>=0.16.0)", "asana (>=0.10,<4.0.0)", "asgiref", "asgiref (>=3.5.2)", "astroid (>=2.12.3)", "atlasclient (>=0.1.2)", "atlassian-python-api (>=1.14.2)", "attrs (>=22.2)", "authlib (>=1.0.0)", "aws-xray-sdk", "azure-batch (>=8.0.0)", "azure-cosmos (>=4.0.0)", "azure-datalake-store (>=0.0.45)", "azure-identity (>=1.3.1)", "azure-keyvault-secrets (>=4.1.0)", "azure-kusto-data (>=0.0.43,<0.1)", "azure-mgmt-containerinstance (>=1.5.0,<2.0)", "azure-mgmt-datafactory (>=1.0.0,<2.0)", "azure-mgmt-datalake-store (>=0.5.0)", "azure-mgmt-resource (>=2.2.0)", "azure-servicebus (>=7.6.1)", "azure-storage-blob (>=12.14.0)", "azure-storage-common (>=2.1.0)", "azure-storage-file (>=2.1.0)", "azure-storage-file-datalake (>=12.9.1)", "azure-synapse-spark", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "blinker (>=1.1)", "boto3 (>=1.24.0)", "bowler", "cassandra-driver (>=3.13.0)", "celery (>=5.2.3,<6)", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "cloudant (>=2.0)", "cloudpickle (>=1.4.1)", "confluent-kafka (>=1.8.2)", "coverage", "cryptography (>=2.0.0)", "dask (>=2.9.0,!=2022.10.1,!=2023.5.0)", "databricks-sql-connector (>=2.0.0,<3.0.0)", "datadog (>=0.14.0)", "distributed (>=2.11.1,!=2023.5.0)", "dnspython (>=1.13.0)", "docker (>=5.0.3)", "docutils (<0.17.0)", "elasticsearch (>7,<7.15.0)", "eralchemy2", "eventlet (>=0.33.3)", "facebook-business (>=6.0.2)", "filelock", "flask-appbuilder[oauth] (==4.3.3)", "flask-bcrypt (>=0.7.1)", "flower (>=1.0.0)", "gcloud-aio-auth (>=4.0.0,<5.0.0)", "gcloud-aio-bigquery (>=6.1.2)", "gcloud-aio-storage", "gevent (>=0.13)", "gitpython", "google-ads (>=21.2.0)", "google-api-core (>=2.11.0)", "google-api-python-client (>=1.6.0)", "google-auth (>=1.0.0)", "google-auth (>=1.0.0,<3.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-aiplatform (>=1.22.1)", "google-cloud-automl (>=2.11.0)", "google-cloud-bigquery-datatransfer (>=3.11.0)", "google-cloud-bigtable (>=2.17.0)", "google-cloud-build (>=3.13.0)", "google-cloud-compute (>=1.10.0)", "google-cloud-container (>=2.17.4)", "google-cloud-datacatalog (>=3.11.1)", "google-cloud-dataflow-client (>=0.8.2)", "google-cloud-dataform (>=0.5.0)", "google-cloud-dataplex (>=1.4.2)", "google-cloud-dataproc (>=5.4.0)", "google-cloud-dataproc-metastore (>=1.12.0)", "google-cloud-dlp (>=3.12.0)", "google-cloud-kms (>=2.15.0)", "google-cloud-language (>=2.9.0)", "google-cloud-logging (>=3.5.0)", "google-cloud-memcache (>=1.7.0)", "google-cloud-monitoring (>=2.14.1)", "google-cloud-orchestration-airflow (>=1.7.0)", "google-cloud-os-login (>=2.9.1)", "google-cloud-pubsub (>=2.15.0)", "google-cloud-redis (>=2.12.0)", "google-cloud-secret-manager (>=2.16.0)", "google-cloud-spanner (>=3.11.1)", "google-cloud-speech (>=2.18.0)", "google-cloud-storage (>=2.7.0)", "google-cloud-storage-transfer (>=1.4.1)", "google-cloud-tasks (>=2.13.0)", "google-cloud-texttospeech (>=2.14.1)", "google-cloud-translate (>=3.11.0)", "google-cloud-videointelligence (>=2.11.0)", "google-cloud-vision (>=3.4.0)", "google-cloud-workflows (>=1.10.0)", "greenlet (>=0.4.9)", "grpcio (>=1.15.0)", "grpcio-gcp (>=0.2.2)", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "httpx", "hvac (>=0.10)", "impyla (>=0.18.0,<1.0)", "influxdb-client (>=1.19.0)", "ipdb", "jaydebeapi (>=1.1.1)", "jira", "json-merge-patch (>=0.2)", "jsondiff", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)", "kylinpy (>=2.6)", "ldap3 (>=2.5.1)", "looker-sdk (>=22.2.0)", "mongomock", "moto[cloudformation,glue] (>=4.0)", "mypy (==1.2.0)", "mypy-boto3-appflow (>=1.24.0,<1.28.12)", "mypy-boto3-rds (>=1.24.0)", "mypy-boto3-redshift-data (>=1.24.0)", "mypy-boto3-s3 (>=1.24.0)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "openlineage-integration-common (>=0.28.0)", "openlineage-python (>=0.28.0)", "opentelemetry-exporter-prometheus", "opsgenie-sdk (>=2.1.5)", "oracledb (>=1.0.0)", "oss2 (>=2.14.0)", "pandas (>=0.17.1)", "pandas-gbq", "papermill[all] (>=1.2.1)", "paramiko", "paramiko (>=2.6.0)", "pdpyras (>=4.1.2)", "pinotdb (>0.4.7)", "pipdeptree", "plyvel", "pre-commit", "presto-python-client (>=0.8.2)", "proto-plus (>=1.19.6)", "psycopg2-binary (>=2.8.0)", "pyarrow (>=9.0.0)", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pygithub", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "pymongo (>=3.6.0)", "pymssql (>=2.1.5)", "pyodbc", "pypsrp", "pypsrp (>=0.8.0)", "pyspark", "pytest", "pytest-asyncio", "pytest-capture-warnings", "pytest-cov", "pytest-httpx", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python-arango (>=7.3.2)", "python-dotenv (>=0.21.0)", "python-jenkins (>=1.0.0)", "python-jose", "python-ldap", "python-telegram-bot (>=20.0.0)", "pywinrm", "pywinrm (>=0.4)", "qds-sdk (>=1.10.4)", "qds-sdk (>=1.9.6)", "redis (>=3.2.0)", "redshift-connector (>=2.0.888)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "requests-kerberos (>=0.10.0)", "requests-mock", "requests-toolbelt", "rich-click (>=1.5)", "ruff (>=0.0.219)", "sasl (>=0.3.1)", "scrapbook[all]", "semver", "sendgrid (>=6.0.0)", "sentry-sdk (>=0.8.0)", "simple-salesforce (>=1.0.0)", "slack-sdk (>=3.0.0)", "smbprotocol (>=1.5.0)", "snowflake-connector-python (>=2.4.1)", "snowflake-sqlalchemy (>=1.1.0)", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "spython (>=0.0.56)", "sqlalchemy-bigquery (>=1.2.1)", "sqlalchemy-drill (>=1.1.0)", "sqlalchemy-redshift (>=0.8.6)", "sqlalchemy-spanner (>=1.6.2)", "sqlparse (>=0.4.2)", "sshtunnel (>=0.3.2)", "statsd (>=3.3.0)", "tableauserverclient", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "time-machine", "towncrier", "trino (>=0.318.0)", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-boto", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "vertica-python (>=0.5.1)", "virtualenv", "watchtower (>=2.0.1,<2.1.0)", "wheel", "yamllint", "zenpy (>=2.0.24)"]
-devel-ci = ["PyGithub (!=1.58)", "PyOpenSSL", "adal (>=1.2.7)", "aiobotocore (>=2.1.1)", "aiohttp", "aiohttp (>=3.6.3,<4)", "aioresponses", "alibabacloud-adb20211201 (>=1.0.0)", "alibabacloud-tea-openapi (>=0.3.7)", "amqp", "analytics-python (>=1.2.9)", "apache-airflow (>=2.4.0)", "apache-airflow (>=2.7.0)", "apache-airflow-providers-airbyte", "apache-airflow-providers-alibaba", "apache-airflow-providers-amazon", "apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-spark", "apache-airflow-providers-apache-sqoop", "apache-airflow-providers-apprise", "apache-airflow-providers-arangodb", "apache-airflow-providers-asana", "apache-airflow-providers-atlassian-jira", "apache-airflow-providers-celery", "apache-airflow-providers-cloudant", "apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-common-sql", "apache-airflow-providers-daskexecutor", "apache-airflow-providers-databricks", "apache-airflow-providers-datadog", "apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dingding", "apache-airflow-providers-discord", "apache-airflow-providers-docker", "apache-airflow-providers-elasticsearch", "apache-airflow-providers-exasol", "apache-airflow-providers-facebook", "apache-airflow-providers-ftp", "apache-airflow-providers-github", "apache-airflow-providers-google", "apache-airflow-providers-grpc", "apache-airflow-providers-hashicorp", "apache-airflow-providers-http", "apache-airflow-providers-imap", "apache-airflow-providers-influxdb", "apache-airflow-providers-jdbc", "apache-airflow-providers-jenkins", "apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-odbc", "apache-airflow-providers-openfaas", "apache-airflow-providers-openlineage", "apache-airflow-providers-opsgenie", "apache-airflow-providers-oracle", "apache-airflow-providers-pagerduty", "apache-airflow-providers-papermill", "apache-airflow-providers-plexus", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-qubole", "apache-airflow-providers-redis", "apache-airflow-providers-salesforce", "apache-airflow-providers-samba", "apache-airflow-providers-segment", "apache-airflow-providers-sendgrid", "apache-airflow-providers-sftp", "apache-airflow-providers-singularity", "apache-airflow-providers-slack", "apache-airflow-providers-smtp", "apache-airflow-providers-snowflake", "apache-airflow-providers-sqlite", "apache-airflow-providers-ssh", "apache-airflow-providers-tableau", "apache-airflow-providers-tabular", "apache-airflow-providers-telegram", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "apache-airflow-providers-zendesk", "apache-beam (>=2.47.0)", "apprise", "arrow (>=0.16.0)", "asana (>=0.10,<4.0.0)", "asgiref", "asgiref (>=3.5.2)", "astroid (>=2.12.3)", "atlasclient (>=0.1.2)", "atlassian-python-api (>=1.14.2)", "attrs (>=22.2)", "authlib (>=1.0.0)", "aws-xray-sdk", "azure-batch (>=8.0.0)", "azure-cosmos (>=4.0.0)", "azure-datalake-store (>=0.0.45)", "azure-identity (>=1.3.1)", "azure-keyvault-secrets (>=4.1.0)", "azure-kusto-data (>=0.0.43,<0.1)", "azure-mgmt-containerinstance (>=1.5.0,<2.0)", "azure-mgmt-datafactory (>=1.0.0,<2.0)", "azure-mgmt-datalake-store (>=0.5.0)", "azure-mgmt-resource (>=2.2.0)", "azure-servicebus (>=7.6.1)", "azure-storage-blob (>=12.14.0)", "azure-storage-common (>=2.1.0)", "azure-storage-file (>=2.1.0)", "azure-storage-file-datalake (>=12.9.1)", "azure-synapse-spark", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "blinker (>=1.1)", "boto3 (>=1.24.0)", "bowler", "cassandra-driver (>=3.13.0)", "celery (>=5.2.3,<6)", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "cloudant (>=2.0)", "cloudpickle (>=1.4.1)", "confluent-kafka (>=1.8.2)", "coverage", "cryptography (>=2.0.0)", "dask (>=2.9.0,!=2022.10.1,!=2023.5.0)", "databricks-sql-connector (>=2.0.0,<3.0.0)", "datadog (>=0.14.0)", "distributed (>=2.11.1,!=2023.5.0)", "dnspython (>=1.13.0)", "docker (>=5.0.3)", "docutils (<0.17.0)", "elasticsearch (>7,<7.15.0)", "eralchemy2", "eventlet (>=0.33.3)", "facebook-business (>=6.0.2)", "filelock", "flask-appbuilder[oauth] (==4.3.3)", "flask-bcrypt (>=0.7.1)", "flower (>=1.0.0)", "gcloud-aio-auth (>=4.0.0,<5.0.0)", "gcloud-aio-bigquery (>=6.1.2)", "gcloud-aio-storage", "gevent (>=0.13)", "gitpython", "google-ads (>=21.2.0)", "google-api-core (>=2.11.0)", "google-api-python-client (>=1.6.0)", "google-auth (>=1.0.0)", "google-auth (>=1.0.0,<3.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-aiplatform (>=1.22.1)", "google-cloud-automl (>=2.11.0)", "google-cloud-bigquery-datatransfer (>=3.11.0)", "google-cloud-bigtable (>=2.17.0)", "google-cloud-build (>=3.13.0)", "google-cloud-compute (>=1.10.0)", "google-cloud-container (>=2.17.4)", "google-cloud-datacatalog (>=3.11.1)", "google-cloud-dataflow-client (>=0.8.2)", "google-cloud-dataform (>=0.5.0)", "google-cloud-dataplex (>=1.4.2)", "google-cloud-dataproc (>=5.4.0)", "google-cloud-dataproc-metastore (>=1.12.0)", "google-cloud-dlp (>=3.12.0)", "google-cloud-kms (>=2.15.0)", "google-cloud-language (>=2.9.0)", "google-cloud-logging (>=3.5.0)", "google-cloud-memcache (>=1.7.0)", "google-cloud-monitoring (>=2.14.1)", "google-cloud-orchestration-airflow (>=1.7.0)", "google-cloud-os-login (>=2.9.1)", "google-cloud-pubsub (>=2.15.0)", "google-cloud-redis (>=2.12.0)", "google-cloud-secret-manager (>=2.16.0)", "google-cloud-spanner (>=3.11.1)", "google-cloud-speech (>=2.18.0)", "google-cloud-storage (>=2.7.0)", "google-cloud-storage-transfer (>=1.4.1)", "google-cloud-tasks (>=2.13.0)", "google-cloud-texttospeech (>=2.14.1)", "google-cloud-translate (>=3.11.0)", "google-cloud-videointelligence (>=2.11.0)", "google-cloud-vision (>=3.4.0)", "google-cloud-workflows (>=1.10.0)", "greenlet (>=0.4.9)", "grpcio (>=1.15.0)", "grpcio-gcp (>=0.2.2)", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "httpx", "hvac (>=0.10)", "impyla (>=0.18.0,<1.0)", "influxdb-client (>=1.19.0)", "ipdb", "jaydebeapi (>=1.1.1)", "jira", "json-merge-patch (>=0.2)", "jsondiff", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)", "kylinpy (>=2.6)", "ldap3 (>=2.5.1)", "looker-sdk (>=22.2.0)", "mongomock", "moto[cloudformation,glue] (>=4.0)", "mypy (==1.2.0)", "mypy-boto3-appflow (>=1.24.0,<1.28.12)", "mypy-boto3-rds (>=1.24.0)", "mypy-boto3-redshift-data (>=1.24.0)", "mypy-boto3-s3 (>=1.24.0)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "openlineage-integration-common (>=0.28.0)", "openlineage-python (>=0.28.0)", "opentelemetry-exporter-prometheus", "opsgenie-sdk (>=2.1.5)", "oracledb (>=1.0.0)", "oss2 (>=2.14.0)", "pandas (>=0.17.1)", "pandas-gbq", "papermill[all] (>=1.2.1)", "paramiko", "paramiko (>=2.6.0)", "pdpyras (>=4.1.2)", "pinotdb (>0.4.7)", "pipdeptree", "plyvel", "pre-commit", "presto-python-client (>=0.8.2)", "proto-plus (>=1.19.6)", "psycopg2-binary (>=2.8.0)", "pyarrow (>=9.0.0)", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pygithub", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "pymongo (>=3.6.0)", "pymssql (>=2.1.5)", "pyodbc", "pypsrp", "pypsrp (>=0.8.0)", "pyspark", "pytest", "pytest-asyncio", "pytest-capture-warnings", "pytest-cov", "pytest-httpx", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python-arango (>=7.3.2)", "python-dotenv (>=0.21.0)", "python-jenkins (>=1.0.0)", "python-jose", "python-ldap", "python-telegram-bot (>=20.0.0)", "pywinrm", "pywinrm (>=0.4)", "qds-sdk (>=1.10.4)", "qds-sdk (>=1.9.6)", "redis (>=3.2.0)", "redshift-connector (>=2.0.888)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "requests-kerberos (>=0.10.0)", "requests-mock", "requests-toolbelt", "rich-click (>=1.5)", "ruff (>=0.0.219)", "sasl (>=0.3.1)", "scrapbook[all]", "semver", "sendgrid (>=6.0.0)", "sentry-sdk (>=0.8.0)", "simple-salesforce (>=1.0.0)", "slack-sdk (>=3.0.0)", "smbprotocol (>=1.5.0)", "snowflake-connector-python (>=2.4.1)", "snowflake-sqlalchemy (>=1.1.0)", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "spython (>=0.0.56)", "sqlalchemy-bigquery (>=1.2.1)", "sqlalchemy-drill (>=1.1.0)", "sqlalchemy-redshift (>=0.8.6)", "sqlalchemy-spanner (>=1.6.2)", "sqlparse (>=0.4.2)", "sshtunnel (>=0.3.2)", "statsd (>=3.3.0)", "tableauserverclient", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "time-machine", "towncrier", "trino (>=0.318.0)", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-boto", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "vertica-python (>=0.5.1)", "virtualenv", "watchtower (>=2.0.1,<2.1.0)", "wheel", "yamllint", "zenpy (>=2.0.24)"]
-devel-hadoop = ["aiobotocore (>=2.1.1)", "aioresponses", "apache-airflow (>=2.4.0)", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-common-sql", "apache-airflow-providers-presto", "apache-airflow-providers-trino", "astroid (>=2.12.3)", "aws-xray-sdk", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "bowler", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "coverage", "cryptography (>=2.0.0)", "docutils (<0.17.0)", "eralchemy2", "filelock", "flask-bcrypt (>=0.7.1)", "gitpython", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "impyla (>=0.18.0,<1.0)", "ipdb", "jira", "jsondiff", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "mongomock", "moto[cloudformation,glue] (>=4.0)", "mypy (==1.2.0)", "mysqlclient (>=1.3.6)", "pandas (>=0.17.1)", "paramiko", "pipdeptree", "pre-commit", "presto-python-client (>=0.8.2)", "pyarrow (>=9.0.0)", "pygithub", "pyhive[hive] (>=0.6.0)", "pykerberos (>=1.1.13)", "pypsrp", "pytest", "pytest-asyncio", "pytest-capture-warnings", "pytest-cov", "pytest-httpx", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python-jose", "pywinrm", "qds-sdk (>=1.9.6)", "requests-kerberos (>=0.10.0)", "requests-mock", "rich-click (>=1.5)", "ruff (>=0.0.219)", "sasl (>=0.3.1)", "semver", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "time-machine", "towncrier", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-boto", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "wheel", "yamllint"]
+devel = ["aiobotocore (>=2.1.1)", "aioresponses", "apache-airflow (>=2.6.0)", "apache-airflow-providers-common-sql", "astroid (>=2.12.3,<3.0)", "aws-xray-sdk", "backports.zoneinfo (>=0.2.1)", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "coverage (>=7.2)", "cryptography (>=2.0.0)", "deltalake (>=0.12.0)", "docutils (<0.17.0)", "duckdb (>=0.9.0)", "eralchemy2", "filelock", "flask-bcrypt (>=0.7.1)", "gitpython", "ipdb", "kubernetes (>=21.7.0,<24)", "mongomock", "moto[cloudformation,glue] (>=4.2.9)", "mypy (==1.2.0)", "mypy-boto3-appflow (>=1.28.0)", "mypy-boto3-rds (>=1.28.0)", "mypy-boto3-redshift-data (>=1.28.0)", "mypy-boto3-s3 (>=1.28.0)", "mysql-connector-python (>=8.0.11)", "mysqlclient (>=1.3.6)", "pandas (>=0.17.1)", "pipdeptree", "pre-commit", "pyarrow (>=9.0.0)", "pyarrow-hotfix", "pygithub", "pyiceberg (>=0.5.0)", "pytest (>=7.1)", "pytest-asyncio (!=0.23.0,!=0.23.1)", "pytest-cov", "pytest-httpx", "pytest-icdiff", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python3-saml (>=1.16.0)", "pywinrm", "requests-mock", "restructuredtext-lint", "rich-click (>=1.7.0)", "ruff (>=0.0.219)", "s3fs (>=2023.10.0)", "semver", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-design (>=0.5.0)", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "time-machine", "towncrier", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-aiofiles", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "wheel", "yamllint"]
+devel-all = ["PyGithub (!=1.58)", "PyOpenSSL", "adal (>=1.2.7)", "adlfs (>=2023.10.0)", "aiobotocore (>=2.1.1)", "aiofiles (>=23.2.0)", "aiohttp", "aiohttp (>=3.6.3,<4)", "aioresponses", "alibabacloud-adb20211201 (>=1.0.0)", "alibabacloud-tea-openapi (>=0.3.7)", "amqp", "analytics-python (>=1.2.9)", "apache-airflow (>=2.6.0)", "apache-airflow (>=2.7.0)", "apache-airflow (>=2.8.0)", "apache-airflow-providers-airbyte", "apache-airflow-providers-alibaba", "apache-airflow-providers-amazon", "apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-spark", "apache-airflow-providers-apprise", "apache-airflow-providers-arangodb", "apache-airflow-providers-asana", "apache-airflow-providers-atlassian-jira", "apache-airflow-providers-celery", "apache-airflow-providers-cloudant", "apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-cohere", "apache-airflow-providers-common-io", "apache-airflow-providers-common-sql", "apache-airflow-providers-databricks", "apache-airflow-providers-datadog", "apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dingding", "apache-airflow-providers-discord", "apache-airflow-providers-docker", "apache-airflow-providers-elasticsearch", "apache-airflow-providers-exasol", "apache-airflow-providers-facebook", "apache-airflow-providers-ftp", "apache-airflow-providers-github", "apache-airflow-providers-google", "apache-airflow-providers-grpc", "apache-airflow-providers-hashicorp", "apache-airflow-providers-http", "apache-airflow-providers-imap", "apache-airflow-providers-influxdb", "apache-airflow-providers-jdbc", "apache-airflow-providers-jenkins", "apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-odbc", "apache-airflow-providers-openai", "apache-airflow-providers-openfaas", "apache-airflow-providers-openlineage", "apache-airflow-providers-opensearch", "apache-airflow-providers-opsgenie", "apache-airflow-providers-oracle", "apache-airflow-providers-pagerduty", "apache-airflow-providers-papermill", "apache-airflow-providers-pgvector", "apache-airflow-providers-pinecone", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-redis", "apache-airflow-providers-salesforce", "apache-airflow-providers-samba", "apache-airflow-providers-segment", "apache-airflow-providers-sendgrid", "apache-airflow-providers-sftp", "apache-airflow-providers-singularity", "apache-airflow-providers-slack", "apache-airflow-providers-smtp", "apache-airflow-providers-snowflake", "apache-airflow-providers-sqlite", "apache-airflow-providers-ssh", "apache-airflow-providers-tableau", "apache-airflow-providers-tabular", "apache-airflow-providers-telegram", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "apache-airflow-providers-weaviate", "apache-airflow-providers-yandex", "apache-airflow-providers-zendesk", "apache-beam (>=2.47.0)", "apprise", "asana (>=0.10,<4.0.0)", "asgiref", "asgiref (>=3.5.2)", "astroid (>=2.12.3,<3.0)", "atlasclient (>=0.1.2)", "atlassian-python-api (>=1.14.2)", "attrs (>=22.2)", "authlib (>=1.0.0)", "aws-xray-sdk", "azure-batch (>=8.0.0)", "azure-cosmos (>=4.0.0)", "azure-datalake-store (>=0.0.45)", "azure-identity (>=1.3.1)", "azure-keyvault-secrets (>=4.1.0)", "azure-kusto-data (>=4.1.0)", "azure-mgmt-containerinstance (>=9.0.0)", "azure-mgmt-containerregistry (>=8.0.0)", "azure-mgmt-cosmosdb", "azure-mgmt-datafactory (>=2.0.0)", "azure-mgmt-datalake-store (>=0.5.0)", "azure-mgmt-resource (>=2.2.0)", "azure-mgmt-storage (>=16.0.0)", "azure-servicebus (>=7.6.1)", "azure-storage-blob (>=12.14.0)", "azure-storage-file-datalake (>=12.9.1)", "azure-storage-file-share", "azure-synapse-artifacts (>=0.17.0)", "azure-synapse-spark", "backports.zoneinfo (>=0.2.1)", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "blinker (>=1.1)", "boto3 (>=1.28.0)", "botocore (>=1.31.0)", "cassandra-driver (>=3.13.0)", "celery (>=5.3.0,!=5.3.2,!=5.3.3,<6)", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "cloudant (>=2.0)", "cohere (>=4.27)", "confluent-kafka (>=1.8.2)", "coverage (>=7.2)", "cryptography (>=2.0.0)", "databricks-sql-connector (>=2.0.0,!=2.9.0,<3.0.0)", "datadog (>=0.14.0)", "deltalake (>=0.12.0)", "dnspython (>=1.13.0)", "docker (>=5.0.3)", "docutils (<0.17.0)", "duckdb (>=0.9.0)", "elasticsearch (>=8.10,<9)", "eralchemy2", "eventlet (>=0.33.3)", "facebook-business (>=6.0.2)", "filelock", "flask-appbuilder[oauth] (==4.3.10)", "flask-bcrypt (>=0.7.1)", "flower (>=1.0.0)", "gcloud-aio-auth (>=4.0.0,<5.0.0)", "gcloud-aio-bigquery (>=6.1.2)", "gcloud-aio-storage", "gcsfs (>=2023.10.0)", "gevent (>=0.13)", "gitpython", "google-ads (>=22.1.0)", "google-api-core (>=2.11.0)", "google-api-python-client (>=1.6.0)", "google-auth (>=1.0.0)", "google-auth (>=1.0.0,<3.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-aiplatform (>=1.22.1)", "google-cloud-automl (>=2.12.0)", "google-cloud-batch (>=0.13.0)", "google-cloud-bigquery-datatransfer (>=3.13.0)", "google-cloud-bigtable (>=2.17.0)", "google-cloud-build (>=3.22.0)", "google-cloud-compute (>=1.10.0)", "google-cloud-container (>=2.17.4)", "google-cloud-datacatalog (>=3.11.1)", "google-cloud-dataflow-client (>=0.8.6)", "google-cloud-dataform (>=0.5.0)", "google-cloud-dataplex (>=1.10.0)", "google-cloud-dataproc (>=5.8.0)", "google-cloud-dataproc-metastore (>=1.12.0)", "google-cloud-dlp (>=3.12.0)", "google-cloud-kms (>=2.15.0)", "google-cloud-language (>=2.9.0)", "google-cloud-logging (>=3.5.0)", "google-cloud-memcache (>=1.7.0)", "google-cloud-monitoring (>=2.18.0)", "google-cloud-orchestration-airflow (>=1.10.0)", "google-cloud-os-login (>=2.9.1)", "google-cloud-pubsub (>=2.19.0)", "google-cloud-redis (>=2.12.0)", "google-cloud-run (>=0.9.0)", "google-cloud-secret-manager (>=2.16.0)", "google-cloud-spanner (>=3.11.1)", "google-cloud-speech (>=2.18.0)", "google-cloud-storage (>=2.7.0)", "google-cloud-storage-transfer (>=1.4.1)", "google-cloud-tasks (>=2.13.0)", "google-cloud-texttospeech (>=2.14.1)", "google-cloud-translate (>=3.11.0)", "google-cloud-videointelligence (>=2.11.0)", "google-cloud-vision (>=3.4.0)", "google-cloud-workflows (>=1.10.0)", "google-re2 (>=1.0)", "greenlet (>=0.4.9)", "grpcio (>=1.15.0)", "grpcio-gcp (>=0.2.2)", "grpcio-status", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "httpx", "hvac (>=0.10)", "impyla (>=0.18.0,<1.0)", "inflection (>=0.5.1)", "influxdb-client (>=1.19.0)", "ipdb", "ipykernel", "jaydebeapi (>=1.1.1)", "json-merge-patch (>=0.2)", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)", "kylinpy (>=2.6)", "ldap3 (>=2.5.1)", "looker-sdk (>=22.2.0)", "mongomock", "moto[cloudformation,glue] (>=4.2.9)", "mypy (==1.2.0)", "mypy-boto3-appflow (>=1.28.0)", "mypy-boto3-rds (>=1.28.0)", "mypy-boto3-redshift-data (>=1.28.0)", "mypy-boto3-s3 (>=1.28.0)", "mysql-connector-python (>=8.0.11)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "openai[datalib] (>=1.0)", "openlineage-integration-common (>=0.28.0)", "openlineage-python (>=0.28.0)", "opensearch-py (>=2.2.0)", "opentelemetry-exporter-prometheus", "opsgenie-sdk (>=2.1.5)", "oracledb (>=1.0.0)", "oss2 (>=2.14.0)", "pandas (>=0.17.1)", "pandas-gbq", "papermill[all] (>=1.2.1)", "paramiko (>=2.6.0)", "paramiko (>=2.8.0)", "pdpyras (>=4.1.2)", "pgvector (>=0.2.3)", "pinecone-client (>=2.2.4)", "pinotdb (>0.4.7)", "pipdeptree", "plyvel", "pre-commit", "presto-python-client (>=0.8.4)", "proto-plus (>=1.19.6)", "psycopg2-binary (>=2.8.0)", "pyarrow (>=9.0.0)", "pyarrow-hotfix", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pygithub", "pyhive[hive-pure-sasl] (>=0.7.0)", "pyiceberg (>=0.5.0)", "pykerberos (>=1.1.13)", "pymongo (>=3.6.0)", "pymssql (>=2.1.8)", "pyodbc", "pypsrp (>=0.8.0)", "pyspark", "pytest (>=7.1)", "pytest-asyncio (!=0.23.0,!=0.23.1)", "pytest-cov", "pytest-httpx", "pytest-icdiff", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python-arango (>=7.3.2)", "python-dotenv (>=0.21.0)", "python-jenkins (>=1.0.0)", "python-ldap", "python-telegram-bot (>=20.0.0)", "python3-saml (>=1.16.0)", "pywinrm", "pywinrm (>=0.4)", "redis (>=4.5.2,!=4.5.5,<5.0.0)", "redshift-connector (>=2.0.888)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "requests-kerberos (>=0.10.0)", "requests-mock", "requests-toolbelt", "restructuredtext-lint", "rich-click (>=1.7.0)", "ruff (>=0.0.219)", "s3fs (>=2023.10.0)", "scrapbook[all]", "semver", "sendgrid (>=6.0.0)", "sentry-sdk (>=1.32.0,!=1.33.0)", "simple-salesforce (>=1.0.0)", "slack-sdk (>=3.0.0)", "smbprotocol (>=1.5.0)", "snowflake-connector-python (>=2.7.8)", "snowflake-sqlalchemy (>=1.1.0)", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-design (>=0.5.0)", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "spython (>=0.0.56)", "sqlalchemy-bigquery (>=1.2.1)", "sqlalchemy-drill (>=1.1.0)", "sqlalchemy-redshift (>=0.8.6)", "sqlalchemy-spanner (>=1.6.2)", "sqlparse (>=0.4.2)", "sshtunnel (>=0.3.2)", "statsd (>=3.3.0)", "tableauserverclient", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "time-machine", "towncrier", "trino (>=0.318.0)", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-aiofiles", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "vertica-python (>=0.5.1)", "virtualenv", "watchtower (>=2.0.1,<4)", "weaviate-client (>=3.24.2)", "wheel", "yamllint", "yandexcloud (>=0.228.0)", "zenpy (>=2.0.24)"]
+devel-ci = ["PyGithub (!=1.58)", "PyOpenSSL", "adal (>=1.2.7)", "adlfs (>=2023.10.0)", "aiobotocore (>=2.1.1)", "aiofiles (>=23.2.0)", "aiohttp", "aiohttp (>=3.6.3,<4)", "aioresponses", "alibabacloud-adb20211201 (>=1.0.0)", "alibabacloud-tea-openapi (>=0.3.7)", "amqp", "analytics-python (>=1.2.9)", "apache-airflow (>=2.6.0)", "apache-airflow (>=2.7.0)", "apache-airflow (>=2.8.0)", "apache-airflow-providers-airbyte", "apache-airflow-providers-alibaba", "apache-airflow-providers-amazon", "apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-spark", "apache-airflow-providers-apprise", "apache-airflow-providers-arangodb", "apache-airflow-providers-asana", "apache-airflow-providers-atlassian-jira", "apache-airflow-providers-celery", "apache-airflow-providers-cloudant", "apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-cohere", "apache-airflow-providers-common-io", "apache-airflow-providers-common-sql", "apache-airflow-providers-databricks", "apache-airflow-providers-datadog", "apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dingding", "apache-airflow-providers-discord", "apache-airflow-providers-docker", "apache-airflow-providers-elasticsearch", "apache-airflow-providers-exasol", "apache-airflow-providers-facebook", "apache-airflow-providers-ftp", "apache-airflow-providers-github", "apache-airflow-providers-google", "apache-airflow-providers-grpc", "apache-airflow-providers-hashicorp", "apache-airflow-providers-http", "apache-airflow-providers-imap", "apache-airflow-providers-influxdb", "apache-airflow-providers-jdbc", "apache-airflow-providers-jenkins", "apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-mongo", "apache-airflow-providers-mysql", "apache-airflow-providers-neo4j", "apache-airflow-providers-odbc", "apache-airflow-providers-openai", "apache-airflow-providers-openfaas", "apache-airflow-providers-openlineage", "apache-airflow-providers-opensearch", "apache-airflow-providers-opsgenie", "apache-airflow-providers-oracle", "apache-airflow-providers-pagerduty", "apache-airflow-providers-papermill", "apache-airflow-providers-pgvector", "apache-airflow-providers-pinecone", "apache-airflow-providers-postgres", "apache-airflow-providers-presto", "apache-airflow-providers-redis", "apache-airflow-providers-salesforce", "apache-airflow-providers-samba", "apache-airflow-providers-segment", "apache-airflow-providers-sendgrid", "apache-airflow-providers-sftp", "apache-airflow-providers-singularity", "apache-airflow-providers-slack", "apache-airflow-providers-smtp", "apache-airflow-providers-snowflake", "apache-airflow-providers-sqlite", "apache-airflow-providers-ssh", "apache-airflow-providers-tableau", "apache-airflow-providers-tabular", "apache-airflow-providers-telegram", "apache-airflow-providers-trino", "apache-airflow-providers-vertica", "apache-airflow-providers-weaviate", "apache-airflow-providers-yandex", "apache-airflow-providers-zendesk", "apache-beam (>=2.47.0)", "apprise", "asana (>=0.10,<4.0.0)", "asgiref", "asgiref (>=3.5.2)", "astroid (>=2.12.3,<3.0)", "atlasclient (>=0.1.2)", "atlassian-python-api (>=1.14.2)", "attrs (>=22.2)", "authlib (>=1.0.0)", "aws-xray-sdk", "azure-batch (>=8.0.0)", "azure-cosmos (>=4.0.0)", "azure-datalake-store (>=0.0.45)", "azure-identity (>=1.3.1)", "azure-keyvault-secrets (>=4.1.0)", "azure-kusto-data (>=4.1.0)", "azure-mgmt-containerinstance (>=9.0.0)", "azure-mgmt-containerregistry (>=8.0.0)", "azure-mgmt-cosmosdb", "azure-mgmt-datafactory (>=2.0.0)", "azure-mgmt-datalake-store (>=0.5.0)", "azure-mgmt-resource (>=2.2.0)", "azure-mgmt-storage (>=16.0.0)", "azure-servicebus (>=7.6.1)", "azure-storage-blob (>=12.14.0)", "azure-storage-file-datalake (>=12.9.1)", "azure-storage-file-share", "azure-synapse-artifacts (>=0.17.0)", "azure-synapse-spark", "backports.zoneinfo (>=0.2.1)", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "blinker (>=1.1)", "boto3 (>=1.28.0)", "botocore (>=1.31.0)", "cassandra-driver (>=3.13.0)", "celery (>=5.3.0,!=5.3.2,!=5.3.3,<6)", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "cloudant (>=2.0)", "cohere (>=4.27)", "confluent-kafka (>=1.8.2)", "coverage (>=7.2)", "cryptography (>=2.0.0)", "databricks-sql-connector (>=2.0.0,!=2.9.0,<3.0.0)", "datadog (>=0.14.0)", "deltalake (>=0.12.0)", "dnspython (>=1.13.0)", "docker (>=5.0.3)", "docutils (<0.17.0)", "duckdb (>=0.9.0)", "elasticsearch (>=8.10,<9)", "eralchemy2", "eventlet (>=0.33.3)", "facebook-business (>=6.0.2)", "filelock", "flask-appbuilder[oauth] (==4.3.10)", "flask-bcrypt (>=0.7.1)", "flower (>=1.0.0)", "gcloud-aio-auth (>=4.0.0,<5.0.0)", "gcloud-aio-bigquery (>=6.1.2)", "gcloud-aio-storage", "gcsfs (>=2023.10.0)", "gevent (>=0.13)", "gitpython", "google-ads (>=22.1.0)", "google-api-core (>=2.11.0)", "google-api-python-client (>=1.6.0)", "google-auth (>=1.0.0)", "google-auth (>=1.0.0,<3.0.0)", "google-auth-httplib2 (>=0.0.1)", "google-cloud-aiplatform (>=1.22.1)", "google-cloud-automl (>=2.12.0)", "google-cloud-batch (>=0.13.0)", "google-cloud-bigquery-datatransfer (>=3.13.0)", "google-cloud-bigtable (>=2.17.0)", "google-cloud-build (>=3.22.0)", "google-cloud-compute (>=1.10.0)", "google-cloud-container (>=2.17.4)", "google-cloud-datacatalog (>=3.11.1)", "google-cloud-dataflow-client (>=0.8.6)", "google-cloud-dataform (>=0.5.0)", "google-cloud-dataplex (>=1.10.0)", "google-cloud-dataproc (>=5.8.0)", "google-cloud-dataproc-metastore (>=1.12.0)", "google-cloud-dlp (>=3.12.0)", "google-cloud-kms (>=2.15.0)", "google-cloud-language (>=2.9.0)", "google-cloud-logging (>=3.5.0)", "google-cloud-memcache (>=1.7.0)", "google-cloud-monitoring (>=2.18.0)", "google-cloud-orchestration-airflow (>=1.10.0)", "google-cloud-os-login (>=2.9.1)", "google-cloud-pubsub (>=2.19.0)", "google-cloud-redis (>=2.12.0)", "google-cloud-run (>=0.9.0)", "google-cloud-secret-manager (>=2.16.0)", "google-cloud-spanner (>=3.11.1)", "google-cloud-speech (>=2.18.0)", "google-cloud-storage (>=2.7.0)", "google-cloud-storage-transfer (>=1.4.1)", "google-cloud-tasks (>=2.13.0)", "google-cloud-texttospeech (>=2.14.1)", "google-cloud-translate (>=3.11.0)", "google-cloud-videointelligence (>=2.11.0)", "google-cloud-vision (>=3.4.0)", "google-cloud-workflows (>=1.10.0)", "google-re2 (>=1.0)", "greenlet (>=0.4.9)", "grpcio (>=1.15.0)", "grpcio-gcp (>=0.2.2)", "grpcio-status", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "httpx", "hvac (>=0.10)", "impyla (>=0.18.0,<1.0)", "inflection (>=0.5.1)", "influxdb-client (>=1.19.0)", "ipdb", "ipykernel", "jaydebeapi (>=1.1.1)", "json-merge-patch (>=0.2)", "jsonpath-ng (>=1.5.3)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)", "kylinpy (>=2.6)", "ldap3 (>=2.5.1)", "looker-sdk (>=22.2.0)", "mongomock", "moto[cloudformation,glue] (>=4.2.9)", "mypy (==1.2.0)", "mypy-boto3-appflow (>=1.28.0)", "mypy-boto3-rds (>=1.28.0)", "mypy-boto3-redshift-data (>=1.28.0)", "mypy-boto3-s3 (>=1.28.0)", "mysql-connector-python (>=8.0.11)", "mysqlclient (>=1.3.6)", "neo4j (>=4.2.1)", "openai[datalib] (>=1.0)", "openlineage-integration-common (>=0.28.0)", "openlineage-python (>=0.28.0)", "opensearch-py (>=2.2.0)", "opentelemetry-exporter-prometheus", "opsgenie-sdk (>=2.1.5)", "oracledb (>=1.0.0)", "oss2 (>=2.14.0)", "pandas (>=0.17.1)", "pandas-gbq", "papermill[all] (>=1.2.1)", "paramiko (>=2.6.0)", "paramiko (>=2.8.0)", "pdpyras (>=4.1.2)", "pgvector (>=0.2.3)", "pinecone-client (>=2.2.4)", "pinotdb (>0.4.7)", "pipdeptree", "plyvel", "pre-commit", "presto-python-client (>=0.8.4)", "proto-plus (>=1.19.6)", "psycopg2-binary (>=2.8.0)", "pyarrow (>=9.0.0)", "pyarrow-hotfix", "pydruid (>=0.4.1)", "pyexasol (>=0.5.1)", "pygithub", "pyhive[hive-pure-sasl] (>=0.7.0)", "pyiceberg (>=0.5.0)", "pykerberos (>=1.1.13)", "pymongo (>=3.6.0)", "pymssql (>=2.1.8)", "pyodbc", "pypsrp (>=0.8.0)", "pyspark", "pytest (>=7.1)", "pytest-asyncio (!=0.23.0,!=0.23.1)", "pytest-cov", "pytest-httpx", "pytest-icdiff", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python-arango (>=7.3.2)", "python-dotenv (>=0.21.0)", "python-jenkins (>=1.0.0)", "python-ldap", "python-telegram-bot (>=20.0.0)", "python3-saml (>=1.16.0)", "pywinrm", "pywinrm (>=0.4)", "redis (>=4.5.2,!=4.5.5,<5.0.0)", "redshift-connector (>=2.0.888)", "requests (>=2.26.0)", "requests (>=2.27,<3)", "requests-kerberos (>=0.10.0)", "requests-mock", "requests-toolbelt", "restructuredtext-lint", "rich-click (>=1.7.0)", "ruff (>=0.0.219)", "s3fs (>=2023.10.0)", "scrapbook[all]", "semver", "sendgrid (>=6.0.0)", "sentry-sdk (>=1.32.0,!=1.33.0)", "simple-salesforce (>=1.0.0)", "slack-sdk (>=3.0.0)", "smbprotocol (>=1.5.0)", "snowflake-connector-python (>=2.7.8)", "snowflake-sqlalchemy (>=1.1.0)", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-design (>=0.5.0)", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "spython (>=0.0.56)", "sqlalchemy-bigquery (>=1.2.1)", "sqlalchemy-drill (>=1.1.0)", "sqlalchemy-redshift (>=0.8.6)", "sqlalchemy-spanner (>=1.6.2)", "sqlparse (>=0.4.2)", "sshtunnel (>=0.3.2)", "statsd (>=3.3.0)", "tableauserverclient", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "time-machine", "towncrier", "trino (>=0.318.0)", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-aiofiles", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "vertica-python (>=0.5.1)", "virtualenv", "watchtower (>=2.0.1,<4)", "weaviate-client (>=3.24.2)", "wheel", "yamllint", "yandexcloud (>=0.228.0)", "zenpy (>=2.0.24)"]
+devel-hadoop = ["aiobotocore (>=2.1.1)", "aioresponses", "apache-airflow (>=2.6.0)", "apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hive", "apache-airflow-providers-common-sql", "apache-airflow-providers-presto", "apache-airflow-providers-trino", "astroid (>=2.12.3,<3.0)", "aws-xray-sdk", "backports.zoneinfo (>=0.2.1)", "bcrypt (>=2.0.0)", "beautifulsoup4 (>=4.7.1)", "black", "blinker", "cgroupspy (>=0.2.2)", "checksumdir", "click (>=8.0)", "click (>=8.0,!=8.1.4,!=8.1.5)", "coverage (>=7.2)", "cryptography (>=2.0.0)", "deltalake (>=0.12.0)", "docutils (<0.17.0)", "duckdb (>=0.9.0)", "eralchemy2", "filelock", "flask-bcrypt (>=0.7.1)", "gitpython", "hdfs[avro,dataframe,kerberos] (>=2.0.4)", "hmsclient (>=0.1.0)", "impyla (>=0.18.0,<1.0)", "ipdb", "kubernetes (>=21.7.0,<24)", "mongomock", "moto[cloudformation,glue] (>=4.2.9)", "mypy (==1.2.0)", "mypy-boto3-appflow (>=1.28.0)", "mypy-boto3-rds (>=1.28.0)", "mypy-boto3-redshift-data (>=1.28.0)", "mypy-boto3-s3 (>=1.28.0)", "mysql-connector-python (>=8.0.11)", "mysqlclient (>=1.3.6)", "pandas (>=0.17.1)", "pipdeptree", "pre-commit", "presto-python-client (>=0.8.4)", "pyarrow (>=9.0.0)", "pyarrow-hotfix", "pygithub", "pyhive[hive-pure-sasl] (>=0.7.0)", "pyiceberg (>=0.5.0)", "pykerberos (>=1.1.13)", "pytest (>=7.1)", "pytest-asyncio (!=0.23.0,!=0.23.1)", "pytest-cov", "pytest-httpx", "pytest-icdiff", "pytest-instafail", "pytest-mock", "pytest-rerunfailures", "pytest-timeouts", "pytest-xdist", "python3-saml (>=1.16.0)", "pywinrm", "requests-kerberos (>=0.10.0)", "requests-mock", "restructuredtext-lint", "rich-click (>=1.7.0)", "ruff (>=0.0.219)", "s3fs (>=2023.10.0)", "semver", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-design (>=0.5.0)", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)", "thrift (>=0.9.2)", "thrift-sasl (>=0.2.0)", "time-machine", "towncrier", "twine", "types-Deprecated", "types-Markdown", "types-PyMySQL", "types-PyYAML", "types-aiofiles", "types-certifi", "types-croniter", "types-docutils", "types-paramiko", "types-protobuf", "types-python-dateutil", "types-python-slugify", "types-pytz", "types-redis", "types-requests", "types-setuptools", "types-tabulate", "types-termcolor", "types-toml", "wheel", "yamllint"]
dingding = ["apache-airflow-providers-dingding"]
discord = ["apache-airflow-providers-discord"]
-doc = ["astroid (>=2.12.3)", "checksumdir", "click (>=8.0,!=8.1.4,!=8.1.5)", "docutils (<0.17.0)", "eralchemy2", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)"]
+doc = ["astroid (>=2.12.3,<3.0)", "checksumdir", "click (>=8.0,!=8.1.4,!=8.1.5)", "docutils (<0.17.0)", "eralchemy2", "sphinx (>=5.2.0)", "sphinx-airflow-theme", "sphinx-argparse (>=0.1.13)", "sphinx-autoapi (>=2.0.0)", "sphinx-copybutton", "sphinx-design (>=0.5.0)", "sphinx-jinja (>=2.0)", "sphinx-rtd-theme (>=0.1.6)", "sphinxcontrib-httpdomain (>=1.7.0)", "sphinxcontrib-redoc (>=1.6.0)", "sphinxcontrib-spelling (>=7.3)"]
doc-gen = ["eralchemy2"]
docker = ["apache-airflow-providers-docker"]
druid = ["apache-airflow-providers-apache-druid"]
@@ -337,9 +348,9 @@ ftp = ["apache-airflow-providers-ftp"]
gcp = ["apache-airflow-providers-google"]
gcp-api = ["apache-airflow-providers-google"]
github = ["apache-airflow-providers-github"]
-github-enterprise = ["authlib (>=1.0.0)", "flask-appbuilder[oauth] (==4.3.3)"]
+github-enterprise = ["authlib (>=1.0.0)", "flask-appbuilder[oauth] (==4.3.10)"]
google = ["apache-airflow-providers-google"]
-google-auth = ["authlib (>=1.0.0)", "flask-appbuilder[oauth] (==4.3.3)"]
+google-auth = ["authlib (>=1.0.0)", "flask-appbuilder[oauth] (==4.3.10)"]
grpc = ["apache-airflow-providers-grpc"]
hashicorp = ["apache-airflow-providers-hashicorp"]
hdfs = ["apache-airflow-providers-apache-hdfs"]
@@ -350,7 +361,7 @@ influxdb = ["apache-airflow-providers-influxdb"]
jdbc = ["apache-airflow-providers-jdbc"]
jenkins = ["apache-airflow-providers-jenkins"]
kerberos = ["pykerberos (>=1.1.13)", "requests-kerberos (>=0.10.0)", "thrift-sasl (>=0.2.0)"]
-kubernetes = ["apache-airflow (>=2.4.0)", "apache-airflow-providers-cncf-kubernetes", "asgiref (>=3.5.2)", "cryptography (>=2.0.0)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)"]
+kubernetes = ["aiofiles (>=23.2.0)", "apache-airflow (>=2.6.0)", "apache-airflow-providers-cncf-kubernetes", "asgiref (>=3.5.2)", "cryptography (>=2.0.0)", "google-re2 (>=1.0)", "kubernetes (>=21.7.0,<24)", "kubernetes-asyncio (>=18.20.1,<25)"]
ldap = ["ldap3 (>=2.5.1)", "python-ldap"]
leveldb = ["plyvel"]
microsoft-azure = ["apache-airflow-providers-microsoft-azure"]
@@ -362,29 +373,32 @@ mssql = ["apache-airflow-providers-microsoft-mssql"]
mysql = ["apache-airflow-providers-mysql"]
neo4j = ["apache-airflow-providers-neo4j"]
odbc = ["apache-airflow-providers-odbc"]
+openai = ["apache-airflow-providers-openai"]
openfaas = ["apache-airflow-providers-openfaas"]
openlineage = ["apache-airflow-providers-openlineage"]
+opensearch = ["apache-airflow-providers-opensearch"]
opsgenie = ["apache-airflow-providers-opsgenie"]
oracle = ["apache-airflow-providers-oracle"]
otel = ["opentelemetry-exporter-prometheus"]
pagerduty = ["apache-airflow-providers-pagerduty"]
-pandas = ["pandas (>=0.17.1)", "pyarrow (>=9.0.0)"]
+pandas = ["pandas (>=0.17.1)", "pyarrow (>=9.0.0)", "pyarrow-hotfix"]
papermill = ["apache-airflow-providers-papermill"]
password = ["bcrypt (>=2.0.0)", "flask-bcrypt (>=0.7.1)"]
+pgvector = ["apache-airflow-providers-pgvector"]
+pinecone = ["apache-airflow-providers-pinecone"]
pinot = ["apache-airflow-providers-apache-pinot"]
-plexus = ["apache-airflow-providers-plexus"]
postgres = ["apache-airflow-providers-postgres"]
presto = ["apache-airflow-providers-presto"]
-qds = ["apache-airflow-providers-qubole"]
-qubole = ["apache-airflow-providers-qubole"]
rabbitmq = ["amqp"]
redis = ["apache-airflow-providers-redis"]
s3 = ["apache-airflow-providers-amazon"]
+s3fs = ["s3fs (>=2023.10.0)"]
salesforce = ["apache-airflow-providers-salesforce"]
samba = ["apache-airflow-providers-samba"]
+saml = ["python3-saml (>=1.16.0)"]
segment = ["apache-airflow-providers-segment"]
sendgrid = ["apache-airflow-providers-sendgrid"]
-sentry = ["blinker (>=1.1)", "sentry-sdk (>=0.8.0)"]
+sentry = ["blinker (>=1.1)", "sentry-sdk (>=1.32.0,!=1.33.0)"]
sftp = ["apache-airflow-providers-sftp"]
singularity = ["apache-airflow-providers-singularity"]
slack = ["apache-airflow-providers-slack"]
@@ -400,23 +414,25 @@ telegram = ["apache-airflow-providers-telegram"]
trino = ["apache-airflow-providers-trino"]
vertica = ["apache-airflow-providers-vertica"]
virtualenv = ["virtualenv"]
+weaviate = ["apache-airflow-providers-weaviate"]
webhdfs = ["hdfs[avro,dataframe,kerberos] (>=2.0.4)"]
winrm = ["apache-airflow-providers-microsoft-winrm"]
+yandex = ["apache-airflow-providers-yandex"]
zendesk = ["apache-airflow-providers-zendesk"]
[[package]]
name = "apache-airflow-providers-common-sql"
-version = "1.7.0"
+version = "1.8.0"
description = "Provider for Apache Airflow. Implements apache-airflow-providers-common-sql package"
optional = false
python-versions = "~=3.8"
files = [
- {file = "apache-airflow-providers-common-sql-1.7.0.tar.gz", hash = "sha256:dfead1b6e874d176c476779d3089431dd066d3a1c2348fb5aebddd8afe0da458"},
- {file = "apache_airflow_providers_common_sql-1.7.0-py3-none-any.whl", hash = "sha256:6b3c27f99be524091d91e22e5d5075cb7b5b8cd7a763906271f38c72da947db2"},
+ {file = "apache-airflow-providers-common-sql-1.8.0.tar.gz", hash = "sha256:4d8d99f33f7b5a3e313ef12c5a2f10d1612477ed2e784d0ffb721447e076e3f7"},
+ {file = "apache_airflow_providers_common_sql-1.8.0-py3-none-any.whl", hash = "sha256:45117fa38f5a2e83cdb9a8d3bdfdbd602bfdc7a894d087b26e6ebb94df79ec32"},
]
[package.dependencies]
-apache-airflow = ">=2.4.0"
+apache-airflow = ">=2.5.0"
sqlparse = ">=0.4.2"
[package.extras]
@@ -425,46 +441,48 @@ pandas = ["pandas (>=0.17.1)"]
[[package]]
name = "apache-airflow-providers-ftp"
-version = "3.5.0"
+version = "3.6.0"
description = "Provider for Apache Airflow. Implements apache-airflow-providers-ftp package"
optional = false
python-versions = "~=3.8"
files = [
- {file = "apache-airflow-providers-ftp-3.5.0.tar.gz", hash = "sha256:7afc424242c309adf48138edbbba33536152fcbb8c09ee70bbb6ba932c323831"},
- {file = "apache_airflow_providers_ftp-3.5.0-py3-none-any.whl", hash = "sha256:87a8c86d8c5a7a7adbf99a1d88628ac17e658ad134b53ac5e885aa0d192159b6"},
+ {file = "apache-airflow-providers-ftp-3.6.0.tar.gz", hash = "sha256:160f12e9f78ffbcdca4bdffbac93c1f04641fd3f1f7d236c7bfe79cd0a68d14b"},
+ {file = "apache_airflow_providers_ftp-3.6.0-py3-none-any.whl", hash = "sha256:03264207293710c3821f5ccd548c5e89a3c5ca7562bc4ff629e6f73d112a71a4"},
]
[package.dependencies]
-apache-airflow = ">=2.4.0"
+apache-airflow = ">=2.5.0"
[package.extras]
openlineage = ["apache-airflow-providers-openlineage"]
[[package]]
name = "apache-airflow-providers-google"
-version = "10.6.0"
-description = "Provider for Apache Airflow. Implements apache-airflow-providers-google package"
+version = "10.12.0"
+description = "Provider package apache-airflow-providers-google for Apache Airflow"
optional = false
python-versions = "~=3.8"
files = [
- {file = "apache-airflow-providers-google-10.6.0.tar.gz", hash = "sha256:2d801bb5f78ad2e5416632c1b5792b818e75a0dbccd1b6305e5193decce1947a"},
- {file = "apache_airflow_providers_google-10.6.0-py3-none-any.whl", hash = "sha256:1a7741db32a4dfe5b7721c4ed1d52632476cb1e5da19ccaea4c907019114c0a1"},
+ {file = "apache_airflow_providers_google-10.12.0-py3-none-any.whl", hash = "sha256:a79c845382e672eab30757dfcd62cee8de5ac766e2d38558e1eb3e5fc1b00990"},
+ {file = "apache_airflow_providers_google-10.12.0.tar.gz", hash = "sha256:cedfd906b054036c2d0de40b9ecfa70d45828945b47313c37e9722ba275a9028"},
]
[package.dependencies]
-apache-airflow = ">=2.4.0"
-apache-airflow-providers-common-sql = ">=1.3.1"
+apache-airflow = ">=2.5.0"
+apache-airflow-providers-common-sql = ">=1.7.2"
asgiref = ">=3.5.2"
gcloud-aio-auth = ">=4.0.0,<5.0.0"
gcloud-aio-bigquery = ">=6.1.2"
gcloud-aio-storage = "*"
-google-ads = ">=21.2.0"
+gcsfs = ">=2023.9.2"
+google-ads = ">=22.1.0"
google-api-core = ">=2.11.0"
google-api-python-client = ">=1.6.0"
google-auth = ">=1.0.0"
google-auth-httplib2 = ">=0.0.1"
google-cloud-aiplatform = ">=1.22.1"
google-cloud-automl = ">=2.11.0"
+google-cloud-batch = ">=0.13.0"
google-cloud-bigquery-datatransfer = ">=3.11.0"
google-cloud-bigtable = ">=2.17.0"
google-cloud-build = ">=3.13.0"
@@ -474,7 +492,7 @@ google-cloud-datacatalog = ">=3.11.1"
google-cloud-dataflow-client = ">=0.8.2"
google-cloud-dataform = ">=0.5.0"
google-cloud-dataplex = ">=1.4.2"
-google-cloud-dataproc = ">=5.4.0"
+google-cloud-dataproc = ">=5.5.0"
google-cloud-dataproc-metastore = ">=1.12.0"
google-cloud-dlp = ">=3.12.0"
google-cloud-kms = ">=2.15.0"
@@ -486,6 +504,7 @@ google-cloud-orchestration-airflow = ">=1.7.0"
google-cloud-os-login = ">=2.9.1"
google-cloud-pubsub = ">=2.15.0"
google-cloud-redis = ">=2.12.0"
+google-cloud-run = ">=0.9.0"
google-cloud-secret-manager = ">=2.16.0"
google-cloud-spanner = ">=3.11.1"
google-cloud-speech = ">=2.18.0"
@@ -530,49 +549,49 @@ trino = ["apache-airflow-providers-trino"]
[[package]]
name = "apache-airflow-providers-http"
-version = "4.5.0"
+version = "4.6.0"
description = "Provider for Apache Airflow. Implements apache-airflow-providers-http package"
optional = false
python-versions = "~=3.8"
files = [
- {file = "apache-airflow-providers-http-4.5.0.tar.gz", hash = "sha256:bdbccab003e6be2375d5b44fb86569047c8e15f364ad7ab82e95d3207526ada0"},
- {file = "apache_airflow_providers_http-4.5.0-py3-none-any.whl", hash = "sha256:3f0d6f64911ca55bfc73eb9a3b5b8eeec0434e9ee37cd3dd7ee17a11a24c968e"},
+ {file = "apache-airflow-providers-http-4.6.0.tar.gz", hash = "sha256:c9b08782031daa8c18ba62c2c8ae687659968d636fbf6b9fbed488d1fe4f0162"},
+ {file = "apache_airflow_providers_http-4.6.0-py3-none-any.whl", hash = "sha256:ca3cf6c209cb27144fd4d676ee5feef96a1ed67002f13bf4a8b74d859ef8b56c"},
]
[package.dependencies]
aiohttp = "*"
-apache-airflow = ">=2.4.0"
+apache-airflow = ">=2.5.0"
asgiref = "*"
requests = ">=2.26.0"
requests-toolbelt = "*"
[[package]]
name = "apache-airflow-providers-imap"
-version = "3.3.0"
+version = "3.4.0"
description = "Provider for Apache Airflow. Implements apache-airflow-providers-imap package"
optional = false
python-versions = "~=3.8"
files = [
- {file = "apache-airflow-providers-imap-3.3.0.tar.gz", hash = "sha256:8c32f7bcb6df6807ed40d0df573f663dd922ff2a226fe4042b82d42afd8b0e0d"},
- {file = "apache_airflow_providers_imap-3.3.0-py3-none-any.whl", hash = "sha256:2085946878ca81eb724afcf5f279cb0d1e2954c5f558b471ff542bfa06cedb2a"},
+ {file = "apache-airflow-providers-imap-3.4.0.tar.gz", hash = "sha256:347f78efa0e1353f90be78244fad0136d7c0cb1af25b9a3ba296d4e31fb53f6c"},
+ {file = "apache_airflow_providers_imap-3.4.0-py3-none-any.whl", hash = "sha256:4972793b0dbb25d5372fe1bf174329958075985c0beca013459ec89fcbbca620"},
]
[package.dependencies]
-apache-airflow = ">=2.4.0"
+apache-airflow = ">=2.5.0"
[[package]]
name = "apache-airflow-providers-sqlite"
-version = "3.4.3"
+version = "3.5.0"
description = "Provider for Apache Airflow. Implements apache-airflow-providers-sqlite package"
optional = false
python-versions = "~=3.8"
files = [
- {file = "apache-airflow-providers-sqlite-3.4.3.tar.gz", hash = "sha256:347d2db03eaa5ea9fef414666565ffa5e849935cbc30e37237edcaa822b5ced8"},
- {file = "apache_airflow_providers_sqlite-3.4.3-py3-none-any.whl", hash = "sha256:4ffa6a50f0ea1b4e51240b657dfec3fb026c87bdfa71af908a56461df6a6f2e0"},
+ {file = "apache-airflow-providers-sqlite-3.5.0.tar.gz", hash = "sha256:6f47c25d7fb026fa8b8b4dc8edfee1491998255048255625716fceaae2c67024"},
+ {file = "apache_airflow_providers_sqlite-3.5.0-py3-none-any.whl", hash = "sha256:7baba67c9ddf75b31d8197e22ca491c2e1cf9e4c6306c1788c150b5457c3a182"},
]
[package.dependencies]
-apache-airflow = ">=2.4.0"
+apache-airflow = ">=2.5.0"
apache-airflow-providers-common-sql = ">=1.3.1"
[package.extras]
@@ -602,6 +621,17 @@ tests = ["PyYAML (>=3.10)", "marshmallow (>=3.13.0)", "openapi-spec-validator (<
validation = ["openapi-spec-validator (<0.5)", "prance[osv] (>=0.11)"]
yaml = ["PyYAML (>=3.10)"]
+[[package]]
+name = "appdirs"
+version = "1.4.4"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+optional = false
+python-versions = "*"
+files = [
+ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
+ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
+]
+
[[package]]
name = "appnope"
version = "0.1.3"
@@ -615,13 +645,13 @@ files = [
[[package]]
name = "argcomplete"
-version = "3.1.1"
+version = "3.1.2"
description = "Bash tab completion for argparse"
optional = false
python-versions = ">=3.6"
files = [
- {file = "argcomplete-3.1.1-py3-none-any.whl", hash = "sha256:35fa893a88deea85ea7b20d241100e64516d6af6d7b0ae2bed1d263d26f70948"},
- {file = "argcomplete-3.1.1.tar.gz", hash = "sha256:6c4c563f14f01440aaffa3eae13441c5db2357b5eec639abe7c0b15334627dff"},
+ {file = "argcomplete-3.1.2-py3-none-any.whl", hash = "sha256:d97c036d12a752d1079f190bc1521c545b941fda89ad85d15afa909b4d1b9a99"},
+ {file = "argcomplete-3.1.2.tar.gz", hash = "sha256:d5d1e5efd41435260b8f85673b74ea2e883affcbec9f4230c582689e8e78251b"},
]
[package.extras]
@@ -646,30 +676,31 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"]
[[package]]
name = "asttokens"
-version = "2.2.1"
+version = "2.4.1"
description = "Annotate AST trees with source code positions"
optional = false
python-versions = "*"
files = [
- {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"},
- {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"},
+ {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"},
+ {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"},
]
[package.dependencies]
-six = "*"
+six = ">=1.12.0"
[package.extras]
-test = ["astroid", "pytest"]
+astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
+test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
[[package]]
name = "async-timeout"
-version = "4.0.2"
+version = "4.0.3"
description = "Timeout context manager for asyncio programs"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
files = [
- {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"},
- {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"},
+ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"},
+ {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"},
]
[[package]]
@@ -706,96 +737,128 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte
[[package]]
name = "avro"
-version = "1.11.1"
+version = "1.11.3"
description = "Avro is a serialization and RPC framework."
optional = false
python-versions = ">=3.6"
files = [
- {file = "avro-1.11.1.tar.gz", hash = "sha256:f123623ecc648d0e20ce14f8ed85162140c13cc4b108865d1b2529fbfa06c008"},
+ {file = "avro-1.11.3.tar.gz", hash = "sha256:3393bb5139f9cf0791d205756ce1e39a5b58586af5b153d6a3b5a199610e9d17"},
]
[package.extras]
snappy = ["python-snappy"]
zstandard = ["zstandard"]
+[[package]]
+name = "azure-common"
+version = "1.1.28"
+description = "Microsoft Azure Client Library for Python (Common)"
+optional = false
+python-versions = "*"
+files = [
+ {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"},
+ {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"},
+]
+
[[package]]
name = "azure-core"
-version = "1.26.4"
+version = "1.29.5"
description = "Microsoft Azure Core Library for Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "azure-core-1.26.4.zip", hash = "sha256:075fe06b74c3007950dd93d49440c2f3430fd9b4a5a2756ec8c79454afc989c6"},
- {file = "azure_core-1.26.4-py3-none-any.whl", hash = "sha256:d9664b4bc2675d72fba461a285ac43ae33abb2967014a955bf136d9703a2ab3c"},
+ {file = "azure-core-1.29.5.tar.gz", hash = "sha256:52983c89d394c6f881a121e5101c5fa67278ca3b1f339c8fb2ef39230c70e9ac"},
+ {file = "azure_core-1.29.5-py3-none-any.whl", hash = "sha256:0fa04b7b1f7d44a4fb8468c4093deb2ea01fdf4faddbf802ed9205615f99d68c"},
]
[package.dependencies]
requests = ">=2.18.4"
six = ">=1.11.0"
-typing-extensions = ">=4.3.0"
+typing-extensions = ">=4.6.0"
[package.extras]
aio = ["aiohttp (>=3.0)"]
[[package]]
name = "azure-identity"
-version = "1.12.0"
+version = "1.15.0"
description = "Microsoft Azure Identity Library for Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "azure-identity-1.12.0.zip", hash = "sha256:7f9b1ae7d97ea7af3f38dd09305e19ab81a1e16ab66ea186b6579d85c1ca2347"},
- {file = "azure_identity-1.12.0-py3-none-any.whl", hash = "sha256:2a58ce4a209a013e37eaccfd5937570ab99e9118b3e1acf875eed3a85d541b92"},
+ {file = "azure-identity-1.15.0.tar.gz", hash = "sha256:4c28fc246b7f9265610eb5261d65931183d019a23d4b0e99357facb2e6c227c8"},
+ {file = "azure_identity-1.15.0-py3-none-any.whl", hash = "sha256:a14b1f01c7036f11f148f22cd8c16e05035293d714458d6b44ddf534d93eb912"},
]
[package.dependencies]
-azure-core = ">=1.11.0,<2.0.0"
+azure-core = ">=1.23.0,<2.0.0"
cryptography = ">=2.5"
-msal = ">=1.12.0,<2.0.0"
+msal = ">=1.24.0,<2.0.0"
msal-extensions = ">=0.3.0,<2.0.0"
-six = ">=1.12.0"
+
+[[package]]
+name = "azure-mgmt-core"
+version = "1.4.0"
+description = "Microsoft Azure Management Core Library for Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "azure-mgmt-core-1.4.0.zip", hash = "sha256:d195208340094f98e5a6661b781cde6f6a051e79ce317caabd8ff97030a9b3ae"},
+ {file = "azure_mgmt_core-1.4.0-py3-none-any.whl", hash = "sha256:81071675f186a585555ef01816f2774d49c1c9024cb76e5720c3c0f6b337bb7d"},
+]
+
+[package.dependencies]
+azure-core = ">=1.26.2,<2.0.0"
+
+[[package]]
+name = "azure-mgmt-storage"
+version = "20.1.0"
+description = "Microsoft Azure Storage Management Client Library for Python"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "azure-mgmt-storage-20.1.0.zip", hash = "sha256:214f3fde8c91e27d53f2e654a28d15003ad3f6f15c8438a8205f0c88a48d9451"},
+ {file = "azure_mgmt_storage-20.1.0-py3-none-any.whl", hash = "sha256:afdc830329c674d96a91c963fa03ac81a4e387dfbf9f5a4e823950dc1fe95659"},
+]
+
+[package.dependencies]
+azure-common = ">=1.1,<2.0"
+azure-mgmt-core = ">=1.3.1,<2.0.0"
+msrest = ">=0.6.21"
[[package]]
name = "azure-storage-blob"
-version = "12.16.0"
+version = "12.18.3"
description = "Microsoft Azure Blob Storage Client Library for Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "azure-storage-blob-12.16.0.zip", hash = "sha256:43b45f19a518a5c6895632f263b3825ebc23574f25cc84b66e1630a6160e466f"},
- {file = "azure_storage_blob-12.16.0-py3-none-any.whl", hash = "sha256:91bb192b2a97939c4259c72373bac0f41e30810bbc853d5184f0f45904eacafd"},
+ {file = "azure-storage-blob-12.18.3.tar.gz", hash = "sha256:d8ced0deee3367fa3d4f3d1a03cd9edadf4440c0a371f503d623fa6c807554ee"},
+ {file = "azure_storage_blob-12.18.3-py3-none-any.whl", hash = "sha256:c278dde2ac41857a68d615c9f2b36d894ba877a7e84d62795603c7e79d0bb5e9"},
]
[package.dependencies]
-azure-core = ">=1.26.0,<2.0.0"
+azure-core = ">=1.28.0,<2.0.0"
cryptography = ">=2.1.4"
isodate = ">=0.6.1"
-typing-extensions = ">=4.0.1"
+typing-extensions = ">=4.3.0"
[package.extras]
-aio = ["azure-core[aio] (>=1.26.0,<2.0.0)"]
+aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"]
[[package]]
-name = "Babel"
-version = "2.12.1"
+name = "babel"
+version = "2.13.1"
description = "Internationalization utilities"
optional = false
python-versions = ">=3.7"
files = [
- {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"},
- {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"},
+ {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"},
+ {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"},
]
-[[package]]
-name = "backcall"
-version = "0.2.0"
-description = "Specifications for callback functions passed in to an API"
-optional = false
-python-versions = "*"
-files = [
- {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"},
- {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"},
-]
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
[[package]]
name = "backoff"
@@ -826,118 +889,86 @@ soupsieve = ">1.2"
html5lib = ["html5lib"]
lxml = ["lxml"]
-[[package]]
-name = "black"
-version = "22.12.0"
-description = "The uncompromising code formatter."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"},
- {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"},
- {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"},
- {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"},
- {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"},
- {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"},
- {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"},
- {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"},
- {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"},
- {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"},
- {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"},
- {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"},
-]
-
-[package.dependencies]
-click = ">=8.0.0"
-mypy-extensions = ">=0.4.3"
-pathspec = ">=0.9.0"
-platformdirs = ">=2"
-tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
-
-[package.extras]
-colorama = ["colorama (>=0.4.3)"]
-d = ["aiohttp (>=3.7.4)"]
-jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
-uvloop = ["uvloop (>=0.15.2)"]
-
[[package]]
name = "blinker"
-version = "1.6.2"
+version = "1.6.3"
description = "Fast, simple object-to-object and broadcast signaling"
optional = false
python-versions = ">=3.7"
files = [
- {file = "blinker-1.6.2-py3-none-any.whl", hash = "sha256:c3d739772abb7bc2860abf5f2ec284223d9ad5c76da018234f6f50d6f31ab1f0"},
- {file = "blinker-1.6.2.tar.gz", hash = "sha256:4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213"},
+ {file = "blinker-1.6.3-py3-none-any.whl", hash = "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa"},
+ {file = "blinker-1.6.3.tar.gz", hash = "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d"},
]
[[package]]
name = "bokeh"
-version = "1.4.0"
+version = "3.3.0"
description = "Interactive plots and applications in the browser from Python"
optional = false
-python-versions = "*"
+python-versions = ">=3.9"
files = [
- {file = "bokeh-1.4.0.tar.gz", hash = "sha256:c60d38a41a777b8147ee4134e6142cea8026b5eebf48149e370c44689869dce7"},
+ {file = "bokeh-3.3.0-py3-none-any.whl", hash = "sha256:65e36824c99fd46530c559263c6d14eabed6945370cd3beffc2eeedb62d6db6d"},
+ {file = "bokeh-3.3.0.tar.gz", hash = "sha256:cdbe268f842c139ba8fa0fb43c0c55c172c8215ec5a69a2629482c63c9d4039c"},
]
[package.dependencies]
-Jinja2 = ">=2.7"
-numpy = ">=1.7.1"
+contourpy = ">=1"
+Jinja2 = ">=2.9"
+numpy = ">=1.16"
packaging = ">=16.8"
-pillow = ">=4.0"
-python-dateutil = ">=2.1"
+pandas = ">=1.2"
+pillow = ">=7.1.0"
PyYAML = ">=3.10"
-six = ">=1.5.2"
-tornado = ">=4.3"
+tornado = ">=5.1"
+xyzservices = ">=2021.09.1"
[[package]]
name = "boto3"
-version = "1.26.115"
+version = "1.28.75"
description = "The AWS SDK for Python"
optional = false
python-versions = ">= 3.7"
files = [
- {file = "boto3-1.26.115-py3-none-any.whl", hash = "sha256:deb53ad15ff0e75ae0be6d7115a2d34e4bafb0541484485f0feb61dabdfb5513"},
- {file = "boto3-1.26.115.tar.gz", hash = "sha256:2272a060005bf8299f7342cbf1344304eb44b7060cddba6784f676e3bc737bb8"},
+ {file = "boto3-1.28.75-py3-none-any.whl", hash = "sha256:b959decd588982bc919bfcbebc7916926b05003a0093e7f2845362da4f5dd9fc"},
+ {file = "boto3-1.28.75.tar.gz", hash = "sha256:63d772a784e8e35ee51974eb1c20dff5faa51b007d22c5647783f18966bf4042"},
]
[package.dependencies]
-botocore = ">=1.29.115,<1.30.0"
+botocore = ">=1.31.75,<1.32.0"
jmespath = ">=0.7.1,<2.0.0"
-s3transfer = ">=0.6.0,<0.7.0"
+s3transfer = ">=0.7.0,<0.8.0"
[package.extras]
crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.29.115"
+version = "1.31.75"
description = "Low-level, data-driven core of boto 3."
optional = false
python-versions = ">= 3.7"
files = [
- {file = "botocore-1.29.115-py3-none-any.whl", hash = "sha256:dff327977d7c9f98f2dc54b51b8f70326952dd50ae23b885fdfa8bfeec014b76"},
- {file = "botocore-1.29.115.tar.gz", hash = "sha256:58eee8cf8f4f3e515df29f6dc535dd86ed3f4cea40999c5bc74640ff40bdc71f"},
+ {file = "botocore-1.31.75-py3-none-any.whl", hash = "sha256:fa078c4aa9a5777b3ede756540e62fec551e13d39cf7abf9a37bb81981496d68"},
+ {file = "botocore-1.31.75.tar.gz", hash = "sha256:d704ea9867b2227de0350bc2a5ca2543349e164ecb5d15edbfacbb05f2056482"},
]
[package.dependencies]
jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
-urllib3 = ">=1.25.4,<1.27"
+urllib3 = {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""}
[package.extras]
-crt = ["awscrt (==0.16.9)"]
+crt = ["awscrt (==0.16.26)"]
[[package]]
name = "bracex"
-version = "2.3.post1"
+version = "2.4"
description = "Bash style brace expander."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "bracex-2.3.post1-py3-none-any.whl", hash = "sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73"},
- {file = "bracex-2.3.post1.tar.gz", hash = "sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693"},
+ {file = "bracex-2.4-py3-none-any.whl", hash = "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418"},
+ {file = "bracex-2.4.tar.gz", hash = "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb"},
]
[[package]]
@@ -953,13 +984,13 @@ files = [
[[package]]
name = "cachetools"
-version = "5.3.0"
+version = "5.3.2"
description = "Extensible memoizing collections and decorators"
optional = false
-python-versions = "~=3.7"
+python-versions = ">=3.7"
files = [
- {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"},
- {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"},
+ {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"},
+ {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"},
]
[[package]]
@@ -989,86 +1020,74 @@ ujson = ["ujson (>=5.4.0,<6.0.0)"]
[[package]]
name = "certifi"
-version = "2022.12.7"
+version = "2023.7.22"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
- {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
+ {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
+ {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
]
[[package]]
name = "cffi"
-version = "1.15.1"
+version = "1.16.0"
description = "Foreign Function Interface for Python calling C code."
optional = false
-python-versions = "*"
+python-versions = ">=3.8"
files = [
- {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
- {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"},
- {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"},
- {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"},
- {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"},
- {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"},
- {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"},
- {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"},
- {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"},
- {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"},
- {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"},
- {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"},
- {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"},
- {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"},
- {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"},
- {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"},
- {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"},
- {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"},
- {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"},
- {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"},
- {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"},
- {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"},
- {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"},
- {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"},
- {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"},
- {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"},
- {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"},
- {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"},
- {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"},
- {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"},
- {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"},
- {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"},
- {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"},
- {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"},
- {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"},
+ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
+ {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
+ {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
+ {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
+ {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
+ {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
+ {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
+ {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
+ {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
+ {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
+ {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
+ {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
+ {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
+ {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
+ {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
]
[package.dependencies]
@@ -1076,119 +1095,134 @@ pycparser = "*"
[[package]]
name = "cfgv"
-version = "3.3.1"
+version = "3.4.0"
description = "Validate configuration and produce human readable error messages."
optional = false
-python-versions = ">=3.6.1"
+python-versions = ">=3.8"
files = [
- {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"},
- {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
+ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"},
+ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
]
[[package]]
name = "chardet"
-version = "5.2.0"
-description = "Universal encoding detector for Python 3"
+version = "4.0.0"
+description = "Universal encoding detector for Python 2 and 3"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
- {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"},
- {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"},
+ {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
+ {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
]
[[package]]
name = "charset-normalizer"
-version = "3.1.0"
+version = "3.3.1"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7.0"
files = [
- {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"},
- {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"},
- {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"},
- {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"},
- {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"},
- {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"},
- {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"},
+ {file = "charset-normalizer-3.3.1.tar.gz", hash = "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-win32.whl", hash = "sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f"},
+ {file = "charset_normalizer-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-win32.whl", hash = "sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8"},
+ {file = "charset_normalizer-3.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-win32.whl", hash = "sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61"},
+ {file = "charset_normalizer-3.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-win32.whl", hash = "sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9"},
+ {file = "charset_normalizer-3.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-win32.whl", hash = "sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb"},
+ {file = "charset_normalizer-3.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-win32.whl", hash = "sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4"},
+ {file = "charset_normalizer-3.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727"},
+ {file = "charset_normalizer-3.3.1-py3-none-any.whl", hash = "sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708"},
]
[[package]]
name = "click"
-version = "8.1.3"
+version = "8.1.7"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.7"
files = [
- {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
- {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
+ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+ {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
]
[package.dependencies]
@@ -1236,17 +1270,17 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
[[package]]
name = "comm"
-version = "0.1.3"
+version = "0.1.4"
description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
optional = false
python-versions = ">=3.6"
files = [
- {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"},
- {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"},
+ {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"},
+ {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"},
]
[package.dependencies]
-traitlets = ">=5.3"
+traitlets = ">=4"
[package.extras]
lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"]
@@ -1310,64 +1344,136 @@ flask = ["flask (>=1.0.4,<3)", "itsdangerous (>=0.24)"]
swagger-ui = ["swagger-ui-bundle (>=0.0.2,<0.1)"]
tests = ["MarkupSafe (>=0.23)", "aiohttp (>=2.3.10,<4)", "aiohttp-jinja2 (>=0.14.0,<2)", "aiohttp-remotes", "decorator (>=5,<6)", "flask (>=1.0.4,<3)", "itsdangerous (>=0.24)", "pytest (>=6,<7)", "pytest-aiohttp", "pytest-cov (>=2,<3)", "swagger-ui-bundle (>=0.0.2,<0.1)", "testfixtures (>=6,<7)"]
+[[package]]
+name = "contourpy"
+version = "1.1.1"
+description = "Python library for calculating contours of 2D quadrilateral grids"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"},
+ {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"},
+ {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"},
+ {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"},
+ {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"},
+ {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"},
+ {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"},
+ {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"},
+ {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"},
+ {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"},
+ {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"},
+ {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"},
+ {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"},
+ {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"},
+ {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"},
+ {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"},
+ {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"},
+ {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"},
+ {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"},
+ {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"},
+ {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"},
+ {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"},
+ {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"},
+ {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"},
+ {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"},
+ {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"},
+ {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"},
+ {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"},
+ {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"},
+ {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"},
+ {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"},
+ {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"},
+ {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"},
+ {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"},
+ {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"},
+ {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"},
+ {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"},
+ {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"},
+ {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"},
+ {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"},
+ {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"},
+ {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"},
+ {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"},
+ {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"},
+ {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"},
+ {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"},
+ {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"},
+ {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"},
+ {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"},
+ {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"},
+ {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"},
+ {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"},
+]
+
+[package.dependencies]
+numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""}
+
+[package.extras]
+bokeh = ["bokeh", "selenium"]
+docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"]
+mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"]
+test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
+test-no-images = ["pytest", "pytest-cov", "wurlitzer"]
+
[[package]]
name = "coverage"
-version = "7.2.3"
+version = "7.3.2"
description = "Code coverage measurement for Python"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "coverage-7.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e58c0d41d336569d63d1b113bd573db8363bc4146f39444125b7f8060e4e04f5"},
- {file = "coverage-7.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:344e714bd0fe921fc72d97404ebbdbf9127bac0ca1ff66d7b79efc143cf7c0c4"},
- {file = "coverage-7.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:974bc90d6f6c1e59ceb1516ab00cf1cdfbb2e555795d49fa9571d611f449bcb2"},
- {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0743b0035d4b0e32bc1df5de70fba3059662ace5b9a2a86a9f894cfe66569013"},
- {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d0391fb4cfc171ce40437f67eb050a340fdbd0f9f49d6353a387f1b7f9dd4fa"},
- {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a42e1eff0ca9a7cb7dc9ecda41dfc7cbc17cb1d02117214be0561bd1134772b"},
- {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:be19931a8dcbe6ab464f3339966856996b12a00f9fe53f346ab3be872d03e257"},
- {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72fcae5bcac3333a4cf3b8f34eec99cea1187acd55af723bcbd559adfdcb5535"},
- {file = "coverage-7.2.3-cp310-cp310-win32.whl", hash = "sha256:aeae2aa38395b18106e552833f2a50c27ea0000122bde421c31d11ed7e6f9c91"},
- {file = "coverage-7.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:83957d349838a636e768251c7e9979e899a569794b44c3728eaebd11d848e58e"},
- {file = "coverage-7.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfd393094cd82ceb9b40df4c77976015a314b267d498268a076e940fe7be6b79"},
- {file = "coverage-7.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182eb9ac3f2b4874a1f41b78b87db20b66da6b9cdc32737fbbf4fea0c35b23fc"},
- {file = "coverage-7.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bb1e77a9a311346294621be905ea8a2c30d3ad371fc15bb72e98bfcfae532df"},
- {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0f34363e2634deffd390a0fef1aa99168ae9ed2af01af4a1f5865e362f8623"},
- {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55416d7385774285b6e2a5feca0af9652f7f444a4fa3d29d8ab052fafef9d00d"},
- {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:06ddd9c0249a0546997fdda5a30fbcb40f23926df0a874a60a8a185bc3a87d93"},
- {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fff5aaa6becf2c6a1699ae6a39e2e6fb0672c2d42eca8eb0cafa91cf2e9bd312"},
- {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ea53151d87c52e98133eb8ac78f1206498c015849662ca8dc246255265d9c3c4"},
- {file = "coverage-7.2.3-cp311-cp311-win32.whl", hash = "sha256:8f6c930fd70d91ddee53194e93029e3ef2aabe26725aa3c2753df057e296b925"},
- {file = "coverage-7.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:fa546d66639d69aa967bf08156eb8c9d0cd6f6de84be9e8c9819f52ad499c910"},
- {file = "coverage-7.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2317d5ed777bf5a033e83d4f1389fd4ef045763141d8f10eb09a7035cee774c"},
- {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be9824c1c874b73b96288c6d3de793bf7f3a597770205068c6163ea1f326e8b9"},
- {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c3b2803e730dc2797a017335827e9da6da0e84c745ce0f552e66400abdfb9a1"},
- {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f69770f5ca1994cb32c38965e95f57504d3aea96b6c024624fdd5bb1aa494a1"},
- {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1127b16220f7bfb3f1049ed4a62d26d81970a723544e8252db0efde853268e21"},
- {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:aa784405f0c640940595fa0f14064d8e84aff0b0f762fa18393e2760a2cf5841"},
- {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3146b8e16fa60427e03884301bf8209221f5761ac754ee6b267642a2fd354c48"},
- {file = "coverage-7.2.3-cp37-cp37m-win32.whl", hash = "sha256:1fd78b911aea9cec3b7e1e2622c8018d51c0d2bbcf8faaf53c2497eb114911c1"},
- {file = "coverage-7.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f3736a5d34e091b0a611964c6262fd68ca4363df56185902528f0b75dbb9c1f"},
- {file = "coverage-7.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:981b4df72c93e3bc04478153df516d385317628bd9c10be699c93c26ddcca8ab"},
- {file = "coverage-7.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0045f8f23a5fb30b2eb3b8a83664d8dc4fb58faddf8155d7109166adb9f2040"},
- {file = "coverage-7.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f760073fcf8f3d6933178d67754f4f2d4e924e321f4bb0dcef0424ca0215eba1"},
- {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c86bd45d1659b1ae3d0ba1909326b03598affbc9ed71520e0ff8c31a993ad911"},
- {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:172db976ae6327ed4728e2507daf8a4de73c7cc89796483e0a9198fd2e47b462"},
- {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d2a3a6146fe9319926e1d477842ca2a63fe99af5ae690b1f5c11e6af074a6b5c"},
- {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f649dd53833b495c3ebd04d6eec58479454a1784987af8afb77540d6c1767abd"},
- {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c4ed4e9f3b123aa403ab424430b426a1992e6f4c8fd3cb56ea520446e04d152"},
- {file = "coverage-7.2.3-cp38-cp38-win32.whl", hash = "sha256:eb0edc3ce9760d2f21637766c3aa04822030e7451981ce569a1b3456b7053f22"},
- {file = "coverage-7.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:63cdeaac4ae85a179a8d6bc09b77b564c096250d759eed343a89d91bce8b6367"},
- {file = "coverage-7.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20d1a2a76bb4eb00e4d36b9699f9b7aba93271c9c29220ad4c6a9581a0320235"},
- {file = "coverage-7.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ea748802cc0de4de92ef8244dd84ffd793bd2e7be784cd8394d557a3c751e21"},
- {file = "coverage-7.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21b154aba06df42e4b96fc915512ab39595105f6c483991287021ed95776d934"},
- {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd214917cabdd6f673a29d708574e9fbdb892cb77eb426d0eae3490d95ca7859"},
- {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2e58e45fe53fab81f85474e5d4d226eeab0f27b45aa062856c89389da2f0d9"},
- {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87ecc7c9a1a9f912e306997ffee020297ccb5ea388421fe62a2a02747e4d5539"},
- {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:387065e420aed3c71b61af7e82c7b6bc1c592f7e3c7a66e9f78dd178699da4fe"},
- {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ea3f5bc91d7d457da7d48c7a732beaf79d0c8131df3ab278e6bba6297e23c6c4"},
- {file = "coverage-7.2.3-cp39-cp39-win32.whl", hash = "sha256:ae7863a1d8db6a014b6f2ff9c1582ab1aad55a6d25bac19710a8df68921b6e30"},
- {file = "coverage-7.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:3f04becd4fcda03c0160d0da9c8f0c246bc78f2f7af0feea1ec0930e7c93fa4a"},
- {file = "coverage-7.2.3-pp37.pp38.pp39-none-any.whl", hash = "sha256:965ee3e782c7892befc25575fa171b521d33798132692df428a09efacaffe8d0"},
- {file = "coverage-7.2.3.tar.gz", hash = "sha256:d298c2815fa4891edd9abe5ad6e6cb4207104c7dd9fd13aea3fdebf6f9b91259"},
+ {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"},
+ {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"},
+ {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"},
+ {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"},
+ {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"},
+ {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"},
+ {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"},
+ {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"},
+ {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"},
+ {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"},
+ {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"},
+ {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"},
+ {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"},
+ {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"},
+ {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"},
+ {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"},
+ {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"},
+ {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"},
+ {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"},
+ {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"},
+ {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"},
+ {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"},
]
[package.dependencies]
@@ -1391,68 +1497,64 @@ dev = ["polib"]
[[package]]
name = "croniter"
-version = "1.4.1"
+version = "2.0.1"
description = "croniter provides iteration for datetime object with cron like format"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
- {file = "croniter-1.4.1-py2.py3-none-any.whl", hash = "sha256:9595da48af37ea06ec3a9f899738f1b2c1c13da3c38cea606ef7cd03ea421128"},
- {file = "croniter-1.4.1.tar.gz", hash = "sha256:1a6df60eacec3b7a0aa52a8f2ef251ae3dd2a7c7c8b9874e73e791636d55a361"},
+ {file = "croniter-2.0.1-py2.py3-none-any.whl", hash = "sha256:4cb064ce2d8f695b3b078be36ff50115cf8ac306c10a7e8653ee2a5b534673d7"},
+ {file = "croniter-2.0.1.tar.gz", hash = "sha256:d199b2ec3ea5e82988d1f72022433c5f9302b3b3ea9e6bfd6a1518f6ea5e700a"},
]
[package.dependencies]
python-dateutil = "*"
+pytz = ">2021.1"
[[package]]
name = "cryptography"
-version = "40.0.2"
+version = "38.0.4"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
optional = false
python-versions = ">=3.6"
files = [
- {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b"},
- {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440"},
- {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d"},
- {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288"},
- {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2"},
- {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b"},
- {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9"},
- {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c"},
- {file = "cryptography-40.0.2-cp36-abi3-win32.whl", hash = "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9"},
- {file = "cryptography-40.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b"},
- {file = "cryptography-40.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b"},
- {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e"},
- {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a"},
- {file = "cryptography-40.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958"},
- {file = "cryptography-40.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b"},
- {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636"},
- {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e"},
- {file = "cryptography-40.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404"},
- {file = "cryptography-40.0.2.tar.gz", hash = "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99"},
+ {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70"},
+ {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb"},
+ {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d"},
+ {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1"},
+ {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8"},
+ {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db"},
+ {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b"},
+ {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"},
+ {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00"},
+ {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0"},
+ {file = "cryptography-38.0.4-cp36-abi3-win32.whl", hash = "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744"},
+ {file = "cryptography-38.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d"},
+ {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353"},
+ {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7"},
+ {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd"},
+ {file = "cryptography-38.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2"},
+ {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b"},
+ {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6"},
+ {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876"},
+ {file = "cryptography-38.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b"},
+ {file = "cryptography-38.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285"},
+ {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b"},
+ {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083"},
+ {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee"},
+ {file = "cryptography-38.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9"},
+ {file = "cryptography-38.0.4.tar.gz", hash = "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290"},
]
[package.dependencies]
cffi = ">=1.12"
[package.extras]
-docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
+docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
-pep8test = ["black", "check-manifest", "mypy", "ruff"]
+pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
sdist = ["setuptools-rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
-test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist"]
-test-randomorder = ["pytest-randomly"]
-tox = ["tox"]
-
-[[package]]
-name = "csscompressor"
-version = "0.9.5"
-description = "A python port of YUI CSS Compressor"
-optional = false
-python-versions = "*"
-files = [
- {file = "csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05"},
-]
+test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"]
[[package]]
name = "darglint"
@@ -1484,40 +1586,40 @@ pyarrow = ">=3.0.0"
[[package]]
name = "dbldatagen"
-version = "0.3.4.post1"
+version = "0.3.5"
description = "Databricks Labs - PySpark Synthetic Data Generator"
optional = false
python-versions = ">=3.8.10"
files = [
- {file = "dbldatagen-0.3.4.post1-py3-none-any.whl", hash = "sha256:db866c493460cf609ee15e806c39d9ad6e0aa07eec51e7997b181fdbe6112494"},
- {file = "dbldatagen-0.3.4.post1.tar.gz", hash = "sha256:35df1eefeb5646da1a50504bca0c743eec9cdf7e5a407b537e535a5614c9ae72"},
+ {file = "dbldatagen-0.3.5-py3-none-any.whl", hash = "sha256:75db379c68adda518fbe5d09184ca0756255f2086d8466fbdeaba29863b98349"},
+ {file = "dbldatagen-0.3.5.tar.gz", hash = "sha256:d50dd7f2180d6f3e21a107b8759d62f9a9dd093b64833f73940d99f58723c4b4"},
]
[[package]]
name = "debugpy"
-version = "1.6.7"
+version = "1.8.0"
description = "An implementation of the Debug Adapter Protocol for Python"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"},
- {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"},
- {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"},
- {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"},
- {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"},
- {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"},
- {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"},
- {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"},
- {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"},
- {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"},
- {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"},
- {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"},
- {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"},
- {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"},
- {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"},
- {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"},
- {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"},
- {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"},
+ {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"},
+ {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"},
+ {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"},
+ {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"},
+ {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"},
+ {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"},
+ {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"},
+ {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"},
+ {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"},
+ {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"},
+ {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"},
+ {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"},
+ {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"},
+ {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"},
+ {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"},
+ {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"},
+ {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"},
+ {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"},
]
[[package]]
@@ -1532,31 +1634,49 @@ files = [
]
[[package]]
-name = "Deprecated"
-version = "1.2.13"
+name = "deprecated"
+version = "1.2.14"
description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
- {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"},
- {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"},
+ {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"},
+ {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"},
]
[package.dependencies]
wrapt = ">=1.10,<2"
[package.extras]
-dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"]
+dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"]
+
+[[package]]
+name = "deptry"
+version = "0.12.0"
+description = "A command line utility to check for unused, missing and transitive dependencies in a Python project."
+optional = false
+python-versions = ">=3.8,<4.0"
+files = [
+ {file = "deptry-0.12.0-py3-none-any.whl", hash = "sha256:69c801a6ae1b39c7b8e0daf40dbe8b75f1f161277d206dd8f921f32cd22dad91"},
+ {file = "deptry-0.12.0.tar.gz", hash = "sha256:ac3cd32d149c92a9af12f63cd9486ddd1760f0277ed0cf306c6ef0388f57ff0a"},
+]
+
+[package.dependencies]
+chardet = ">=4.0.0"
+click = ">=8.0.0,<9.0.0"
+colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""}
+pathspec = ">=0.9.0"
+tomli = {version = ">=2.0.1,<3.0.0", markers = "python_version < \"3.11\""}
[[package]]
name = "dill"
-version = "0.3.6"
-description = "serialize all of python"
+version = "0.3.7"
+description = "serialize all of Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"},
- {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"},
+ {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"},
+ {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"},
]
[package.extras]
@@ -1564,13 +1684,13 @@ graph = ["objgraph (>=1.7.2)"]
[[package]]
name = "distlib"
-version = "0.3.6"
+version = "0.3.7"
description = "Distribution utilities"
optional = false
python-versions = "*"
files = [
- {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"},
- {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"},
+ {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"},
+ {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"},
]
[[package]]
@@ -1592,6 +1712,31 @@ idna = ["idna (>=2.1,<4.0)"]
trio = ["trio (>=0.14,<0.23)"]
wmi = ["wmi (>=1.5.1,<2.0.0)"]
+[[package]]
+name = "docker-pycreds"
+version = "0.4.0"
+description = "Python bindings for the docker credentials store API"
+optional = false
+python-versions = "*"
+files = [
+ {file = "docker-pycreds-0.4.0.tar.gz", hash = "sha256:6ce3270bcaf404cc4c3e27e4b6c70d3521deae82fb508767870fdbf772d584d4"},
+ {file = "docker_pycreds-0.4.0-py2.py3-none-any.whl", hash = "sha256:7266112468627868005106ec19cd0d722702d2b7d5912a28e19b826c3d37af49"},
+]
+
+[package.dependencies]
+six = ">=1.4.0"
+
+[[package]]
+name = "docstring-parser-fork"
+version = "0.0.5"
+description = "Parse Python docstrings in reST, Google and Numpydoc format"
+optional = false
+python-versions = ">=3.6,<4.0"
+files = [
+ {file = "docstring_parser_fork-0.0.5-py3-none-any.whl", hash = "sha256:d521dea9b9cc6c60ab5569fa0c1115e3b84a83e6413266fb111a7c81cb935997"},
+ {file = "docstring_parser_fork-0.0.5.tar.gz", hash = "sha256:395ae8ee6a359e268670ebc4fe9a40dab917a94f6decd7cda8e86f9bea5c9456"},
+]
+
[[package]]
name = "docutils"
version = "0.20.1"
@@ -1603,6 +1748,17 @@ files = [
{file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"},
]
+[[package]]
+name = "dotty-dict"
+version = "1.3.1"
+description = "Dictionary wrapper for quick access to deeply nested keys."
+optional = false
+python-versions = ">=3.5,<4.0"
+files = [
+ {file = "dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f"},
+ {file = "dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15"},
+]
+
[[package]]
name = "email-validator"
version = "1.3.1"
@@ -1620,13 +1776,13 @@ idna = ">=2.0.0"
[[package]]
name = "exceptiongroup"
-version = "1.1.1"
+version = "1.1.3"
description = "Backport of PEP 654 (exception groups)"
optional = false
python-versions = ">=3.7"
files = [
- {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"},
- {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"},
+ {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"},
+ {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"},
]
[package.extras]
@@ -1648,48 +1804,49 @@ testing = ["hatch", "pre-commit", "pytest", "tox"]
[[package]]
name = "executing"
-version = "1.2.0"
+version = "2.0.1"
description = "Get the currently executing AST node of a frame, and other information"
optional = false
-python-versions = "*"
+python-versions = ">=3.5"
files = [
- {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"},
- {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"},
+ {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"},
+ {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"},
]
[package.extras]
-tests = ["asttokens", "littleutils", "pytest", "rich"]
+tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"]
[[package]]
name = "filelock"
-version = "3.12.0"
+version = "3.13.1"
description = "A platform independent file lock."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"},
- {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"},
+ {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"},
+ {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"},
]
[package.extras]
-docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"]
-testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"]
+docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"]
+testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"]
+typing = ["typing-extensions (>=4.8)"]
[[package]]
name = "flake8"
-version = "5.0.4"
+version = "6.1.0"
description = "the modular source code checker: pep8 pyflakes and co"
optional = false
-python-versions = ">=3.6.1"
+python-versions = ">=3.8.1"
files = [
- {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"},
- {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"},
+ {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"},
+ {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"},
]
[package.dependencies]
mccabe = ">=0.7.0,<0.8.0"
-pycodestyle = ">=2.9.0,<2.10.0"
-pyflakes = ">=2.5.0,<2.6.0"
+pycodestyle = ">=2.11.0,<2.12.0"
+pyflakes = ">=3.1.0,<3.2.0"
[[package]]
name = "flask"
@@ -1714,13 +1871,13 @@ dotenv = ["python-dotenv"]
[[package]]
name = "flask-appbuilder"
-version = "4.3.3"
+version = "4.3.10"
description = "Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more."
optional = false
python-versions = "~=3.7"
files = [
- {file = "Flask-AppBuilder-4.3.3.tar.gz", hash = "sha256:b420379f74788e431a2763f8d3749cc37712df682dc00a45538d85d989340768"},
- {file = "Flask_AppBuilder-4.3.3-py3-none-any.whl", hash = "sha256:7eb1904d8f61297778ebf0d0b83f1d74b154534c9e84af3bb9198cfc0f51ff05"},
+ {file = "Flask-AppBuilder-4.3.10.tar.gz", hash = "sha256:4173c878e56b81c6acac5e3c80c133f4183f43442fd944552bd9f4023f5baceb"},
+ {file = "Flask_AppBuilder-4.3.10-py3-none-any.whl", hash = "sha256:c0af506e1a68e7ee14f26a16fda829f1a14f8343654c30bdbb1351d23c545df9"},
]
[package.dependencies]
@@ -1728,7 +1885,7 @@ apispec = {version = ">=6.0.0,<7", extras = ["yaml"]}
click = ">=8,<9"
colorama = ">=0.3.9,<1"
email-validator = ">=1.0.5,<2"
-Flask = ">=2,<3"
+Flask = ">=2,<2.3.0"
Flask-Babel = ">=1,<3"
Flask-JWT-Extended = ">=4.0.0,<5.0.0"
Flask-Limiter = ">3,<4"
@@ -1743,12 +1900,14 @@ PyJWT = ">=2.0.0,<3.0.0"
python-dateutil = ">=2.3,<3"
SQLAlchemy = "<1.5"
sqlalchemy-utils = ">=0.32.21,<1"
+werkzeug = "<3"
WTForms = "<4"
[package.extras]
jmespath = ["jmespath (>=0.9.5)"]
oauth = ["Authlib (>=0.14,<2.0.0)"]
openid = ["Flask-OpenID (>=1.2.5,<2)"]
+talisman = ["flask-talisman (>=1.0.0,<2.0)"]
[[package]]
name = "flask-babel"
@@ -1772,32 +1931,32 @@ dev = ["Pallets-Sphinx-Themes", "bumpversion", "ghp-import", "pytest", "pytest-m
[[package]]
name = "flask-caching"
-version = "2.0.2"
+version = "2.1.0"
description = "Adds caching support to Flask applications."
optional = false
python-versions = ">=3.7"
files = [
- {file = "Flask-Caching-2.0.2.tar.gz", hash = "sha256:24b60c552d59a9605cc1b6a42c56cdb39a82a28dab4532bbedb9222ae54ecb4e"},
- {file = "Flask_Caching-2.0.2-py3-none-any.whl", hash = "sha256:19571f2570e9b8dd9dd9d2f49d7cbee69c14ebe8cc001100b1eb98c379dd80ad"},
+ {file = "Flask-Caching-2.1.0.tar.gz", hash = "sha256:b7500c145135836a952e3de3a80881d9654e327a29c852c9265607f5c449235c"},
+ {file = "Flask_Caching-2.1.0-py3-none-any.whl", hash = "sha256:f02645a629a8c89800d96dc8f690a574a0d49dcd66c7536badc6d362ba46b716"},
]
[package.dependencies]
cachelib = ">=0.9.0,<0.10.0"
-Flask = "<3"
+Flask = "*"
[[package]]
name = "flask-jwt-extended"
-version = "4.5.2"
+version = "4.5.3"
description = "Extended JWT integration with Flask"
optional = false
python-versions = ">=3.7,<4"
files = [
- {file = "Flask-JWT-Extended-4.5.2.tar.gz", hash = "sha256:ba56245ba43b71c8ae936784b867625dce8b9956faeedec2953222e57942fb0b"},
- {file = "Flask_JWT_Extended-4.5.2-py2.py3-none-any.whl", hash = "sha256:e0ef23d8c863746bd141046167073699e1a7b03c97169cbba70f05b8d9cd6b9e"},
+ {file = "Flask-JWT-Extended-4.5.3.tar.gz", hash = "sha256:061ef3d25ed5743babe4964ab38f36d870e6d2fd8a126bab5d77ddef8a01932b"},
+ {file = "Flask_JWT_Extended-4.5.3-py2.py3-none-any.whl", hash = "sha256:eaec42af107dcb919785a4b3766c09ffba9f286b92a8d58603933f28fd4db6a3"},
]
[package.dependencies]
-Flask = ">=2.0,<3.0"
+Flask = ">=2.0,<4.0"
PyJWT = ">=2.0,<3.0"
Werkzeug = ">=0.14"
@@ -1806,13 +1965,13 @@ asymmetric-crypto = ["cryptography (>=3.3.1)"]
[[package]]
name = "flask-limiter"
-version = "3.3.1"
+version = "3.5.0"
description = "Rate limiting for flask applications"
optional = false
python-versions = ">=3.7"
files = [
- {file = "Flask-Limiter-3.3.1.tar.gz", hash = "sha256:2b99fec0cfc44f490bd729da52bb89c5c4158f38812d0f3854c01d0a83664923"},
- {file = "Flask_Limiter-3.3.1-py3-none-any.whl", hash = "sha256:3451fb8d84f50007753b799831c57c59c1eb3432cc9754cc4b7e41a88d8bdf51"},
+ {file = "Flask-Limiter-3.5.0.tar.gz", hash = "sha256:13a3491b994c49f7cb4706587a38ca47e8162b576530472df38be68104f299c0"},
+ {file = "Flask_Limiter-3.5.0-py3-none-any.whl", hash = "sha256:dbda4174f44e6cb858c6eb75e7488186f2977dd5d33d7028ba1aabf179de1bee"},
]
[package.dependencies]
@@ -1829,13 +1988,13 @@ redis = ["limits[redis]"]
[[package]]
name = "flask-login"
-version = "0.6.2"
+version = "0.6.3"
description = "User authentication and session management for Flask."
optional = false
python-versions = ">=3.7"
files = [
- {file = "Flask-Login-0.6.2.tar.gz", hash = "sha256:c0a7baa9fdc448cdd3dd6f0939df72eec5177b2f7abe6cb82fc934d29caac9c3"},
- {file = "Flask_Login-0.6.2-py3-none-any.whl", hash = "sha256:1ef79843f5eddd0f143c2cd994c1b05ac83c0401dc6234c143495af9a939613f"},
+ {file = "Flask-Login-0.6.3.tar.gz", hash = "sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333"},
+ {file = "Flask_Login-0.6.3-py3-none-any.whl", hash = "sha256:849b25b82a436bf830a054e74214074af59097171562ab10bfa999e6b78aae5d"},
]
[package.dependencies]
@@ -1874,157 +2033,212 @@ SQLAlchemy = ">=0.8.0"
[[package]]
name = "flask-wtf"
-version = "1.1.1"
+version = "1.2.1"
description = "Form rendering, validation, and CSRF protection for Flask with WTForms."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "Flask-WTF-1.1.1.tar.gz", hash = "sha256:41c4244e9ae626d63bed42ae4785b90667b885b1535d5a4095e1f63060d12aa9"},
- {file = "Flask_WTF-1.1.1-py3-none-any.whl", hash = "sha256:7887d6f1ebb3e17bf648647422f0944c9a469d0fcf63e3b66fb9a83037e38b2c"},
+ {file = "flask_wtf-1.2.1-py3-none-any.whl", hash = "sha256:fa6793f2fb7e812e0fe9743b282118e581fb1b6c45d414b8af05e659bd653287"},
+ {file = "flask_wtf-1.2.1.tar.gz", hash = "sha256:8bb269eb9bb46b87e7c8233d7e7debdf1f8b74bf90cc1789988c29b37a97b695"},
]
[package.dependencies]
-Flask = "*"
+flask = "*"
itsdangerous = "*"
-WTForms = "*"
+wtforms = "*"
[package.extras]
email = ["email-validator"]
[[package]]
name = "frozenlist"
-version = "1.3.3"
+version = "1.4.0"
description = "A list-like structure which implements collections.abc.MutableSequence"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
+files = [
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"},
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"},
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"},
+ {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"},
+ {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"},
+ {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"},
+ {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"},
+ {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"},
+ {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"},
+ {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"},
+ {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"},
+]
+
+[[package]]
+name = "fsspec"
+version = "2023.10.0"
+description = "File-system specification"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "fsspec-2023.10.0-py3-none-any.whl", hash = "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529"},
+ {file = "fsspec-2023.10.0.tar.gz", hash = "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5"},
+]
+
+[package.extras]
+abfs = ["adlfs"]
+adl = ["adlfs"]
+arrow = ["pyarrow (>=1)"]
+dask = ["dask", "distributed"]
+devel = ["pytest", "pytest-cov"]
+dropbox = ["dropbox", "dropboxdrivefs", "requests"]
+full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"]
+fuse = ["fusepy"]
+gcs = ["gcsfs"]
+git = ["pygit2"]
+github = ["requests"]
+gs = ["gcsfs"]
+gui = ["panel"]
+hdfs = ["pyarrow (>=1)"]
+http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"]
+libarchive = ["libarchive-c"]
+oci = ["ocifs"]
+s3 = ["s3fs"]
+sftp = ["paramiko"]
+smb = ["smbprotocol"]
+ssh = ["paramiko"]
+tqdm = ["tqdm"]
+
+[[package]]
+name = "future"
+version = "0.18.3"
+description = "Clean single-source support for Python 3 and 2"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
- {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"},
- {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"},
- {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"},
- {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"},
- {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"},
- {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"},
- {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"},
- {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"},
- {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"},
- {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"},
- {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"},
- {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"},
- {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"},
- {file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"},
- {file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"},
- {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"},
- {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"},
- {file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"},
- {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"},
- {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"},
- {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"},
- {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"},
- {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"},
- {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"},
- {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"},
- {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"},
- {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"},
- {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"},
- {file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"},
- {file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"},
- {file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"},
- {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"},
- {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"},
- {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"},
- {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"},
- {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"},
- {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"},
- {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"},
- {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"},
- {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"},
- {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"},
- {file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"},
- {file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"},
- {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"},
- {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"},
- {file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"},
- {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"},
- {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"},
- {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"},
- {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"},
- {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"},
- {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"},
- {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"},
- {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"},
- {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"},
- {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"},
- {file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"},
- {file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"},
- {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"},
- {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"},
- {file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"},
- {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"},
- {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"},
- {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"},
- {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"},
- {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"},
- {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"},
- {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"},
- {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"},
- {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"},
- {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"},
- {file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"},
- {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"},
- {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"},
+ {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"},
]
[[package]]
name = "gcloud-aio-auth"
-version = "4.2.3"
+version = "4.1.5"
description = "Python Client for Google Cloud Auth"
optional = false
python-versions = ">=3.7,<4.0"
files = [
- {file = "gcloud_aio_auth-4.2.3-py3-none-any.whl", hash = "sha256:e4adadd36e35eeeb8537b926840372c3080c2f5a6909d44aa1bacbced2260bb1"},
- {file = "gcloud_aio_auth-4.2.3.tar.gz", hash = "sha256:8e12297c5b45cfc20d629b83e1233f83a1c7d5f830f24f31bc5bb8816c0cda1b"},
+ {file = "gcloud_aio_auth-4.1.5-py3-none-any.whl", hash = "sha256:606431bd670effc4b67456877747d400c4dd0d8d20bbca98c72f09041359985f"},
+ {file = "gcloud_aio_auth-4.1.5.tar.gz", hash = "sha256:12b8308f32a83b76ae04129800df8eb09e8803219c2ebabccad2364f39744f79"},
]
[package.dependencies]
aiohttp = ">=3.3.0,<4.0.0"
backoff = ">=1.0.0,<3.0.0"
-chardet = ">=2.0,<6.0"
-cryptography = ">=2.0.0,<42.0.0"
+chardet = {version = ">=2.0,<4.1", markers = "python_version >= \"3.7\""}
+cryptography = ">=2.0.0,<39.0.0"
+future = ">=0.17.0,<0.19.0"
pyjwt = ">=1.5.3,<3.0.0"
-setuptools = ">=66.0.0,<67.0.0"
+six = ">=1.11.0,<2.0.0"
[[package]]
name = "gcloud-aio-bigquery"
-version = "6.3.0"
+version = "7.0.0"
description = "Python Client for Google Cloud BigQuery"
optional = false
-python-versions = ">=3.7,<4.0"
+python-versions = ">=3.8,<4.0"
files = [
- {file = "gcloud_aio_bigquery-6.3.0-py3-none-any.whl", hash = "sha256:9479b2c8c3267b6fa13e31cd3b42544ba2a5fbac5af9cc30d7cf3cbe461166c4"},
- {file = "gcloud_aio_bigquery-6.3.0.tar.gz", hash = "sha256:4448e8a8ba0aefbb12e75c80a7a2de415e31307816815b698c7957af7e406477"},
+ {file = "gcloud_aio_bigquery-7.0.0-py3-none-any.whl", hash = "sha256:188b96b16b0fdbef2a0bc15ffce3f5a930ecc36de537fcfa5794fc397506fdd8"},
+ {file = "gcloud_aio_bigquery-7.0.0.tar.gz", hash = "sha256:2cd1c7c9dcb68122ff6187f2b533941c86d954e5312d942c8107aac4d20ea2ec"},
]
[package.dependencies]
-gcloud-aio-auth = ">=3.1.0,<5.0.0"
-setuptools = ">=66.0.0,<67.0.0"
+gcloud-aio-auth = ">=3.1.0,<6.0.0"
[[package]]
name = "gcloud-aio-storage"
-version = "8.3.0"
+version = "9.0.0"
description = "Python Client for Google Cloud Storage"
optional = false
-python-versions = ">=3.7,<4.0"
+python-versions = ">=3.8,<4.0"
files = [
- {file = "gcloud_aio_storage-8.3.0-py3-none-any.whl", hash = "sha256:6154eb9fe7e254f1ee3312cf3cc464109da8fce979815b183727b60347daec59"},
- {file = "gcloud_aio_storage-8.3.0.tar.gz", hash = "sha256:222ccd4cfbbd7d4a5e5bfa8010235f70b65697e68f25bf68fb3e570dceac78e8"},
+ {file = "gcloud_aio_storage-9.0.0-py3-none-any.whl", hash = "sha256:223583018b0ad68f22201593970c638e00fb86f40d9bb9187b17910a02ab118c"},
+ {file = "gcloud_aio_storage-9.0.0.tar.gz", hash = "sha256:99e6d30c65809ceafe059d496dbf10a4186edb1850fe9634988e096966503046"},
]
[package.dependencies]
aiofiles = ">=0.6.0,<24.0.0"
-gcloud-aio-auth = ">=3.6.0,<5.0.0"
-pyasn1-modules = ">=0.2.1,<0.3.0"
+gcloud-aio-auth = ">=3.6.0,<6.0.0"
+pyasn1-modules = ">=0.2.1,<0.4.0"
rsa = ">=3.1.4,<5.0.0"
-setuptools = ">=66.0.0,<67.0.0"
+
+[[package]]
+name = "gcsfs"
+version = "2023.10.0"
+description = "Convenient Filesystem interface over GCS"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "gcsfs-2023.10.0-py2.py3-none-any.whl", hash = "sha256:f3ad41652a596ca56e44778e041f428d022add3eff62b97a47302014affd270f"},
+ {file = "gcsfs-2023.10.0.tar.gz", hash = "sha256:1915e6d766faad9a295e815b13c59966b925a274108b8a56f673623bf4aef83f"},
+]
+
+[package.dependencies]
+aiohttp = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1"
+decorator = ">4.1.2"
+fsspec = "2023.10.0"
+google-auth = ">=1.2"
+google-auth-oauthlib = "*"
+google-cloud-storage = "*"
+requests = "*"
+
+[package.extras]
+crc = ["crcmod"]
+gcsfuse = ["fusepy"]
[[package]]
name = "ghp-import"
@@ -2045,41 +2259,58 @@ dev = ["flake8", "markdown", "twine", "wheel"]
[[package]]
name = "gitdb"
-version = "4.0.10"
+version = "4.0.11"
description = "Git Object Database"
optional = false
python-versions = ">=3.7"
files = [
- {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"},
- {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"},
+ {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"},
+ {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"},
]
[package.dependencies]
smmap = ">=3.0.1,<6"
[[package]]
-name = "GitPython"
-version = "3.1.31"
+name = "gitpython"
+version = "3.1.40"
description = "GitPython is a Python library used to interact with Git repositories"
optional = false
python-versions = ">=3.7"
files = [
- {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"},
- {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"},
+ {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"},
+ {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"},
]
[package.dependencies]
gitdb = ">=4.0.1,<5"
+[package.extras]
+test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"]
+
+[[package]]
+name = "google"
+version = "3.0.0"
+description = "Python bindings to the Google search engine."
+optional = false
+python-versions = "*"
+files = [
+ {file = "google-3.0.0-py2.py3-none-any.whl", hash = "sha256:889cf695f84e4ae2c55fbc0cfdaf4c1e729417fa52ab1db0485202ba173e4935"},
+ {file = "google-3.0.0.tar.gz", hash = "sha256:143530122ee5130509ad5e989f0512f7cb218b2d4eddbafbad40fd10e8d8ccbe"},
+]
+
+[package.dependencies]
+beautifulsoup4 = "*"
+
[[package]]
name = "google-ads"
-version = "21.3.0"
+version = "22.1.0"
description = "Client library for the Google Ads API"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.7, <3.12"
files = [
- {file = "google-ads-21.3.0.tar.gz", hash = "sha256:bd4fcb6bd5e55bace413e889e82012d48578aa28f7b4d726c86e2d594c753c6c"},
- {file = "google_ads-21.3.0-py3-none-any.whl", hash = "sha256:961943fc737941a38f1a826681f7974448df7c60e6c8db2ac7168b26d66738a7"},
+ {file = "google-ads-22.1.0.tar.gz", hash = "sha256:cfab38b40eb8424a4a514823bd8b911a57ef55dd64e2112cfa46a70d8090de98"},
+ {file = "google_ads-22.1.0-py3-none-any.whl", hash = "sha256:6fdd3fb635678fbb3c8f87271afc81f0e139882b83b48505160fc4daacf33ad0"},
]
[package.dependencies]
@@ -2089,7 +2320,7 @@ googleapis-common-protos = ">=1.56.0,<2.0.0"
grpcio = ">=1.38.1,<2.0.0"
grpcio-status = ">=1.38.1,<2.0.0"
proto-plus = ">=1.19.6,<2.0.0"
-protobuf = ">=3.12.0,<3.18.dev0 || >=3.20.dev0,<5.0.0dev"
+protobuf = ">=3.12.0,<3.18.dev0 || >=3.20.dev0,<5.0.0"
PyYAML = ">=5.1,<7.0"
setuptools = ">=40.3.0"
@@ -2098,37 +2329,37 @@ tests = ["nox (>=2020.12.31,<2022.6)"]
[[package]]
name = "google-api-core"
-version = "2.11.0"
+version = "2.12.0"
description = "Google API client core library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-api-core-2.11.0.tar.gz", hash = "sha256:4b9bb5d5a380a0befa0573b302651b8a9a89262c1730e37bf423cec511804c22"},
- {file = "google_api_core-2.11.0-py3-none-any.whl", hash = "sha256:ce222e27b0de0d7bc63eb043b956996d6dccab14cc3b690aaea91c9cc99dc16e"},
+ {file = "google-api-core-2.12.0.tar.gz", hash = "sha256:c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553"},
+ {file = "google_api_core-2.12.0-py3-none-any.whl", hash = "sha256:ec6054f7d64ad13b41e43d96f735acbd763b0f3b695dabaa2d579673f6a6e160"},
]
[package.dependencies]
-google-auth = ">=2.14.1,<3.0dev"
-googleapis-common-protos = ">=1.56.2,<2.0dev"
+google-auth = ">=2.14.1,<3.0.dev0"
+googleapis-common-protos = ">=1.56.2,<2.0.dev0"
grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}
-grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}
-protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
-requests = ">=2.18.0,<3.0.0dev"
+grpcio-status = {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0"
+requests = ">=2.18.0,<3.0.0.dev0"
[package.extras]
-grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)", "grpcio-status (>=1.49.1,<2.0dev)"]
-grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"]
-grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"]
+grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"]
+grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"]
+grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"]
[[package]]
name = "google-api-python-client"
-version = "2.97.0"
+version = "2.106.0"
description = "Google API Client Library for Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-api-python-client-2.97.0.tar.gz", hash = "sha256:48277291894876a1ca7ed4127e055e81f81e6343ced1b544a7200ae2c119dcd7"},
- {file = "google_api_python_client-2.97.0-py2.py3-none-any.whl", hash = "sha256:5215f4cd577753fc4192ccfbe0bb8b55d4bb5fd68fa6268ac5cf271b6305de31"},
+ {file = "google-api-python-client-2.106.0.tar.gz", hash = "sha256:f6a3862be2f6e5e0536d7bd47b5af3f24ac0b9147c76c830cafb3329d71d5724"},
+ {file = "google_api_python_client-2.106.0-py2.py3-none-any.whl", hash = "sha256:c47c0dae5dd20aa43e4ea184566fe59d0c8fd0b86dd223b29040d8ea4f7ed6ea"},
]
[package.dependencies]
@@ -2140,53 +2371,51 @@ uritemplate = ">=3.0.1,<5"
[[package]]
name = "google-auth"
-version = "2.17.3"
+version = "2.23.4"
description = "Google Authentication Library"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">=3.7"
files = [
- {file = "google-auth-2.17.3.tar.gz", hash = "sha256:ce311e2bc58b130fddf316df57c9b3943c2a7b4f6ec31de9663a9333e4064efc"},
- {file = "google_auth-2.17.3-py2.py3-none-any.whl", hash = "sha256:f586b274d3eb7bd932ea424b1c702a30e0393a2e2bc4ca3eae8263ffd8be229f"},
+ {file = "google-auth-2.23.4.tar.gz", hash = "sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3"},
+ {file = "google_auth-2.23.4-py2.py3-none-any.whl", hash = "sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2"},
]
[package.dependencies]
cachetools = ">=2.0.0,<6.0"
pyasn1-modules = ">=0.2.1"
-rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""}
-six = ">=1.9.0"
+rsa = ">=3.1.4,<5"
[package.extras]
-aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"]
+aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"]
enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"]
pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"]
reauth = ["pyu2f (>=0.1.5)"]
-requests = ["requests (>=2.20.0,<3.0.0dev)"]
+requests = ["requests (>=2.20.0,<3.0.0.dev0)"]
[[package]]
name = "google-auth-httplib2"
-version = "0.1.0"
+version = "0.1.1"
description = "Google Authentication Library: httplib2 transport"
optional = false
python-versions = "*"
files = [
- {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"},
- {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"},
+ {file = "google-auth-httplib2-0.1.1.tar.gz", hash = "sha256:c64bc555fdc6dd788ea62ecf7bccffcf497bf77244887a3f3d7a5a02f8e3fc29"},
+ {file = "google_auth_httplib2-0.1.1-py2.py3-none-any.whl", hash = "sha256:42c50900b8e4dcdf8222364d1f0efe32b8421fb6ed72f2613f12f75cc933478c"},
]
[package.dependencies]
google-auth = "*"
-httplib2 = ">=0.15.0"
-six = "*"
+httplib2 = ">=0.19.0"
[[package]]
name = "google-auth-oauthlib"
-version = "1.0.0"
+version = "0.8.0"
description = "Google Authentication Library"
optional = false
python-versions = ">=3.6"
files = [
- {file = "google-auth-oauthlib-1.0.0.tar.gz", hash = "sha256:e375064964820b47221a7e1b7ee1fd77051b6323c3f9e3e19785f78ab67ecfc5"},
- {file = "google_auth_oauthlib-1.0.0-py2.py3-none-any.whl", hash = "sha256:95880ca704928c300f48194d1770cf5b1462835b6e49db61445a520f793fd5fb"},
+ {file = "google-auth-oauthlib-0.8.0.tar.gz", hash = "sha256:81056a310fb1c4a3e5a7e1a443e1eb96593c6bbc55b26c0261e4d3295d3e6593"},
+ {file = "google_auth_oauthlib-0.8.0-py2.py3-none-any.whl", hash = "sha256:40cc612a13c3336d5433e94e2adb42a0c88f6feb6c55769e44500fc70043a576"},
]
[package.dependencies]
@@ -2198,13 +2427,13 @@ tool = ["click (>=6.0.0)"]
[[package]]
name = "google-cloud-aiplatform"
-version = "1.30.1"
+version = "1.36.0"
description = "Vertex AI API client library"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "google-cloud-aiplatform-1.30.1.tar.gz", hash = "sha256:7552a6b2e66d7a9ff3c4b2bb95b0e9c182e7475dfb35d6347e9299f78779135a"},
- {file = "google_cloud_aiplatform-1.30.1-py2.py3-none-any.whl", hash = "sha256:ab1bbd4cf83cf583b7dea7e53421ad076f18b63e93cb22fb53c03176d5aa9258"},
+ {file = "google-cloud-aiplatform-1.36.0.tar.gz", hash = "sha256:c35eb179fa3107c262024a63bb4a3dc1887678424a0b9f49f0da3f5179896186"},
+ {file = "google_cloud_aiplatform-1.36.0-py2.py3-none-any.whl", hash = "sha256:06adb1605208a9bdbadd8c4deeaeb6511a7f59220ef606e2d95ccc1da705ebda"},
]
[package.dependencies]
@@ -2215,33 +2444,35 @@ google-cloud-storage = ">=1.32.0,<3.0.0dev"
packaging = ">=14.3"
proto-plus = ">=1.22.0,<2.0.0dev"
protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
-shapely = "<2.0.0"
+shapely = "<3.0.0dev"
[package.extras]
autologging = ["mlflow (>=1.27.0,<=2.1.1)"]
cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"]
-datasets = ["pyarrow (>=3.0.0,<8.0dev)"]
+datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)"]
endpoint = ["requests (>=2.28.1)"]
-full = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.76.0)", "google-cloud-bigquery-storage", "google-vizier (==0.0.4)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pyyaml (>=5.3,<7)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"]
+full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.11)", "google-vizier (==0.0.4)", "google-vizier (>=0.0.14)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"]
lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"]
metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"]
-pipelines = ["pyyaml (>=5.3,<7)"]
-prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.76.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"]
+pipelines = ["pyyaml (==5.3.1)"]
+prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.103.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"]
+preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"]
private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"]
+ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)"]
tensorboard = ["tensorflow (>=2.3.0,<3.0.0dev)"]
-testing = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.76.0)", "google-cloud-bigquery-storage", "google-vizier (==0.0.4)", "grpcio-testing", "ipython", "kfp", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3,<7)", "requests (>=2.28.1)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"]
-vizier = ["google-vizier (==0.0.4)"]
+testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.11)", "google-vizier (==0.0.4)", "google-vizier (>=0.0.14)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "ipython", "kfp", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<=2.12.0)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost", "xgboost-ray"]
+vizier = ["google-vizier (==0.0.11)", "google-vizier (==0.0.4)", "google-vizier (>=0.0.14)", "google-vizier (>=0.1.6)"]
xai = ["tensorflow (>=2.3.0,<3.0.0dev)"]
[[package]]
name = "google-cloud-appengine-logging"
-version = "1.3.1"
+version = "1.3.2"
description = "Google Cloud Appengine Logging API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-appengine-logging-1.3.1.tar.gz", hash = "sha256:b3f5f797d6bacc60654de21901902f8a7878f7168d76be5d47c7775fe0c3e0a8"},
- {file = "google_cloud_appengine_logging-1.3.1-py2.py3-none-any.whl", hash = "sha256:8b1ec202de1ad4dbe5e40076af0324e179695b8dc4735c7dcedf6297786e761f"},
+ {file = "google-cloud-appengine-logging-1.3.2.tar.gz", hash = "sha256:a2989fca0e88463b56432aa821e64b81c3d171ee37b84771189b48e8b97cd496"},
+ {file = "google_cloud_appengine_logging-1.3.2-py2.py3-none-any.whl", hash = "sha256:6ac6261567b56611f6891fa650f76db8a48d528762e5c2a09230b41d82ee2be0"},
]
[package.dependencies]
@@ -2266,13 +2497,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4
[[package]]
name = "google-cloud-automl"
-version = "2.11.2"
+version = "2.11.3"
description = "Google Cloud Automl API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-automl-2.11.2.tar.gz", hash = "sha256:c3893339ef1acfacdc30ba0d61b7e4bc2e40ab9cc26d2370ebe3c761990466a2"},
- {file = "google_cloud_automl-2.11.2-py2.py3-none-any.whl", hash = "sha256:4111ae06852d858e2ab6fa4520cc8b32bcee8a0c3fbf87f418eb998b7a7e11a1"},
+ {file = "google-cloud-automl-2.11.3.tar.gz", hash = "sha256:55ca909fbc36b13a431ca7e78b0930b045c36bc60857e1b58e56cf3aef0d565d"},
+ {file = "google_cloud_automl-2.11.3-py2.py3-none-any.whl", hash = "sha256:9f92c4ca4b0e0f6f31fb0676a6a9e6afd5685fd484bdc9c67beba052bbab2352"},
]
[package.dependencies]
@@ -2285,15 +2516,31 @@ libcst = ["libcst (>=0.2.5)"]
pandas = ["pandas (>=1.0.5)"]
storage = ["google-cloud-storage (>=1.18.0,<3.0.0dev)"]
+[[package]]
+name = "google-cloud-batch"
+version = "0.17.2"
+description = "Google Cloud Batch API client library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "google-cloud-batch-0.17.2.tar.gz", hash = "sha256:381ac83d18b46354cb5c51d33dbfcede62b039f3f13960ac9691cb4178f3c5b7"},
+ {file = "google_cloud_batch-0.17.2-py2.py3-none-any.whl", hash = "sha256:c614f17d47095fd0b41e3f7de2e66f6ec5f1168d682b8338dfa3c18803234be0"},
+]
+
+[package.dependencies]
+google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
+proto-plus = ">=1.22.0,<2.0.0dev"
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
+
[[package]]
name = "google-cloud-bigquery"
-version = "3.11.4"
+version = "3.13.0"
description = "Google BigQuery API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-bigquery-3.11.4.tar.gz", hash = "sha256:697df117241a2283bcbb93b21e10badc14e51c9a90800d2a7e1a3e1c7d842974"},
- {file = "google_cloud_bigquery-3.11.4-py2.py3-none-any.whl", hash = "sha256:5fa7897743a0ed949ade25a0942fc9e7557d8fce307c6f8a76d1b604cf27f1b1"},
+ {file = "google-cloud-bigquery-3.13.0.tar.gz", hash = "sha256:794ccfc93ccb0e0ad689442f896f9c82de56da0fe18a195531bb37096c2657d6"},
+ {file = "google_cloud_bigquery-3.13.0-py2.py3-none-any.whl", hash = "sha256:eda3dbcff676e17962c54e5224e415b55e4f6833a5c896c6c8902b69e7dba4b4"},
]
[package.dependencies]
@@ -2308,9 +2555,9 @@ python-dateutil = ">=2.7.2,<3.0dev"
requests = ">=2.21.0,<3.0.0dev"
[package.extras]
-all = ["Shapely (>=1.8.4,<2.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"]
+all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"]
bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"]
-geopandas = ["Shapely (>=1.8.4,<2.0dev)", "geopandas (>=0.9.0,<1.0dev)"]
+geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"]
ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"]
ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"]
opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"]
@@ -2319,13 +2566,13 @@ tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"]
[[package]]
name = "google-cloud-bigquery-datatransfer"
-version = "3.12.0"
+version = "3.12.1"
description = "Google Cloud Bigquery Datatransfer API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-bigquery-datatransfer-3.12.0.tar.gz", hash = "sha256:e63c5c37af453ee019ef1881701bb9f9a13eab8394f4e94cfa2f5b77abcc9c92"},
- {file = "google_cloud_bigquery_datatransfer-3.12.0-py2.py3-none-any.whl", hash = "sha256:13d48e9fd20b493dbbbc184a4c7ae5f1a2ff0ebc2b63c19c16cb7cf0b30acc2a"},
+ {file = "google-cloud-bigquery-datatransfer-3.12.1.tar.gz", hash = "sha256:b845a74081ace32c9bbae93382b02a69db8560a356f61fd6a2e5f63334958148"},
+ {file = "google_cloud_bigquery_datatransfer-3.12.1-py2.py3-none-any.whl", hash = "sha256:cb24e51155fb221cfc09f2a5b047f2dc8dbb1d106b84463c1300af0a6dcc7bae"},
]
[package.dependencies]
@@ -2377,13 +2624,13 @@ libcst = ["libcst (>=0.2.5)"]
[[package]]
name = "google-cloud-build"
-version = "3.20.0"
+version = "3.20.1"
description = "Google Cloud Build API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-build-3.20.0.tar.gz", hash = "sha256:82db53e2bebcfd2777b9a5b4c5805e13dc57b4cf781d5b5e3cf0a9894d1ae133"},
- {file = "google_cloud_build-3.20.0-py2.py3-none-any.whl", hash = "sha256:877ec8c8e75a8ee32273bb2c8f0427fced54ba51dfe9d49f49c90ef9ff50a135"},
+ {file = "google-cloud-build-3.20.1.tar.gz", hash = "sha256:4588bfe36638c54dfb752f6cf6a0b216acd2f98c1dacde9e5e820e0c1b1eba1b"},
+ {file = "google_cloud_build-3.20.1-py2.py3-none-any.whl", hash = "sha256:b11112cea6b700902d2a52deee27fba172d9244dbc2ba5d51bbfcd146b5f28f4"},
]
[package.dependencies]
@@ -2394,13 +2641,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-compute"
-version = "1.14.0"
+version = "1.14.1"
description = "Google Cloud Compute API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-compute-1.14.0.tar.gz", hash = "sha256:02d1a3cfe82127efd623ca696af905d89e87aaaeb9a5062159bdcf3747fd8f66"},
- {file = "google_cloud_compute-1.14.0-py2.py3-none-any.whl", hash = "sha256:601e6b9f26bae44a4551249daf933e34def4bea95a007294dacc197b3102b52d"},
+ {file = "google-cloud-compute-1.14.1.tar.gz", hash = "sha256:acd987647d7c826aa97b4418141c740ead5e8811d3349315f2f89a30c01c7f4b"},
+ {file = "google_cloud_compute-1.14.1-py2.py3-none-any.whl", hash = "sha256:b40d6aeeb2c5ce373675c869f1404a1bc19b9763b746ad8f2d91ed1148893d6f"},
]
[package.dependencies]
@@ -2410,13 +2657,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-container"
-version = "2.30.0"
+version = "2.32.0"
description = "Google Cloud Container API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-container-2.30.0.tar.gz", hash = "sha256:891ebe0377a4471977cc0d4aec331ac387723308ccff2c61ffbb4e1fffe6c176"},
- {file = "google_cloud_container-2.30.0-py2.py3-none-any.whl", hash = "sha256:85bc6ade6cf6fa3afe28c473903f309ae815cbe6a6b2421482cc161989ba6e7d"},
+ {file = "google-cloud-container-2.32.0.tar.gz", hash = "sha256:694fb8da77963653e1c70fa60928b4a11faf8e1f1580a39025053a3e1bcce6de"},
+ {file = "google_cloud_container-2.32.0-py2.py3-none-any.whl", hash = "sha256:a5555c6c19679332086859838fbaee468cb206e5e76365bb5027d5305a2c5bf4"},
]
[package.dependencies]
@@ -2426,13 +2673,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-core"
-version = "2.3.2"
+version = "2.3.3"
description = "Google Cloud API client core library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-core-2.3.2.tar.gz", hash = "sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a"},
- {file = "google_cloud_core-2.3.2-py2.py3-none-any.whl", hash = "sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe"},
+ {file = "google-cloud-core-2.3.3.tar.gz", hash = "sha256:37b80273c8d7eee1ae816b3a20ae43585ea50506cb0e60f3cf5be5f87f1373cb"},
+ {file = "google_cloud_core-2.3.3-py2.py3-none-any.whl", hash = "sha256:fbd11cad3e98a7e5b0343dc07cb1039a5ffd7a5bb96e1f1e27cee4bda4a90863"},
]
[package.dependencies]
@@ -2444,13 +2691,13 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"]
[[package]]
name = "google-cloud-datacatalog"
-version = "3.15.0"
+version = "3.16.0"
description = "Google Cloud Datacatalog API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-datacatalog-3.15.0.tar.gz", hash = "sha256:4d8fc7ad30e5a3a72ae746d269156e672b75ad3841f413e2416d114bdf20228f"},
- {file = "google_cloud_datacatalog-3.15.0-py2.py3-none-any.whl", hash = "sha256:746db6f44db63b64a2c10b8cfbfcc64351464fb8ea22e1b9bbb9377f21bf8b7d"},
+ {file = "google-cloud-datacatalog-3.16.0.tar.gz", hash = "sha256:703e414396248fa98474bbab9ea962f4c96a3caf1184c903bfc9453d274b0ea2"},
+ {file = "google_cloud_datacatalog-3.16.0-py2.py3-none-any.whl", hash = "sha256:06f43501ce57742f394508bca6b0eb14e6dd5aa7e0d51cc0fd9d259295d46c9f"},
]
[package.dependencies]
@@ -2461,13 +2708,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-dataflow-client"
-version = "0.8.4"
+version = "0.8.5"
description = "Google Cloud Dataflow Client API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-dataflow-client-0.8.4.tar.gz", hash = "sha256:638a7a97cefa0f1f1918eb1403e2c34f9efe748d71787f7d668fd15993b92400"},
- {file = "google_cloud_dataflow_client-0.8.4-py2.py3-none-any.whl", hash = "sha256:80f95f8ba02cc1515c2856fc1d2959504b2e119622644499da1d4faa96161714"},
+ {file = "google-cloud-dataflow-client-0.8.5.tar.gz", hash = "sha256:076a8218df39a0ab2d0d46bba1c696a35c62af70ed19360f1e83d0b41ec558c4"},
+ {file = "google_cloud_dataflow_client-0.8.5-py2.py3-none-any.whl", hash = "sha256:39b22249b4ce3b00c1960424a0e1e9d5f78452e0d634242eceb5809f4e21773e"},
]
[package.dependencies]
@@ -2477,13 +2724,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-dataform"
-version = "0.5.2"
+version = "0.5.3"
description = "Google Cloud Dataform API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-dataform-0.5.2.tar.gz", hash = "sha256:baceb314b2e3da37cef55540fdc60f9cba2f55a3ec2e312f2f9f17aa8e0adbb8"},
- {file = "google_cloud_dataform-0.5.2-py2.py3-none-any.whl", hash = "sha256:6a41801f48ef578be23fb0f89038e6328d3c3a27b65e1bf0175146696d16d368"},
+ {file = "google-cloud-dataform-0.5.3.tar.gz", hash = "sha256:89ed0dce20ce34f74cb038d614dd71191451fb70ea60888b6dbfc4265cea7a48"},
+ {file = "google_cloud_dataform-0.5.3-py2.py3-none-any.whl", hash = "sha256:aa265043272b0b925fe5e40ea928a4793e1e30f37fff4169a38dfde9d7e32dc9"},
]
[package.dependencies]
@@ -2494,13 +2741,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-dataplex"
-version = "1.6.2"
+version = "1.7.0"
description = "Google Cloud Dataplex API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-dataplex-1.6.2.tar.gz", hash = "sha256:1e39ce05c33b0905139f768123eb7216de88f909eb59d3b7a2036c811009ca34"},
- {file = "google_cloud_dataplex-1.6.2-py2.py3-none-any.whl", hash = "sha256:8e5ac11741bdfabc48aa6eff30f2809ae011add803da5f761ada48a042f4677b"},
+ {file = "google-cloud-dataplex-1.7.0.tar.gz", hash = "sha256:4de1bb230f201974ae98bc4be2b814cf741aee3069b05c88902082c06b449f1f"},
+ {file = "google_cloud_dataplex-1.7.0-py2.py3-none-any.whl", hash = "sha256:95f015b78f557e52f4723539a62fd5e8018c16abfef662e8fb0a1d9b2673f3b5"},
]
[package.dependencies]
@@ -2511,30 +2758,30 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-dataproc"
-version = "5.4.1"
+version = "5.8.0"
description = "Google Cloud Dataproc API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-dataproc-5.4.1.tar.gz", hash = "sha256:1896e14f63c121a3f1e2c221287cc7fd00650d2a73f8b38f82040ae6d5aab7bf"},
- {file = "google_cloud_dataproc-5.4.1-py2.py3-none-any.whl", hash = "sha256:dfc6db122b38330779882652b10aa85ace45547433ca4af020c4c262660a4074"},
+ {file = "google-cloud-dataproc-5.8.0.tar.gz", hash = "sha256:b03412dd63cb84dc0bb0844cd9e9a9eef40e1d0d719649659052cccf0d3e95d7"},
+ {file = "google_cloud_dataproc-5.8.0-py2.py3-none-any.whl", hash = "sha256:1b3dd086d8ee7d1055b93230338a93091e77aca167cf7e32edc0b92e8288667d"},
]
[package.dependencies]
google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev"
-proto-plus = ">=1.22.0,<2.0.0dev"
+proto-plus = ">=1.22.3,<2.0.0dev"
protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
[[package]]
name = "google-cloud-dataproc-metastore"
-version = "1.12.0"
+version = "1.13.0"
description = "Google Cloud Dataproc Metastore API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-dataproc-metastore-1.12.0.tar.gz", hash = "sha256:6d9f3fc1af822ddfa8c5471eae663cc6bdf0423fa0ca6454f66c5f04c1ce8e5f"},
- {file = "google_cloud_dataproc_metastore-1.12.0-py2.py3-none-any.whl", hash = "sha256:092d2ea6d7f3feac044980655553f3509c285f7cd4475cd71b2f0fbbbca2a634"},
+ {file = "google-cloud-dataproc-metastore-1.13.0.tar.gz", hash = "sha256:58066b89d782bcf6985afb29822fb2a1d9a67c20210c87e3a990f69e6354e52c"},
+ {file = "google_cloud_dataproc_metastore-1.13.0-py2.py3-none-any.whl", hash = "sha256:76e462a42537077ba4f9b1c4c8ec5d91d4fc4bac6d3f31a81446f50d39ef850f"},
]
[package.dependencies]
@@ -2545,13 +2792,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-dlp"
-version = "3.12.2"
+version = "3.12.3"
description = "Google Cloud Dlp API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-dlp-3.12.2.tar.gz", hash = "sha256:f806f55c3e399b73ea4342c704845521de7001127d28e8c294493d0b67363416"},
- {file = "google_cloud_dlp-3.12.2-py2.py3-none-any.whl", hash = "sha256:8985ed451dcb6113dd945a7a830ed87ba5798f45ec29928b0940dae64eb8e306"},
+ {file = "google-cloud-dlp-3.12.3.tar.gz", hash = "sha256:73880f2a8bfa60049576fb94d85698aa2367d32ac901b76278fe50b75663440b"},
+ {file = "google_cloud_dlp-3.12.3-py2.py3-none-any.whl", hash = "sha256:db263305466d0fb22b756043c8a7e1cc2842e3ed6b59fb800b9e9af63a8b0ec8"},
]
[package.dependencies]
@@ -2561,13 +2808,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-kms"
-version = "2.19.1"
+version = "2.19.2"
description = "Google Cloud Kms API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-kms-2.19.1.tar.gz", hash = "sha256:89add70a92d45c9f7700610774368e89d4046a05243150276f65182be92dcca7"},
- {file = "google_cloud_kms-2.19.1-py2.py3-none-any.whl", hash = "sha256:1275f2e7f08ee1106e094ec39f721af383814d94a8d123cf84bc0e9e0129562e"},
+ {file = "google-cloud-kms-2.19.2.tar.gz", hash = "sha256:17a5034592e85ef0031d25bbe5894bdb2d719460855980bfeb68aa4e8ffc12bd"},
+ {file = "google_cloud_kms-2.19.2-py2.py3-none-any.whl", hash = "sha256:0cc0b9d16338a46b7fc5beba7e96a88df0f836586eb8650e9acd36eb249b52d9"},
]
[package.dependencies]
@@ -2578,13 +2825,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-language"
-version = "2.11.0"
+version = "2.11.1"
description = "Google Cloud Language API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-language-2.11.0.tar.gz", hash = "sha256:95d235f503d904e8854117e928ef36ac930c24825fcb8400c3f368a908fdbe14"},
- {file = "google_cloud_language-2.11.0-py2.py3-none-any.whl", hash = "sha256:cdcc83dac47c5268140429af584844f3a913301f4195883b134d2690cde69308"},
+ {file = "google-cloud-language-2.11.1.tar.gz", hash = "sha256:5f184409f040c0c73057c2616e6bd2e86e45aeb646180d19c189df4aa3d02dba"},
+ {file = "google_cloud_language-2.11.1-py2.py3-none-any.whl", hash = "sha256:beb5dd1344a6ed00dd04b1eb05a967e7f83fc1b51471f9bd51f238f63f46f9d4"},
]
[package.dependencies]
@@ -2594,13 +2841,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-logging"
-version = "3.6.0"
+version = "3.8.0"
description = "Stackdriver Logging API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-logging-3.6.0.tar.gz", hash = "sha256:42134223956850ddd64877c88042d31f78658e7b067a5a8e3dd28236b71f3c32"},
- {file = "google_cloud_logging-3.6.0-py2.py3-none-any.whl", hash = "sha256:6beb843cb88a9bc2f6df94ce69048243ebb360ee06979f5311ea7a0ec09bd097"},
+ {file = "google-cloud-logging-3.8.0.tar.gz", hash = "sha256:fdd916e59a84aa8c02e8148d7fdd3b3b623c57b0c1ff71f43297ce8e50fc1eab"},
+ {file = "google_cloud_logging-3.8.0-py2.py3-none-any.whl", hash = "sha256:c868b276b021cf5f32b6e8356b6cb3666357d149ad0fd798076043a5ec7ed988"},
]
[package.dependencies]
@@ -2614,13 +2861,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-memcache"
-version = "1.7.2"
+version = "1.7.3"
description = "Google Cloud Memcache API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-memcache-1.7.2.tar.gz", hash = "sha256:977fd8a9b2dc042dd91acd083c91793abede48d6cfea79391bdc0d68077269bc"},
- {file = "google_cloud_memcache-1.7.2-py2.py3-none-any.whl", hash = "sha256:5e60504c1d04ca84dab6cb98ff20225ce62ace09b4264a3c1c6f61ac114a682f"},
+ {file = "google-cloud-memcache-1.7.3.tar.gz", hash = "sha256:a73f44ec5bfc398b4c9d94d5e77621c54795bcade19960242dec2cd91b854bcb"},
+ {file = "google_cloud_memcache-1.7.3-py2.py3-none-any.whl", hash = "sha256:054e2adde4e99fca6a2e3f9ef733a2159083923c0a41af51b7d5e9d38ca9de12"},
]
[package.dependencies]
@@ -2630,13 +2877,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-monitoring"
-version = "2.15.1"
+version = "2.16.0"
description = "Stackdriver Monitoring API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-monitoring-2.15.1.tar.gz", hash = "sha256:086a845a34a6e105ab8a3a4809392ea6367a65b28b7561c26101534a8705ed37"},
- {file = "google_cloud_monitoring-2.15.1-py2.py3-none-any.whl", hash = "sha256:4394e5e031f30d622a24739678ec48a45400ead94af9a6032cbff7f66194dc12"},
+ {file = "google-cloud-monitoring-2.16.0.tar.gz", hash = "sha256:3d1851009312ada5e8abf20ff761af8474b753060ab6e0b7d6ec47bc11f2b136"},
+ {file = "google_cloud_monitoring-2.16.0-py2.py3-none-any.whl", hash = "sha256:5e7a7161ca48b534e4f9b62f2e210364f7a1cde1ac21503089a0daedfa079441"},
]
[package.dependencies]
@@ -2649,13 +2896,13 @@ pandas = ["pandas (>=0.17.1)"]
[[package]]
name = "google-cloud-orchestration-airflow"
-version = "1.9.1"
+version = "1.9.2"
description = "Google Cloud Orchestration Airflow API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-orchestration-airflow-1.9.1.tar.gz", hash = "sha256:f819cbbff173100c2e452699f2c4952c78949a899274a80f8bd78ed1a9ab9e34"},
- {file = "google_cloud_orchestration_airflow-1.9.1-py2.py3-none-any.whl", hash = "sha256:939bd8b10c0bf45ab097f5d0648971f7a2e10ecf5bbdfc7d748ba21233777afb"},
+ {file = "google-cloud-orchestration-airflow-1.9.2.tar.gz", hash = "sha256:78c7cb164259c8bac9dd99ae9af9d2b4af933d3fbcd30895441479a36c5513b2"},
+ {file = "google_cloud_orchestration_airflow-1.9.2-py2.py3-none-any.whl", hash = "sha256:fb1801bd11f63c94614c0f9f7a9e1ec846ffabd487a3fa4b7ee62ff784b46d29"},
]
[package.dependencies]
@@ -2665,13 +2912,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-os-login"
-version = "2.10.0"
+version = "2.11.0"
description = "Google Cloud Os Login API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-os-login-2.10.0.tar.gz", hash = "sha256:2b9917802583c8179133213b2d36485a0e275f655cfff001241bb2c2e66398df"},
- {file = "google_cloud_os_login-2.10.0-py2.py3-none-any.whl", hash = "sha256:5176ddea571463078ea819c664774c7bb4451243459639d300ac1d6615779160"},
+ {file = "google-cloud-os-login-2.11.0.tar.gz", hash = "sha256:e3219d00b75ea44182871681985e9db3f1e38641bb84519dd85d3dbb62b97656"},
+ {file = "google_cloud_os_login-2.11.0-py2.py3-none-any.whl", hash = "sha256:1b0679d772fbef486230208a65b3a96d513b599000beca1dc8ff5bde4838607f"},
]
[package.dependencies]
@@ -2681,13 +2928,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-pubsub"
-version = "2.18.2"
+version = "2.18.4"
description = "Google Cloud Pub/Sub API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-pubsub-2.18.2.tar.gz", hash = "sha256:5b9d14249a29c0e5bc6b98c8d7c166644cc1ada830c40f009f2bcb5882f5b105"},
- {file = "google_cloud_pubsub-2.18.2-py2.py3-none-any.whl", hash = "sha256:62976041c320cb051af86d41ec027308044a554402fb0871eba462b331d275cf"},
+ {file = "google-cloud-pubsub-2.18.4.tar.gz", hash = "sha256:32eb61fd4c1dc6c842f594d69d9afa80544e3b327aa640a164eb6fb0201eaf2d"},
+ {file = "google_cloud_pubsub-2.18.4-py2.py3-none-any.whl", hash = "sha256:f32144ad9ed32331a80a2f8379a3ca7526bbc01e7bd76de2e8ab52e492d21f50"},
]
[package.dependencies]
@@ -2703,13 +2950,13 @@ libcst = ["libcst (>=0.3.10)"]
[[package]]
name = "google-cloud-redis"
-version = "2.13.1"
+version = "2.13.2"
description = "Google Cloud Redis API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-redis-2.13.1.tar.gz", hash = "sha256:52d4f5cf9ccccdcefe5e1a9cc79bbbec84bc182f0a68d3a962cb59f0196b1467"},
- {file = "google_cloud_redis-2.13.1-py2.py3-none-any.whl", hash = "sha256:4be94499fba167e5bcc6f1a9f284c72c5efc87ed839fddade3d5f4eaac29b1c9"},
+ {file = "google-cloud-redis-2.13.2.tar.gz", hash = "sha256:5c485730355d96723d64ae637f1b2264f35b57c301ec0ef2c6d30b2f06dca14e"},
+ {file = "google_cloud_redis-2.13.2-py2.py3-none-any.whl", hash = "sha256:86378e8ed1c5a1c621eb2731d734436f443dffdbbafc6cd5d24511c94d6c38bc"},
]
[package.dependencies]
@@ -2719,13 +2966,30 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-resource-manager"
-version = "1.10.3"
+version = "1.10.4"
description = "Google Cloud Resource Manager API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-resource-manager-1.10.3.tar.gz", hash = "sha256:f80efcea36f10c5a81889afe93910926e3978b4b1ceeb82f563a2fc863072d14"},
- {file = "google_cloud_resource_manager-1.10.3-py2.py3-none-any.whl", hash = "sha256:1381a4b0f522248ebe0ebd1289d8822b99c54f4e1fe03924a6e723b2ed93dd7f"},
+ {file = "google-cloud-resource-manager-1.10.4.tar.gz", hash = "sha256:456b25ddda3d4cd27488a72736bbc3af04d713ae2fe3655c01b66a339d28d679"},
+ {file = "google_cloud_resource_manager-1.10.4-py2.py3-none-any.whl", hash = "sha256:2ba56ba8e5280cd425bd63620da48b78da2cd299ece58a71f0f2ce3a32d56f99"},
+]
+
+[package.dependencies]
+google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
+grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev"
+proto-plus = ">=1.22.0,<2.0.0dev"
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
+
+[[package]]
+name = "google-cloud-run"
+version = "0.10.0"
+description = "Google Cloud Run API client library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "google-cloud-run-0.10.0.tar.gz", hash = "sha256:e597dff8da3d6e0f43bdaaa38c80933d8e81e8eac8c1b5e119812af99539d734"},
+ {file = "google_cloud_run-0.10.0-py2.py3-none-any.whl", hash = "sha256:3f3d317200e890c20e744e692d69b241ca4a25ec161f02babbc77c1df68c7a4d"},
]
[package.dependencies]
@@ -2736,13 +3000,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-secret-manager"
-version = "2.16.3"
+version = "2.16.4"
description = "Google Cloud Secret Manager API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-secret-manager-2.16.3.tar.gz", hash = "sha256:6cab5cbf1927a34c586e4af90437eea3d44ff4b41b9a82ec86fcff09a5ac26ea"},
- {file = "google_cloud_secret_manager-2.16.3-py2.py3-none-any.whl", hash = "sha256:266ab8da831b3532ca197b5a30dcde0f0504761390bb26c3397403d6ff0b8e3f"},
+ {file = "google-cloud-secret-manager-2.16.4.tar.gz", hash = "sha256:371dc72f9145af323e8a813c8e50380e6ac4bd6a5dbcd42dcf3162d8f37e5080"},
+ {file = "google_cloud_secret_manager-2.16.4-py2.py3-none-any.whl", hash = "sha256:5031c45dd84dc584d91ee0baae2bbd5df6710efe0c42719ee370a3ab62aaf618"},
]
[package.dependencies]
@@ -2776,13 +3040,13 @@ tracing = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20
[[package]]
name = "google-cloud-speech"
-version = "2.21.0"
+version = "2.21.1"
description = "Google Cloud Speech API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-speech-2.21.0.tar.gz", hash = "sha256:661c39bbb6f2b216ba56ace3b087260e9778dd19ade9efa3700adee9258009ad"},
- {file = "google_cloud_speech-2.21.0-py2.py3-none-any.whl", hash = "sha256:88e51aa35d385d7b8325c461327c5f4a19ac8ab38d92ffb0d61c4e91494a0171"},
+ {file = "google-cloud-speech-2.21.1.tar.gz", hash = "sha256:4935375eaaf18656e53e2631770b9d579e80cb4ec1b3d46dd23346f789aa016a"},
+ {file = "google_cloud_speech-2.21.1-py2.py3-none-any.whl", hash = "sha256:36089039640c5ab79cefd32af7a482043a67144d393ec752c6b57c1fdc02a95d"},
]
[package.dependencies]
@@ -2792,20 +3056,21 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-storage"
-version = "2.8.0"
+version = "2.13.0"
description = "Google Cloud Storage API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-storage-2.8.0.tar.gz", hash = "sha256:4388da1ff5bda6d729f26dbcaf1bfa020a2a52a7b91f0a8123edbda51660802c"},
- {file = "google_cloud_storage-2.8.0-py2.py3-none-any.whl", hash = "sha256:248e210c13bc109909160248af546a91cb2dabaf3d7ebbf04def9dd49f02dbb6"},
+ {file = "google-cloud-storage-2.13.0.tar.gz", hash = "sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7"},
+ {file = "google_cloud_storage-2.13.0-py2.py3-none-any.whl", hash = "sha256:ab0bf2e1780a1b74cf17fccb13788070b729f50c252f0c94ada2aae0ca95437d"},
]
[package.dependencies]
google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev"
-google-auth = ">=1.25.0,<3.0dev"
+google-auth = ">=2.23.3,<3.0dev"
google-cloud-core = ">=2.3.0,<3.0dev"
-google-resumable-media = ">=2.3.2"
+google-crc32c = ">=1.0,<2.0dev"
+google-resumable-media = ">=2.6.0"
requests = ">=2.18.0,<3.0.0dev"
[package.extras]
@@ -2813,13 +3078,13 @@ protobuf = ["protobuf (<5.0.0dev)"]
[[package]]
name = "google-cloud-storage-transfer"
-version = "1.9.1"
+version = "1.9.2"
description = "Google Cloud Storage Transfer API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-storage-transfer-1.9.1.tar.gz", hash = "sha256:5d008d1b7c82e2d2dff45383da67098d6e50a7c8dcd0983c052890f02fe6ec06"},
- {file = "google_cloud_storage_transfer-1.9.1-py2.py3-none-any.whl", hash = "sha256:18be8f4bb99cf46caa19a0440589ec94810b69df9a9d1c24e6e8b9631dfdc00c"},
+ {file = "google-cloud-storage-transfer-1.9.2.tar.gz", hash = "sha256:c36800cf425e23cca5bed51320dce6eec313b68db8dd4677be6e3b49c891207d"},
+ {file = "google_cloud_storage_transfer-1.9.2-py2.py3-none-any.whl", hash = "sha256:d30b519b57eee0d337da6d9051442337625128e950e6b487b4fd63f4942f7cb7"},
]
[package.dependencies]
@@ -2829,13 +3094,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-tasks"
-version = "2.14.1"
+version = "2.14.2"
description = "Google Cloud Tasks API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-tasks-2.14.1.tar.gz", hash = "sha256:ca1a83df7391a78592dcca751583b22c9074d0a72dc8debdb4a4687ff9958a29"},
- {file = "google_cloud_tasks-2.14.1-py2.py3-none-any.whl", hash = "sha256:b44ff8721f9a36f118892c5d45745393fba0ce0ef27fab3853e07cb5fba91a92"},
+ {file = "google-cloud-tasks-2.14.2.tar.gz", hash = "sha256:3efb280e7a635f57860a06a346131c117042e820ad483afd256800fae1b4d701"},
+ {file = "google_cloud_tasks-2.14.2-py2.py3-none-any.whl", hash = "sha256:801a671c6dbd2269179037e93490f87e2df59ddfcb59551128bab27e7dd09f94"},
]
[package.dependencies]
@@ -2846,13 +3111,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-texttospeech"
-version = "2.14.1"
+version = "2.14.2"
description = "Google Cloud Texttospeech API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-texttospeech-2.14.1.tar.gz", hash = "sha256:dd716f2a768ad67502cfd99b9925c51ffd6e16be93b410abeeffdaac190bfe81"},
- {file = "google_cloud_texttospeech-2.14.1-py2.py3-none-any.whl", hash = "sha256:883fe35e3c823ff77cc633b30ab9a93d3b5eb38ebce7eaeef6f87e8d03210e54"},
+ {file = "google-cloud-texttospeech-2.14.2.tar.gz", hash = "sha256:a23738366988faf4d265200f57c5de4312efa3d14bb434b92a6e541713f5d906"},
+ {file = "google_cloud_texttospeech-2.14.2-py2.py3-none-any.whl", hash = "sha256:3a4e7ca71a1d3f90de77170a013b37f18775858dac01c80793752b8c160d6555"},
]
[package.dependencies]
@@ -2862,30 +3127,30 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-translate"
-version = "3.12.0"
+version = "3.12.1"
description = "Google Cloud Translate API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-translate-3.12.0.tar.gz", hash = "sha256:97423c1c3bf614102f1d4278175a03c523e5b4acd648b00a3407d02302aaccd9"},
- {file = "google_cloud_translate-3.12.0-py2.py3-none-any.whl", hash = "sha256:351405a07a122280d8ae5d52797a48dcfae769e29c5ebdea2a5dedacb48d41ff"},
+ {file = "google-cloud-translate-3.12.1.tar.gz", hash = "sha256:661cb8879aa3c63a2f725a3ea68f90199bd354c95ca169cc2e83a5105987d29e"},
+ {file = "google_cloud_translate-3.12.1-py2.py3-none-any.whl", hash = "sha256:2a0f6aa398a64d7836d0f2880dfd023be0de05f8b688ac537825391014fc114a"},
]
[package.dependencies]
google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
-google-cloud-core = ">=1.3.0,<3.0.0dev"
+google-cloud-core = ">=1.4.4,<3.0.0dev"
proto-plus = ">=1.22.0,<2.0.0dev"
protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
[[package]]
name = "google-cloud-videointelligence"
-version = "2.11.3"
+version = "2.11.4"
description = "Google Cloud Videointelligence API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-videointelligence-2.11.3.tar.gz", hash = "sha256:a96a63f004c27068f45b227a66275f8a6a8c3ecd06bb581f92fa69897d5b1797"},
- {file = "google_cloud_videointelligence-2.11.3-py2.py3-none-any.whl", hash = "sha256:087867df1ec970abaff412a2c564f3b5b7418d7a9cb8699838a03728434843e1"},
+ {file = "google-cloud-videointelligence-2.11.4.tar.gz", hash = "sha256:07ace299a63f5b3d4441375634853b55ce8f90c62c6a24f8a47eb054149f6f99"},
+ {file = "google_cloud_videointelligence-2.11.4-py2.py3-none-any.whl", hash = "sha256:4d62f7b074f6f1eae4efd8697b5a93fb59b3b22f9934e383b4f6fbed69f49eb6"},
]
[package.dependencies]
@@ -2895,13 +3160,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-vision"
-version = "3.4.4"
+version = "3.4.5"
description = "Google Cloud Vision API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-vision-3.4.4.tar.gz", hash = "sha256:405744ae50852034cc47b32a9b1bae50d3fb09cd1e2160014182891ef5766695"},
- {file = "google_cloud_vision-3.4.4-py2.py3-none-any.whl", hash = "sha256:49617c2b31544095151a051839a32a8864e5e12db3169f5c63b2b23500f91665"},
+ {file = "google-cloud-vision-3.4.5.tar.gz", hash = "sha256:0df8241ab277199b919ca3837a7de85059363fea0e3d660060870be7ceffc047"},
+ {file = "google_cloud_vision-3.4.5-py2.py3-none-any.whl", hash = "sha256:4e67f5985ecbb8f7252fe47b8e26f1ac083af4c45626bae23869cf097ba9292e"},
]
[package.dependencies]
@@ -2911,13 +3176,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
[[package]]
name = "google-cloud-workflows"
-version = "1.11.0"
+version = "1.12.1"
description = "Google Cloud Workflows API client library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "google-cloud-workflows-1.11.0.tar.gz", hash = "sha256:5107561b7fe174d77cdd7a5c5c4af82378443bf55a10d058df8d94251c613fb1"},
- {file = "google_cloud_workflows-1.11.0-py2.py3-none-any.whl", hash = "sha256:cb4413e47cc7953f065d48a4cebf6e05a4776e46dc3629b5149d300df835657a"},
+ {file = "google-cloud-workflows-1.12.1.tar.gz", hash = "sha256:fad66cece6279f7be4fd919c1cc50f2a4a7ebf8bba97feaba75b9addece0b64b"},
+ {file = "google_cloud_workflows-1.12.1-py2.py3-none-any.whl", hash = "sha256:1c24dc2b7eb4d953677407a0826e2680fc03fe6dc81b75a15d38d5a452aa467f"},
]
[package.dependencies]
@@ -3061,43 +3326,151 @@ files = [
{file = "google_re2-1.1-1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c6c9f64b9724ec38da8e514f404ac64e9a6a5e8b1d7031c2dadd05c1f4c16fd"},
{file = "google_re2-1.1-1-cp39-cp39-win32.whl", hash = "sha256:d1b751b9ab9f8e2ab2a36d72b909281ce65f328c9115a1685acae1a2d1afd7a4"},
{file = "google_re2-1.1-1-cp39-cp39-win_amd64.whl", hash = "sha256:ac775c75cec7069351d201da4e0fb0cae4c1c5ebecd08fa34e1be89740c1d80b"},
+ {file = "google_re2-1.1-2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5eaefe4705b75ca5f78178a50104b689e9282f868e12f119b26b4cffc0c7ee6e"},
+ {file = "google_re2-1.1-2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:e35f2c8aabfaaa4ce6420b3cae86c0c29042b1b4f9937254347e9b985694a171"},
+ {file = "google_re2-1.1-2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:35fd189cbaaaa39c9a6a8a00164c8d9c709bacd0c231c694936879609beff516"},
+ {file = "google_re2-1.1-2-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:60475d222cebd066c80414831c8a42aa2449aab252084102ee05440896586e6a"},
+ {file = "google_re2-1.1-2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:871cb85b9b0e1784c983b5c148156b3c5314cb29ca70432dff0d163c5c08d7e5"},
+ {file = "google_re2-1.1-2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:94f4e66e34bdb8de91ec6cdf20ba4fa9fea1dfdcfb77ff1f59700d01a0243664"},
+ {file = "google_re2-1.1-2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1563577e2b720d267c4cffacc0f6a2b5c8480ea966ebdb1844fbea6602c7496f"},
+ {file = "google_re2-1.1-2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:49b7964532a801b96062d78c0222d155873968f823a546a3dbe63d73f25bb56f"},
+ {file = "google_re2-1.1-2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2362fd70eb639a75fd0187d28b4ba7b20b3088833d8ad7ffd8693d0ba159e1c2"},
+ {file = "google_re2-1.1-2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86b80719636a4e21391e20a9adf18173ee6ae2ec956726fe2ff587417b5e8ba6"},
+ {file = "google_re2-1.1-2-cp310-cp310-win32.whl", hash = "sha256:5456fba09df951fe8d1714474ed1ecda102a68ddffab0113e6c117d2e64e6f2b"},
+ {file = "google_re2-1.1-2-cp310-cp310-win_amd64.whl", hash = "sha256:2ac6936a3a60d8d9de9563e90227b3aea27068f597274ca192c999a12d8baa8f"},
+ {file = "google_re2-1.1-2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5a87b436028ec9b0f02fe19d4cbc19ef30441085cdfcdf1cce8fbe5c4bd5e9a"},
+ {file = "google_re2-1.1-2-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:fc0d4163de9ed2155a77e7a2d59d94c348a6bbab3cff88922fab9e0d3d24faec"},
+ {file = "google_re2-1.1-2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:48b12d953bc796736e7831d67b36892fb6419a4cc44cb16521fe291e594bfe23"},
+ {file = "google_re2-1.1-2-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:62c780c927cff98c1538439f0ff616f48a9b2e8837c676f53170d8ae5b9e83cb"},
+ {file = "google_re2-1.1-2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:04b2aefd768aa4edeef8b273327806c9cb0b82e90ff52eacf5d11003ac7a0db2"},
+ {file = "google_re2-1.1-2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:9c90175992346519ee7546d9af9a64541c05b6b70346b0ddc54a48aa0d3b6554"},
+ {file = "google_re2-1.1-2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22ad9ad9d125249d6386a2e80efb9de7af8260b703b6be7fa0ab069c1cf56ced"},
+ {file = "google_re2-1.1-2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f70971f6ffe5254e476e71d449089917f50ebf9cf60f9cec80975ab1693777e2"},
+ {file = "google_re2-1.1-2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f267499529e64a4abed24c588f355ebe4700189d434d84a7367725f5a186e48d"},
+ {file = "google_re2-1.1-2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b632eff5e4cd44545a9c0e52f2e1becd55831e25f4dd4e0d7ec8ee6ca50858c1"},
+ {file = "google_re2-1.1-2-cp311-cp311-win32.whl", hash = "sha256:a42c733036e8f242ee4e5f0e27153ad4ca44ced9e4ce82f3972938ddee528db0"},
+ {file = "google_re2-1.1-2-cp311-cp311-win_amd64.whl", hash = "sha256:64f8eed4ca96905d99b5286b3d14b5ca4f6a025ff3c1351626a7df2f93ad1ddd"},
+ {file = "google_re2-1.1-2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5541efcca5b5faf7e0d882334a04fa479bad4e7433f94870f46272eec0672c4a"},
+ {file = "google_re2-1.1-2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92309af35b6eb2d3b3dc57045cdd83a76370958ab3e0edd2cc4638f6d23f5b32"},
+ {file = "google_re2-1.1-2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:197cd9bcaba96d18c5bf84d0c32fca7a26c234ea83b1d3083366f4392cb99f78"},
+ {file = "google_re2-1.1-2-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:1b896f171d29b541256cf26e10dccc9103ac1894683914ed88828ca6facf8dca"},
+ {file = "google_re2-1.1-2-cp38-cp38-macosx_13_0_arm64.whl", hash = "sha256:e022d3239b945014e916ca7120fee659b246ec26c301f9e0542f1a19b38a8744"},
+ {file = "google_re2-1.1-2-cp38-cp38-macosx_13_0_x86_64.whl", hash = "sha256:2c73f8a9440873b68bee1198094377501065e85aaf6fcc0d2512c7589ffa06ca"},
+ {file = "google_re2-1.1-2-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:901d86555bd7725506d651afaba7d71cd4abd13260aed6cfd7c641a45f76d4f6"},
+ {file = "google_re2-1.1-2-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ce4710ff636701cfb56eb91c19b775d53b03749a23b7d2a5071bbbf4342a9067"},
+ {file = "google_re2-1.1-2-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76a20e5ebdf5bc5d430530197e42a2eeb562f729d3a3fb51f39168283d676e66"},
+ {file = "google_re2-1.1-2-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:77c9f4d4bb1c8de9d2642d3c4b8b615858ba764df025b3b4f1310266f8def269"},
+ {file = "google_re2-1.1-2-cp38-cp38-win32.whl", hash = "sha256:94bd60785bf37ef130a1613738e3c39465a67eae3f3be44bb918540d39b68da3"},
+ {file = "google_re2-1.1-2-cp38-cp38-win_amd64.whl", hash = "sha256:59efeb77c0dcdbe37794c61f29c5b1f34bc06e8ec309a111ccdd29d380644d70"},
+ {file = "google_re2-1.1-2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:221e38c27e1dd9ccb8e911e9c7aed6439f68ce81e7bb74001076830b0d6e931d"},
+ {file = "google_re2-1.1-2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:d9145879e6c2e1b814445300b31f88a675e1f06c57564670d95a1442e8370c27"},
+ {file = "google_re2-1.1-2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c8a12f0740e2a52826bdbf95569a4b0abdf413b4012fa71e94ad25dd4715c6e5"},
+ {file = "google_re2-1.1-2-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:9c9998f71466f4db7bda752aa7c348b2881ff688e361108fe500caad1d8b9cb2"},
+ {file = "google_re2-1.1-2-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:0c39f69b702005963a3d3bf78743e1733ad73efd7e6e8465d76e3009e4694ceb"},
+ {file = "google_re2-1.1-2-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:6d0ce762dee8d6617d0b1788a9653e805e83a23046c441d0ea65f1e27bf84114"},
+ {file = "google_re2-1.1-2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ecf3619d98c9b4a7844ab52552ad32597cdbc9a5bdbc7e3435391c653600d1e2"},
+ {file = "google_re2-1.1-2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9a1426a8cbd1fa004974574708d496005bd379310c4b1c7012be4bc75efde7a8"},
+ {file = "google_re2-1.1-2-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1a30626ba48b4070f3eab272d860ef1952e710b088792c4d68dddb155be6bfc"},
+ {file = "google_re2-1.1-2-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1b9c1ffcfbc3095b6ff601ec2d2bf662988f6ea6763bc1c9d52bec55881f8fde"},
+ {file = "google_re2-1.1-2-cp39-cp39-win32.whl", hash = "sha256:32ecf995a252c0548404c1065ba4b36f1e524f1f4a86b6367a1a6c3da3801e30"},
+ {file = "google_re2-1.1-2-cp39-cp39-win_amd64.whl", hash = "sha256:e7865410f3b112a3609739283ec3f4f6f25aae827ff59c6bfdf806fd394d753e"},
+ {file = "google_re2-1.1-3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3b21f83f0a201009c56f06fcc7294a33555ede97130e8a91b3f4cae01aed1d73"},
+ {file = "google_re2-1.1-3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b38194b91354a38db1f86f25d09cdc6ac85d63aee4c67b43da3048ce637adf45"},
+ {file = "google_re2-1.1-3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e7da3da8d6b5a18d6c3b61b11cc5b66b8564eaedce99d2312b15b6487730fc76"},
+ {file = "google_re2-1.1-3-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:aeca656fb10d8638f245331aabab59c9e7e051ca974b366dd79e6a9efb12e401"},
+ {file = "google_re2-1.1-3-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:2069d6dc94f5fa14a159bf99cad2f11e9c0f8ec3b7f44a4dde9e59afe5d1c786"},
+ {file = "google_re2-1.1-3-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:2319a39305a4931cb5251451f2582713418a19bef2af7adf9e2a7a0edd939b99"},
+ {file = "google_re2-1.1-3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb98fc131699756c6d86246f670a5e1c1cc1ba85413c425ad344cb30479b246c"},
+ {file = "google_re2-1.1-3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6e038986d8ffe4e269f8532f03009f229d1f6018d4ac0dabc8aff876338f6e0"},
+ {file = "google_re2-1.1-3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8618343ee658310e0f53bf586fab7409de43ce82bf8d9f7eb119536adc9783fd"},
+ {file = "google_re2-1.1-3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8140ca861cfe00602319cefe2c7b8737b379eb07fb328b51dc44584f47a2718"},
+ {file = "google_re2-1.1-3-cp310-cp310-win32.whl", hash = "sha256:41f439c5c54e8a3a0a1fa2dbd1e809d3f643f862df7b16dd790f36a1238a272e"},
+ {file = "google_re2-1.1-3-cp310-cp310-win_amd64.whl", hash = "sha256:fe20e97a33176d96d3e4b5b401de35182b9505823abea51425ec011f53ef5e56"},
+ {file = "google_re2-1.1-3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c39ff52b1765db039f690ee5b7b23919d8535aae94db7996079fbde0098c4d7"},
+ {file = "google_re2-1.1-3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5420be674fd164041639ba4c825450f3d4bd635572acdde16b3dcd697f8aa3ef"},
+ {file = "google_re2-1.1-3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:ff53881cf1ce040f102a42d39db93c3f835f522337ae9c79839a842f26d97733"},
+ {file = "google_re2-1.1-3-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:8d04600b0b53523118df2e413a71417c408f20dee640bf07dfab601c96a18a77"},
+ {file = "google_re2-1.1-3-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:c4835d4849faa34a7fa1074098d81c420ed6c0707a3772482b02ce14f2a7c007"},
+ {file = "google_re2-1.1-3-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:3309a9b81251d35fee15974d0ae0581a9a375266deeafdc3a3ac0d172a742357"},
+ {file = "google_re2-1.1-3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e2b51cafee7e0bc72d0a4a454547bd8f257cde412ac9f1a2dc46a203b5e42cf4"},
+ {file = "google_re2-1.1-3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:83f5f1cb52f832c2297d271ee8c56cf5e9053448162e5d2223d513f729bad908"},
+ {file = "google_re2-1.1-3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55865a1ace92be3f7953b2e2b38b901d8074a367aa491daee43260a53a7fc6f0"},
+ {file = "google_re2-1.1-3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cec2167dd142e583e98c783bd0d28b8cf5a9cdbe1f7407ba4163fe3ccb613cb9"},
+ {file = "google_re2-1.1-3-cp311-cp311-win32.whl", hash = "sha256:a0bc1fe96849e4eb8b726d0bba493f5b989372243b32fe20729cace02e5a214d"},
+ {file = "google_re2-1.1-3-cp311-cp311-win_amd64.whl", hash = "sha256:e6310a156db96fc5957cb007dd2feb18476898654530683897469447df73a7cd"},
+ {file = "google_re2-1.1-3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8e63cd10ea006088b320e8c5d308da1f6c87aa95138a71c60dd7ca1c8e91927e"},
+ {file = "google_re2-1.1-3-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:12b566830a334178733a85e416b1e0507dbc0ceb322827616fe51ef56c5154f1"},
+ {file = "google_re2-1.1-3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:442e18c9d46b225c1496919c16eafe8f8d9bb4091b00b4d3440da03c55bbf4ed"},
+ {file = "google_re2-1.1-3-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:c54c00263a9c39b2dacd93e9636319af51e3cf885c080b9680a9631708326460"},
+ {file = "google_re2-1.1-3-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:15a3caeeb327bc22e0c9f95eb76890fec8874cacccd2b01ff5c080ab4819bbec"},
+ {file = "google_re2-1.1-3-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:59ec0d2cced77f715d41f6eafd901f6b15c11e28ba25fe0effdc1de554d78e75"},
+ {file = "google_re2-1.1-3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:185bf0e3441aed3840590f8e42f916e2920d235eb14df2cbc2049526803d3e71"},
+ {file = "google_re2-1.1-3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:586d3f2014eea5be14d8de53374d9b79fa99689160e00efa64b5fe93af326087"},
+ {file = "google_re2-1.1-3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc2575082de4ffd234d9607f3ae67ca22b15a1a88793240e2045f3b3a36a5795"},
+ {file = "google_re2-1.1-3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59c5ad438eddb3630def394456091284d7bbc5b89351987f94f3792d296d1f96"},
+ {file = "google_re2-1.1-3-cp312-cp312-win32.whl", hash = "sha256:5b9878c53f2bf16f75bf71d4ddd57f6611351408d5821040e91c53ebdf82c373"},
+ {file = "google_re2-1.1-3-cp312-cp312-win_amd64.whl", hash = "sha256:4fdecfeb213110d0a85bad335a8e7cdb59fea7de81a4fe659233f487171980f9"},
+ {file = "google_re2-1.1-3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2dd87bacab32b709c28d0145fe75a956b6a39e28f0726d867375dba5721c76c1"},
+ {file = "google_re2-1.1-3-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:55d24c61fe35dddc1bb484593a57c9f60f9e66d7f31f091ef9608ed0b6dde79f"},
+ {file = "google_re2-1.1-3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a0cf1180d908622df648c26b0cd09281f92129805ccc56a39227fdbfeab95cb4"},
+ {file = "google_re2-1.1-3-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:09586f07f3f88d432265c75976da1c619ab7192cd7ebdf53f4ae0776c19e4b56"},
+ {file = "google_re2-1.1-3-cp38-cp38-macosx_13_0_arm64.whl", hash = "sha256:539f1b053402203576e919a06749198da4ae415931ee28948a1898131ae932ce"},
+ {file = "google_re2-1.1-3-cp38-cp38-macosx_13_0_x86_64.whl", hash = "sha256:abf0bcb5365b0e27a5a23f3da403dffdbbac2c0e3a3f1535a8b10cc121b5d5fb"},
+ {file = "google_re2-1.1-3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:19c83e5bbed7958213eeac3aa71c506525ce54faf03e07d0b96cd0a764890511"},
+ {file = "google_re2-1.1-3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3348e77330ff672dc44ec01894fa5d93c409a532b6d688feac55e714e9059920"},
+ {file = "google_re2-1.1-3-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06b63edb57c5ce5a13eabfd71155e346b9477dc8906dec7c580d4f70c16a7e0d"},
+ {file = "google_re2-1.1-3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12fe57ba2914092b83338d61d8def9ebd5a2bd0fd8679eceb5d4c2748105d5c0"},
+ {file = "google_re2-1.1-3-cp38-cp38-win32.whl", hash = "sha256:80796e08d24e606e675019fe8de4eb5c94bb765be13c384f2695247d54a6df75"},
+ {file = "google_re2-1.1-3-cp38-cp38-win_amd64.whl", hash = "sha256:3c2257dedfe7cc5deb6791e563af9e071a9d414dad89e37ac7ad22f91be171a9"},
+ {file = "google_re2-1.1-3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43a0cd77c87c894f28969ac622f94b2e6d1571261dfdd785026848a25cfdc9b9"},
+ {file = "google_re2-1.1-3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:1038990b77fd66f279bd66a0832b67435ea925e15bb59eafc7b60fdec812b616"},
+ {file = "google_re2-1.1-3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fb5dda6875d18dd45f0f24ebced6d1f7388867c8fb04a235d1deab7ea479ce38"},
+ {file = "google_re2-1.1-3-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:bb1d164965c6d57a351b421d2f77c051403766a8b75aaa602324ee2451fff77f"},
+ {file = "google_re2-1.1-3-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:a072ebfa495051d07ffecbf6ce21eb84793568d5c3c678c00ed8ff6b8066ab31"},
+ {file = "google_re2-1.1-3-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:4eb66c8398c8a510adc97978d944b3b29c91181237218841ea1a91dc39ec0e54"},
+ {file = "google_re2-1.1-3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f7c8b57b1f559553248d1757b7fa5b2e0cc845666738d155dff1987c2618264e"},
+ {file = "google_re2-1.1-3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9162f6aa4f25453c682eb176f21b8e2f40205be9f667e98a54b3e1ff10d6ee75"},
+ {file = "google_re2-1.1-3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2d65ddf67fd7bf94705626871d463057d3d9a3538d41022f95b9d8f01df36e1"},
+ {file = "google_re2-1.1-3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d140c7b9395b4d1e654127aa1c99bcc603ed01000b7bc7e28c52562f1894ec12"},
+ {file = "google_re2-1.1-3-cp39-cp39-win32.whl", hash = "sha256:80c5fc200f64b2d903eeb07b8d6cefc620a872a0240c7caaa9aca05b20f5568f"},
+ {file = "google_re2-1.1-3-cp39-cp39-win_amd64.whl", hash = "sha256:9eb6dbcee9b5dc4069bbc0634f2eb039ca524a14bed5868fdf6560aaafcbca06"},
]
[[package]]
name = "google-resumable-media"
-version = "2.4.1"
+version = "2.6.0"
description = "Utilities for Google Media Downloads and Resumable Uploads"
optional = false
python-versions = ">= 3.7"
files = [
- {file = "google-resumable-media-2.4.1.tar.gz", hash = "sha256:15b8a2e75df42dc6502d1306db0bce2647ba6013f9cd03b6e17368c0886ee90a"},
- {file = "google_resumable_media-2.4.1-py2.py3-none-any.whl", hash = "sha256:831e86fd78d302c1a034730a0c6e5369dd11d37bad73fa69ca8998460d5bae8d"},
+ {file = "google-resumable-media-2.6.0.tar.gz", hash = "sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7"},
+ {file = "google_resumable_media-2.6.0-py2.py3-none-any.whl", hash = "sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b"},
]
[package.dependencies]
google-crc32c = ">=1.0,<2.0dev"
[package.extras]
-aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"]
+aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"]
requests = ["requests (>=2.18.0,<3.0.0dev)"]
[[package]]
name = "googleapis-common-protos"
-version = "1.59.0"
+version = "1.61.0"
description = "Common protobufs used in Google APIs"
optional = false
python-versions = ">=3.7"
files = [
- {file = "googleapis-common-protos-1.59.0.tar.gz", hash = "sha256:4168fcb568a826a52f23510412da405abd93f4d23ba544bb68d943b14ba3cb44"},
- {file = "googleapis_common_protos-1.59.0-py2.py3-none-any.whl", hash = "sha256:b287dc48449d1d41af0c69f4ea26242b5ae4c3d7249a38b0984c86a4caffff1f"},
+ {file = "googleapis-common-protos-1.61.0.tar.gz", hash = "sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b"},
+ {file = "googleapis_common_protos-1.61.0-py2.py3-none-any.whl", hash = "sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0"},
]
[package.dependencies]
-grpcio = {version = ">=1.44.0,<2.0.0dev", optional = true, markers = "extra == \"grpc\""}
-protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev"
+grpcio = {version = ">=1.44.0,<2.0.0.dev0", optional = true, markers = "extra == \"grpc\""}
+protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0"
[package.extras]
-grpc = ["grpcio (>=1.44.0,<2.0.0dev)"]
+grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"]
[[package]]
name = "graphviz"
@@ -3117,94 +3490,88 @@ test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=
[[package]]
name = "greenlet"
-version = "2.0.2"
+version = "3.0.1"
description = "Lightweight in-process concurrent programming"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
-files = [
- {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"},
- {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"},
- {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"},
- {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"},
- {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"},
- {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"},
- {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"},
- {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"},
- {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"},
- {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"},
- {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"},
- {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"},
- {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"},
- {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"},
- {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"},
- {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"},
- {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"},
- {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"},
- {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"},
- {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"},
- {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"},
- {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"},
- {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"},
- {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"},
- {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"},
- {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"},
- {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"},
- {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"},
- {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"},
- {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"},
- {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"},
- {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"},
- {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"},
- {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"},
- {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"},
- {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"},
- {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"},
- {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"},
- {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"},
- {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"},
- {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"},
- {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"},
- {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"},
- {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"},
- {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"},
- {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"},
- {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"},
- {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"},
- {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"},
- {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"},
- {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"},
- {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"},
- {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"},
- {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"},
- {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"},
- {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"},
- {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"},
- {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"},
- {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"},
- {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"},
-]
-
-[package.extras]
-docs = ["Sphinx", "docutils (<0.18)"]
+python-versions = ">=3.7"
+files = [
+ {file = "greenlet-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63"},
+ {file = "greenlet-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e"},
+ {file = "greenlet-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846"},
+ {file = "greenlet-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9"},
+ {file = "greenlet-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234"},
+ {file = "greenlet-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884"},
+ {file = "greenlet-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94"},
+ {file = "greenlet-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c"},
+ {file = "greenlet-3.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5"},
+ {file = "greenlet-3.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d"},
+ {file = "greenlet-3.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445"},
+ {file = "greenlet-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de"},
+ {file = "greenlet-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166"},
+ {file = "greenlet-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36"},
+ {file = "greenlet-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1"},
+ {file = "greenlet-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8"},
+ {file = "greenlet-3.0.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9"},
+ {file = "greenlet-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e"},
+ {file = "greenlet-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a"},
+ {file = "greenlet-3.0.1-cp38-cp38-win32.whl", hash = "sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd"},
+ {file = "greenlet-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6"},
+ {file = "greenlet-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d"},
+ {file = "greenlet-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8"},
+ {file = "greenlet-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546"},
+ {file = "greenlet-3.0.1-cp39-cp39-win32.whl", hash = "sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57"},
+ {file = "greenlet-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619"},
+ {file = "greenlet-3.0.1.tar.gz", hash = "sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b"},
+]
+
+[package.extras]
+docs = ["Sphinx"]
test = ["objgraph", "psutil"]
[[package]]
name = "griffe"
-version = "0.27.1"
+version = "0.38.0"
description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "griffe-0.27.1-py3-none-any.whl", hash = "sha256:867008786a17532ec529cbf58cee7c4f131b85d61f38691c2046b1883f7be253"},
- {file = "griffe-0.27.1.tar.gz", hash = "sha256:f213e87f99bf3b76d2d4da999d5a38c2ec01b9a6ce3660c5ab52b663d785edba"},
+ {file = "griffe-0.38.0-py3-none-any.whl", hash = "sha256:6a5bc457320e8e199006aa5fbb03e162f5e21abe31aa6221f7a5c37ea0724c71"},
+ {file = "griffe-0.38.0.tar.gz", hash = "sha256:9b97487b583042b543d1e28196caee638ecd766c8c4c98135071806cb5333ac2"},
]
[package.dependencies]
colorama = ">=0.4"
-[package.extras]
-async = ["aiofiles (>=0.7,<1.0)"]
-
[[package]]
name = "grpc-google-iam-v1"
version = "0.12.6"
@@ -3223,60 +3590,69 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4
[[package]]
name = "grpcio"
-version = "1.54.0"
+version = "1.59.2"
description = "HTTP/2-based RPC framework"
optional = false
python-versions = ">=3.7"
files = [
- {file = "grpcio-1.54.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:a947d5298a0bbdd4d15671024bf33e2b7da79a70de600ed29ba7e0fef0539ebb"},
- {file = "grpcio-1.54.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:e355ee9da9c1c03f174efea59292b17a95e0b7b4d7d2a389265f731a9887d5a9"},
- {file = "grpcio-1.54.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:73c238ef6e4b64272df7eec976bb016c73d3ab5a6c7e9cd906ab700523d312f3"},
- {file = "grpcio-1.54.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c59d899ee7160638613a452f9a4931de22623e7ba17897d8e3e348c2e9d8d0b"},
- {file = "grpcio-1.54.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48cb7af77238ba16c77879009003f6b22c23425e5ee59cb2c4c103ec040638a5"},
- {file = "grpcio-1.54.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2262bd3512ba9e9f0e91d287393df6f33c18999317de45629b7bd46c40f16ba9"},
- {file = "grpcio-1.54.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:224166f06ccdaf884bf35690bf4272997c1405de3035d61384ccb5b25a4c1ca8"},
- {file = "grpcio-1.54.0-cp310-cp310-win32.whl", hash = "sha256:ed36e854449ff6c2f8ee145f94851fe171298e1e793f44d4f672c4a0d78064e7"},
- {file = "grpcio-1.54.0-cp310-cp310-win_amd64.whl", hash = "sha256:27fb030a4589d2536daec5ff5ba2a128f4f155149efab578fe2de2cb21596d3d"},
- {file = "grpcio-1.54.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f4a7dca8ccd8023d916b900aa3c626f1bd181bd5b70159479b142f957ff420e4"},
- {file = "grpcio-1.54.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:1209d6b002b26e939e4c8ea37a3d5b4028eb9555394ea69fb1adbd4b61a10bb8"},
- {file = "grpcio-1.54.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:860fcd6db7dce80d0a673a1cc898ce6bc3d4783d195bbe0e911bf8a62c93ff3f"},
- {file = "grpcio-1.54.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3930669c9e6f08a2eed824738c3d5699d11cd47a0ecc13b68ed11595710b1133"},
- {file = "grpcio-1.54.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62117486460c83acd3b5d85c12edd5fe20a374630475388cfc89829831d3eb79"},
- {file = "grpcio-1.54.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e3e526062c690517b42bba66ffe38aaf8bc99a180a78212e7b22baa86902f690"},
- {file = "grpcio-1.54.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ebff0738be0499d7db74d20dca9f22a7b27deae31e1bf92ea44924fd69eb6251"},
- {file = "grpcio-1.54.0-cp311-cp311-win32.whl", hash = "sha256:21c4a1aae861748d6393a3ff7867473996c139a77f90326d9f4104bebb22d8b8"},
- {file = "grpcio-1.54.0-cp311-cp311-win_amd64.whl", hash = "sha256:3db71c6f1ab688d8dfc102271cedc9828beac335a3a4372ec54b8bf11b43fd29"},
- {file = "grpcio-1.54.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:960b176e0bb2b4afeaa1cd2002db1e82ae54c9b6e27ea93570a42316524e77cf"},
- {file = "grpcio-1.54.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:d8ae6e0df3a608e99ee1acafaafd7db0830106394d54571c1ece57f650124ce9"},
- {file = "grpcio-1.54.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:c33744d0d1a7322da445c0fe726ea6d4e3ef2dfb0539eadf23dce366f52f546c"},
- {file = "grpcio-1.54.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d109df30641d050e009105f9c9ca5a35d01e34d2ee2a4e9c0984d392fd6d704"},
- {file = "grpcio-1.54.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775a2f70501370e5ba54e1ee3464413bff9bd85bd9a0b25c989698c44a6fb52f"},
- {file = "grpcio-1.54.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c55a9cf5cba80fb88c850915c865b8ed78d5e46e1f2ec1b27692f3eaaf0dca7e"},
- {file = "grpcio-1.54.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1fa7d6ddd33abbd3c8b3d7d07c56c40ea3d1891ce3cd2aa9fa73105ed5331866"},
- {file = "grpcio-1.54.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ed3d458ded32ff3a58f157b60cc140c88f7ac8c506a1c567b2a9ee8a2fd2ce54"},
- {file = "grpcio-1.54.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:5942a3e05630e1ef5b7b5752e5da6582460a2e4431dae603de89fc45f9ec5aa9"},
- {file = "grpcio-1.54.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:125ed35aa3868efa82eabffece6264bf638cfdc9f0cd58ddb17936684aafd0f8"},
- {file = "grpcio-1.54.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:b7655f809e3420f80ce3bf89737169a9dce73238af594049754a1128132c0da4"},
- {file = "grpcio-1.54.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f47bf9520bba4083d65ab911f8f4c0ac3efa8241993edd74c8dd08ae87552f"},
- {file = "grpcio-1.54.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16bca8092dd994f2864fdab278ae052fad4913f36f35238b2dd11af2d55a87db"},
- {file = "grpcio-1.54.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d2f62fb1c914a038921677cfa536d645cb80e3dd07dc4859a3c92d75407b90a5"},
- {file = "grpcio-1.54.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a7caf553ccaf715ec05b28c9b2ab2ee3fdb4036626d779aa09cf7cbf54b71445"},
- {file = "grpcio-1.54.0-cp38-cp38-win32.whl", hash = "sha256:2585b3c294631a39b33f9f967a59b0fad23b1a71a212eba6bc1e3ca6e6eec9ee"},
- {file = "grpcio-1.54.0-cp38-cp38-win_amd64.whl", hash = "sha256:3b170e441e91e4f321e46d3cc95a01cb307a4596da54aca59eb78ab0fc03754d"},
- {file = "grpcio-1.54.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:1382bc499af92901c2240c4d540c74eae8a671e4fe9839bfeefdfcc3a106b5e2"},
- {file = "grpcio-1.54.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:031bbd26656e0739e4b2c81c172155fb26e274b8d0312d67aefc730bcba915b6"},
- {file = "grpcio-1.54.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:a97b0d01ae595c997c1d9d8249e2d2da829c2d8a4bdc29bb8f76c11a94915c9a"},
- {file = "grpcio-1.54.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:533eaf5b2a79a3c6f35cbd6a095ae99cac7f4f9c0e08bdcf86c130efd3c32adf"},
- {file = "grpcio-1.54.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49eace8ea55fbc42c733defbda1e4feb6d3844ecd875b01bb8b923709e0f5ec8"},
- {file = "grpcio-1.54.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:30fbbce11ffeb4f9f91c13fe04899aaf3e9a81708bedf267bf447596b95df26b"},
- {file = "grpcio-1.54.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:650f5f2c9ab1275b4006707411bb6d6bc927886874a287661c3c6f332d4c068b"},
- {file = "grpcio-1.54.0-cp39-cp39-win32.whl", hash = "sha256:02000b005bc8b72ff50c477b6431e8886b29961159e8b8d03c00b3dd9139baed"},
- {file = "grpcio-1.54.0-cp39-cp39-win_amd64.whl", hash = "sha256:6dc1e2c9ac292c9a484ef900c568ccb2d6b4dfe26dfa0163d5bc815bb836c78d"},
- {file = "grpcio-1.54.0.tar.gz", hash = "sha256:eb0807323572642ab73fd86fe53d88d843ce617dd1ddf430351ad0759809a0ae"},
-]
-
-[package.extras]
-protobuf = ["grpcio-tools (>=1.54.0)"]
+ {file = "grpcio-1.59.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:d2fa68a96a30dd240be80bbad838a0ac81a61770611ff7952b889485970c4c71"},
+ {file = "grpcio-1.59.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cf0dead5a2c5a3347af2cfec7131d4f2a2e03c934af28989c9078f8241a491fa"},
+ {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:e420ced29b5904cdf9ee5545e23f9406189d8acb6750916c2db4793dada065c6"},
+ {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b230028a008ae1d0f430acb227d323ff8a619017415cf334c38b457f814119f"},
+ {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4a3833c0e067f3558538727235cd8a49709bff1003200bbdefa2f09334e4b1"},
+ {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6b25ed37c27e652db01be341af93fbcea03d296c024d8a0e680017a268eb85dd"},
+ {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73abb8584b0cf74d37f5ef61c10722adc7275502ab71789a8fe3cb7ef04cf6e2"},
+ {file = "grpcio-1.59.2-cp310-cp310-win32.whl", hash = "sha256:d6f70406695e3220f09cd7a2f879333279d91aa4a8a1d34303b56d61a8180137"},
+ {file = "grpcio-1.59.2-cp310-cp310-win_amd64.whl", hash = "sha256:3c61d641d4f409c5ae46bfdd89ea42ce5ea233dcf69e74ce9ba32b503c727e29"},
+ {file = "grpcio-1.59.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:3059668df17627f0e0fa680e9ef8c995c946c792612e9518f5cc1503be14e90b"},
+ {file = "grpcio-1.59.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:72ca2399097c0b758198f2ff30f7178d680de8a5cfcf3d9b73a63cf87455532e"},
+ {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c978f864b35f2261e0819f5cd88b9830b04dc51bcf055aac3c601e525a10d2ba"},
+ {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9411e24328a2302e279e70cae6e479f1fddde79629fcb14e03e6d94b3956eabf"},
+ {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb7e0fe6ad73b7f06d7e2b689c19a71cf5cc48f0c2bf8608469e51ffe0bd2867"},
+ {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c2504eed520958a5b77cc99458297cb7906308cb92327f35fb7fbbad4e9b2188"},
+ {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2171c39f355ba5b551c5d5928d65aa6c69807fae195b86ef4a7d125bcdb860a9"},
+ {file = "grpcio-1.59.2-cp311-cp311-win32.whl", hash = "sha256:d2794f0e68b3085d99b4f6ff9c089f6fdd02b32b9d3efdfbb55beac1bf22d516"},
+ {file = "grpcio-1.59.2-cp311-cp311-win_amd64.whl", hash = "sha256:2067274c88bc6de89c278a672a652b4247d088811ece781a4858b09bdf8448e3"},
+ {file = "grpcio-1.59.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:535561990e075fa6bd4b16c4c3c1096b9581b7bb35d96fac4650f1181e428268"},
+ {file = "grpcio-1.59.2-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:a213acfbf186b9f35803b52e4ca9addb153fc0b67f82a48f961be7000ecf6721"},
+ {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:6959fb07e8351e20501ffb8cc4074c39a0b7ef123e1c850a7f8f3afdc3a3da01"},
+ {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e82c5cf1495244adf5252f925ac5932e5fd288b3e5ab6b70bec5593074b7236c"},
+ {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023088764012411affe7db183d1ada3ad9daf2e23ddc719ff46d7061de661340"},
+ {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:da2d94c15f88cd40d7e67f7919d4f60110d2b9d5b1e08cf354c2be773ab13479"},
+ {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6009386a2df66159f64ac9f20425ae25229b29b9dd0e1d3dd60043f037e2ad7e"},
+ {file = "grpcio-1.59.2-cp312-cp312-win32.whl", hash = "sha256:75c6ecb70e809cf1504465174343113f51f24bc61e22a80ae1c859f3f7034c6d"},
+ {file = "grpcio-1.59.2-cp312-cp312-win_amd64.whl", hash = "sha256:cbe946b3e6e60a7b4618f091e62a029cb082b109a9d6b53962dd305087c6e4fd"},
+ {file = "grpcio-1.59.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:f8753a6c88d1d0ba64302309eecf20f70d2770f65ca02d83c2452279085bfcd3"},
+ {file = "grpcio-1.59.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:f1ef0d39bc1feb420caf549b3c657c871cad4ebbcf0580c4d03816b0590de0cf"},
+ {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:4c93f4abbb54321ee6471e04a00139c80c754eda51064187963ddf98f5cf36a4"},
+ {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08d77e682f2bf730a4961eea330e56d2f423c6a9b91ca222e5b1eb24a357b19f"},
+ {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff16d68bf453275466a9a46739061a63584d92f18a0f5b33d19fc97eb69867c"},
+ {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4abb717e320e74959517dc8e84a9f48fbe90e9abe19c248541e9418b1ce60acd"},
+ {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36f53c2b3449c015880e7d55a89c992c357f176327b0d2873cdaaf9628a37c69"},
+ {file = "grpcio-1.59.2-cp37-cp37m-win_amd64.whl", hash = "sha256:cc3e4cd087f07758b16bef8f31d88dbb1b5da5671d2f03685ab52dece3d7a16e"},
+ {file = "grpcio-1.59.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:27f879ae604a7fcf371e59fba6f3ff4635a4c2a64768bd83ff0cac503142fef4"},
+ {file = "grpcio-1.59.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:7cf05053242f61ba94014dd3a986e11a083400a32664058f80bf4cf817c0b3a1"},
+ {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e1727c1c0e394096bb9af185c6923e8ea55a5095b8af44f06903bcc0e06800a2"},
+ {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d573e70a6fe77555fb6143c12d3a7d3fa306632a3034b4e7c59ca09721546f8"},
+ {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31176aa88f36020055ace9adff2405a33c8bdbfa72a9c4980e25d91b2f196873"},
+ {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:11168ef43e4a43ff1b1a65859f3e0ef1a173e277349e7fb16923ff108160a8cd"},
+ {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:53c9aa5ddd6857c0a1cd0287225a2a25873a8e09727c2e95c4aebb1be83a766a"},
+ {file = "grpcio-1.59.2-cp38-cp38-win32.whl", hash = "sha256:3b4368b33908f683a363f376dfb747d40af3463a6e5044afee07cf9436addf96"},
+ {file = "grpcio-1.59.2-cp38-cp38-win_amd64.whl", hash = "sha256:0a754aff9e3af63bdc4c75c234b86b9d14e14a28a30c4e324aed1a9b873d755f"},
+ {file = "grpcio-1.59.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:1f9524d1d701e399462d2c90ba7c193e49d1711cf429c0d3d97c966856e03d00"},
+ {file = "grpcio-1.59.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:f93dbf58f03146164048be5426ffde298b237a5e059144847e4940f5b80172c3"},
+ {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6da6dea3a1bacf99b3c2187e296db9a83029ed9c38fd4c52b7c9b7326d13c828"},
+ {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f09cffa619adfb44799fa4a81c2a1ad77c887187613fb0a8f201ab38d89ba1"},
+ {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c35aa9657f5d5116d23b934568e0956bd50c615127810fffe3ac356a914c176a"},
+ {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:74100fecaec8a535e380cf5f2fb556ff84957d481c13e54051c52e5baac70541"},
+ {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:128e20f57c5f27cb0157e73756d1586b83c1b513ebecc83ea0ac37e4b0e4e758"},
+ {file = "grpcio-1.59.2-cp39-cp39-win32.whl", hash = "sha256:686e975a5d16602dc0982c7c703948d17184bd1397e16c8ee03511ecb8c4cdda"},
+ {file = "grpcio-1.59.2-cp39-cp39-win_amd64.whl", hash = "sha256:242adc47725b9a499ee77c6a2e36688fa6c96484611f33b1be4c57ab075a92dd"},
+ {file = "grpcio-1.59.2.tar.gz", hash = "sha256:d8f9cd4ad1be90b0cf350a2f04a38a36e44a026cac1e036ac593dc48efe91d52"},
+]
+
+[package.extras]
+protobuf = ["grpcio-tools (>=1.59.2)"]
[[package]]
name = "grpcio-gcp"
@@ -3341,12 +3717,12 @@ files = [
[[package]]
name = "hail"
-version = "0.2.113"
+version = "0.2.126"
description = "Scalable library for exploring and analyzing genomic data."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.9"
files = [
- {file = "hail-0.2.113-py3-none-any.whl", hash = "sha256:ff7d2f12fcaa0d9137fc61218677da7474fff312a6264dad39c7bf79757d5097"},
+ {file = "hail-0.2.126-py3-none-any.whl", hash = "sha256:97a319bc194d0d0d8e0b5e974b2758802460269a09283275de250963b4f2c7e2"},
]
[package.dependencies]
@@ -3355,55 +3731,47 @@ aiohttp = ">=3.8.1,<4"
asyncinit = ">=0.2.4,<0.3"
avro = ">=1.10,<1.12"
azure-identity = ">=1.6.0,<2"
+azure-mgmt-storage = "20.1.0"
azure-storage-blob = ">=12.11.0,<13"
-bokeh = "1.4.0"
+bokeh = ">=3,<4"
boto3 = ">=1.17,<2.0"
botocore = ">=1.20,<2.0"
decorator = "<5"
Deprecated = ">=1.2.10,<1.3"
-dill = ">=0.3.1.1,<0.4"
+dill = ">=0.3.6,<0.4"
frozenlist = ">=1.3.1,<2"
google-auth = ">=2.14.1,<3"
-google-cloud-storage = ">=1.25.0"
+google-auth-oauthlib = ">=0.5.2,<1"
humanize = ">=1.0.0,<2"
-"hurry.filesize" = ">=0.9,<1"
janus = ">=0.6,<1.1"
-Jinja2 = "3.0.3"
-nest-asyncio = ">=1.5.4,<2"
+jproperties = ">=2.1.1,<3"
+nest-asyncio = ">=1.5.8,<2"
numpy = "<2"
orjson = ">=3.6.4,<4"
-pandas = ">=1.3.0,<1.6.0"
+pandas = ">=2,<3"
parsimonious = "<1"
plotly = ">=5.5.0,<6"
protobuf = "3.20.2"
pyspark = ">=3.3.0,<3.4"
python-json-logger = ">=2.0.2,<3"
+pyyaml = ">=6.0,<7.0"
requests = ">=2.25.1,<3"
-rich = "12.6.0"
-scipy = ">1.2,<1.10"
+rich = ">=12.6.0,<13"
+scipy = ">1.2,<1.12"
sortedcontainers = ">=2.4.0,<3"
tabulate = ">=0.8.9,<1"
-uvloop = {version = ">=0.16.0,<1", markers = "sys_platform != \"win32\""}
-
-[[package]]
-name = "htmlmin"
-version = "0.1.12"
-description = "An HTML Minifier"
-optional = false
-python-versions = "*"
-files = [
- {file = "htmlmin-0.1.12.tar.gz", hash = "sha256:50c1ef4630374a5d723900096a961cff426dff46b48f34d194a81bbe14eca178"},
-]
+typer = ">=0.9.0,<1"
+uvloop = {version = ">=0.19.0,<1", markers = "sys_platform != \"win32\""}
[[package]]
name = "httpcore"
-version = "0.17.3"
+version = "0.18.0"
description = "A minimal low-level HTTP client."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"},
- {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"},
+ {file = "httpcore-0.18.0-py3-none-any.whl", hash = "sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced"},
+ {file = "httpcore-0.18.0.tar.gz", hash = "sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9"},
]
[package.dependencies]
@@ -3432,18 +3800,18 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0
[[package]]
name = "httpx"
-version = "0.24.1"
+version = "0.25.0"
description = "The next generation HTTP client."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"},
- {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"},
+ {file = "httpx-0.25.0-py3-none-any.whl", hash = "sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100"},
+ {file = "httpx-0.25.0.tar.gz", hash = "sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875"},
]
[package.dependencies]
certifi = "*"
-httpcore = ">=0.15.0,<0.18.0"
+httpcore = ">=0.18.0,<0.19.0"
idna = "*"
sniffio = "*"
@@ -3467,19 +3835,6 @@ files = [
[package.extras]
tests = ["freezegun", "pytest", "pytest-cov"]
-[[package]]
-name = "hurry.filesize"
-version = "0.9"
-description = "A simple Python library for human readable file sizes (or anything sized in bytes)."
-optional = false
-python-versions = "*"
-files = [
- {file = "hurry.filesize-0.9.tar.gz", hash = "sha256:f5368329adbef86accd3bc9490522340bb79260455ae89b1a42c10f63801b9a6"},
-]
-
-[package.dependencies]
-setuptools = "*"
-
[[package]]
name = "hydra-core"
version = "1.3.2"
@@ -3498,13 +3853,13 @@ packaging = "*"
[[package]]
name = "identify"
-version = "2.5.22"
+version = "2.5.31"
description = "File identification library for Python"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "identify-2.5.22-py2.py3-none-any.whl", hash = "sha256:f0faad595a4687053669c112004178149f6c326db71ee999ae4636685753ad2f"},
- {file = "identify-2.5.22.tar.gz", hash = "sha256:f7a93d6cf98e29bd07663c60728e7a4057615068d7a639d132dc883b2d54d31e"},
+ {file = "identify-2.5.31-py2.py3-none-any.whl", hash = "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d"},
+ {file = "identify-2.5.31.tar.gz", hash = "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75"},
]
[package.extras]
@@ -3521,20 +3876,39 @@ files = [
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
]
+[[package]]
+name = "importlib-metadata"
+version = "6.8.0"
+description = "Read metadata from Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"},
+ {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"},
+]
+
+[package.dependencies]
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+perf = ["ipython"]
+testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"]
+
[[package]]
name = "importlib-resources"
-version = "6.0.1"
+version = "6.1.0"
description = "Read resources from Python packages"
optional = false
python-versions = ">=3.8"
files = [
- {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"},
- {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"},
+ {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"},
+ {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"},
]
[package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"]
+testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"]
[[package]]
name = "inflection"
@@ -3585,13 +3959,13 @@ tests = ["pytest", "pytest-cov", "pytest-mock"]
[[package]]
name = "ipykernel"
-version = "6.22.0"
+version = "6.27.1"
description = "IPython Kernel for Jupyter"
optional = false
python-versions = ">=3.8"
files = [
- {file = "ipykernel-6.22.0-py3-none-any.whl", hash = "sha256:1ae6047c1277508933078163721bbb479c3e7292778a04b4bacf0874550977d6"},
- {file = "ipykernel-6.22.0.tar.gz", hash = "sha256:302558b81f1bc22dc259fb2a0c5c7cf2f4c0bdb21b50484348f7bafe7fb71421"},
+ {file = "ipykernel-6.27.1-py3-none-any.whl", hash = "sha256:dab88b47f112f9f7df62236511023c9bdeef67abc73af7c652e4ce4441601686"},
+ {file = "ipykernel-6.27.1.tar.gz", hash = "sha256:7d5d594b6690654b4d299edba5e872dc17bb7396a8d0609c97cb7b8a1c605de6"},
]
[package.dependencies]
@@ -3618,41 +3992,39 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio"
[[package]]
name = "ipython"
-version = "8.12.0"
+version = "8.19.0"
description = "IPython: Productive Interactive Computing"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
files = [
- {file = "ipython-8.12.0-py3-none-any.whl", hash = "sha256:1c183bf61b148b00bcebfa5d9b39312733ae97f6dad90d7e9b4d86c8647f498c"},
- {file = "ipython-8.12.0.tar.gz", hash = "sha256:a950236df04ad75b5bc7f816f9af3d74dc118fd42f2ff7e80e8e60ca1f182e2d"},
+ {file = "ipython-8.19.0-py3-none-any.whl", hash = "sha256:2f55d59370f59d0d2b2212109fe0e6035cfea436b1c0e6150ad2244746272ec5"},
+ {file = "ipython-8.19.0.tar.gz", hash = "sha256:ac4da4ecf0042fb4e0ce57c60430c2db3c719fa8bdf92f8631d6bd8a5785d1f0"},
]
[package.dependencies]
-appnope = {version = "*", markers = "sys_platform == \"darwin\""}
-backcall = "*"
colorama = {version = "*", markers = "sys_platform == \"win32\""}
decorator = "*"
+exceptiongroup = {version = "*", markers = "python_version < \"3.11\""}
jedi = ">=0.16"
matplotlib-inline = "*"
pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
-pickleshare = "*"
-prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0"
+prompt-toolkit = ">=3.0.41,<3.1.0"
pygments = ">=2.4.0"
stack-data = "*"
traitlets = ">=5"
[package.extras]
-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"]
+all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.23)", "pandas", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"]
black = ["black"]
-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"]
+doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"]
kernel = ["ipykernel"]
nbconvert = ["nbconvert"]
nbformat = ["nbformat"]
notebook = ["ipywidgets", "notebook"]
parallel = ["ipyparallel"]
qtconsole = ["qtconsole"]
-test = ["pytest (<7.1)", "pytest-asyncio", "testpath"]
-test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"]
+test = ["pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"]
+test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath", "trio"]
[[package]]
name = "isodate"
@@ -3670,20 +4042,17 @@ six = "*"
[[package]]
name = "isort"
-version = "5.12.0"
+version = "5.13.2"
description = "A Python utility / library to sort Python imports."
optional = false
python-versions = ">=3.8.0"
files = [
- {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"},
- {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"},
+ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
+ {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
]
[package.extras]
-colors = ["colorama (>=0.4.3)"]
-pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"]
-plugins = ["setuptools"]
-requirements-deprecated-finder = ["pip-api", "pipreqs"]
+colors = ["colorama (>=0.4.6)"]
[[package]]
name = "itsdangerous"
@@ -3712,32 +4081,32 @@ typing-extensions = ">=3.7.4.3"
[[package]]
name = "jedi"
-version = "0.18.2"
+version = "0.19.1"
description = "An autocompletion tool for Python that can be used for text editors."
optional = false
python-versions = ">=3.6"
files = [
- {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"},
- {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"},
+ {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"},
+ {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"},
]
[package.dependencies]
-parso = ">=0.8.0,<0.9.0"
+parso = ">=0.8.3,<0.9.0"
[package.extras]
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)"]
-qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
-testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
+qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
+testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
[[package]]
-name = "Jinja2"
-version = "3.0.3"
+name = "jinja2"
+version = "3.1.2"
description = "A very fast and expressive template engine."
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
files = [
- {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
- {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
+ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
+ {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
]
[package.dependencies]
@@ -3758,15 +4127,30 @@ files = [
]
[[package]]
-name = "jsmin"
-version = "3.0.1"
-description = "JavaScript minifier."
+name = "joblib"
+version = "1.3.2"
+description = "Lightweight pipelining with Python functions"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"},
+ {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"},
+]
+
+[[package]]
+name = "jproperties"
+version = "2.1.1"
+description = "Java Property file parser and writer for Python"
optional = false
python-versions = "*"
files = [
- {file = "jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc"},
+ {file = "jproperties-2.1.1-py2.py3-none-any.whl", hash = "sha256:4dfcd7cab56d9c79bce4453f7ca9ffbe0ff0574ddcf1c2a99a8646df60634664"},
+ {file = "jproperties-2.1.1.tar.gz", hash = "sha256:40b71124e8d257e8954899a91cd2d5c0f72e0f67f1b72048a5ba264567604f29"},
]
+[package.dependencies]
+six = ">=1.13,<2.0"
+
[[package]]
name = "json-merge-patch"
version = "0.2"
@@ -3779,13 +4163,13 @@ files = [
[[package]]
name = "jsonschema"
-version = "4.19.0"
+version = "4.19.2"
description = "An implementation of JSON Schema validation for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"},
- {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"},
+ {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"},
+ {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"},
]
[package.dependencies]
@@ -3814,13 +4198,13 @@ referencing = ">=0.28.0"
[[package]]
name = "jupyter-client"
-version = "8.2.0"
+version = "8.5.0"
description = "Jupyter protocol implementation and client libraries"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyter_client-8.2.0-py3-none-any.whl", hash = "sha256:b18219aa695d39e2ad570533e0d71fb7881d35a873051054a84ee2a17c4b7389"},
- {file = "jupyter_client-8.2.0.tar.gz", hash = "sha256:9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0"},
+ {file = "jupyter_client-8.5.0-py3-none-any.whl", hash = "sha256:c3877aac7257ec68d79b5c622ce986bd2a992ca42f6ddc9b4dd1da50e89f7028"},
+ {file = "jupyter_client-8.5.0.tar.gz", hash = "sha256:e8754066510ce456358df363f97eae64b50860f30dc1fe8c6771440db3be9a63"},
]
[package.dependencies]
@@ -3836,13 +4220,13 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt
[[package]]
name = "jupyter-core"
-version = "5.3.0"
+version = "5.5.0"
description = "Jupyter core package. A base package on which Jupyter projects rely."
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyter_core-5.3.0-py3-none-any.whl", hash = "sha256:d4201af84559bc8c70cead287e1ab94aeef3c512848dde077b7684b54d67730d"},
- {file = "jupyter_core-5.3.0.tar.gz", hash = "sha256:6db75be0c83edbf1b7c9f91ec266a9a24ef945da630f3120e1a0046dc13713fc"},
+ {file = "jupyter_core-5.5.0-py3-none-any.whl", hash = "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805"},
+ {file = "jupyter_core-5.5.0.tar.gz", hash = "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3"},
]
[package.dependencies]
@@ -3851,7 +4235,7 @@ pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_
traitlets = ">=5.3"
[package.extras]
-docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"]
test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"]
[[package]]
@@ -3901,24 +4285,23 @@ files = [
[[package]]
name = "limits"
-version = "3.5.0"
+version = "3.6.0"
description = "Rate limiting utilities"
optional = false
python-versions = ">=3.7"
files = [
- {file = "limits-3.5.0-py3-none-any.whl", hash = "sha256:3ad525faeb7e1c63859ca1cae34c9ed22a8f22c9ea9d96e2f412869f6b36beb9"},
- {file = "limits-3.5.0.tar.gz", hash = "sha256:b728c9ab3c6163997b1d11a51d252d951efd13f0d248ea2403383952498f8a22"},
+ {file = "limits-3.6.0-py3-none-any.whl", hash = "sha256:32fe29a398352c71bc43d53773117d47e22c5ea4200aef28d3f5fdee10334cd7"},
+ {file = "limits-3.6.0.tar.gz", hash = "sha256:57a9c69fd37ad1e4fa3886dff8d035227e1f6af87f47e9118627e72cf1ced3bf"},
]
[package.dependencies]
deprecated = ">=1.2"
importlib-resources = ">=1.3"
packaging = ">=21,<24"
-setuptools = "*"
typing-extensions = "*"
[package.extras]
-all = ["aetcd", "coredis (>=3.4.0,<5)", "emcache (>=0.6.1)", "emcache (>=1)", "etcd3", "motor (>=3,<4)", "pymemcache (>3,<5.0.0)", "pymongo (>4.1,<5)", "redis (>3,!=4.5.2,!=4.5.3,<5.0.0)", "redis (>=4.2.0,!=4.5.2,!=4.5.3)"]
+all = ["aetcd", "coredis (>=3.4.0,<5)", "emcache (>=0.6.1)", "emcache (>=1)", "etcd3", "motor (>=3,<4)", "pymemcache (>3,<5.0.0)", "pymongo (>4.1,<5)", "redis (>3,!=4.5.2,!=4.5.3,<6.0.0)", "redis (>=4.2.0,!=4.5.2,!=4.5.3)"]
async-etcd = ["aetcd"]
async-memcached = ["emcache (>=0.6.1)", "emcache (>=1)"]
async-mongodb = ["motor (>=3,<4)"]
@@ -3926,7 +4309,7 @@ async-redis = ["coredis (>=3.4.0,<5)"]
etcd = ["etcd3"]
memcached = ["pymemcache (>3,<5.0.0)"]
mongodb = ["pymongo (>4.1,<5)"]
-redis = ["redis (>3,!=4.5.2,!=4.5.3,<5.0.0)"]
+redis = ["redis (>3,!=4.5.2,!=4.5.3,<6.0.0)"]
rediscluster = ["redis (>=4.2.0,!=4.5.2,!=4.5.3)"]
[[package]]
@@ -3962,13 +4345,13 @@ files = [
[[package]]
name = "looker-sdk"
-version = "23.14.1"
+version = "23.16.0"
description = "Looker REST API"
optional = false
python-versions = ">=3.6"
files = [
- {file = "looker_sdk-23.14.1-py3-none-any.whl", hash = "sha256:678a8007c18ccc79e52be7b8bc9f27c5de6697cc6d90fc24d2fab5efff0e5587"},
- {file = "looker_sdk-23.14.1.tar.gz", hash = "sha256:9510aabec41aae75d41cb0c81a53fe18c00c3fbe774ac610cc62c9410c5ea0a4"},
+ {file = "looker_sdk-23.16.0-py3-none-any.whl", hash = "sha256:c5a680d4641a7725be6920630aa7ece0430e2a92abe1f396e8c63ed74dcd43d5"},
+ {file = "looker_sdk-23.16.0.tar.gz", hash = "sha256:4daa7a9812a92fdd1e0094cb0afb0db2e7bb54e10492b1345b67705dbe5089d5"},
]
[package.dependencies]
@@ -3979,95 +4362,110 @@ typing-extensions = ">=4.1.1"
[[package]]
name = "lxml"
-version = "4.9.2"
+version = "4.9.3"
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
files = [
- {file = "lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"},
- {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"},
- {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"},
- {file = "lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"},
- {file = "lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"},
- {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"},
- {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"},
- {file = "lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"},
- {file = "lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"},
- {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"},
- {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"},
- {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"},
- {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"},
- {file = "lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"},
- {file = "lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"},
- {file = "lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"},
- {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"},
- {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"},
- {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"},
- {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"},
- {file = "lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"},
- {file = "lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"},
- {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"},
- {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"},
- {file = "lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"},
- {file = "lxml-4.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5"},
- {file = "lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"},
- {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"},
- {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"},
- {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"},
- {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"},
- {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"},
- {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"},
- {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"},
- {file = "lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"},
- {file = "lxml-4.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3"},
- {file = "lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"},
- {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"},
- {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"},
- {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"},
- {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"},
- {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"},
- {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"},
- {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"},
- {file = "lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"},
- {file = "lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"},
- {file = "lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"},
- {file = "lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"},
- {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"},
- {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"},
- {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"},
- {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"},
- {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"},
- {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"},
- {file = "lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"},
- {file = "lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"},
- {file = "lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"},
- {file = "lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"},
- {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"},
- {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"},
- {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"},
- {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"},
- {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"},
- {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"},
- {file = "lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"},
- {file = "lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"},
- {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"},
- {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"},
- {file = "lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"},
- {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"},
- {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"},
- {file = "lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"},
- {file = "lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"},
- {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"},
- {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"},
- {file = "lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"},
- {file = "lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"},
+ {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"},
+ {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"},
+ {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"},
+ {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"},
+ {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"},
+ {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"},
+ {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"},
+ {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"},
+ {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"},
+ {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"},
+ {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"},
+ {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"},
+ {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"},
+ {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"},
+ {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"},
+ {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"},
+ {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"},
+ {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"},
+ {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"},
+ {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"},
+ {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"},
+ {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"},
+ {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"},
+ {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"},
+ {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"},
+ {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"},
+ {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"},
+ {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"},
+ {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"},
+ {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"},
+ {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"},
+ {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"},
+ {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"},
+ {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"},
+ {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"},
+ {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"},
+ {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"},
+ {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"},
+ {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"},
+ {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"},
+ {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"},
+ {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"},
+ {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"},
+ {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"},
+ {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"},
+ {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"},
+ {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"},
+ {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"},
+ {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"},
+ {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"},
+ {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"},
+ {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"},
+ {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"},
+ {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"},
+ {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"},
+ {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"},
+ {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"},
+ {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"},
+ {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"},
+ {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"},
+ {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"},
+ {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"},
+ {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"},
+ {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"},
+ {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"},
+ {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"},
+ {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"},
+ {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"},
+ {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"},
+ {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"},
+ {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"},
+ {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"},
+ {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"},
+ {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"},
+ {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"},
+ {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"},
+ {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"},
+ {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"},
+ {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"},
+ {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"},
+ {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"},
+ {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"},
+ {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"},
+ {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"},
+ {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"},
+ {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"},
+ {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"},
+ {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"},
+ {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"},
+ {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"},
+ {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"},
+ {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"},
]
[package.extras]
cssselect = ["cssselect (>=0.7)"]
html5 = ["html5lib"]
htmlsoup = ["BeautifulSoup4"]
-source = ["Cython (>=0.29.7)"]
+source = ["Cython (>=0.29.35)"]
[[package]]
name = "mako"
@@ -4089,17 +4487,18 @@ lingua = ["lingua"]
testing = ["pytest"]
[[package]]
-name = "Markdown"
-version = "3.3.7"
-description = "Python implementation of Markdown."
+name = "markdown"
+version = "3.5.1"
+description = "Python implementation of John Gruber's Markdown."
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"},
- {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"},
+ {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"},
+ {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"},
]
[package.extras]
+docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"]
testing = ["coverage", "pyyaml"]
[[package]]
@@ -4127,62 +4526,72 @@ rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "
testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
[[package]]
-name = "MarkupSafe"
-version = "2.1.2"
+name = "markupsafe"
+version = "2.1.3"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.7"
files = [
- {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"},
- {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"},
- {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"},
- {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"},
- {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"},
- {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"},
- {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"},
+ {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"},
+ {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"},
+ {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"},
+ {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"},
+ {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"},
+ {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"},
+ {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"},
]
[[package]]
@@ -4313,13 +4722,13 @@ files = [
[[package]]
name = "mkdocs"
-version = "1.4.2"
+version = "1.5.3"
description = "Project documentation with Markdown."
optional = false
python-versions = ">=3.7"
files = [
- {file = "mkdocs-1.4.2-py3-none-any.whl", hash = "sha256:c8856a832c1e56702577023cd64cc5f84948280c1c0fcc6af4cd39006ea6aa8c"},
- {file = "mkdocs-1.4.2.tar.gz", hash = "sha256:8947af423a6d0facf41ea1195b8e1e8c85ad94ac95ae307fe11232e0424b11c5"},
+ {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"},
+ {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"},
]
[package.dependencies]
@@ -4327,26 +4736,29 @@ click = ">=7.0"
colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
ghp-import = ">=1.0"
jinja2 = ">=2.11.1"
-markdown = ">=3.2.1,<3.4"
+markdown = ">=3.2.1"
+markupsafe = ">=2.0.1"
mergedeep = ">=1.3.4"
packaging = ">=20.5"
+pathspec = ">=0.11.1"
+platformdirs = ">=2.2.0"
pyyaml = ">=5.1"
pyyaml-env-tag = ">=0.1"
watchdog = ">=2.0"
[package.extras]
i18n = ["babel (>=2.9.0)"]
-min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"]
+min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"]
[[package]]
name = "mkdocs-autolinks-plugin"
-version = "0.6.0"
+version = "0.7.1"
description = "An MkDocs plugin"
optional = false
-python-versions = ">=2.7"
+python-versions = ">=3.4"
files = [
- {file = "mkdocs-autolinks-plugin-0.6.0.tar.gz", hash = "sha256:7bddb5bfb06f003fa7f139a4373ffc433e9ad761a297c7fe6ee205a4d7d913b6"},
- {file = "mkdocs_autolinks_plugin-0.6.0-py3-none-any.whl", hash = "sha256:db967582a5d3bd282d197730cd9035a74b559b0febb44645e95df27d5c67cad9"},
+ {file = "mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151"},
+ {file = "mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12"},
]
[package.dependencies]
@@ -4354,13 +4766,13 @@ mkdocs = ">=1.2.3"
[[package]]
name = "mkdocs-autorefs"
-version = "0.4.1"
+version = "0.5.0"
description = "Automatically link across pages in MkDocs."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "mkdocs-autorefs-0.4.1.tar.gz", hash = "sha256:70748a7bd025f9ecd6d6feeba8ba63f8e891a1af55f48e366d6d6e78493aba84"},
- {file = "mkdocs_autorefs-0.4.1-py3-none-any.whl", hash = "sha256:a2248a9501b29dc0cc8ba4c09f4f47ff121945f6ce33d760f145d6f89d313f5b"},
+ {file = "mkdocs_autorefs-0.5.0-py3-none-any.whl", hash = "sha256:7930fcb8ac1249f10e683967aeaddc0af49d90702af111a5e390e8b20b3d97ff"},
+ {file = "mkdocs_autorefs-0.5.0.tar.gz", hash = "sha256:9a5054a94c08d28855cfab967ada10ed5be76e2bfad642302a610b252c3274c0"},
]
[package.dependencies]
@@ -4369,13 +4781,13 @@ mkdocs = ">=1.1"
[[package]]
name = "mkdocs-awesome-pages-plugin"
-version = "2.9.0"
+version = "2.9.2"
description = "An MkDocs plugin that simplifies configuring page titles and their order"
optional = false
python-versions = ">=3.7"
files = [
- {file = "mkdocs_awesome_pages_plugin-2.9.0-py3-none-any.whl", hash = "sha256:783dddf7d42aba632324a2e5267ff13ca5a42ba9f4f37996d963f1b518f9009f"},
- {file = "mkdocs_awesome_pages_plugin-2.9.0.tar.gz", hash = "sha256:845a90b6ee0b00e641ff21a1599ad92805cfd12982c855686a79ef1c63454cc9"},
+ {file = "mkdocs_awesome_pages_plugin-2.9.2-py3-none-any.whl", hash = "sha256:9c795587695bd1ee85a8b7e43293005418df5a8b9ef296a3e628be427b693b4d"},
+ {file = "mkdocs_awesome_pages_plugin-2.9.2.tar.gz", hash = "sha256:c3f7d366ecfe99b64524c49a84d8e13c576c19a918ea2e6f59bb486a259313af"},
]
[package.dependencies]
@@ -4398,30 +4810,29 @@ mkdocs = "*"
[[package]]
name = "mkdocs-git-committers-plugin-2"
-version = "1.1.2"
-description = "An MkDocs plugin to create a list of contributors on the page"
+version = "2.2.2"
+description = "An MkDocs plugin to create a list of contributors on the page. The git-committers plugin will seed the template context with a list of GitHub or GitLab committers and other useful GIT info such as last modified date"
optional = false
-python-versions = ">=2.7"
+python-versions = ">=3.8,<4"
files = [
- {file = "mkdocs-git-committers-plugin-2-1.1.2.tar.gz", hash = "sha256:745993c4b486de0023ea4c2758daa7a8790a60ac6e369b55203db165d203be80"},
- {file = "mkdocs_git_committers_plugin_2-1.1.2-py3-none-any.whl", hash = "sha256:7ffa7c6eaae3ade9eaac625bd7dc155e8a543261c81a0354d12909b49eb48588"},
+ {file = "mkdocs-git-committers-plugin-2-2.2.2.tar.gz", hash = "sha256:87a241624116e1c6245034ca2ee3f247e4500589e75f19f71d352b052a8630d8"},
+ {file = "mkdocs_git_committers_plugin_2-2.2.2-py3-none-any.whl", hash = "sha256:73545bdc813ecad609681f876e4f9305f8878c1aeb01a5e92d0e21d7d02ad87e"},
]
[package.dependencies]
-beautifulsoup4 = "*"
gitpython = "*"
mkdocs = ">=1.0.3"
requests = "*"
[[package]]
name = "mkdocs-git-revision-date-localized-plugin"
-version = "1.2.0"
+version = "1.2.2"
description = "Mkdocs plugin that enables displaying the localized date of the last git modification of a markdown file."
optional = false
python-versions = ">=3.6"
files = [
- {file = "mkdocs-git-revision-date-localized-plugin-1.2.0.tar.gz", hash = "sha256:7752edd7c4dcaa9383e9a5b6a4f729831a62d604b0c43b319331127720c6a2bf"},
- {file = "mkdocs_git_revision_date_localized_plugin-1.2.0-py3-none-any.whl", hash = "sha256:540b9c930d8d48630c090b72ac2c3900ac2ed0799b23738a33b88e31f5198fe7"},
+ {file = "mkdocs-git-revision-date-localized-plugin-1.2.2.tar.gz", hash = "sha256:0c43a9aac1fa69df99a823f833cc223bac9967b60d5261a857761c7c6e3b30de"},
+ {file = "mkdocs_git_revision_date_localized_plugin-1.2.2-py3-none-any.whl", hash = "sha256:85c7fe9ab06e7a63c4e522c26fee8b51d357cb8cbe605064501ad80f4f31cb94"},
]
[package.dependencies]
@@ -4432,77 +4843,67 @@ pytz = "*"
[[package]]
name = "mkdocs-material"
-version = "9.1.6"
+version = "9.5.2"
description = "Documentation that simply works"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "mkdocs_material-9.1.6-py3-none-any.whl", hash = "sha256:f2eb1d40db89da9922944833c1387207408f8937e1c2b46ab86e0c8f170b71e0"},
- {file = "mkdocs_material-9.1.6.tar.gz", hash = "sha256:2e555152f9771646bfa62dc78a86052876183eff69ce30db03a33e85702b21fc"},
+ {file = "mkdocs_material-9.5.2-py3-none-any.whl", hash = "sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5"},
+ {file = "mkdocs_material-9.5.2.tar.gz", hash = "sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c"},
]
[package.dependencies]
-colorama = ">=0.4"
-jinja2 = ">=3.0"
-markdown = ">=3.2"
-mkdocs = ">=1.4.2"
-mkdocs-material-extensions = ">=1.1"
-pygments = ">=2.14"
-pymdown-extensions = ">=9.9.1"
-regex = ">=2022.4.24"
-requests = ">=2.26"
+babel = ">=2.10,<3.0"
+colorama = ">=0.4,<1.0"
+jinja2 = ">=3.0,<4.0"
+markdown = ">=3.2,<4.0"
+mkdocs = ">=1.5.3,<2.0"
+mkdocs-material-extensions = ">=1.3,<2.0"
+paginate = ">=0.5,<1.0"
+pygments = ">=2.16,<3.0"
+pymdown-extensions = ">=10.2,<11.0"
+regex = ">=2022.4"
+requests = ">=2.26,<3.0"
+
+[package.extras]
+git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"]
+imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"]
+recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"]
[[package]]
name = "mkdocs-material-extensions"
-version = "1.1.1"
+version = "1.3"
description = "Extension pack for Python Markdown and MkDocs Material."
optional = false
-python-versions = ">=3.7"
-files = [
- {file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"},
- {file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"},
-]
-
-[[package]]
-name = "mkdocs-minify-plugin"
-version = "0.5.0"
-description = "An MkDocs plugin to minify HTML, JS or CSS files prior to being written to disk"
-optional = false
-python-versions = ">=3.0"
+python-versions = ">=3.8"
files = [
- {file = "mkdocs-minify-plugin-0.5.0.tar.gz", hash = "sha256:32d9e8fbd89327a0f4f648f517297aad344c1bad64cfde110d059bd2f2780a6d"},
- {file = "mkdocs_minify_plugin-0.5.0-py2-none-any.whl", hash = "sha256:487c31ae6b8b3230f56910ce6bcf5c7e6ad9a8c4f51c720a4b989f30c2b0233f"},
+ {file = "mkdocs_material_extensions-1.3-py3-none-any.whl", hash = "sha256:0297cc48ba68a9fdd1ef3780a3b41b534b0d0df1d1181a44676fda5f464eeadc"},
+ {file = "mkdocs_material_extensions-1.3.tar.gz", hash = "sha256:f0446091503acb110a7cab9349cbc90eeac51b58d1caa92a704a81ca1e24ddbd"},
]
-[package.dependencies]
-csscompressor = ">=0.9.5"
-htmlmin = ">=0.1.4"
-jsmin = ">=3.0.0"
-mkdocs = ">=1.0.4"
-
[[package]]
name = "mkdocs-section-index"
-version = "0.3.5"
+version = "0.3.8"
description = "MkDocs plugin to allow clickable sections that lead to an index page"
optional = false
python-versions = ">=3.7"
files = [
- {file = "mkdocs_section_index-0.3.5-py3-none-any.whl", hash = "sha256:1f6359287b0a823d6297cf1cb6c0a49ed75851d0d1cea8b425b207a45ce10141"},
- {file = "mkdocs_section_index-0.3.5.tar.gz", hash = "sha256:fa8b1ce0649326b1873c6460c1df2bb0c4825fd21e3dd416f13ec212d31edf12"},
+ {file = "mkdocs_section_index-0.3.8-py3-none-any.whl", hash = "sha256:823d298d78bc1e73e23678ff60889f3c369c2167b03dba73fea88bd0e268a60d"},
+ {file = "mkdocs_section_index-0.3.8.tar.gz", hash = "sha256:bbd209f0da79441baf136ef3a9c40665bb9681d1fb62c73ca2f116fd1388a404"},
]
[package.dependencies]
-mkdocs = ">=1.0.3"
+mkdocs = ">=1.2"
[[package]]
name = "mkdocstrings"
-version = "0.21.2"
+version = "0.23.0"
description = "Automatic documentation from sources, for MkDocs."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "mkdocstrings-0.21.2-py3-none-any.whl", hash = "sha256:949ef8da92df9d692ca07be50616459a6b536083a25520fd54b00e8814ce019b"},
- {file = "mkdocstrings-0.21.2.tar.gz", hash = "sha256:304e56a2e90595708a38a13a278e538a67ad82052dd5c8b71f77a604a4f3d911"},
+ {file = "mkdocstrings-0.23.0-py3-none-any.whl", hash = "sha256:051fa4014dfcd9ed90254ae91de2dbb4f24e166347dae7be9a997fe16316c65e"},
+ {file = "mkdocstrings-0.23.0.tar.gz", hash = "sha256:d9c6a37ffbe7c14a7a54ef1258c70b8d394e6a33a1c80832bce40b9567138d1c"},
]
[package.dependencies]
@@ -4520,32 +4921,32 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"]
[[package]]
name = "mkdocstrings-python"
-version = "0.7.1"
+version = "1.7.5"
description = "A Python handler for mkdocstrings."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "mkdocstrings-python-0.7.1.tar.gz", hash = "sha256:c334b382dca202dfa37071c182418a6df5818356a95d54362a2b24822ca3af71"},
- {file = "mkdocstrings_python-0.7.1-py3-none-any.whl", hash = "sha256:a22060bfa374697678e9af4e62b020d990dad2711c98f7a9fac5c0345bef93c7"},
+ {file = "mkdocstrings_python-1.7.5-py3-none-any.whl", hash = "sha256:5f6246026353f0c0785135db70c3fe9a5d9318990fc7ceb11d62097b8ffdd704"},
+ {file = "mkdocstrings_python-1.7.5.tar.gz", hash = "sha256:c7d143728257dbf1aa550446555a554b760dcd40a763f077189d298502b800be"},
]
[package.dependencies]
-griffe = ">=0.11.1"
-mkdocstrings = ">=0.19"
+griffe = ">=0.37"
+mkdocstrings = ">=0.20"
[[package]]
name = "msal"
-version = "1.22.0"
-description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect."
+version = "1.24.1"
+description = "The Microsoft Authentication Library (MSAL) for Python library"
optional = false
-python-versions = "*"
+python-versions = ">=2.7"
files = [
- {file = "msal-1.22.0-py2.py3-none-any.whl", hash = "sha256:9120b7eafdf061c92f7b3d744e5f325fca35873445fa8ffebb40b1086a13dd58"},
- {file = "msal-1.22.0.tar.gz", hash = "sha256:8a82f5375642c1625c89058018430294c109440dce42ea667d466c2cab520acd"},
+ {file = "msal-1.24.1-py2.py3-none-any.whl", hash = "sha256:ce4320688f95c301ee74a4d0e9dbcfe029a63663a8cc61756f40d0d0d36574ad"},
+ {file = "msal-1.24.1.tar.gz", hash = "sha256:aa0972884b3c6fdec53d9a0bd15c12e5bd7b71ac1b66d746f54d128709f3f8f8"},
]
[package.dependencies]
-cryptography = ">=0.6,<43"
+cryptography = ">=0.6,<44"
PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]}
requests = ">=2.0.0,<3"
@@ -4570,6 +4971,27 @@ portalocker = [
{version = ">=1.6,<3", markers = "python_version >= \"3.5\" and platform_system == \"Windows\""},
]
+[[package]]
+name = "msrest"
+version = "0.7.1"
+description = "AutoRest swagger generator Python client runtime."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "msrest-0.7.1-py3-none-any.whl", hash = "sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32"},
+ {file = "msrest-0.7.1.zip", hash = "sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9"},
+]
+
+[package.dependencies]
+azure-core = ">=1.24.0"
+certifi = ">=2017.4.17"
+isodate = ">=0.6.0"
+requests = ">=2.16,<3.0"
+requests-oauthlib = ">=0.5.0"
+
+[package.extras]
+async = ["aiodns", "aiohttp (>=3.0)"]
+
[[package]]
name = "multidict"
version = "6.0.4"
@@ -4655,44 +5077,49 @@ files = [
[[package]]
name = "mypy"
-version = "0.971"
+version = "1.8.0"
description = "Optional static typing for Python"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c"},
- {file = "mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5"},
- {file = "mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3"},
- {file = "mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655"},
- {file = "mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103"},
- {file = "mypy-0.971-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca"},
- {file = "mypy-0.971-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417"},
- {file = "mypy-0.971-cp36-cp36m-win_amd64.whl", hash = "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09"},
- {file = "mypy-0.971-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8"},
- {file = "mypy-0.971-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0"},
- {file = "mypy-0.971-cp37-cp37m-win_amd64.whl", hash = "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2"},
- {file = "mypy-0.971-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27"},
- {file = "mypy-0.971-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856"},
- {file = "mypy-0.971-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71"},
- {file = "mypy-0.971-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27"},
- {file = "mypy-0.971-cp38-cp38-win_amd64.whl", hash = "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58"},
- {file = "mypy-0.971-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6"},
- {file = "mypy-0.971-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe"},
- {file = "mypy-0.971-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9"},
- {file = "mypy-0.971-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf"},
- {file = "mypy-0.971-cp39-cp39-win_amd64.whl", hash = "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0"},
- {file = "mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9"},
- {file = "mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56"},
-]
-
-[package.dependencies]
-mypy-extensions = ">=0.4.3"
+ {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"},
+ {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"},
+ {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"},
+ {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"},
+ {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"},
+ {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"},
+ {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"},
+ {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"},
+ {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"},
+ {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"},
+ {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"},
+ {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"},
+ {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"},
+ {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"},
+ {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"},
+ {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"},
+ {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"},
+ {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"},
+ {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"},
+ {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"},
+ {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"},
+ {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"},
+ {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"},
+ {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"},
+ {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"},
+ {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"},
+ {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"},
+]
+
+[package.dependencies]
+mypy-extensions = ">=1.0.0"
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
-typing-extensions = ">=3.10"
+typing-extensions = ">=4.1.0"
[package.extras]
dmypy = ["psutil (>=4.0)"]
-python2 = ["typed-ast (>=1.4.0,<2)"]
+install-types = ["pip"]
+mypyc = ["setuptools (>=50)"]
reports = ["lxml"]
[[package]]
@@ -4708,13 +5135,13 @@ files = [
[[package]]
name = "natsort"
-version = "8.3.1"
+version = "8.4.0"
description = "Simple yet flexible natural sorting in Python."
optional = false
python-versions = ">=3.7"
files = [
- {file = "natsort-8.3.1-py3-none-any.whl", hash = "sha256:d583bc9050dd10538de36297c960b93f873f0cd01671a3c50df5bd86dd391dcb"},
- {file = "natsort-8.3.1.tar.gz", hash = "sha256:517595492dde570a4fd6b6a76f644440c1ba51e2338c8a671d7f0475fda8f9fd"},
+ {file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"},
+ {file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"},
]
[package.extras]
@@ -4723,24 +5150,24 @@ icu = ["PyICU (>=1.0.0)"]
[[package]]
name = "nest-asyncio"
-version = "1.5.6"
+version = "1.5.8"
description = "Patch asyncio to allow nested event loops"
optional = false
python-versions = ">=3.5"
files = [
- {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"},
- {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"},
+ {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"},
+ {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"},
]
[[package]]
name = "nodeenv"
-version = "1.7.0"
+version = "1.8.0"
description = "Node.js virtual environment builder"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
files = [
- {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"},
- {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"},
+ {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"},
+ {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"},
]
[package.dependencies]
@@ -4748,39 +5175,47 @@ setuptools = "*"
[[package]]
name = "numpy"
-version = "1.24.2"
+version = "1.26.2"
description = "Fundamental package for array computing in Python"
optional = false
-python-versions = ">=3.8"
-files = [
- {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"},
- {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"},
- {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"},
- {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"},
- {file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"},
- {file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"},
- {file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"},
- {file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"},
- {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"},
- {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"},
- {file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"},
- {file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"},
- {file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"},
- {file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"},
- {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"},
- {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"},
- {file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"},
- {file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"},
- {file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"},
- {file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"},
- {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"},
- {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"},
- {file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"},
- {file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"},
- {file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"},
- {file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"},
- {file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"},
- {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"},
+python-versions = ">=3.9"
+files = [
+ {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"},
+ {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"},
+ {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"},
+ {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"},
+ {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"},
+ {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"},
+ {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"},
+ {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"},
+ {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"},
+ {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"},
+ {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"},
+ {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"},
+ {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"},
+ {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"},
+ {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"},
+ {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"},
+ {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"},
+ {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"},
+ {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"},
+ {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"},
+ {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"},
+ {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"},
+ {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"},
+ {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"},
+ {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"},
+ {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"},
+ {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"},
+ {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"},
+ {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"},
+ {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"},
+ {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"},
+ {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"},
+ {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"},
+ {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"},
+ {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"},
+ {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"},
]
[[package]]
@@ -4816,73 +5251,92 @@ PyYAML = ">=5.1.0"
[[package]]
name = "opentelemetry-api"
-version = "1.15.0"
+version = "1.20.0"
description = "OpenTelemetry Python API"
optional = false
python-versions = ">=3.7"
files = [
- {file = "opentelemetry_api-1.15.0-py3-none-any.whl", hash = "sha256:e6c2d2e42140fd396e96edf75a7ceb11073f4efb4db87565a431cc9d0f93f2e0"},
- {file = "opentelemetry_api-1.15.0.tar.gz", hash = "sha256:79ab791b4aaad27acc3dc3ba01596db5b5aac2ef75c70622c6038051d6c2cded"},
+ {file = "opentelemetry_api-1.20.0-py3-none-any.whl", hash = "sha256:982b76036fec0fdaf490ae3dfd9f28c81442a33414f737abc687a32758cdcba5"},
+ {file = "opentelemetry_api-1.20.0.tar.gz", hash = "sha256:06abe351db7572f8afdd0fb889ce53f3c992dbf6f6262507b385cc1963e06983"},
]
[package.dependencies]
deprecated = ">=1.2.6"
-setuptools = ">=16.0"
+importlib-metadata = ">=6.0,<7.0"
[[package]]
name = "opentelemetry-exporter-otlp"
-version = "1.15.0"
+version = "1.20.0"
description = "OpenTelemetry Collector Exporters"
optional = false
python-versions = ">=3.7"
files = [
- {file = "opentelemetry_exporter_otlp-1.15.0-py3-none-any.whl", hash = "sha256:79f22748b6a54808a0448093dfa189c8490e729f67c134d4c992533d9393b33e"},
- {file = "opentelemetry_exporter_otlp-1.15.0.tar.gz", hash = "sha256:4f7c49751d9720e2e726e13b0bb958ccade4e29122c305d92c033da432c8d2c5"},
+ {file = "opentelemetry_exporter_otlp-1.20.0-py3-none-any.whl", hash = "sha256:3b4d47726da83fef84467bdf96da4f8f3d1a61b35db3c16354c391ce8e9decf6"},
+ {file = "opentelemetry_exporter_otlp-1.20.0.tar.gz", hash = "sha256:f8cb69f80c333166e5cfaa030f9e28f7faaf343aff24caaa2cb4202ea4849b6b"},
+]
+
+[package.dependencies]
+opentelemetry-exporter-otlp-proto-grpc = "1.20.0"
+opentelemetry-exporter-otlp-proto-http = "1.20.0"
+
+[[package]]
+name = "opentelemetry-exporter-otlp-proto-common"
+version = "1.20.0"
+description = "OpenTelemetry Protobuf encoding"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "opentelemetry_exporter_otlp_proto_common-1.20.0-py3-none-any.whl", hash = "sha256:dd63209b40702636ab6ae76a06b401b646ad7b008a906ecb41222d4af24fbdef"},
+ {file = "opentelemetry_exporter_otlp_proto_common-1.20.0.tar.gz", hash = "sha256:df60c681bd61812e50b3a39a7a1afeeb6d4066117583249fcc262269374e7a49"},
]
[package.dependencies]
-opentelemetry-exporter-otlp-proto-grpc = "1.15.0"
-opentelemetry-exporter-otlp-proto-http = "1.15.0"
+backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""}
+opentelemetry-proto = "1.20.0"
[[package]]
name = "opentelemetry-exporter-otlp-proto-grpc"
-version = "1.15.0"
+version = "1.20.0"
description = "OpenTelemetry Collector Protobuf over gRPC Exporter"
optional = false
python-versions = ">=3.7"
files = [
- {file = "opentelemetry_exporter_otlp_proto_grpc-1.15.0-py3-none-any.whl", hash = "sha256:c2a5492ba7d140109968135d641d06ce3c5bd73c50665f787526065d57d7fd1d"},
- {file = "opentelemetry_exporter_otlp_proto_grpc-1.15.0.tar.gz", hash = "sha256:844f2a4bb9bcda34e4eb6fe36765e5031aacb36dc60ed88c90fc246942ea26e7"},
+ {file = "opentelemetry_exporter_otlp_proto_grpc-1.20.0-py3-none-any.whl", hash = "sha256:7c3f066065891b56348ba2c7f9df6ec635a712841cae0a36f2f6a81642ae7dec"},
+ {file = "opentelemetry_exporter_otlp_proto_grpc-1.20.0.tar.gz", hash = "sha256:6c06d43c3771bda1795226e327722b4b980fa1ca1ec9e985f2ef3e29795bdd52"},
]
[package.dependencies]
backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""}
+deprecated = ">=1.2.6"
googleapis-common-protos = ">=1.52,<2.0"
grpcio = ">=1.0.0,<2.0.0"
-opentelemetry-api = ">=1.12,<2.0"
-opentelemetry-proto = "1.15.0"
-opentelemetry-sdk = ">=1.12,<2.0"
+opentelemetry-api = ">=1.15,<2.0"
+opentelemetry-exporter-otlp-proto-common = "1.20.0"
+opentelemetry-proto = "1.20.0"
+opentelemetry-sdk = ">=1.20.0,<1.21.0"
[package.extras]
test = ["pytest-grpc"]
[[package]]
name = "opentelemetry-exporter-otlp-proto-http"
-version = "1.15.0"
+version = "1.20.0"
description = "OpenTelemetry Collector Protobuf over HTTP Exporter"
optional = false
python-versions = ">=3.7"
files = [
- {file = "opentelemetry_exporter_otlp_proto_http-1.15.0-py3-none-any.whl", hash = "sha256:3ec2a02196c8a54bf5cbf7fe623a5238625638e83b6047a983bdf96e2bbb74c0"},
- {file = "opentelemetry_exporter_otlp_proto_http-1.15.0.tar.gz", hash = "sha256:11b2c814249a49b22f6cca7a06b05701f561d577b747f3660dfd67b6eb9daf9c"},
+ {file = "opentelemetry_exporter_otlp_proto_http-1.20.0-py3-none-any.whl", hash = "sha256:03f6e768ad25f1c3a9586e8c695db4a4adf978f8546a1285fa962e16bfbb0bd6"},
+ {file = "opentelemetry_exporter_otlp_proto_http-1.20.0.tar.gz", hash = "sha256:500f42821420fdf0759193d6438edc0f4e984a83e14c08a23023c06a188861b4"},
]
[package.dependencies]
backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""}
+deprecated = ">=1.2.6"
googleapis-common-protos = ">=1.52,<2.0"
-opentelemetry-api = ">=1.12,<2.0"
-opentelemetry-proto = "1.15.0"
-opentelemetry-sdk = ">=1.12,<2.0"
+opentelemetry-api = ">=1.15,<2.0"
+opentelemetry-exporter-otlp-proto-common = "1.20.0"
+opentelemetry-proto = "1.20.0"
+opentelemetry-sdk = ">=1.20.0,<1.21.0"
requests = ">=2.7,<3.0"
[package.extras]
@@ -4890,13 +5344,13 @@ test = ["responses (==0.22.0)"]
[[package]]
name = "opentelemetry-proto"
-version = "1.15.0"
+version = "1.20.0"
description = "OpenTelemetry Python Proto"
optional = false
python-versions = ">=3.7"
files = [
- {file = "opentelemetry_proto-1.15.0-py3-none-any.whl", hash = "sha256:044b6d044b4d10530f250856f933442b8753a17f94ae37c207607f733fb9a844"},
- {file = "opentelemetry_proto-1.15.0.tar.gz", hash = "sha256:9c4008e40ac8cab359daac283fbe7002c5c29c77ea2674ad5626a249e64e0101"},
+ {file = "opentelemetry_proto-1.20.0-py3-none-any.whl", hash = "sha256:512c3d2c6864fb7547a69577c3907348e6c985b7a204533563cb4c4c5046203b"},
+ {file = "opentelemetry_proto-1.20.0.tar.gz", hash = "sha256:cf01f49b3072ee57468bccb1a4f93bdb55411f4512d0ac3f97c5c04c0040b5a2"},
]
[package.dependencies]
@@ -4904,30 +5358,29 @@ protobuf = ">=3.19,<5.0"
[[package]]
name = "opentelemetry-sdk"
-version = "1.15.0"
+version = "1.20.0"
description = "OpenTelemetry Python SDK"
optional = false
python-versions = ">=3.7"
files = [
- {file = "opentelemetry_sdk-1.15.0-py3-none-any.whl", hash = "sha256:555c533e9837766119bbccc7a80458c9971d853a6f1da683a2246cd5e53b4645"},
- {file = "opentelemetry_sdk-1.15.0.tar.gz", hash = "sha256:98dbffcfeebcbff12c0c974292d6ea603180a145904cf838b1fe4d5c99078425"},
+ {file = "opentelemetry_sdk-1.20.0-py3-none-any.whl", hash = "sha256:f2230c276ff4c63ea09b3cb2e2ac6b1265f90af64e8d16bbf275c81a9ce8e804"},
+ {file = "opentelemetry_sdk-1.20.0.tar.gz", hash = "sha256:702e432a457fa717fd2ddfd30640180e69938f85bb7fec3e479f85f61c1843f8"},
]
[package.dependencies]
-opentelemetry-api = "1.15.0"
-opentelemetry-semantic-conventions = "0.36b0"
-setuptools = ">=16.0"
+opentelemetry-api = "1.20.0"
+opentelemetry-semantic-conventions = "0.41b0"
typing-extensions = ">=3.7.4"
[[package]]
name = "opentelemetry-semantic-conventions"
-version = "0.36b0"
+version = "0.41b0"
description = "OpenTelemetry Semantic Conventions"
optional = false
python-versions = ">=3.7"
files = [
- {file = "opentelemetry_semantic_conventions-0.36b0-py3-none-any.whl", hash = "sha256:adc05635e87b9d3e007c9f530eed487fc3ef2177d02f82f674f28ebf9aff8243"},
- {file = "opentelemetry_semantic_conventions-0.36b0.tar.gz", hash = "sha256:829dc221795467d98b773c04096e29be038d77526dc8d6ac76f546fb6279bf01"},
+ {file = "opentelemetry_semantic_conventions-0.41b0-py3-none-any.whl", hash = "sha256:45404391ed9e50998183a4925ad1b497c01c143f06500c3b9c3d0013492bb0f2"},
+ {file = "opentelemetry_semantic_conventions-0.41b0.tar.gz", hash = "sha256:0ce5b040b8a3fc816ea5879a743b3d6fe5db61f6485e4def94c6ee4d402e1eb7"},
]
[[package]]
@@ -4946,126 +5399,147 @@ dev = ["black", "mypy", "pytest"]
[[package]]
name = "orjson"
-version = "3.8.10"
+version = "3.9.10"
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
optional = false
-python-versions = ">= 3.7"
+python-versions = ">=3.8"
files = [
- {file = "orjson-3.8.10-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:4dfe0651e26492d5d929bbf4322de9afbd1c51ac2e3947a7f78492b20359711d"},
- {file = "orjson-3.8.10-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:bc30de5c7b3a402eb59cc0656b8ee53ca36322fc52ab67739c92635174f88336"},
- {file = "orjson-3.8.10-cp310-cp310-macosx_11_0_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:2a7879767dac03ab56849716bddb1a931be9051a4232cf9c73279fb8d187fa57"},
- {file = "orjson-3.8.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c08b426fae7b9577b528f99af0f7e0ff3ce46858dd9a7d1bf86d30f18df89a4c"},
- {file = "orjson-3.8.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bce970f293825e008dbf739268dfa41dfe583aa2a1b5ef4efe53a0e92e9671ea"},
- {file = "orjson-3.8.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b23fb0264bbdd7218aa685cb6fc71f0dcecf34182f0a8596a3a0dff010c06f9"},
- {file = "orjson-3.8.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0826ad2dc1cea1547edff14ce580374f0061d853cbac088c71162dbfe2e52205"},
- {file = "orjson-3.8.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7bce6e61cea6426309259b04c6ee2295b3f823ea51a033749459fe2dd0423b2"},
- {file = "orjson-3.8.10-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0b470d31244a6f647e5402aac7d2abaf7bb4f52379acf67722a09d35a45c9417"},
- {file = "orjson-3.8.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:48824649019a25d3e52f6454435cf19fe1eb3d05ee697e65d257f58ae3aa94d9"},
- {file = "orjson-3.8.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:faee89e885796a9cc493c930013fa5cfcec9bfaee431ddf00f0fbfb57166a8b3"},
- {file = "orjson-3.8.10-cp310-none-win_amd64.whl", hash = "sha256:3cfe32b1227fe029a5ad989fbec0b453a34e5e6d9a977723f7c3046d062d3537"},
- {file = "orjson-3.8.10-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:2073b62822738d6740bd2492f6035af5c2fd34aa198322b803dc0e70559a17b7"},
- {file = "orjson-3.8.10-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:b2c4faf20b6bb5a2d7ac0c16f58eb1a3800abcef188c011296d1dc2bb2224d48"},
- {file = "orjson-3.8.10-cp311-cp311-macosx_11_0_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:887788c0d96d3dd402c0c8911277a5d81000d234942b63737dffe7b6ae02d3a4"},
- {file = "orjson-3.8.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c1825997232a324911d11c75d91e1e0338c7b723c149cf53a5fc24496c048a4"},
- {file = "orjson-3.8.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7e85d4682f3ed7321d36846cad0503e944ea9579ef435d4c162e1b73ead8ac9"},
- {file = "orjson-3.8.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8cdaacecb92997916603ab232bb096d0fa9e56b418ca956b9754187d65ca06"},
- {file = "orjson-3.8.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ddabc5e44702d13137949adee3c60b7091e73a664f6e07c7b428eebb2dea7bbf"},
- {file = "orjson-3.8.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27bb26e171e9cfdbec39c7ca4739b6bef8bd06c293d56d92d5e3a3fc017df17d"},
- {file = "orjson-3.8.10-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1810e5446fe68d61732e9743592da0ec807e63972eef076d09e02878c2f5958e"},
- {file = "orjson-3.8.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:61e2e51cefe7ef90c4fbbc9fd38ecc091575a3ea7751d56fad95cbebeae2a054"},
- {file = "orjson-3.8.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f3e9ac9483c2b4cd794e760316966b7bd1e6afb52b0218f068a4e80c9b2db4f6"},
- {file = "orjson-3.8.10-cp311-none-win_amd64.whl", hash = "sha256:26aee557cf8c93b2a971b5a4a8e3cca19780573531493ce6573aa1002f5c4378"},
- {file = "orjson-3.8.10-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:11ae68f995a50724032af297c92f20bcde31005e0bf3653b12bff9356394615b"},
- {file = "orjson-3.8.10-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:35d879b46b8029e1e01e9f6067928b470a4efa1ca749b6d053232b873c2dcf66"},
- {file = "orjson-3.8.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:345e41abd1d9e3ecfb554e1e75ff818cf42e268bd06ad25a96c34e00f73a327e"},
- {file = "orjson-3.8.10-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:45a5afc9cda6b8aac066dd50d8194432fbc33e71f7164f95402999b725232d78"},
- {file = "orjson-3.8.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad632dc330a7b39da42530c8d146f76f727d476c01b719dc6743c2b5701aaf6b"},
- {file = "orjson-3.8.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bf2556ba99292c4dc550560384dd22e88b5cdbe6d98fb4e202e902b5775cf9f"},
- {file = "orjson-3.8.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b88afd662190f19c3bb5036a903589f88b1d2c2608fbb97281ce000db6b08897"},
- {file = "orjson-3.8.10-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:abce8d319aae800fd2d774db1106f926dee0e8a5ca85998fd76391fcb58ef94f"},
- {file = "orjson-3.8.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e999abca892accada083f7079612307d94dd14cc105a699588a324f843216509"},
- {file = "orjson-3.8.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a3fdee68c4bb3c5d6f89ed4560f1384b5d6260e48fbf868bae1a245a3c693d4d"},
- {file = "orjson-3.8.10-cp37-none-win_amd64.whl", hash = "sha256:e5d7f82506212e047b184c06e4bcd48c1483e101969013623cebcf51cf12cad9"},
- {file = "orjson-3.8.10-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:d953e6c2087dcd990e794f8405011369ee11cf13e9aaae3172ee762ee63947f2"},
- {file = "orjson-3.8.10-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:81aa3f321d201bff0bd0f4014ea44e51d58a9a02d8f2b0eeab2cee22611be8e1"},
- {file = "orjson-3.8.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d27b6182f75896dd8c10ea0f78b9265a3454be72d00632b97f84d7031900dd4"},
- {file = "orjson-3.8.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1486600bc1dd1db26c588dd482689edba3d72d301accbe4301db4b2b28bd7aa4"},
- {file = "orjson-3.8.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:344ea91c556a2ce6423dc13401b83ab0392aa697a97fa4142c2c63a6fd0bbfef"},
- {file = "orjson-3.8.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:979f231e3bad1c835627eef1a30db12a8af58bfb475a6758868ea7e81897211f"},
- {file = "orjson-3.8.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa3a26dcf0f5f2912a8ce8e87273e68b2a9526854d19fd09ea671b154418e88"},
- {file = "orjson-3.8.10-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:b6e79d8864794635974b18821b49a7f27859d17b93413d4603efadf2e92da7a5"},
- {file = "orjson-3.8.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ce49999bcbbc14791c61844bc8a69af44f5205d219be540e074660038adae6bf"},
- {file = "orjson-3.8.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c2ef690335b24f9272dbf6639353c1ffc3f196623a92b851063e28e9515cf7dd"},
- {file = "orjson-3.8.10-cp38-none-win_amd64.whl", hash = "sha256:5a0b1f4e4fa75e26f814161196e365fc0e1a16e3c07428154505b680a17df02f"},
- {file = "orjson-3.8.10-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:af7601a78b99f0515af2f8ab12c955c0072ffcc1e437fb2556f4465783a4d813"},
- {file = "orjson-3.8.10-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:6bbd7b3a3e2030b03c68c4d4b19a2ef5b89081cbb43c05fe2010767ef5e408db"},
- {file = "orjson-3.8.10-cp39-cp39-macosx_11_0_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:3775b01c1a04d07fd9201eac68e83d55542282c6fcb6bbe88b90450254373950"},
- {file = "orjson-3.8.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4355c9aedfefe60904e8bd7901315ebbc8bb828f665e4c9bc94b1432e67cb6f7"},
- {file = "orjson-3.8.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b7b0ba074375e25c1594e770e2215941e2017c3cd121889150737fa1123e8bfe"},
- {file = "orjson-3.8.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34b6901c110c06ab9e8d7d0496db4bc9a0c162ca8d77f67539d22cb39e0a1ef4"},
- {file = "orjson-3.8.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb62ec16a1c26ad9487727b529103cb6a94a1d4969d5b32dd0eab5c3f4f5a6f2"},
- {file = "orjson-3.8.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595e1e7d04aaaa3d41113e4eb9f765ab642173c4001182684ae9ddc621bb11c8"},
- {file = "orjson-3.8.10-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:64ffd92328473a2f9af059410bd10c703206a4bbc7b70abb1bedcd8761e39eb8"},
- {file = "orjson-3.8.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b1f648ec89c6a426098868460c0ef8c86b457ce1378d7569ff4acb6c0c454048"},
- {file = "orjson-3.8.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6a286ad379972e4f46579e772f0477e6b505f1823aabcd64ef097dbb4549e1a4"},
- {file = "orjson-3.8.10-cp39-none-win_amd64.whl", hash = "sha256:d2874cee6856d7c386b596e50bc517d1973d73dc40b2bd6abec057b5e7c76b2f"},
- {file = "orjson-3.8.10.tar.gz", hash = "sha256:dcf6adb4471b69875034afab51a14b64f1026bc968175a2bb02c5f6b358bd413"},
+ {file = "orjson-3.9.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c18a4da2f50050a03d1da5317388ef84a16013302a5281d6f64e4a3f406aabc4"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5148bab4d71f58948c7c39d12b14a9005b6ab35a0bdf317a8ade9a9e4d9d0bd5"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cf7837c3b11a2dfb589f8530b3cff2bd0307ace4c301e8997e95c7468c1378e"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c62b6fa2961a1dcc51ebe88771be5319a93fd89bd247c9ddf732bc250507bc2b"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deeb3922a7a804755bbe6b5be9b312e746137a03600f488290318936c1a2d4dc"},
+ {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1234dc92d011d3554d929b6cf058ac4a24d188d97be5e04355f1b9223e98bbe9"},
+ {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:06ad5543217e0e46fd7ab7ea45d506c76f878b87b1b4e369006bdb01acc05a83"},
+ {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fd72fab7bddce46c6826994ce1e7de145ae1e9e106ebb8eb9ce1393ca01444d"},
+ {file = "orjson-3.9.10-cp310-none-win32.whl", hash = "sha256:b5b7d4a44cc0e6ff98da5d56cde794385bdd212a86563ac321ca64d7f80c80d1"},
+ {file = "orjson-3.9.10-cp310-none-win_amd64.whl", hash = "sha256:61804231099214e2f84998316f3238c4c2c4aaec302df12b21a64d72e2a135c7"},
+ {file = "orjson-3.9.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca"},
+ {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb"},
+ {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499"},
+ {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3"},
+ {file = "orjson-3.9.10-cp311-none-win32.whl", hash = "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8"},
+ {file = "orjson-3.9.10-cp311-none-win_amd64.whl", hash = "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616"},
+ {file = "orjson-3.9.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d"},
+ {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d"},
+ {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921"},
+ {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca"},
+ {file = "orjson-3.9.10-cp312-none-win_amd64.whl", hash = "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d"},
+ {file = "orjson-3.9.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8b9ba0ccd5a7f4219e67fbbe25e6b4a46ceef783c42af7dbc1da548eb28b6531"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e2ecd1d349e62e3960695214f40939bbfdcaeaaa62ccc638f8e651cf0970e5f"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f433be3b3f4c66016d5a20e5b4444ef833a1f802ced13a2d852c637f69729c1"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4689270c35d4bb3102e103ac43c3f0b76b169760aff8bcf2d401a3e0e58cdb7f"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd176f528a8151a6efc5359b853ba3cc0e82d4cd1fab9c1300c5d957dc8f48c"},
+ {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2ce5ea4f71681623f04e2b7dadede3c7435dfb5e5e2d1d0ec25b35530e277b"},
+ {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:49f8ad582da6e8d2cf663c4ba5bf9f83cc052570a3a767487fec6af839b0e777"},
+ {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a11b4b1a8415f105d989876a19b173f6cdc89ca13855ccc67c18efbd7cbd1f8"},
+ {file = "orjson-3.9.10-cp38-none-win32.whl", hash = "sha256:a353bf1f565ed27ba71a419b2cd3db9d6151da426b61b289b6ba1422a702e643"},
+ {file = "orjson-3.9.10-cp38-none-win_amd64.whl", hash = "sha256:e28a50b5be854e18d54f75ef1bb13e1abf4bc650ab9d635e4258c58e71eb6ad5"},
+ {file = "orjson-3.9.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ee5926746232f627a3be1cc175b2cfad24d0170d520361f4ce3fa2fd83f09e1d"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a73160e823151f33cdc05fe2cea557c5ef12fdf276ce29bb4f1c571c8368a60"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c338ed69ad0b8f8f8920c13f529889fe0771abbb46550013e3c3d01e5174deef"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5869e8e130e99687d9e4be835116c4ebd83ca92e52e55810962446d841aba8de"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2c1e559d96a7f94a4f581e2a32d6d610df5840881a8cba8f25e446f4d792df3"},
+ {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a3a3a72c9811b56adf8bcc829b010163bb2fc308877e50e9910c9357e78521"},
+ {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f8fb7f5ecf4f6355683ac6881fd64b5bb2b8a60e3ccde6ff799e48791d8f864"},
+ {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c943b35ecdf7123b2d81d225397efddf0bce2e81db2f3ae633ead38e85cd5ade"},
+ {file = "orjson-3.9.10-cp39-none-win32.whl", hash = "sha256:fb0b361d73f6b8eeceba47cd37070b5e6c9de5beaeaa63a1cb35c7e1a73ef088"},
+ {file = "orjson-3.9.10-cp39-none-win_amd64.whl", hash = "sha256:b90f340cb6397ec7a854157fac03f0c82b744abdd1c0941a024c3c29d1340aff"},
+ {file = "orjson-3.9.10.tar.gz", hash = "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1"},
]
[[package]]
name = "packaging"
-version = "23.1"
+version = "23.2"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.7"
files = [
- {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
- {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
+ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
+ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
+]
+
+[[package]]
+name = "paginate"
+version = "0.5.6"
+description = "Divides large result sets into pages for easier browsing"
+optional = false
+python-versions = "*"
+files = [
+ {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"},
]
[[package]]
name = "pandas"
-version = "1.5.3"
+version = "2.1.2"
description = "Powerful data structures for data analysis, time series, and statistics"
optional = false
-python-versions = ">=3.8"
-files = [
- {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"},
- {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"},
- {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"},
- {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"},
- {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"},
- {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"},
- {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"},
- {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"},
- {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"},
- {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"},
- {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"},
- {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"},
- {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"},
- {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"},
- {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"},
- {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"},
- {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"},
- {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"},
- {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"},
- {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"},
- {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"},
- {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"},
- {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"},
- {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"},
- {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"},
- {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"},
- {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"},
-]
-
-[package.dependencies]
-numpy = {version = ">=1.21.0", markers = "python_version >= \"3.10\""}
-python-dateutil = ">=2.8.1"
+python-versions = ">=3.9"
+files = [
+ {file = "pandas-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:24057459f19db9ebb02984c6fdd164a970b31a95f38e4a49cf7615b36a1b532c"},
+ {file = "pandas-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6cf8fcc8a63d333970b950a7331a30544cf59b1a97baf0a7409e09eafc1ac38"},
+ {file = "pandas-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ae6ffbd9d614c20d028c7117ee911fc4e266b4dca2065d5c5909e401f8ff683"},
+ {file = "pandas-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff794eeb7883c5aefb1ed572e7ff533ae779f6c6277849eab9e77986e352688"},
+ {file = "pandas-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02954e285e8e2f4006b6f22be6f0df1f1c3c97adbb7ed211c6b483426f20d5c8"},
+ {file = "pandas-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:5b40c9f494e1f27588c369b9e4a6ca19cd924b3a0e1ef9ef1a8e30a07a438f43"},
+ {file = "pandas-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08d287b68fd28906a94564f15118a7ca8c242e50ae7f8bd91130c362b2108a81"},
+ {file = "pandas-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bbd98dcdcd32f408947afdb3f7434fade6edd408c3077bbce7bd840d654d92c6"},
+ {file = "pandas-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e90c95abb3285d06f6e4feedafc134306a8eced93cb78e08cf50e224d5ce22e2"},
+ {file = "pandas-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52867d69a54e71666cd184b04e839cff7dfc8ed0cd6b936995117fdae8790b69"},
+ {file = "pandas-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d0382645ede2fde352da2a885aac28ec37d38587864c0689b4b2361d17b1d4c"},
+ {file = "pandas-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:65177d1c519b55e5b7f094c660ed357bb7d86e799686bb71653b8a4803d8ff0d"},
+ {file = "pandas-2.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5aa6b86802e8cf7716bf4b4b5a3c99b12d34e9c6a9d06dad254447a620437931"},
+ {file = "pandas-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d594e2ce51b8e0b4074e6644758865dc2bb13fd654450c1eae51201260a539f1"},
+ {file = "pandas-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3223f997b6d2ebf9c010260cf3d889848a93f5d22bb4d14cd32638b3d8bba7ad"},
+ {file = "pandas-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4944dc004ca6cc701dfa19afb8bdb26ad36b9bed5bcec617d2a11e9cae6902"},
+ {file = "pandas-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3f76280ce8ec216dde336e55b2b82e883401cf466da0fe3be317c03fb8ee7c7d"},
+ {file = "pandas-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:7ad20d24acf3a0042512b7e8d8fdc2e827126ed519d6bd1ed8e6c14ec8a2c813"},
+ {file = "pandas-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:021f09c15e1381e202d95d4a21ece8e7f2bf1388b6d7e9cae09dfe27bd2043d1"},
+ {file = "pandas-2.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7f12b2de0060b0b858cfec0016e7d980ae5bae455a1746bfcc70929100ee633"},
+ {file = "pandas-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c166b9bb27c1715bed94495d9598a7f02950b4749dba9349c1dd2cbf10729d"},
+ {file = "pandas-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25c9976c17311388fcd953cb3d0697999b2205333f4e11e669d90ff8d830d429"},
+ {file = "pandas-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:851b5afbb0d62f6129ae891b533aa508cc357d5892c240c91933d945fff15731"},
+ {file = "pandas-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:e78507adcc730533619de07bfdd1c62b2918a68cd4419ea386e28abf7f6a1e5c"},
+ {file = "pandas-2.1.2.tar.gz", hash = "sha256:52897edc2774d2779fbeb6880d2cfb305daa0b1a29c16b91f531a18918a6e0f3"},
+]
+
+[package.dependencies]
+numpy = {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}
+python-dateutil = ">=2.8.2"
pytz = ">=2020.1"
-
-[package.extras]
-test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
+tzdata = ">=2022.1"
+
+[package.extras]
+all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"]
+aws = ["s3fs (>=2022.05.0)"]
+clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"]
+compression = ["zstandard (>=0.17.0)"]
+computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"]
+consortium-standard = ["dataframe-api-compat (>=0.1.7)"]
+excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"]
+feather = ["pyarrow (>=7.0.0)"]
+fss = ["fsspec (>=2022.05.0)"]
+gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"]
+hdf5 = ["tables (>=3.7.0)"]
+html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"]
+mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"]
+output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"]
+parquet = ["pyarrow (>=7.0.0)"]
+performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"]
+plot = ["matplotlib (>=3.6.1)"]
+postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"]
+spss = ["pyreadstat (>=1.1.5)"]
+sql-other = ["SQLAlchemy (>=1.4.36)"]
+test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"]
+xml = ["lxml (>=4.8.0)"]
[[package]]
name = "pandas-gbq"
@@ -5125,13 +5599,13 @@ testing = ["docopt", "pytest (<6.0.0)"]
[[package]]
name = "pathspec"
-version = "0.11.1"
+version = "0.11.2"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
python-versions = ">=3.7"
files = [
- {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"},
- {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"},
+ {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
+ {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
]
[[package]]
@@ -5197,89 +5671,66 @@ files = [
ptyprocess = ">=0.5"
[[package]]
-name = "pickleshare"
-version = "0.7.5"
-description = "Tiny 'shelve'-like database with concurrency support"
-optional = false
-python-versions = "*"
-files = [
- {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"},
- {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
-]
-
-[[package]]
-name = "Pillow"
-version = "9.5.0"
+name = "pillow"
+version = "10.1.0"
description = "Python Imaging Library (Fork)"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"},
- {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"},
- {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"},
- {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"},
- {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"},
- {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"},
- {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"},
- {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"},
- {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"},
- {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"},
- {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"},
- {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"},
- {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"},
- {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"},
- {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"},
- {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"},
- {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"},
- {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"},
- {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"},
- {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"},
- {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"},
- {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"},
- {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"},
- {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"},
- {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"},
- {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"},
- {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"},
- {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"},
- {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"},
- {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"},
- {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"},
- {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"},
- {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"},
- {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"},
- {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"},
- {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"},
- {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"},
- {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"},
- {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"},
- {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"},
- {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"},
- {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"},
- {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"},
- {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"},
- {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"},
- {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"},
- {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"},
- {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"},
- {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"},
- {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"},
- {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"},
- {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"},
- {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"},
- {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"},
- {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"},
- {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"},
- {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"},
- {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"},
- {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"},
- {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"},
- {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"},
- {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"},
- {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"},
- {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"},
- {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"},
- {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"},
+ {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"},
+ {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"},
+ {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"},
+ {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"},
+ {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"},
+ {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"},
+ {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"},
+ {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"},
+ {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"},
+ {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"},
+ {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"},
+ {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"},
+ {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"},
+ {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"},
+ {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"},
+ {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"},
+ {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"},
+ {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"},
+ {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"},
+ {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"},
+ {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"},
+ {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"},
+ {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"},
+ {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"},
+ {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"},
+ {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"},
+ {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"},
+ {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"},
+ {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"},
+ {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"},
+ {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"},
+ {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"},
+ {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"},
]
[package.extras]
@@ -5288,28 +5739,28 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
[[package]]
name = "platformdirs"
-version = "3.2.0"
+version = "3.11.0"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
optional = false
python-versions = ">=3.7"
files = [
- {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"},
- {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"},
+ {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"},
+ {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"},
]
[package.extras]
-docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"]
-test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
[[package]]
name = "plotly"
-version = "5.14.1"
+version = "5.18.0"
description = "An open-source, interactive data visualization library for Python"
optional = false
python-versions = ">=3.6"
files = [
- {file = "plotly-5.14.1-py2.py3-none-any.whl", hash = "sha256:a63f3ad9e4cc2e02902a738e5e3e7f3d1307f2732ac71a6c28f1238ed3052826"},
- {file = "plotly-5.14.1.tar.gz", hash = "sha256:bcac86d7fcba3eff7260c1eddc36ca34dae2aded10a0709808446565e0e53b93"},
+ {file = "plotly-5.18.0-py3-none-any.whl", hash = "sha256:23aa8ea2f4fb364a20d34ad38235524bd9d691bf5299e800bca608c31e8db8de"},
+ {file = "plotly-5.18.0.tar.gz", hash = "sha256:360a31e6fbb49d12b007036eb6929521343d6bee2236f8459915821baefa2cbb"},
]
[package.dependencies]
@@ -5318,13 +5769,13 @@ tenacity = ">=6.2.0"
[[package]]
name = "pluggy"
-version = "1.0.0"
+version = "1.3.0"
description = "plugin and hook calling mechanisms for python"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
- {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
+ {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"},
+ {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"},
]
[package.extras]
@@ -5333,13 +5784,13 @@ testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "portalocker"
-version = "2.7.0"
+version = "2.8.2"
description = "Wraps the portalocker recipe for easy usage"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.8"
files = [
- {file = "portalocker-2.7.0-py2.py3-none-any.whl", hash = "sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"},
- {file = "portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51"},
+ {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"},
+ {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"},
]
[package.dependencies]
@@ -5348,17 +5799,17 @@ pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
redis = ["redis"]
-tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"]
[[package]]
name = "pre-commit"
-version = "2.21.0"
+version = "3.6.0"
description = "A framework for managing and maintaining multi-language pre-commit hooks."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.9"
files = [
- {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"},
- {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"},
+ {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"},
+ {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"},
]
[package.dependencies]
@@ -5368,6 +5819,17 @@ nodeenv = ">=0.11.1"
pyyaml = ">=5.1"
virtualenv = ">=20.10.0"
+[[package]]
+name = "prettier"
+version = "0.0.7"
+description = "Properly pprint of nested objects"
+optional = false
+python-versions = "*"
+files = [
+ {file = "prettier-0.0.7-py3-none-any.whl", hash = "sha256:20e76791de41cafe481328dd49552303f29ca192151cee1b120c26f66cae9bfc"},
+ {file = "prettier-0.0.7.tar.gz", hash = "sha256:6c34b8cd09fd9c8956c05d6395ea3f575e0122dce494ba57685c07065abed427"},
+]
+
[[package]]
name = "prison"
version = "0.2.1"
@@ -5387,13 +5849,13 @@ dev = ["nose", "pipreqs", "twine"]
[[package]]
name = "prompt-toolkit"
-version = "3.0.38"
+version = "3.0.41"
description = "Library for building powerful interactive command lines in Python"
optional = false
python-versions = ">=3.7.0"
files = [
- {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"},
- {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"},
+ {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"},
+ {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"},
]
[package.dependencies]
@@ -5401,13 +5863,13 @@ wcwidth = "*"
[[package]]
name = "proto-plus"
-version = "1.22.2"
+version = "1.22.3"
description = "Beautiful, Pythonic protocol buffers."
optional = false
python-versions = ">=3.6"
files = [
- {file = "proto-plus-1.22.2.tar.gz", hash = "sha256:0e8cda3d5a634d9895b75c573c9352c16486cb75deb0e078b5fda34db4243165"},
- {file = "proto_plus-1.22.2-py3-none-any.whl", hash = "sha256:de34e52d6c9c6fcd704192f09767cb561bb4ee64e70eede20b0834d841f0be4d"},
+ {file = "proto-plus-1.22.3.tar.gz", hash = "sha256:fdcd09713cbd42480740d2fe29c990f7fbd885a67efc328aa8be6ee3e9f76a6b"},
+ {file = "proto_plus-1.22.3-py3-none-any.whl", hash = "sha256:a49cd903bc0b6ab41f76bf65510439d56ca76f868adf0274e738bfdd096894df"},
]
[package.dependencies]
@@ -5449,25 +5911,27 @@ files = [
[[package]]
name = "psutil"
-version = "5.9.5"
+version = "5.9.6"
description = "Cross-platform lib for process and system monitoring in Python."
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
- {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"},
- {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"},
- {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"},
- {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"},
- {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"},
- {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"},
- {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"},
- {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"},
- {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"},
- {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"},
- {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"},
- {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"},
- {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"},
- {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"},
+ {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"},
+ {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"},
+ {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"},
+ {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"},
+ {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"},
+ {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"},
+ {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"},
+ {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"},
+ {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"},
+ {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"},
+ {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"},
+ {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"},
+ {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"},
+ {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"},
+ {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"},
+ {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"},
]
[package.extras]
@@ -5522,36 +5986,47 @@ files = [
[[package]]
name = "pyarrow"
-version = "12.0.1"
+version = "14.0.1"
description = "Python library for Apache Arrow"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pyarrow-12.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:6d288029a94a9bb5407ceebdd7110ba398a00412c5b0155ee9813a40d246c5df"},
- {file = "pyarrow-12.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345e1828efdbd9aa4d4de7d5676778aba384a2c3add896d995b23d368e60e5af"},
- {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d6009fdf8986332b2169314da482baed47ac053311c8934ac6651e614deacd6"},
- {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d3c4cbbf81e6dd23fe921bc91dc4619ea3b79bc58ef10bce0f49bdafb103daf"},
- {file = "pyarrow-12.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdacf515ec276709ac8042c7d9bd5be83b4f5f39c6c037a17a60d7ebfd92c890"},
- {file = "pyarrow-12.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:749be7fd2ff260683f9cc739cb862fb11be376de965a2a8ccbf2693b098db6c7"},
- {file = "pyarrow-12.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6895b5fb74289d055c43db3af0de6e16b07586c45763cb5e558d38b86a91e3a7"},
- {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1887bdae17ec3b4c046fcf19951e71b6a619f39fa674f9881216173566c8f718"},
- {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2c9cb8eeabbadf5fcfc3d1ddea616c7ce893db2ce4dcef0ac13b099ad7ca082"},
- {file = "pyarrow-12.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce4aebdf412bd0eeb800d8e47db854f9f9f7e2f5a0220440acf219ddfddd4f63"},
- {file = "pyarrow-12.0.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:e0d8730c7f6e893f6db5d5b86eda42c0a130842d101992b581e2138e4d5663d3"},
- {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43364daec02f69fec89d2315f7fbfbeec956e0d991cbbef471681bd77875c40f"},
- {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051f9f5ccf585f12d7de836e50965b3c235542cc896959320d9776ab93f3b33d"},
- {file = "pyarrow-12.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:be2757e9275875d2a9c6e6052ac7957fbbfc7bc7370e4a036a9b893e96fedaba"},
- {file = "pyarrow-12.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:cf812306d66f40f69e684300f7af5111c11f6e0d89d6b733e05a3de44961529d"},
- {file = "pyarrow-12.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:459a1c0ed2d68671188b2118c63bac91eaef6fc150c77ddd8a583e3c795737bf"},
- {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85e705e33eaf666bbe508a16fd5ba27ca061e177916b7a317ba5a51bee43384c"},
- {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9120c3eb2b1f6f516a3b7a9714ed860882d9ef98c4b17edcdc91d95b7528db60"},
- {file = "pyarrow-12.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:c780f4dc40460015d80fcd6a6140de80b615349ed68ef9adb653fe351778c9b3"},
- {file = "pyarrow-12.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a3c63124fc26bf5f95f508f5d04e1ece8cc23a8b0af2a1e6ab2b1ec3fdc91b24"},
- {file = "pyarrow-12.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b13329f79fa4472324f8d32dc1b1216616d09bd1e77cfb13104dec5463632c36"},
- {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb656150d3d12ec1396f6dde542db1675a95c0cc8366d507347b0beed96e87ca"},
- {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6251e38470da97a5b2e00de5c6a049149f7b2bd62f12fa5dbb9ac674119ba71a"},
- {file = "pyarrow-12.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3de26da901216149ce086920547dfff5cd22818c9eab67ebc41e863a5883bac7"},
- {file = "pyarrow-12.0.1.tar.gz", hash = "sha256:cce317fc96e5b71107bf1f9f184d5e54e2bd14bbf3f9a3d62819961f0af86fec"},
+ {file = "pyarrow-14.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:96d64e5ba7dceb519a955e5eeb5c9adcfd63f73a56aea4722e2cc81364fc567a"},
+ {file = "pyarrow-14.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a8ae88c0038d1bc362a682320112ee6774f006134cd5afc291591ee4bc06505"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f6f053cb66dc24091f5511e5920e45c83107f954a21032feadc7b9e3a8e7851"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:906b0dc25f2be12e95975722f1e60e162437023f490dbd80d0deb7375baf3171"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:78d4a77a46a7de9388b653af1c4ce539350726cd9af62e0831e4f2bd0c95a2f4"},
+ {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06ca79080ef89d6529bb8e5074d4b4f6086143b2520494fcb7cf8a99079cde93"},
+ {file = "pyarrow-14.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:32542164d905002c42dff896efdac79b3bdd7291b1b74aa292fac8450d0e4dcd"},
+ {file = "pyarrow-14.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:c7331b4ed3401b7ee56f22c980608cf273f0380f77d0f73dd3c185f78f5a6220"},
+ {file = "pyarrow-14.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:922e8b49b88da8633d6cac0e1b5a690311b6758d6f5d7c2be71acb0f1e14cd61"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58c889851ca33f992ea916b48b8540735055201b177cb0dcf0596a495a667b00"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30d8494870d9916bb53b2a4384948491444741cb9a38253c590e21f836b01222"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:be28e1a07f20391bb0b15ea03dcac3aade29fc773c5eb4bee2838e9b2cdde0cb"},
+ {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:981670b4ce0110d8dcb3246410a4aabf5714db5d8ea63b15686bce1c914b1f83"},
+ {file = "pyarrow-14.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:4756a2b373a28f6166c42711240643fb8bd6322467e9aacabd26b488fa41ec23"},
+ {file = "pyarrow-14.0.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:cf87e2cec65dd5cf1aa4aba918d523ef56ef95597b545bbaad01e6433851aa10"},
+ {file = "pyarrow-14.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:470ae0194fbfdfbf4a6b65b4f9e0f6e1fa0ea5b90c1ee6b65b38aecee53508c8"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6263cffd0c3721c1e348062997babdf0151301f7353010c9c9a8ed47448f82ab"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8089d7e77d1455d529dbd7cff08898bbb2666ee48bc4085203af1d826a33cc"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fada8396bc739d958d0b81d291cfd201126ed5e7913cb73de6bc606befc30226"},
+ {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2a145dab9ed7849fc1101bf03bcdc69913547f10513fdf70fc3ab6c0a50c7eee"},
+ {file = "pyarrow-14.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:05fe7994745b634c5fb16ce5717e39a1ac1fac3e2b0795232841660aa76647cd"},
+ {file = "pyarrow-14.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:a8eeef015ae69d104c4c3117a6011e7e3ecd1abec79dc87fd2fac6e442f666ee"},
+ {file = "pyarrow-14.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c76807540989fe8fcd02285dd15e4f2a3da0b09d27781abec3adc265ddbeba1"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:450e4605e3c20e558485f9161a79280a61c55efe585d51513c014de9ae8d393f"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323cbe60210173ffd7db78bfd50b80bdd792c4c9daca8843ef3cd70b186649db"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0140c7e2b740e08c5a459439d87acd26b747fc408bde0a8806096ee0baaa0c15"},
+ {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:e592e482edd9f1ab32f18cd6a716c45b2c0f2403dc2af782f4e9674952e6dd27"},
+ {file = "pyarrow-14.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d264ad13605b61959f2ae7c1d25b1a5b8505b112715c961418c8396433f213ad"},
+ {file = "pyarrow-14.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01e44de9749cddc486169cb632f3c99962318e9dacac7778315a110f4bf8a450"},
+ {file = "pyarrow-14.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0351fecf0e26e152542bc164c22ea2a8e8c682726fce160ce4d459ea802d69c"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33c1f6110c386464fd2e5e4ea3624466055bbe681ff185fd6c9daa98f30a3f9a"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11e045dfa09855b6d3e7705a37c42e2dc2c71d608fab34d3c23df2e02df9aec3"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:097828b55321897db0e1dbfc606e3ff8101ae5725673498cbfa7754ee0da80e4"},
+ {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1daab52050a1c48506c029e6fa0944a7b2436334d7e44221c16f6f1b2cc9c510"},
+ {file = "pyarrow-14.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3f6d5faf4f1b0d5a7f97be987cf9e9f8cd39902611e818fe134588ee99bf0283"},
+ {file = "pyarrow-14.0.1.tar.gz", hash = "sha256:b8b3f4fe8d4ec15e1ef9b599b94683c5216adaed78d5cb4c606180546d1e2ee1"},
]
[package.dependencies]
@@ -5559,88 +6034,87 @@ numpy = ">=1.16.6"
[[package]]
name = "pyasn1"
-version = "0.4.8"
-description = "ASN.1 types and codecs"
+version = "0.5.0"
+description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [
- {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"},
- {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
+ {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"},
+ {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"},
]
[[package]]
name = "pyasn1-modules"
-version = "0.2.8"
-description = "A collection of ASN.1-based protocols modules."
+version = "0.3.0"
+description = "A collection of ASN.1-based protocols modules"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [
- {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"},
- {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"},
+ {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"},
+ {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"},
]
[package.dependencies]
-pyasn1 = ">=0.4.6,<0.5.0"
+pyasn1 = ">=0.4.6,<0.6.0"
[[package]]
name = "pycares"
-version = "4.3.0"
+version = "4.4.0"
description = "Python interface for c-ares"
optional = false
-python-versions = "*"
+python-versions = ">=3.8"
files = [
- {file = "pycares-4.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:19c9cdd3322d422931982939773e453e491dfc5c0b2e23d7266959315c7a0824"},
- {file = "pycares-4.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9e56e9cdf46a092970dc4b75bbabddea9f480be5eeadc3fcae3eb5c6807c4136"},
- {file = "pycares-4.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c75a6241c79b935048272cb77df498da64b8defc8c4b29fdf9870e43ba4cbb4"},
- {file = "pycares-4.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d8654fac3742791b8bef59d1fbb3e19ae6a5c48876a6d98659f7c66ee546c4"},
- {file = "pycares-4.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebf50b049a245880f1aa16a6f72c4408e0a65b49ea1d3bf13383a44a2cabd2bf"},
- {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:84daf560962763c0359fd79c750ef480f0fda40c08b57765088dbe362e8dc452"},
- {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:978d10da7ee74b9979c494afa8b646411119ad0186a29c7f13c72bb4295630c6"},
- {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c5b9d7fe52eb3d243f5ead58d5c0011884226d961df8360a34618c38c7515"},
- {file = "pycares-4.3.0-cp310-cp310-win32.whl", hash = "sha256:da7c7089ae617317d2cbe38baefd3821387b3bfef7b3ee5b797b871cb1257974"},
- {file = "pycares-4.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:7106dc683db30e1d851283b7b9df7a5ea4964d6bdd000d918d91d4b1f9bed329"},
- {file = "pycares-4.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4e7a24ecef0b1933f2a3fdbf328d1b529a76cda113f8364fa0742e5b3bd76566"},
- {file = "pycares-4.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7abccc2aa4771c06994e4d9ed596453061e2b8846f887d9c98a64ccdaf4790a"},
- {file = "pycares-4.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531fed46c5ed798a914c3207be4ae7b297c4d09e4183d3cf8fd9ee59a55d5080"},
- {file = "pycares-4.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c9335175af0c64a1e0ba67bdd349eb62d4eea0ad02c235ccdf0d535fd20f323"},
- {file = "pycares-4.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f0e95535027d2dcd51e780410632b0d3ed7e9e5ceb25dc0fe937f2c2960079"},
- {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3692179ce5fb96908ba342e1e5303608d0c976f0d5d4619fa9d3d6d9d5a9a1b4"},
- {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c4cb6cc7fe8e0606d30b60367f59fe26d1472e88555d61e202db70dea5c8edb"},
- {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3215445396c74103e2054e6b349d9e85883ceda2006d0039fc2d58c9b11818a2"},
- {file = "pycares-4.3.0-cp311-cp311-win32.whl", hash = "sha256:6a0c0c3a0adf490bba9dbb37dbd07ec81e4a6584f095036ac34f06a633710ffe"},
- {file = "pycares-4.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:995cb37cc39bd40ca87bb16555a0f7724f3be30d9f9059a4caab2fde45b1b903"},
- {file = "pycares-4.3.0-cp36-cp36m-win32.whl", hash = "sha256:4c9187be72449c975c11daa1d94d7ddcc494f8a4c37a6c18f977cd7024a531d9"},
- {file = "pycares-4.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d7405ba10a2903a58b8b0faedcb54994c9ee002ad01963587fabf93e7e479783"},
- {file = "pycares-4.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:40aaa12081495f879f11f4cfc95edfec1ea14711188563102f9e33fe98728fac"},
- {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4972cac24b66c5997f3a3e2cb608e408066d80103d443e36d626a88a287b9ae7"},
- {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35886dba7aa5b73affca8729aeb5a1f5e94d3d9a764adb1b7e75bafca44eeca5"},
- {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5cea6e1f3be016f155d60f27f16c1074d58b4d6e123228fdbc3326d076016af8"},
- {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3a9fd2665b053afb39226ac6f8137a60910ca7729358456df2fb94866f4297de"},
- {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e8e9195f869120e44e0aa0a6098bb5c19947f4753054365891f592e6f9eab3ef"},
- {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:674486ecf2afb25ee219171b07cdaba481a1aaa2dabb155779c7be9ded03eaa9"},
- {file = "pycares-4.3.0-cp37-cp37m-win32.whl", hash = "sha256:1b6cd3161851499b6894d1e23bfd633e7b775472f5af35ae35409c4a47a2d45e"},
- {file = "pycares-4.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:710120c97b9afdba443564350c3f5f72fd9aae74d95b73dc062ca8ac3d7f36d7"},
- {file = "pycares-4.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9103649bd29d84bc6bcfaf09def9c0592bbc766018fad19d76d09989608b915d"},
- {file = "pycares-4.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c072dbaf73cb5434279578dc35322867d8d5df053e14fdcdcc589994ba4804ae"},
- {file = "pycares-4.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008531733f9c7a976b59c7760a3672b191159fd69ae76c01ca051f20b5e44164"},
- {file = "pycares-4.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2aae02d97d77dcff840ab55f86cb8b99bf644acbca17e1edb7048408b9782088"},
- {file = "pycares-4.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:257953ae6d400a934fd9193aeb20990ac84a78648bdf5978e998bd007a4045cd"},
- {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c28d481efae26936ec08cb6beea305f4b145503b152cf2c4dc68cc4ad9644f0e"},
- {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:976249b39037dbfb709ccf7e1c40d2785905a0065536385d501b94570cfed96d"},
- {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:98568c30cfab6b327d94ae1acdf85bbba4cffd415980804985d34ca07e6f4791"},
- {file = "pycares-4.3.0-cp38-cp38-win32.whl", hash = "sha256:a2f3c4f49f43162f7e684419d9834c2c8ec165e54cb8dc47aa9dc0c2132701c0"},
- {file = "pycares-4.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:1730ef93e33e4682fbbf0e7fb19df2ed9822779d17de8ea6e20d5b0d71c1d2be"},
- {file = "pycares-4.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a26b3f1684557025da26ce65d076619890c82b95e38cc7284ce51c3539a1ce8"},
- {file = "pycares-4.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86112cce01655b9f63c5e53b74722084e88e784a7a8ad138d373440337c591c9"},
- {file = "pycares-4.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01465a191dc78e923884bb45cd63c7e012623e520cf7ed67e542413ee334804"},
- {file = "pycares-4.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9fd5d6012f3ee8c8038cbfe16e988bbd17b2f21eea86650874bf63757ee6161"},
- {file = "pycares-4.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa36b8ea91eae20b5c7205f3e6654423f066af24a1df02b274770a96cbcafaa7"},
- {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:61019151130557c1788cae52e4f2f388a7520c9d92574f3a0d61c974c6740db0"},
- {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:231962bb46274c52632469a1e686fab065dbd106dbef586de4f7fb101e297587"},
- {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6c979512fa51c7ccef5204fe10ed4e5c44c2bce5f335fe98a3e423f1672bd7d4"},
- {file = "pycares-4.3.0-cp39-cp39-win32.whl", hash = "sha256:655cf0df862ce3847a60e1a106dafa2ba2c14e6636bac49e874347acdc7312dc"},
- {file = "pycares-4.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:36f2251ad0f99a5ce13df45c94c3161d9734c9e9fa2b9b4cc163b853ca170dc5"},
- {file = "pycares-4.3.0.tar.gz", hash = "sha256:c542696f6dac978e9d99192384745a65f80a7d9450501151e4a7563e06010d45"},
+ {file = "pycares-4.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:24da119850841d16996713d9c3374ca28a21deee056d609fbbed29065d17e1f6"},
+ {file = "pycares-4.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8f64cb58729689d4d0e78f0bfb4c25ce2f851d0274c0273ac751795c04b8798a"},
+ {file = "pycares-4.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33e2a1120887e89075f7f814ec144f66a6ce06a54f5722ccefc62fbeda83cff"},
+ {file = "pycares-4.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c680fef1b502ee680f8f0b95a41af4ec2c234e50e16c0af5bbda31999d3584bd"},
+ {file = "pycares-4.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fff16b09042ba077f7b8aa5868d1d22456f0002574d0ba43462b10a009331677"},
+ {file = "pycares-4.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:229a1675eb33bc9afb1fc463e73ee334950ccc485bc83a43f6ae5839fb4d5fa3"},
+ {file = "pycares-4.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3aebc73e5ad70464f998f77f2da2063aa617cbd8d3e8174dd7c5b4518f967153"},
+ {file = "pycares-4.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ef64649eba56448f65e26546d85c860709844d2fc22ef14d324fe0b27f761a9"},
+ {file = "pycares-4.4.0-cp310-cp310-win32.whl", hash = "sha256:4afc2644423f4eef97857a9fd61be9758ce5e336b4b0bd3d591238bb4b8b03e0"},
+ {file = "pycares-4.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5ed4e04af4012f875b78219d34434a6d08a67175150ac1b79eb70ab585d4ba8c"},
+ {file = "pycares-4.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bce8db2fc6f3174bd39b81405210b9b88d7b607d33e56a970c34a0c190da0490"},
+ {file = "pycares-4.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a0303428d013ccf5c51de59c83f9127aba6200adb7fd4be57eddb432a1edd2a"},
+ {file = "pycares-4.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afb91792f1556f97be7f7acb57dc7756d89c5a87bd8b90363a77dbf9ea653817"},
+ {file = "pycares-4.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b61579cecf1f4d616e5ea31a6e423a16680ab0d3a24a2ffe7bb1d4ee162477ff"},
+ {file = "pycares-4.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7af06968cbf6851566e806bf3e72825b0e6671832a2cbe840be1d2d65350710"},
+ {file = "pycares-4.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ceb12974367b0a68a05d52f4162b29f575d241bd53de155efe632bf2c943c7f6"},
+ {file = "pycares-4.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2eeec144bcf6a7b6f2d74d6e70cbba7886a84dd373c886f06cb137a07de4954c"},
+ {file = "pycares-4.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3a6f7cfdfd11eb5493d6d632e582408c8f3b429f295f8799c584c108b28db6f"},
+ {file = "pycares-4.4.0-cp311-cp311-win32.whl", hash = "sha256:34736a2ffaa9c08ca9c707011a2d7b69074bbf82d645d8138bba771479b2362f"},
+ {file = "pycares-4.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:eb66c30eb11e877976b7ead13632082a8621df648c408b8e15cdb91a452dd502"},
+ {file = "pycares-4.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fd644505a8cfd7f6584d33a9066d4e3d47700f050ef1490230c962de5dfb28c6"},
+ {file = "pycares-4.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52084961262232ec04bd75f5043aed7e5d8d9695e542ff691dfef0110209f2d4"},
+ {file = "pycares-4.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0c5368206057884cde18602580083aeaad9b860e2eac14fd253543158ce1e93"},
+ {file = "pycares-4.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:112a4979c695b1c86f6782163d7dec58d57a3b9510536dcf4826550f9053dd9a"},
+ {file = "pycares-4.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d186dafccdaa3409194c0f94db93c1a5d191145a275f19da6591f9499b8e7b8"},
+ {file = "pycares-4.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:64965dc19c578a683ea73487a215a8897276224e004d50eeb21f0bc7a0b63c88"},
+ {file = "pycares-4.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ed2a38e34bec6f2586435f6ff0bc5fe11d14bebd7ed492cf739a424e81681540"},
+ {file = "pycares-4.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:94d6962db81541eb0396d2f0dfcbb18cdb8c8b251d165efc2d974ae652c547d4"},
+ {file = "pycares-4.4.0-cp312-cp312-win32.whl", hash = "sha256:1168a48a834813aa80f412be2df4abaf630528a58d15c704857448b20b1675c0"},
+ {file = "pycares-4.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:db24c4e7fea4a052c6e869cbf387dd85d53b9736cfe1ef5d8d568d1ca925e977"},
+ {file = "pycares-4.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:21a5a0468861ec7df7befa69050f952da13db5427ae41ffe4713bc96291d1d95"},
+ {file = "pycares-4.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22c00bf659a9fa44d7b405cf1cd69b68b9d37537899898d8cbe5dffa4016b273"},
+ {file = "pycares-4.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23aa3993a352491a47fcf17867f61472f32f874df4adcbb486294bd9fbe8abee"},
+ {file = "pycares-4.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:813d661cbe2e37d87da2d16b7110a6860e93ddb11735c6919c8a3545c7b9c8d8"},
+ {file = "pycares-4.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77cf5a2fd5583c670de41a7f4a7b46e5cbabe7180d8029f728571f4d2e864084"},
+ {file = "pycares-4.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3eaa6681c0a3e3f3868c77aca14b7760fed35fdfda2fe587e15c701950e7bc69"},
+ {file = "pycares-4.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ad58e284a658a8a6a84af2e0b62f2f961f303cedfe551854d7bd40c3cbb61912"},
+ {file = "pycares-4.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bfb89ca9e3d0a9b5332deeb666b2ede9d3469107742158f4aeda5ce032d003f4"},
+ {file = "pycares-4.4.0-cp38-cp38-win32.whl", hash = "sha256:f36bdc1562142e3695555d2f4ac0cb69af165eddcefa98efc1c79495b533481f"},
+ {file = "pycares-4.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:902461a92b6a80fd5041a2ec5235680c7cc35e43615639ec2a40e63fca2dfb51"},
+ {file = "pycares-4.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7bddc6adba8f699728f7fc1c9ce8cef359817ad78e2ed52b9502cb5f8dc7f741"},
+ {file = "pycares-4.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cb49d5805cd347c404f928c5ae7c35e86ba0c58ffa701dbe905365e77ce7d641"},
+ {file = "pycares-4.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56cf3349fa3a2e67ed387a7974c11d233734636fe19facfcda261b411af14d80"},
+ {file = "pycares-4.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bf2eaa83a5987e48fa63302f0fe7ce3275cfda87b34d40fef9ce703fb3ac002"},
+ {file = "pycares-4.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82bba2ab77eb5addbf9758d514d9bdef3c1bfe7d1649a47bd9a0d55a23ef478b"},
+ {file = "pycares-4.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c6a8bde63106f162fca736e842a916853cad3c8d9d137e11c9ffa37efa818b02"},
+ {file = "pycares-4.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5f646eec041db6ffdbcaf3e0756fb92018f7af3266138c756bb09d2b5baadec"},
+ {file = "pycares-4.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9dc04c54c6ea615210c1b9e803d0e2d2255f87a3d5d119b6482c8f0dfa15b26b"},
+ {file = "pycares-4.4.0-cp39-cp39-win32.whl", hash = "sha256:97892cced5794d721fb4ff8765764aa4ea48fe8b2c3820677505b96b83d4ef47"},
+ {file = "pycares-4.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:917f08f0b5d9324e9a34211e68d27447c552b50ab967044776bbab7e42a553a2"},
+ {file = "pycares-4.4.0.tar.gz", hash = "sha256:f47579d508f2f56eddd16ce72045782ad3b1b3b678098699e2b6a1b30733e1c2"},
]
[package.dependencies]
@@ -5651,13 +6125,13 @@ idna = ["idna (>=2.1)"]
[[package]]
name = "pycodestyle"
-version = "2.9.1"
+version = "2.11.1"
description = "Python style guide checker"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"},
- {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"},
+ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"},
+ {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"},
]
[[package]]
@@ -5673,55 +6147,140 @@ files = [
[[package]]
name = "pydantic"
-version = "1.10.12"
-description = "Data validation and settings management using python type hints"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"},
- {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"},
- {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"},
- {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"},
- {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"},
- {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"},
- {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"},
- {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"},
- {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"},
- {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"},
- {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"},
- {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"},
- {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"},
- {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"},
- {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"},
- {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"},
- {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"},
- {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"},
- {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"},
- {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"},
- {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"},
- {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"},
- {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"},
- {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"},
- {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"},
- {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"},
- {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"},
- {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"},
- {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"},
- {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"},
- {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"},
- {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"},
- {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"},
- {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"},
- {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"},
- {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"},
-]
-
-[package.dependencies]
-typing-extensions = ">=4.2.0"
-
-[package.extras]
-dotenv = ["python-dotenv (>=0.10.4)"]
-email = ["email-validator (>=1.0.3)"]
+version = "2.4.2"
+description = "Data validation using Python type hints"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"},
+ {file = "pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"},
+]
+
+[package.dependencies]
+annotated-types = ">=0.4.0"
+pydantic-core = "2.10.1"
+typing-extensions = ">=4.6.1"
+
+[package.extras]
+email = ["email-validator (>=2.0.0)"]
+
+[[package]]
+name = "pydantic-core"
+version = "2.10.1"
+description = ""
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pydantic_core-2.10.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:d64728ee14e667ba27c66314b7d880b8eeb050e58ffc5fec3b7a109f8cddbd63"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48525933fea744a3e7464c19bfede85df4aba79ce90c60b94d8b6e1eddd67096"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef337945bbd76cce390d1b2496ccf9f90b1c1242a3a7bc242ca4a9fc5993427a"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1392e0638af203cee360495fd2cfdd6054711f2db5175b6e9c3c461b76f5175"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0675ba5d22de54d07bccde38997e780044dcfa9a71aac9fd7d4d7a1d2e3e65f7"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128552af70a64660f21cb0eb4876cbdadf1a1f9d5de820fed6421fa8de07c893"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f6e6aed5818c264412ac0598b581a002a9f050cb2637a84979859e70197aa9e"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecaac27da855b8d73f92123e5f03612b04c5632fd0a476e469dfc47cd37d6b2e"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3c01c2fb081fced3bbb3da78510693dc7121bb893a1f0f5f4b48013201f362e"},
+ {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92f675fefa977625105708492850bcbc1182bfc3e997f8eecb866d1927c98ae6"},
+ {file = "pydantic_core-2.10.1-cp310-none-win32.whl", hash = "sha256:420a692b547736a8d8703c39ea935ab5d8f0d2573f8f123b0a294e49a73f214b"},
+ {file = "pydantic_core-2.10.1-cp310-none-win_amd64.whl", hash = "sha256:0880e239827b4b5b3e2ce05e6b766a7414e5f5aedc4523be6b68cfbc7f61c5d0"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"},
+ {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"},
+ {file = "pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"},
+ {file = "pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"},
+ {file = "pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"},
+ {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"},
+ {file = "pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"},
+ {file = "pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"},
+ {file = "pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9badf8d45171d92387410b04639d73811b785b5161ecadabf056ea14d62d4ede"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:ebedb45b9feb7258fac0a268a3f6bec0a2ea4d9558f3d6f813f02ff3a6dc6698"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfe1090245c078720d250d19cb05d67e21a9cd7c257698ef139bc41cf6c27b4f"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e357571bb0efd65fd55f18db0a2fb0ed89d0bb1d41d906b138f088933ae618bb"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3dcd587b69bbf54fc04ca157c2323b8911033e827fffaecf0cafa5a892a0904"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c120c9ce3b163b985a3b966bb701114beb1da4b0468b9b236fc754783d85aa3"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d6bca84ffc966cc9976b09a18cf9543ed4d4ecbd97e7086f9ce9327ea48891"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cabb9710f09d5d2e9e2748c3e3e20d991a4c5f96ed8f1132518f54ab2967221"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:82f55187a5bebae7d81d35b1e9aaea5e169d44819789837cdd4720d768c55d15"},
+ {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1d40f55222b233e98e3921df7811c27567f0e1a4411b93d4c5c0f4ce131bc42f"},
+ {file = "pydantic_core-2.10.1-cp37-none-win32.whl", hash = "sha256:14e09ff0b8fe6e46b93d36a878f6e4a3a98ba5303c76bb8e716f4878a3bee92c"},
+ {file = "pydantic_core-2.10.1-cp37-none-win_amd64.whl", hash = "sha256:1396e81b83516b9d5c9e26a924fa69164156c148c717131f54f586485ac3c15e"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6835451b57c1b467b95ffb03a38bb75b52fb4dc2762bb1d9dbed8de31ea7d0fc"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b00bc4619f60c853556b35f83731bd817f989cba3e97dc792bb8c97941b8053a"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa467fd300a6f046bdb248d40cd015b21b7576c168a6bb20aa22e595c8ffcdd"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d99277877daf2efe074eae6338453a4ed54a2d93fb4678ddfe1209a0c93a2468"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7db7558607afeccb33c0e4bf1c9a9a835e26599e76af6fe2fcea45904083a6"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aad7bd686363d1ce4ee930ad39f14e1673248373f4a9d74d2b9554f06199fb58"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:443fed67d33aa85357464f297e3d26e570267d1af6fef1c21ca50921d2976302"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:042462d8d6ba707fd3ce9649e7bf268633a41018d6a998fb5fbacb7e928a183e"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecdbde46235f3d560b18be0cb706c8e8ad1b965e5c13bbba7450c86064e96561"},
+ {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed550ed05540c03f0e69e6d74ad58d026de61b9eaebebbaaf8873e585cbb18de"},
+ {file = "pydantic_core-2.10.1-cp38-none-win32.whl", hash = "sha256:8cdbbd92154db2fec4ec973d45c565e767ddc20aa6dbaf50142676484cbff8ee"},
+ {file = "pydantic_core-2.10.1-cp38-none-win_amd64.whl", hash = "sha256:9f6f3e2598604956480f6c8aa24a3384dbf6509fe995d97f6ca6103bb8c2534e"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:655f8f4c8d6a5963c9a0687793da37b9b681d9ad06f29438a3b2326d4e6b7970"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e570ffeb2170e116a5b17e83f19911020ac79d19c96f320cbfa1fa96b470185b"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64322bfa13e44c6c30c518729ef08fda6026b96d5c0be724b3c4ae4da939f875"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485a91abe3a07c3a8d1e082ba29254eea3e2bb13cbbd4351ea4e5a21912cc9b0"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7c2b8eb9fc872e68b46eeaf835e86bccc3a58ba57d0eedc109cbb14177be531"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5cb87bdc2e5f620693148b5f8f842d293cae46c5f15a1b1bf7ceeed324a740c"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bd966103890ccfa028841a8f30cebcf5875eeac8c4bde4fe221364c92f0c9a"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f323306d0556351735b54acbf82904fe30a27b6a7147153cbe6e19aaaa2aa429"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c27f38dc4fbf07b358b2bc90edf35e82d1703e22ff2efa4af4ad5de1b3833e7"},
+ {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f1365e032a477c1430cfe0cf2856679529a2331426f8081172c4a74186f1d595"},
+ {file = "pydantic_core-2.10.1-cp39-none-win32.whl", hash = "sha256:a1c311fd06ab3b10805abb72109f01a134019739bd3286b8ae1bc2fc4e50c07a"},
+ {file = "pydantic_core-2.10.1-cp39-none-win_amd64.whl", hash = "sha256:ae8a8843b11dc0b03b57b52793e391f0122e740de3df1474814c700d2622950a"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"},
+ {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"},
+ {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"},
+ {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"},
+ {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"},
+ {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"},
+ {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"},
+ {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"},
+ {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"},
+ {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"},
+ {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"},
+ {file = "pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"},
+]
+
+[package.dependencies]
+typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
[[package]]
name = "pydata-google-auth"
@@ -5739,40 +6298,59 @@ google-auth = {version = ">=1.25.0,<3.0dev", markers = "python_version >= \"3.6\
google-auth-oauthlib = {version = ">=0.4.0", markers = "python_version >= \"3.6\""}
setuptools = "*"
+[[package]]
+name = "pydoclint"
+version = "0.3.8"
+description = "A Python docstring linter that checks arguments, returns, yields, and raises sections"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pydoclint-0.3.8-py2.py3-none-any.whl", hash = "sha256:8e5e020071bb64056fd3f1d68f3b1162ffeb8a3fd6424f73fef7272dac62c166"},
+ {file = "pydoclint-0.3.8.tar.gz", hash = "sha256:5a9686a5fb410343e998402686b87cc07df647ea3ab92528c0b0cf8505584e44"},
+]
+
+[package.dependencies]
+click = ">=8.0.0"
+docstring-parser-fork = ">=0.0.5"
+tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""}
+
+[package.extras]
+flake8 = ["flake8 (>=4)"]
+
[[package]]
name = "pyflakes"
-version = "2.5.0"
+version = "3.1.0"
description = "passive checker of Python programs"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"},
- {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"},
+ {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"},
+ {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"},
]
[[package]]
-name = "Pygments"
-version = "2.15.1"
+name = "pygments"
+version = "2.16.1"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.7"
files = [
- {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"},
- {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"},
+ {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"},
+ {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"},
]
[package.extras]
plugins = ["importlib-metadata"]
[[package]]
-name = "PyJWT"
-version = "2.6.0"
+name = "pyjwt"
+version = "2.8.0"
description = "JSON Web Token implementation in Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"},
- {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"},
+ {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"},
+ {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"},
]
[package.dependencies]
@@ -5796,19 +6374,22 @@ files = [
[[package]]
name = "pymdown-extensions"
-version = "9.11"
+version = "10.5"
description = "Extension pack for Python Markdown."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pymdown_extensions-9.11-py3-none-any.whl", hash = "sha256:a499191d8d869f30339de86fcf072a787e86c42b6f16f280f5c2cf174182b7f3"},
- {file = "pymdown_extensions-9.11.tar.gz", hash = "sha256:f7e86c1d3981f23d9dc43294488ecb54abadd05b0be4bf8f0e15efc90f7853ff"},
+ {file = "pymdown_extensions-10.5-py3-none-any.whl", hash = "sha256:1f0ca8bb5beff091315f793ee17683bc1390731f6ac4c5eb01e27464b80fe879"},
+ {file = "pymdown_extensions-10.5.tar.gz", hash = "sha256:1b60f1e462adbec5a1ed79dac91f666c9c0d241fa294de1989f29d20096cfd0b"},
]
[package.dependencies]
-markdown = ">=3.2"
+markdown = ">=3.5"
pyyaml = "*"
+[package.extras]
+extra = ["pygments (>=2.12)"]
+
[[package]]
name = "pyopenssl"
version = "23.2.0"
@@ -5829,13 +6410,13 @@ test = ["flaky", "pretend", "pytest (>=3.0.1)"]
[[package]]
name = "pyparsing"
-version = "3.0.9"
+version = "3.1.1"
description = "pyparsing module - Classes and methods to define and execute parsing grammars"
optional = false
python-versions = ">=3.6.8"
files = [
- {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
- {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
+ {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"},
+ {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"},
]
[package.extras]
@@ -5843,12 +6424,12 @@ diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pyspark"
-version = "3.3.0"
+version = "3.3.4"
description = "Apache Spark Python API"
optional = false
python-versions = ">=3.7"
files = [
- {file = "pyspark-3.3.0.tar.gz", hash = "sha256:7ebe8e9505647b4d124d5a82fca60dfd3891021cf8ad6c5ec88777eeece92cf7"},
+ {file = "pyspark-3.3.4.tar.gz", hash = "sha256:1f866be47130a522355240949ed50d9812a8f327bd7619f043ffe07fbcf7f7b6"},
]
[package.dependencies]
@@ -5862,13 +6443,13 @@ sql = ["pandas (>=1.0.5)", "pyarrow (>=1.0.0)"]
[[package]]
name = "pytest"
-version = "7.3.1"
+version = "7.4.3"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.7"
files = [
- {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"},
- {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"},
+ {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"},
+ {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"},
]
[package.dependencies]
@@ -5880,17 +6461,17 @@ pluggy = ">=0.12,<2.0"
tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
[package.extras]
-testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
+testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
[[package]]
name = "pytest-cov"
-version = "4.0.0"
+version = "4.1.0"
description = "Pytest plugin for measuring coverage."
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
files = [
- {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"},
- {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"},
+ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"},
+ {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"},
]
[package.dependencies]
@@ -5921,13 +6502,13 @@ dev = ["black", "flake8", "pre-commit"]
[[package]]
name = "pytest-xdist"
-version = "3.3.1"
+version = "3.5.0"
description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs"
optional = false
python-versions = ">=3.7"
files = [
- {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"},
- {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"},
+ {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"},
+ {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"},
]
[package.dependencies]
@@ -5973,6 +6554,25 @@ files = [
[package.dependencies]
six = ">=1.5"
+[[package]]
+name = "python-gitlab"
+version = "3.15.0"
+description = "Interact with GitLab API"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "python-gitlab-3.15.0.tar.gz", hash = "sha256:c9e65eb7612a9fbb8abf0339972eca7fd7a73d4da66c9b446ffe528930aff534"},
+ {file = "python_gitlab-3.15.0-py3-none-any.whl", hash = "sha256:8f8d1c0d387f642eb1ac7bf5e8e0cd8b3dd49c6f34170cee3c7deb7d384611f3"},
+]
+
+[package.dependencies]
+requests = ">=2.25.0"
+requests-toolbelt = ">=0.10.1"
+
+[package.extras]
+autocompletion = ["argcomplete (>=1.10.0,<3)"]
+yaml = ["PyYaml (>=5.2)"]
+
[[package]]
name = "python-json-logger"
version = "2.0.7"
@@ -5998,6 +6598,36 @@ files = [
Jinja2 = ">=2.8"
python-slugify = ">=1.2.5"
+[[package]]
+name = "python-semantic-release"
+version = "8.7.0"
+description = "Automatic Semantic Versioning for Python projects"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "python-semantic-release-8.7.0.tar.gz", hash = "sha256:6bbd11b1e8ac70e0946ed6d257094c851b2507edfbc393eef6093d0ed1dbe0b4"},
+ {file = "python_semantic_release-8.7.0-py3-none-any.whl", hash = "sha256:a016b1cf43a5f3667ce2cfddd8e30b6210a2d52b0e2f6b487aae1164f2540eaa"},
+]
+
+[package.dependencies]
+click = ">=8,<9"
+dotty-dict = ">=1.3.0,<2"
+gitpython = ">=3.0.8,<4"
+importlib-resources = ">=5.7,<7"
+jinja2 = ">=3.1.2,<4"
+pydantic = ">=2,<3"
+python-gitlab = ">=2,<5"
+requests = ">=2.25,<3"
+rich = ">=12.5.1"
+shellingham = ">=1.5.0.post1"
+tomlkit = ">=0.10,<1.0"
+
+[package.extras]
+dev = ["pre-commit", "ruff (==0.1.8)", "tox"]
+docs = ["Sphinx (<=6.0.0)", "furo (>=2023.3.27)", "sphinx-autobuild (==2021.03.14)", "sphinxcontrib-apidoc (==0.3.0)"]
+mypy = ["mypy", "types-requests"]
+test = ["coverage[toml] (>=6,<8)", "pytest (>=7,<8)", "pytest-clarity (>=1.0.1)", "pytest-cov (>=4,<5)", "pytest-lazy-fixture (>=0.6.3,<0.7.0)", "pytest-mock (>=3,<4)", "pytest-pretty (>=1.2.0,<2)", "pytest-xdist (>=2,<4)", "requests-mock (>=1.10.0,<2)", "responses (==0.23.3)", "types-pytest-lazy-fixture (>=0.6.3.3)"]
+
[[package]]
name = "python-slugify"
version = "8.0.1"
@@ -6017,13 +6647,13 @@ unidecode = ["Unidecode (>=1.1.1)"]
[[package]]
name = "pytz"
-version = "2023.3"
+version = "2023.3.post1"
description = "World timezone definitions, modern and historical"
optional = false
python-versions = "*"
files = [
- {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"},
- {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"},
+ {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"},
+ {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"},
]
[[package]]
@@ -6061,56 +6691,66 @@ files = [
]
[[package]]
-name = "PyYAML"
-version = "6.0"
+name = "pyyaml"
+version = "6.0.1"
description = "YAML parser and emitter for Python"
optional = false
python-versions = ">=3.6"
files = [
- {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
- {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
- {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
- {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
- {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
- {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
- {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
- {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"},
- {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"},
- {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"},
- {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"},
- {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"},
- {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"},
- {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"},
- {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
- {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
- {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
- {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
- {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
- {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
- {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
- {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
- {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
- {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
- {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
- {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
- {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
- {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
- {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
- {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
- {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
- {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
- {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
- {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
- {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
- {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
- {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
- {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
- {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
- {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
-]
-
-[[package]]
-name = "pyyaml_env_tag"
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+ {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+ {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+ {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
+ {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
+ {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+ {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
+ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+]
+
+[[package]]
+name = "pyyaml-env-tag"
version = "0.1"
description = "A custom YAML tag for referencing environment variables in YAML files. "
optional = false
@@ -6125,88 +6765,104 @@ pyyaml = "*"
[[package]]
name = "pyzmq"
-version = "25.0.2"
+version = "25.1.1"
description = "Python bindings for 0MQ"
optional = false
python-versions = ">=3.6"
files = [
- {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ac178e666c097c8d3deb5097b58cd1316092fc43e8ef5b5fdb259b51da7e7315"},
- {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:659e62e1cbb063151c52f5b01a38e1df6b54feccfa3e2509d44c35ca6d7962ee"},
- {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8280ada89010735a12b968ec3ea9a468ac2e04fddcc1cede59cb7f5178783b9c"},
- {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b5eeb5278a8a636bb0abdd9ff5076bcbb836cd2302565df53ff1fa7d106d54"},
- {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a2e5fe42dfe6b73ca120b97ac9f34bfa8414feb15e00e37415dbd51cf227ef6"},
- {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:827bf60e749e78acb408a6c5af6688efbc9993e44ecc792b036ec2f4b4acf485"},
- {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7b504ae43d37e282301da586529e2ded8b36d4ee2cd5e6db4386724ddeaa6bbc"},
- {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb1f69a0a2a2b1aae8412979dd6293cc6bcddd4439bf07e4758d864ddb112354"},
- {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b9c9cc965cdf28381e36da525dcb89fc1571d9c54800fdcd73e3f73a2fc29bd"},
- {file = "pyzmq-25.0.2-cp310-cp310-win32.whl", hash = "sha256:24abbfdbb75ac5039205e72d6c75f10fc39d925f2df8ff21ebc74179488ebfca"},
- {file = "pyzmq-25.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6a821a506822fac55d2df2085a52530f68ab15ceed12d63539adc32bd4410f6e"},
- {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9af0bb0277e92f41af35e991c242c9c71920169d6aa53ade7e444f338f4c8128"},
- {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54a96cf77684a3a537b76acfa7237b1e79a8f8d14e7f00e0171a94b346c5293e"},
- {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88649b19ede1cab03b96b66c364cbbf17c953615cdbc844f7f6e5f14c5e5261c"},
- {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:715cff7644a80a7795953c11b067a75f16eb9fc695a5a53316891ebee7f3c9d5"},
- {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b3f0f066b4f1d17383aae509bacf833ccaf591184a1f3c7a1661c085063ae"},
- {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d488c5c8630f7e782e800869f82744c3aca4aca62c63232e5d8c490d3d66956a"},
- {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:38d9f78d69bcdeec0c11e0feb3bc70f36f9b8c44fc06e5d06d91dc0a21b453c7"},
- {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3059a6a534c910e1d5d068df42f60d434f79e6cc6285aa469b384fa921f78cf8"},
- {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6526d097b75192f228c09d48420854d53dfbc7abbb41b0e26f363ccb26fbc177"},
- {file = "pyzmq-25.0.2-cp311-cp311-win32.whl", hash = "sha256:5c5fbb229e40a89a2fe73d0c1181916f31e30f253cb2d6d91bea7927c2e18413"},
- {file = "pyzmq-25.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed15e3a2c3c2398e6ae5ce86d6a31b452dfd6ad4cd5d312596b30929c4b6e182"},
- {file = "pyzmq-25.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:032f5c8483c85bf9c9ca0593a11c7c749d734ce68d435e38c3f72e759b98b3c9"},
- {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:374b55516393bfd4d7a7daa6c3b36d6dd6a31ff9d2adad0838cd6a203125e714"},
- {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08bfcc21b5997a9be4fefa405341320d8e7f19b4d684fb9c0580255c5bd6d695"},
- {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1a843d26a8da1b752c74bc019c7b20e6791ee813cd6877449e6a1415589d22ff"},
- {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b48616a09d7df9dbae2f45a0256eee7b794b903ddc6d8657a9948669b345f220"},
- {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d4427b4a136e3b7f85516c76dd2e0756c22eec4026afb76ca1397152b0ca8145"},
- {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:26b0358e8933990502f4513c991c9935b6c06af01787a36d133b7c39b1df37fa"},
- {file = "pyzmq-25.0.2-cp36-cp36m-win32.whl", hash = "sha256:c8fedc3ccd62c6b77dfe6f43802057a803a411ee96f14e946f4a76ec4ed0e117"},
- {file = "pyzmq-25.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2da6813b7995b6b1d1307329c73d3e3be2fd2d78e19acfc4eff2e27262732388"},
- {file = "pyzmq-25.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a35960c8b2f63e4ef67fd6731851030df68e4b617a6715dd11b4b10312d19fef"},
- {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2a0b880ab40aca5a878933376cb6c1ec483fba72f7f34e015c0f675c90b20"},
- {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85762712b74c7bd18e340c3639d1bf2f23735a998d63f46bb6584d904b5e401d"},
- {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:64812f29d6eee565e129ca14b0c785744bfff679a4727137484101b34602d1a7"},
- {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:510d8e55b3a7cd13f8d3e9121edf0a8730b87d925d25298bace29a7e7bc82810"},
- {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b164cc3c8acb3d102e311f2eb6f3c305865ecb377e56adc015cb51f721f1dda6"},
- {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28fdb9224a258134784a9cf009b59265a9dde79582fb750d4e88a6bcbc6fa3dc"},
- {file = "pyzmq-25.0.2-cp37-cp37m-win32.whl", hash = "sha256:dd771a440effa1c36d3523bc6ba4e54ff5d2e54b4adcc1e060d8f3ca3721d228"},
- {file = "pyzmq-25.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9bdc40efb679b9dcc39c06d25629e55581e4c4f7870a5e88db4f1c51ce25e20d"},
- {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1f82906a2d8e4ee310f30487b165e7cc8ed09c009e4502da67178b03083c4ce0"},
- {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:21ec0bf4831988af43c8d66ba3ccd81af2c5e793e1bf6790eb2d50e27b3c570a"},
- {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbce982a17c88d2312ec2cf7673985d444f1beaac6e8189424e0a0e0448dbb3"},
- {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9e1d2f2d86fc75ed7f8845a992c5f6f1ab5db99747fb0d78b5e4046d041164d2"},
- {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e92ff20ad5d13266bc999a29ed29a3b5b101c21fdf4b2cf420c09db9fb690e"},
- {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edbbf06cc2719889470a8d2bf5072bb00f423e12de0eb9ffec946c2c9748e149"},
- {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77942243ff4d14d90c11b2afd8ee6c039b45a0be4e53fb6fa7f5e4fd0b59da39"},
- {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ab046e9cb902d1f62c9cc0eca055b1d11108bdc271caf7c2171487298f229b56"},
- {file = "pyzmq-25.0.2-cp38-cp38-win32.whl", hash = "sha256:ad761cfbe477236802a7ab2c080d268c95e784fe30cafa7e055aacd1ca877eb0"},
- {file = "pyzmq-25.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8560756318ec7c4c49d2c341012167e704b5a46d9034905853c3d1ade4f55bee"},
- {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ab2c056ac503f25a63f6c8c6771373e2a711b98b304614151dfb552d3d6c81f6"},
- {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cca8524b61c0eaaa3505382dc9b9a3bc8165f1d6c010fdd1452c224225a26689"},
- {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb9f7eae02d3ac42fbedad30006b7407c984a0eb4189a1322241a20944d61e5"},
- {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5eaeae038c68748082137d6896d5c4db7927e9349237ded08ee1bbd94f7361c9"},
- {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a31992a8f8d51663ebf79df0df6a04ffb905063083d682d4380ab8d2c67257c"},
- {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6a979e59d2184a0c8f2ede4b0810cbdd86b64d99d9cc8a023929e40dce7c86cc"},
- {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f124cb73f1aa6654d31b183810febc8505fd0c597afa127c4f40076be4574e0"},
- {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:65c19a63b4a83ae45d62178b70223adeee5f12f3032726b897431b6553aa25af"},
- {file = "pyzmq-25.0.2-cp39-cp39-win32.whl", hash = "sha256:83d822e8687621bed87404afc1c03d83fa2ce39733d54c2fd52d8829edb8a7ff"},
- {file = "pyzmq-25.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:24683285cc6b7bf18ad37d75b9db0e0fefe58404e7001f1d82bf9e721806daa7"},
- {file = "pyzmq-25.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a4b4261eb8f9ed71f63b9eb0198dd7c934aa3b3972dac586d0ef502ba9ab08b"},
- {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:62ec8d979f56c0053a92b2b6a10ff54b9ec8a4f187db2b6ec31ee3dd6d3ca6e2"},
- {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:affec1470351178e892121b3414c8ef7803269f207bf9bef85f9a6dd11cde264"},
- {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffc71111433bd6ec8607a37b9211f4ef42e3d3b271c6d76c813669834764b248"},
- {file = "pyzmq-25.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6fadc60970714d86eff27821f8fb01f8328dd36bebd496b0564a500fe4a9e354"},
- {file = "pyzmq-25.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:269968f2a76c0513490aeb3ba0dc3c77b7c7a11daa894f9d1da88d4a0db09835"},
- {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f7c8b8368e84381ae7c57f1f5283b029c888504aaf4949c32e6e6fb256ec9bf0"},
- {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25e6873a70ad5aa31e4a7c41e5e8c709296edef4a92313e1cd5fc87bbd1874e2"},
- {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b733076ff46e7db5504c5e7284f04a9852c63214c74688bdb6135808531755a3"},
- {file = "pyzmq-25.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a6f6ae12478fdc26a6d5fdb21f806b08fa5403cd02fd312e4cb5f72df078f96f"},
- {file = "pyzmq-25.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:67da1c213fbd208906ab3470cfff1ee0048838365135a9bddc7b40b11e6d6c89"},
- {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531e36d9fcd66f18de27434a25b51d137eb546931033f392e85674c7a7cea853"},
- {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34a6fddd159ff38aa9497b2e342a559f142ab365576284bc8f77cb3ead1f79c5"},
- {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b491998ef886662c1f3d49ea2198055a9a536ddf7430b051b21054f2a5831800"},
- {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5d496815074e3e3d183fe2c7fcea2109ad67b74084c254481f87b64e04e9a471"},
- {file = "pyzmq-25.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:56a94ab1d12af982b55ca96c6853db6ac85505e820d9458ac76364c1998972f4"},
- {file = "pyzmq-25.0.2.tar.gz", hash = "sha256:6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149"},
+ {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"},
+ {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"},
+ {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"},
+ {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"},
+ {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"},
+ {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"},
+ {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"},
+ {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"},
+ {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"},
+ {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"},
+ {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"},
+ {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"},
+ {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"},
+ {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"},
+ {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"},
+ {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"},
+ {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"},
+ {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"},
+ {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"},
+ {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"},
+ {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"},
+ {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"},
+ {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"},
+ {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"},
+ {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"},
+ {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"},
+ {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"},
+ {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"},
+ {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"},
+ {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"},
+ {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"},
+ {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"},
+ {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"},
+ {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"},
+ {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"},
+ {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"},
+ {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"},
+ {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"},
+ {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"},
+ {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"},
+ {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"},
+ {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"},
+ {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"},
+ {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"},
+ {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"},
+ {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"},
+ {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"},
+ {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"},
+ {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"},
+ {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"},
+ {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"},
]
[package.dependencies]
@@ -6229,89 +6885,117 @@ rpds-py = ">=0.7.0"
[[package]]
name = "regex"
-version = "2023.3.23"
+version = "2023.10.3"
description = "Alternative regular expression module, to replace re."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.7"
files = [
- {file = "regex-2023.3.23-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:845a5e2d84389c4ddada1a9b95c055320070f18bb76512608374aca00d22eca8"},
- {file = "regex-2023.3.23-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:87d9951f5a538dd1d016bdc0dcae59241d15fa94860964833a54d18197fcd134"},
- {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae17d3be44c0b3f782c28ae9edd8b47c1f1776d4cabe87edc0b98e1f12b021"},
- {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b8eb1e3bca6b48dc721818a60ae83b8264d4089a4a41d62be6d05316ec38e15"},
- {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df45fac182ebc3c494460c644e853515cc24f5ad9da05f8ffb91da891bfee879"},
- {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7006105b10b59971d3b248ad75acc3651c7e4cf54d81694df5a5130a3c3f7ea"},
- {file = "regex-2023.3.23-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93f3f1aa608380fe294aa4cb82e2afda07a7598e828d0341e124b8fd9327c715"},
- {file = "regex-2023.3.23-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787954f541ab95d8195d97b0b8cf1dc304424adb1e07365967e656b92b38a699"},
- {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:20abe0bdf03630fe92ccafc45a599bca8b3501f48d1de4f7d121153350a2f77d"},
- {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11d00c31aeab9a6e0503bc77e73ed9f4527b3984279d997eb145d7c7be6268fd"},
- {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d5bbe0e1511b844794a3be43d6c145001626ba9a6c1db8f84bdc724e91131d9d"},
- {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ea3c0cb56eadbf4ab2277e7a095676370b3e46dbfc74d5c383bd87b0d6317910"},
- {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d895b4c863059a4934d3e874b90998df774644a41b349ebb330f85f11b4ef2c0"},
- {file = "regex-2023.3.23-cp310-cp310-win32.whl", hash = "sha256:9d764514d19b4edcc75fd8cb1423448ef393e8b6cbd94f38cab983ab1b75855d"},
- {file = "regex-2023.3.23-cp310-cp310-win_amd64.whl", hash = "sha256:11d1f2b7a0696dc0310de0efb51b1f4d813ad4401fe368e83c0c62f344429f98"},
- {file = "regex-2023.3.23-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8a9c63cde0eaa345795c0fdeb19dc62d22e378c50b0bc67bf4667cd5b482d98b"},
- {file = "regex-2023.3.23-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dd7200b4c27b68cf9c9646da01647141c6db09f48cc5b51bc588deaf8e98a797"},
- {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22720024b90a6ba673a725dcc62e10fb1111b889305d7c6b887ac7466b74bedb"},
- {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b190a339090e6af25f4a5fd9e77591f6d911cc7b96ecbb2114890b061be0ac1"},
- {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e76b6fc0d8e9efa39100369a9b3379ce35e20f6c75365653cf58d282ad290f6f"},
- {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7868b8f218bf69a2a15402fde08b08712213a1f4b85a156d90473a6fb6b12b09"},
- {file = "regex-2023.3.23-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2472428efc4127374f494e570e36b30bb5e6b37d9a754f7667f7073e43b0abdd"},
- {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c37df2a060cb476d94c047b18572ee2b37c31f831df126c0da3cd9227b39253d"},
- {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4479f9e2abc03362df4045b1332d4a2b7885b245a30d4f4b051c4083b97d95d8"},
- {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2396e0678167f2d0c197da942b0b3fb48fee2f0b5915a0feb84d11b6686afe6"},
- {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75f288c60232a5339e0ff2fa05779a5e9c74e9fc085c81e931d4a264501e745b"},
- {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c869260aa62cee21c5eb171a466c0572b5e809213612ef8d495268cd2e34f20d"},
- {file = "regex-2023.3.23-cp311-cp311-win32.whl", hash = "sha256:25f0532fd0c53e96bad84664171969de9673b4131f2297f1db850d3918d58858"},
- {file = "regex-2023.3.23-cp311-cp311-win_amd64.whl", hash = "sha256:5ccfafd98473e007cebf7da10c1411035b7844f0f204015efd050601906dbb53"},
- {file = "regex-2023.3.23-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6572ff287176c0fb96568adb292674b421fa762153ed074d94b1d939ed92c253"},
- {file = "regex-2023.3.23-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a610e0adfcb0fc84ea25f6ea685e39e74cbcd9245a72a9a7aab85ff755a5ed27"},
- {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086afe222d58b88b62847bdbd92079b4699350b4acab892f88a935db5707c790"},
- {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79e29fd62fa2f597a6754b247356bda14b866131a22444d67f907d6d341e10f3"},
- {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c07ce8e9eee878a48ebeb32ee661b49504b85e164b05bebf25420705709fdd31"},
- {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b036f401895e854de9fefe061518e78d506d8a919cc250dc3416bca03f6f9a"},
- {file = "regex-2023.3.23-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78ac8dd8e18800bb1f97aad0d73f68916592dddf233b99d2b5cabc562088503a"},
- {file = "regex-2023.3.23-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:539dd010dc35af935b32f248099e38447bbffc10b59c2b542bceead2bed5c325"},
- {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9bf4a5626f2a0ea006bf81e8963f498a57a47d58907eaa58f4b3e13be68759d8"},
- {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf86b4328c204c3f315074a61bc1c06f8a75a8e102359f18ce99fbcbbf1951f0"},
- {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2848bf76673c83314068241c8d5b7fa9ad9bed866c979875a0e84039349e8fa7"},
- {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c125a02d22c555e68f7433bac8449992fa1cead525399f14e47c2d98f2f0e467"},
- {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cd1671e9d5ac05ce6aa86874dd8dfa048824d1dbe73060851b310c6c1a201a96"},
- {file = "regex-2023.3.23-cp38-cp38-win32.whl", hash = "sha256:fffe57312a358be6ec6baeb43d253c36e5790e436b7bf5b7a38df360363e88e9"},
- {file = "regex-2023.3.23-cp38-cp38-win_amd64.whl", hash = "sha256:dbb3f87e15d3dd76996d604af8678316ad2d7d20faa394e92d9394dfd621fd0c"},
- {file = "regex-2023.3.23-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c88e8c226473b5549fe9616980ea7ca09289246cfbdf469241edf4741a620004"},
- {file = "regex-2023.3.23-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6560776ec19c83f3645bbc5db64a7a5816c9d8fb7ed7201c5bcd269323d88072"},
- {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b1fc2632c01f42e06173d8dd9bb2e74ab9b0afa1d698058c867288d2c7a31f3"},
- {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdf7ad455f1916b8ea5cdbc482d379f6daf93f3867b4232d14699867a5a13af7"},
- {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fc33b27b1d800fc5b78d7f7d0f287e35079ecabe68e83d46930cf45690e1c8c"},
- {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c49552dc938e3588f63f8a78c86f3c9c75301e813bca0bef13bdb4b87ccf364"},
- {file = "regex-2023.3.23-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e152461e9a0aedec7d37fc66ec0fa635eca984777d3d3c3e36f53bf3d3ceb16e"},
- {file = "regex-2023.3.23-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:db034255e72d2995cf581b14bb3fc9c00bdbe6822b49fcd4eef79e1d5f232618"},
- {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:55ae114da21b7a790b90255ea52d2aa3a0d121a646deb2d3c6a3194e722fc762"},
- {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ef3f528fe1cc3d139508fe1b22523745aa77b9d6cb5b0bf277f48788ee0b993f"},
- {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:a81c9ec59ca2303acd1ccd7b9ac409f1e478e40e96f8f79b943be476c5fdb8bb"},
- {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cde09c4fdd070772aa2596d97e942eb775a478b32459e042e1be71b739d08b77"},
- {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3cd9f5dd7b821f141d3a6ca0d5d9359b9221e4f051ca3139320adea9f1679691"},
- {file = "regex-2023.3.23-cp39-cp39-win32.whl", hash = "sha256:7304863f3a652dab5e68e6fb1725d05ebab36ec0390676d1736e0571ebb713ef"},
- {file = "regex-2023.3.23-cp39-cp39-win_amd64.whl", hash = "sha256:54c3fa855a3f7438149de3211738dd9b5f0c733f48b54ae05aa7fce83d48d858"},
- {file = "regex-2023.3.23.tar.gz", hash = "sha256:dc80df325b43ffea5cdea2e3eaa97a44f3dd298262b1c7fe9dbb2a9522b956a7"},
+ {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"},
+ {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"},
+ {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"},
+ {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"},
+ {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"},
+ {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"},
+ {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"},
+ {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"},
+ {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"},
+ {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"},
+ {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"},
+ {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"},
+ {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"},
+ {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"},
+ {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"},
+ {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"},
+ {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"},
+ {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"},
+ {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"},
+ {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"},
+ {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"},
+ {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"},
+ {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"},
+ {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"},
]
[[package]]
name = "requests"
-version = "2.28.2"
+version = "2.31.0"
description = "Python HTTP for Humans."
optional = false
-python-versions = ">=3.7, <4"
+python-versions = ">=3.7"
files = [
- {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"},
- {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"},
+ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
]
[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4"
idna = ">=2.5,<4"
-urllib3 = ">=1.21.1,<1.27"
+urllib3 = ">=1.21.1,<3"
[package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
@@ -6383,13 +7067,13 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"]
[[package]]
name = "rich-argparse"
-version = "1.2.0"
+version = "1.4.0"
description = "Rich help formatters for argparse and optparse"
optional = false
python-versions = ">=3.7"
files = [
- {file = "rich_argparse-1.2.0-py3-none-any.whl", hash = "sha256:ebd9ca7b418e9aff4a9c502caf9ea24237ad4967c1adfd68a628a4c21d5184f3"},
- {file = "rich_argparse-1.2.0.tar.gz", hash = "sha256:bf17fe00603ad90dbb94cd3a6a27a3a0051df6b3363fb1b46300398bb83740ea"},
+ {file = "rich_argparse-1.4.0-py3-none-any.whl", hash = "sha256:68b263d3628d07b1d27cfe6ad896da2f5a5583ee2ba226aeeb24459840023b38"},
+ {file = "rich_argparse-1.4.0.tar.gz", hash = "sha256:c275f34ea3afe36aec6342c2a2298893104b5650528941fb53c21067276dba19"},
]
[package.dependencies]
@@ -6397,108 +7081,110 @@ rich = ">=11.0.0"
[[package]]
name = "rpds-py"
-version = "0.9.2"
+version = "0.10.6"
description = "Python bindings to Rust's persistent data structures (rpds)"
optional = false
python-versions = ">=3.8"
files = [
- {file = "rpds_py-0.9.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7"},
- {file = "rpds_py-0.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b"},
- {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa"},
- {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496"},
- {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f"},
- {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e"},
- {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f"},
- {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f"},
- {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f"},
- {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe"},
- {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6"},
- {file = "rpds_py-0.9.2-cp310-none-win32.whl", hash = "sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764"},
- {file = "rpds_py-0.9.2-cp310-none-win_amd64.whl", hash = "sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e"},
- {file = "rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3"},
- {file = "rpds_py-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd"},
- {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7"},
- {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b"},
- {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e"},
- {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad"},
- {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f"},
- {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d"},
- {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c"},
- {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae"},
- {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de"},
- {file = "rpds_py-0.9.2-cp311-none-win32.whl", hash = "sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab"},
- {file = "rpds_py-0.9.2-cp311-none-win_amd64.whl", hash = "sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298"},
- {file = "rpds_py-0.9.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386"},
- {file = "rpds_py-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f"},
- {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82"},
- {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3"},
- {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b"},
- {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387"},
- {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238"},
- {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1"},
- {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b"},
- {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90"},
- {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d"},
- {file = "rpds_py-0.9.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d"},
- {file = "rpds_py-0.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192"},
- {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196"},
- {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1"},
- {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18"},
- {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c"},
- {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55"},
- {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55"},
- {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d"},
- {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32"},
- {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e"},
- {file = "rpds_py-0.9.2-cp38-none-win32.whl", hash = "sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920"},
- {file = "rpds_py-0.9.2-cp38-none-win_amd64.whl", hash = "sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044"},
- {file = "rpds_py-0.9.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260"},
- {file = "rpds_py-0.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c"},
- {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193"},
- {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846"},
- {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b"},
- {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1"},
- {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f"},
- {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324"},
- {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3"},
- {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535"},
- {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26"},
- {file = "rpds_py-0.9.2-cp39-none-win32.whl", hash = "sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0"},
- {file = "rpds_py-0.9.2-cp39-none-win_amd64.whl", hash = "sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67"},
- {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8"},
- {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03"},
- {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe"},
- {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"},
+ {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"},
+ {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"},
+ {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"},
+ {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"},
+ {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"},
+ {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"},
+ {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"},
+ {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"},
+ {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"},
+ {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"},
+ {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"},
+ {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"},
+ {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"},
+ {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"},
+ {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"},
+ {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"},
+ {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"},
+ {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"},
+ {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"},
+ {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"},
+ {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"},
+ {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"},
+ {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"},
+ {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"},
+ {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"},
+ {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"},
+ {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"},
+ {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"},
+ {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"},
+ {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"},
+ {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"},
+ {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"},
+ {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"},
+ {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"},
+ {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"},
+ {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"},
+ {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"},
+ {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"},
+ {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"},
+ {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"},
+ {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"},
+ {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"},
+ {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"},
+ {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"},
+ {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"},
+ {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"},
+ {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"},
+ {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"},
+ {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"},
+ {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"},
+ {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"},
+ {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"},
+ {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"},
+ {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"},
+ {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"},
+ {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"},
+ {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"},
+ {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"},
+ {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"},
+ {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"},
+ {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"},
+ {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"},
+ {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"},
+ {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"},
+ {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"},
+ {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"},
+ {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"},
+ {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"},
+ {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"},
]
[[package]]
@@ -6517,39 +7203,39 @@ pyasn1 = ">=0.1.3"
[[package]]
name = "ruff"
-version = "0.0.287"
-description = "An extremely fast Python linter, written in Rust."
+version = "0.1.8"
+description = "An extremely fast Python linter and code formatter, written in Rust."
optional = false
python-versions = ">=3.7"
files = [
- {file = "ruff-0.0.287-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:1e0f9ee4c3191444eefeda97d7084721d9b8e29017f67997a20c153457f2eafd"},
- {file = "ruff-0.0.287-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e9843e5704d4fb44e1a8161b0d31c1a38819723f0942639dfeb53d553be9bfb5"},
- {file = "ruff-0.0.287-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca1ed11d759a29695aed2bfc7f914b39bcadfe2ef08d98ff69c873f639ad3a8"},
- {file = "ruff-0.0.287-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1cf4d5ad3073af10f186ea22ce24bc5a8afa46151f6896f35c586e40148ba20b"},
- {file = "ruff-0.0.287-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d9d58bcb29afd72d2afe67120afcc7d240efc69a235853813ad556443dc922"},
- {file = "ruff-0.0.287-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:06ac5df7dd3ba8bf83bba1490a72f97f1b9b21c7cbcba8406a09de1a83f36083"},
- {file = "ruff-0.0.287-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2bfb478e1146a60aa740ab9ebe448b1f9e3c0dfb54be3cc58713310eef059c30"},
- {file = "ruff-0.0.287-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00d579a011949108c4b4fa04c4f1ee066dab536a9ba94114e8e580c96be2aeb4"},
- {file = "ruff-0.0.287-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a810a79b8029cc92d06c36ea1f10be5298d2323d9024e1d21aedbf0a1a13e5"},
- {file = "ruff-0.0.287-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:150007028ad4976ce9a7704f635ead6d0e767f73354ce0137e3e44f3a6c0963b"},
- {file = "ruff-0.0.287-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a24a280db71b0fa2e0de0312b4aecb8e6d08081d1b0b3c641846a9af8e35b4a7"},
- {file = "ruff-0.0.287-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2918cb7885fa1611d542de1530bea3fbd63762da793751cc8c8d6e4ba234c3d8"},
- {file = "ruff-0.0.287-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:33d7b251afb60bec02a64572b0fd56594b1923ee77585bee1e7e1daf675e7ae7"},
- {file = "ruff-0.0.287-py3-none-win32.whl", hash = "sha256:022f8bed2dcb5e5429339b7c326155e968a06c42825912481e10be15dafb424b"},
- {file = "ruff-0.0.287-py3-none-win_amd64.whl", hash = "sha256:26bd0041d135a883bd6ab3e0b29c42470781fb504cf514e4c17e970e33411d90"},
- {file = "ruff-0.0.287-py3-none-win_arm64.whl", hash = "sha256:44bceb3310ac04f0e59d4851e6227f7b1404f753997c7859192e41dbee9f5c8d"},
- {file = "ruff-0.0.287.tar.gz", hash = "sha256:02dc4f5bf53ef136e459d467f3ce3e04844d509bc46c025a05b018feb37bbc39"},
+ {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7de792582f6e490ae6aef36a58d85df9f7a0cfd1b0d4fe6b4fb51803a3ac96fa"},
+ {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8e3255afd186c142eef4ec400d7826134f028a85da2146102a1172ecc7c3696"},
+ {file = "ruff-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff78a7583020da124dd0deb835ece1d87bb91762d40c514ee9b67a087940528b"},
+ {file = "ruff-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd8ee69b02e7bdefe1e5da2d5b6eaaddcf4f90859f00281b2333c0e3a0cc9cd6"},
+ {file = "ruff-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05b0ddd7ea25495e4115a43125e8a7ebed0aa043c3d432de7e7d6e8e8cd6448"},
+ {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e6f08ca730f4dc1b76b473bdf30b1b37d42da379202a059eae54ec7fc1fbcfed"},
+ {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f35960b02df6b827c1b903091bb14f4b003f6cf102705efc4ce78132a0aa5af3"},
+ {file = "ruff-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d076717c67b34c162da7c1a5bda16ffc205e0e0072c03745275e7eab888719f"},
+ {file = "ruff-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a21ab023124eafb7cef6d038f835cb1155cd5ea798edd8d9eb2f8b84be07d9"},
+ {file = "ruff-0.1.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ce697c463458555027dfb194cb96d26608abab920fa85213deb5edf26e026664"},
+ {file = "ruff-0.1.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db6cedd9ffed55548ab313ad718bc34582d394e27a7875b4b952c2d29c001b26"},
+ {file = "ruff-0.1.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:05ffe9dbd278965271252704eddb97b4384bf58b971054d517decfbf8c523f05"},
+ {file = "ruff-0.1.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5daaeaf00ae3c1efec9742ff294b06c3a2a9db8d3db51ee4851c12ad385cda30"},
+ {file = "ruff-0.1.8-py3-none-win32.whl", hash = "sha256:e49fbdfe257fa41e5c9e13c79b9e79a23a79bd0e40b9314bc53840f520c2c0b3"},
+ {file = "ruff-0.1.8-py3-none-win_amd64.whl", hash = "sha256:f41f692f1691ad87f51708b823af4bb2c5c87c9248ddd3191c8f088e66ce590a"},
+ {file = "ruff-0.1.8-py3-none-win_arm64.whl", hash = "sha256:aa8ee4f8440023b0a6c3707f76cadce8657553655dcbb5fc9b2f9bb9bee389f6"},
+ {file = "ruff-0.1.8.tar.gz", hash = "sha256:f7ee467677467526cfe135eab86a40a0e8db43117936ac4f9b469ce9cdb3fb62"},
]
[[package]]
name = "s3transfer"
-version = "0.6.0"
+version = "0.7.0"
description = "An Amazon S3 Transfer Manager"
optional = false
python-versions = ">= 3.7"
files = [
- {file = "s3transfer-0.6.0-py3-none-any.whl", hash = "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd"},
- {file = "s3transfer-0.6.0.tar.gz", hash = "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947"},
+ {file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"},
+ {file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"},
]
[package.dependencies]
@@ -6558,123 +7244,235 @@ botocore = ">=1.12.36,<2.0a.0"
[package.extras]
crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
+[[package]]
+name = "scikit-learn"
+version = "1.3.2"
+description = "A set of python modules for machine learning and data mining"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"},
+ {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"},
+ {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"},
+ {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"},
+ {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"},
+ {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"},
+]
+
+[package.dependencies]
+joblib = ">=1.1.1"
+numpy = ">=1.17.3,<2.0"
+scipy = ">=1.5.0"
+threadpoolctl = ">=2.0.0"
+
+[package.extras]
+benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"]
+docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"]
+examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"]
+tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"]
+
[[package]]
name = "scipy"
-version = "1.9.3"
+version = "1.11.4"
description = "Fundamental algorithms for scientific computing in Python"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"},
- {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"},
- {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"},
- {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"},
- {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"},
- {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"},
- {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"},
- {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"},
- {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"},
- {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"},
- {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"},
- {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"},
- {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"},
- {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"},
- {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"},
- {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"},
- {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"},
- {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"},
- {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"},
- {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"},
- {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"},
+ {file = "scipy-1.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"},
+ {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"},
+ {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"},
+ {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"},
+ {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"},
+ {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"},
+ {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"},
+ {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"},
+ {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"},
+ {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"},
+ {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"},
+ {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"},
+ {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"},
+ {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"},
+ {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"},
+ {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"},
+ {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"},
+ {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"},
+ {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"},
+ {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"},
+ {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"},
+ {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"},
+ {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"},
+ {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"},
+ {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"},
]
[package.dependencies]
-numpy = ">=1.18.5,<1.26.0"
+numpy = ">=1.21.6,<1.28.0"
[package.extras]
-dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"]
-doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"]
-test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
+dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"]
+doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"]
+test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
+
+[[package]]
+name = "sentry-sdk"
+version = "1.33.1"
+description = "Python client for Sentry (https://sentry.io)"
+optional = false
+python-versions = "*"
+files = [
+ {file = "sentry-sdk-1.33.1.tar.gz", hash = "sha256:816aeb900a54bba2d9346bad8ffac2d258c4fa09271b95a6533a714e9000f074"},
+ {file = "sentry_sdk-1.33.1-py2.py3-none-any.whl", hash = "sha256:1cce906dc86afda1ecd22c4716b0c846639151a3c3b59e23826711c6525c5642"},
+]
+
+[package.dependencies]
+certifi = "*"
+urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""}
+
+[package.extras]
+aiohttp = ["aiohttp (>=3.5)"]
+arq = ["arq (>=0.23)"]
+asyncpg = ["asyncpg (>=0.23)"]
+beam = ["apache-beam (>=2.12)"]
+bottle = ["bottle (>=0.12.13)"]
+celery = ["celery (>=3)"]
+chalice = ["chalice (>=1.16.0)"]
+clickhouse-driver = ["clickhouse-driver (>=0.2.0)"]
+django = ["django (>=1.8)"]
+falcon = ["falcon (>=1.4)"]
+fastapi = ["fastapi (>=0.79.0)"]
+flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"]
+grpcio = ["grpcio (>=1.21.1)"]
+httpx = ["httpx (>=0.16.0)"]
+huey = ["huey (>=2)"]
+loguru = ["loguru (>=0.5)"]
+opentelemetry = ["opentelemetry-distro (>=0.35b0)"]
+opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"]
+pure-eval = ["asttokens", "executing", "pure_eval"]
+pymongo = ["pymongo (>=3.1)"]
+pyspark = ["pyspark (>=2.4.4)"]
+quart = ["blinker (>=1.1)", "quart (>=0.16.1)"]
+rq = ["rq (>=0.6)"]
+sanic = ["sanic (>=0.8)"]
+sqlalchemy = ["sqlalchemy (>=1.2)"]
+starlette = ["starlette (>=0.19.1)"]
+starlite = ["starlite (>=1.48)"]
+tornado = ["tornado (>=5)"]
[[package]]
name = "setproctitle"
-version = "1.3.2"
+version = "1.3.3"
description = "A Python module to customize the process title"
optional = false
python-versions = ">=3.7"
files = [
- {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:288943dec88e178bb2fd868adf491197cc0fc8b6810416b1c6775e686bab87fe"},
- {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:630f6fe5e24a619ccf970c78e084319ee8be5be253ecc9b5b216b0f474f5ef18"},
- {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c877691b90026670e5a70adfbcc735460a9f4c274d35ec5e8a43ce3f8443005"},
- {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a55fe05f15c10e8c705038777656fe45e3bd676d49ad9ac8370b75c66dd7cd7"},
- {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab45146c71ca6592c9cc8b354a2cc9cc4843c33efcbe1d245d7d37ce9696552d"},
- {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c9d5c541a2713ba0e657e0303bf96ddddc412ef4761676adc35df35d7c246"},
- {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:265ecbe2c6eafe82e104f994ddd7c811520acdd0647b73f65c24f51374cf9494"},
- {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c2c46200656280a064073447ebd363937562debef329482fd7e570c8d498f806"},
- {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:fa2f50678f04fda7a75d0fe5dd02bbdd3b13cbe6ed4cf626e4472a7ccf47ae94"},
- {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f2719a398e1a2c01c2a63bf30377a34d0b6ef61946ab9cf4d550733af8f1ef1"},
- {file = "setproctitle-1.3.2-cp310-cp310-win32.whl", hash = "sha256:e425be62524dc0c593985da794ee73eb8a17abb10fe692ee43bb39e201d7a099"},
- {file = "setproctitle-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:e85e50b9c67854f89635a86247412f3ad66b132a4d8534ac017547197c88f27d"},
- {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a97d51c17d438cf5be284775a322d57b7ca9505bb7e118c28b1824ecaf8aeaa"},
- {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:587c7d6780109fbd8a627758063d08ab0421377c0853780e5c356873cdf0f077"},
- {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d17c8bd073cbf8d141993db45145a70b307385b69171d6b54bcf23e5d644de"},
- {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e932089c35a396dc31a5a1fc49889dd559548d14cb2237adae260382a090382e"},
- {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e4f8f12258a8739c565292a551c3db62cca4ed4f6b6126664e2381acb4931bf"},
- {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:570d255fd99c7f14d8f91363c3ea96bd54f8742275796bca67e1414aeca7d8c3"},
- {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a8e0881568c5e6beff91ef73c0ec8ac2a9d3ecc9edd6bd83c31ca34f770910c4"},
- {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4bba3be4c1fabf170595b71f3af46c6d482fbe7d9e0563999b49999a31876f77"},
- {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:37ece938110cab2bb3957e3910af8152ca15f2b6efdf4f2612e3f6b7e5459b80"},
- {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db684d6bbb735a80bcbc3737856385b55d53f8a44ce9b46e9a5682c5133a9bf7"},
- {file = "setproctitle-1.3.2-cp311-cp311-win32.whl", hash = "sha256:ca58cd260ea02759238d994cfae844fc8b1e206c684beb8f38877dcab8451dfc"},
- {file = "setproctitle-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:88486e6cce2a18a033013d17b30a594f1c5cb42520c49c19e6ade40b864bb7ff"},
- {file = "setproctitle-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:92c626edc66169a1b09e9541b9c0c9f10488447d8a2b1d87c8f0672e771bc927"},
- {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710e16fa3bade3b026907e4a5e841124983620046166f355bbb84be364bf2a02"},
- {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f29b75e86260b0ab59adb12661ef9f113d2f93a59951373eb6d68a852b13e83"},
- {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c8d9650154afaa86a44ff195b7b10d683c73509d085339d174e394a22cccbb9"},
- {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0452282258dfcc01697026a8841258dd2057c4438b43914b611bccbcd048f10"},
- {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e49ae693306d7624015f31cb3e82708916759d592c2e5f72a35c8f4cc8aef258"},
- {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1ff863a20d1ff6ba2c24e22436a3daa3cd80be1dfb26891aae73f61b54b04aca"},
- {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:55ce1e9925ce1765865442ede9dca0ba9bde10593fcd570b1f0fa25d3ec6b31c"},
- {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7fe9df7aeb8c64db6c34fc3b13271a363475d77bc157d3f00275a53910cb1989"},
- {file = "setproctitle-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:e5c50e164cd2459bc5137c15288a9ef57160fd5cbf293265ea3c45efe7870865"},
- {file = "setproctitle-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a499fff50387c1520c085a07578a000123f519e5f3eee61dd68e1d301659651f"},
- {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b932c3041aa924163f4aab970c2f0e6b4d9d773f4d50326e0ea1cd69240e5c5"},
- {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4bfc89bd33ebb8e4c0e9846a09b1f5a4a86f5cb7a317e75cc42fee1131b4f4f"},
- {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd3cf4286a60fdc95451d8d14e0389a6b4f5cebe02c7f2609325eb016535963"},
- {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fb4f769c02f63fac90989711a3fee83919f47ae9afd4758ced5d86596318c65"},
- {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5194b4969f82ea842a4f6af2f82cd16ebdc3f1771fb2771796e6add9835c1973"},
- {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cde41857a644b7353a0060b5f94f7ba7cf593ebde5a1094da1be581ac9a31"},
- {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9124bedd8006b0e04d4e8a71a0945da9b67e7a4ab88fdad7b1440dc5b6122c42"},
- {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8a09d570b39517de10ee5b718730e171251ce63bbb890c430c725c8c53d4484"},
- {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8ff3c8cb26afaed25e8bca7b9dd0c1e36de71f35a3a0706b5c0d5172587a3827"},
- {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:589be87172b238f839e19f146b9ea47c71e413e951ef0dc6db4218ddacf3c202"},
- {file = "setproctitle-1.3.2-cp38-cp38-win32.whl", hash = "sha256:4749a2b0c9ac52f864d13cee94546606f92b981b50e46226f7f830a56a9dc8e1"},
- {file = "setproctitle-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:e43f315c68aa61cbdef522a2272c5a5b9b8fd03c301d3167b5e1343ef50c676c"},
- {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de3a540cd1817ede31f530d20e6a4935bbc1b145fd8f8cf393903b1e02f1ae76"},
- {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4058564195b975ddc3f0462375c533cce310ccdd41b80ac9aed641c296c3eff4"},
- {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c5d5dad7c28bdd1ec4187d818e43796f58a845aa892bb4481587010dc4d362b"},
- {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffc61a388a5834a97953d6444a2888c24a05f2e333f9ed49f977a87bb1ad4761"},
- {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fa1a0fbee72b47dc339c87c890d3c03a72ea65c061ade3204f285582f2da30f"},
- {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8a988c7220c002c45347430993830666e55bc350179d91fcee0feafe64e1d4"},
- {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bae283e85fc084b18ffeb92e061ff7ac5af9e183c9d1345c93e178c3e5069cbe"},
- {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fed18e44711c5af4b681c2b3b18f85e6f0f1b2370a28854c645d636d5305ccd8"},
- {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b34baef93bfb20a8ecb930e395ccd2ae3268050d8cf4fe187de5e2bd806fd796"},
- {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7f0bed90a216ef28b9d227d8d73e28a8c9b88c0f48a082d13ab3fa83c581488f"},
- {file = "setproctitle-1.3.2-cp39-cp39-win32.whl", hash = "sha256:4d8938249a7cea45ab7e1e48b77685d0f2bab1ebfa9dde23e94ab97968996a7c"},
- {file = "setproctitle-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a47d97a75fd2d10c37410b180f67a5835cb1d8fdea2648fd7f359d4277f180b9"},
- {file = "setproctitle-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dad42e676c5261eb50fdb16bdf3e2771cf8f99a79ef69ba88729aeb3472d8575"},
- {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c91b9bc8985d00239f7dc08a49927a7ca1ca8a6af2c3890feec3ed9665b6f91e"},
- {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8579a43eafd246e285eb3a5b939e7158073d5087aacdd2308f23200eac2458b"},
- {file = "setproctitle-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:2fbd8187948284293f43533c150cd69a0e4192c83c377da837dbcd29f6b83084"},
- {file = "setproctitle-1.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:faec934cfe5fd6ac1151c02e67156c3f526e82f96b24d550b5d51efa4a5527c6"},
- {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1aafc91cbdacc9e5fe712c52077369168e6b6c346f3a9d51bf600b53eae56bb"},
- {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b617f12c9be61e8f4b2857be4a4319754756845dbbbd9c3718f468bbb1e17bcb"},
- {file = "setproctitle-1.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b2c9cb2705fc84cb8798f1ba74194f4c080aaef19d9dae843591c09b97678e98"},
- {file = "setproctitle-1.3.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a149a5f7f2c5a065d4e63cb0d7a4b6d3b66e6e80f12e3f8827c4f63974cbf122"},
- {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e3ac25bfc4a0f29d2409650c7532d5ddfdbf29f16f8a256fc31c47d0dc05172"},
- {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d884e22037b23fa25b2baf1a3316602ed5c5971eb3e9d771a38c3a69ce6e13"},
- {file = "setproctitle-1.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7aa0aac1711fadffc1d51e9d00a3bea61f68443d6ac0241a224e4d622489d665"},
- {file = "setproctitle-1.3.2.tar.gz", hash = "sha256:b9fb97907c830d260fa0658ed58afd48a86b2b88aac521135c352ff7fd3477fd"},
+ {file = "setproctitle-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:897a73208da48db41e687225f355ce993167079eda1260ba5e13c4e53be7f754"},
+ {file = "setproctitle-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c331e91a14ba4076f88c29c777ad6b58639530ed5b24b5564b5ed2fd7a95452"},
+ {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbbd6c7de0771c84b4aa30e70b409565eb1fc13627a723ca6be774ed6b9d9fa3"},
+ {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c05ac48ef16ee013b8a326c63e4610e2430dbec037ec5c5b58fcced550382b74"},
+ {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1342f4fdb37f89d3e3c1c0a59d6ddbedbde838fff5c51178a7982993d238fe4f"},
+ {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc74e84fdfa96821580fb5e9c0b0777c1c4779434ce16d3d62a9c4d8c710df39"},
+ {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9617b676b95adb412bb69645d5b077d664b6882bb0d37bfdafbbb1b999568d85"},
+ {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6a249415f5bb88b5e9e8c4db47f609e0bf0e20a75e8d744ea787f3092ba1f2d0"},
+ {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:38da436a0aaace9add67b999eb6abe4b84397edf4a78ec28f264e5b4c9d53cd5"},
+ {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:da0d57edd4c95bf221b2ebbaa061e65b1788f1544977288bdf95831b6e44e44d"},
+ {file = "setproctitle-1.3.3-cp310-cp310-win32.whl", hash = "sha256:a1fcac43918b836ace25f69b1dca8c9395253ad8152b625064415b1d2f9be4fb"},
+ {file = "setproctitle-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:200620c3b15388d7f3f97e0ae26599c0c378fdf07ae9ac5a13616e933cbd2086"},
+ {file = "setproctitle-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:334f7ed39895d692f753a443102dd5fed180c571eb6a48b2a5b7f5b3564908c8"},
+ {file = "setproctitle-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:950f6476d56ff7817a8fed4ab207727fc5260af83481b2a4b125f32844df513a"},
+ {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:195c961f54a09eb2acabbfc90c413955cf16c6e2f8caa2adbf2237d1019c7dd8"},
+ {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f05e66746bf9fe6a3397ec246fe481096664a9c97eb3fea6004735a4daf867fd"},
+ {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b5901a31012a40ec913265b64e48c2a4059278d9f4e6be628441482dd13fb8b5"},
+ {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64286f8a995f2cd934082b398fc63fca7d5ffe31f0e27e75b3ca6b4efda4e353"},
+ {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:184239903bbc6b813b1a8fc86394dc6ca7d20e2ebe6f69f716bec301e4b0199d"},
+ {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:664698ae0013f986118064b6676d7dcd28fefd0d7d5a5ae9497cbc10cba48fa5"},
+ {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e5119a211c2e98ff18b9908ba62a3bd0e3fabb02a29277a7232a6fb4b2560aa0"},
+ {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:417de6b2e214e837827067048f61841f5d7fc27926f2e43954567094051aff18"},
+ {file = "setproctitle-1.3.3-cp311-cp311-win32.whl", hash = "sha256:6a143b31d758296dc2f440175f6c8e0b5301ced3b0f477b84ca43cdcf7f2f476"},
+ {file = "setproctitle-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a680d62c399fa4b44899094027ec9a1bdaf6f31c650e44183b50d4c4d0ccc085"},
+ {file = "setproctitle-1.3.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d4460795a8a7a391e3567b902ec5bdf6c60a47d791c3b1d27080fc203d11c9dc"},
+ {file = "setproctitle-1.3.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bdfd7254745bb737ca1384dee57e6523651892f0ea2a7344490e9caefcc35e64"},
+ {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477d3da48e216d7fc04bddab67b0dcde633e19f484a146fd2a34bb0e9dbb4a1e"},
+ {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ab2900d111e93aff5df9fddc64cf51ca4ef2c9f98702ce26524f1acc5a786ae7"},
+ {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088b9efc62d5aa5d6edf6cba1cf0c81f4488b5ce1c0342a8b67ae39d64001120"},
+ {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6d50252377db62d6a0bb82cc898089916457f2db2041e1d03ce7fadd4a07381"},
+ {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:87e668f9561fd3a457ba189edfc9e37709261287b52293c115ae3487a24b92f6"},
+ {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:287490eb90e7a0ddd22e74c89a92cc922389daa95babc833c08cf80c84c4df0a"},
+ {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe1c49486109f72d502f8be569972e27f385fe632bd8895f4730df3c87d5ac8"},
+ {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4a6ba2494a6449b1f477bd3e67935c2b7b0274f2f6dcd0f7c6aceae10c6c6ba3"},
+ {file = "setproctitle-1.3.3-cp312-cp312-win32.whl", hash = "sha256:2df2b67e4b1d7498632e18c56722851ba4db5d6a0c91aaf0fd395111e51cdcf4"},
+ {file = "setproctitle-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:f38d48abc121263f3b62943f84cbaede05749047e428409c2c199664feb6abc7"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:816330675e3504ae4d9a2185c46b573105d2310c20b19ea2b4596a9460a4f674"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f960bc22d8d8e4ac886d1e2e21ccbd283adcf3c43136161c1ba0fa509088e0"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e6e7adff74796ef12753ff399491b8827f84f6c77659d71bd0b35870a17d8f"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53bc0d2358507596c22b02db079618451f3bd720755d88e3cccd840bafb4c41c"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad6d20f9541f5f6ac63df553b6d7a04f313947f550eab6a61aa758b45f0d5657"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c1c84beab776b0becaa368254801e57692ed749d935469ac10e2b9b825dbdd8e"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:507e8dc2891021350eaea40a44ddd887c9f006e6b599af8d64a505c0f718f170"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b1067647ac7aba0b44b591936118a22847bda3c507b0a42d74272256a7a798e9"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2e71f6365744bf53714e8bd2522b3c9c1d83f52ffa6324bd7cbb4da707312cd8"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:7f1d36a1e15a46e8ede4e953abb104fdbc0845a266ec0e99cc0492a4364f8c44"},
+ {file = "setproctitle-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9a402881ec269d0cc9c354b149fc29f9ec1a1939a777f1c858cdb09c7a261df"},
+ {file = "setproctitle-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ff814dea1e5c492a4980e3e7d094286077054e7ea116cbeda138819db194b2cd"},
+ {file = "setproctitle-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:accb66d7b3ccb00d5cd11d8c6e07055a4568a24c95cf86109894dcc0c134cc89"},
+ {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554eae5a5b28f02705b83a230e9d163d645c9a08914c0ad921df363a07cf39b1"},
+ {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a911b26264dbe9e8066c7531c0591cfab27b464459c74385b276fe487ca91c12"},
+ {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2982efe7640c4835f7355fdb4da313ad37fb3b40f5c69069912f8048f77b28c8"},
+ {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df3f4274b80709d8bcab2f9a862973d453b308b97a0b423a501bcd93582852e3"},
+ {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:af2c67ae4c795d1674a8d3ac1988676fa306bcfa1e23fddb5e0bd5f5635309ca"},
+ {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af4061f67fd7ec01624c5e3c21f6b7af2ef0e6bab7fbb43f209e6506c9ce0092"},
+ {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:37a62cbe16d4c6294e84670b59cf7adcc73faafe6af07f8cb9adaf1f0e775b19"},
+ {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a83ca086fbb017f0d87f240a8f9bbcf0809f3b754ee01cec928fff926542c450"},
+ {file = "setproctitle-1.3.3-cp38-cp38-win32.whl", hash = "sha256:059f4ce86f8cc92e5860abfc43a1dceb21137b26a02373618d88f6b4b86ba9b2"},
+ {file = "setproctitle-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:ab92e51cd4a218208efee4c6d37db7368fdf182f6e7ff148fb295ecddf264287"},
+ {file = "setproctitle-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c7951820b77abe03d88b114b998867c0f99da03859e5ab2623d94690848d3e45"},
+ {file = "setproctitle-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc94cf128676e8fac6503b37763adb378e2b6be1249d207630f83fc325d9b11"},
+ {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f5d9027eeda64d353cf21a3ceb74bb1760bd534526c9214e19f052424b37e42"},
+ {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e4a8104db15d3462e29d9946f26bed817a5b1d7a47eabca2d9dc2b995991503"},
+ {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c32c41ace41f344d317399efff4cffb133e709cec2ef09c99e7a13e9f3b9483c"},
+ {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf16381c7bf7f963b58fb4daaa65684e10966ee14d26f5cc90f07049bfd8c1e"},
+ {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e18b7bd0898398cc97ce2dfc83bb192a13a087ef6b2d5a8a36460311cb09e775"},
+ {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69d565d20efe527bd8a9b92e7f299ae5e73b6c0470f3719bd66f3cd821e0d5bd"},
+ {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ddedd300cd690a3b06e7eac90ed4452348b1348635777ce23d460d913b5b63c3"},
+ {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:415bfcfd01d1fbf5cbd75004599ef167a533395955305f42220a585f64036081"},
+ {file = "setproctitle-1.3.3-cp39-cp39-win32.whl", hash = "sha256:21112fcd2195d48f25760f0eafa7a76510871bbb3b750219310cf88b04456ae3"},
+ {file = "setproctitle-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:5a740f05d0968a5a17da3d676ce6afefebeeeb5ce137510901bf6306ba8ee002"},
+ {file = "setproctitle-1.3.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6b9e62ddb3db4b5205c0321dd69a406d8af9ee1693529d144e86bd43bcb4b6c0"},
+ {file = "setproctitle-1.3.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e3b99b338598de0bd6b2643bf8c343cf5ff70db3627af3ca427a5e1a1a90dd9"},
+ {file = "setproctitle-1.3.3-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ae9a02766dad331deb06855fb7a6ca15daea333b3967e214de12cfae8f0ef5"},
+ {file = "setproctitle-1.3.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:200ede6fd11233085ba9b764eb055a2a191fb4ffb950c68675ac53c874c22e20"},
+ {file = "setproctitle-1.3.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0d3a953c50776751e80fe755a380a64cb14d61e8762bd43041ab3f8cc436092f"},
+ {file = "setproctitle-1.3.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e08e232b78ba3ac6bc0d23ce9e2bee8fad2be391b7e2da834fc9a45129eb87"},
+ {file = "setproctitle-1.3.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1da82c3e11284da4fcbf54957dafbf0655d2389cd3d54e4eaba636faf6d117a"},
+ {file = "setproctitle-1.3.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:aeaa71fb9568ebe9b911ddb490c644fbd2006e8c940f21cb9a1e9425bd709574"},
+ {file = "setproctitle-1.3.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:59335d000c6250c35989394661eb6287187854e94ac79ea22315469ee4f4c244"},
+ {file = "setproctitle-1.3.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3ba57029c9c50ecaf0c92bb127224cc2ea9fda057b5d99d3f348c9ec2855ad3"},
+ {file = "setproctitle-1.3.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d876d355c53d975c2ef9c4f2487c8f83dad6aeaaee1b6571453cb0ee992f55f6"},
+ {file = "setproctitle-1.3.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:224602f0939e6fb9d5dd881be1229d485f3257b540f8a900d4271a2c2aa4e5f4"},
+ {file = "setproctitle-1.3.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d7f27e0268af2d7503386e0e6be87fb9b6657afd96f5726b733837121146750d"},
+ {file = "setproctitle-1.3.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5e7266498cd31a4572378c61920af9f6b4676a73c299fce8ba93afd694f8ae7"},
+ {file = "setproctitle-1.3.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33c5609ad51cd99d388e55651b19148ea99727516132fb44680e1f28dd0d1de9"},
+ {file = "setproctitle-1.3.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:eae8988e78192fd1a3245a6f4f382390b61bce6cfcc93f3809726e4c885fa68d"},
+ {file = "setproctitle-1.3.3.tar.gz", hash = "sha256:c913e151e7ea01567837ff037a23ca8740192880198b7fbb90b16d181607caae"},
]
[package.extras]
@@ -6682,75 +7480,87 @@ test = ["pytest"]
[[package]]
name = "setuptools"
-version = "66.1.1"
+version = "68.2.2"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "setuptools-66.1.1-py3-none-any.whl", hash = "sha256:6f590d76b713d5de4e49fe4fbca24474469f53c83632d5d0fd056f7ff7e8112b"},
- {file = "setuptools-66.1.1.tar.gz", hash = "sha256:ac4008d396bc9cd983ea483cb7139c0240a07bbc74ffb6232fceffedc6cf03a8"},
+ {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"},
+ {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"},
]
[package.extras]
-docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
-testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
[[package]]
name = "shapely"
-version = "1.8.5.post1"
-description = "Geometric objects, predicates, and operations"
+version = "2.0.2"
+description = "Manipulation and analysis of geometric objects"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6ca8cffbe84ddde8f52b297b53f8e0687bd31141abb2c373fd8a9f032df415d6"},
+ {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:baa14fc27771e180c06b499a0a7ba697c7988c7b2b6cba9a929a19a4d2762de3"},
+ {file = "shapely-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:36480e32c434d168cdf2f5e9862c84aaf4d714a43a8465ae3ce8ff327f0affb7"},
+ {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef753200cbffd4f652efb2c528c5474e5a14341a473994d90ad0606522a46a2"},
+ {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9a41ff4323fc9d6257759c26eb1cf3a61ebc7e611e024e6091f42977303fd3a"},
+ {file = "shapely-2.0.2-cp310-cp310-win32.whl", hash = "sha256:72b5997272ae8c25f0fd5b3b967b3237e87fab7978b8d6cd5fa748770f0c5d68"},
+ {file = "shapely-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:34eac2337cbd67650248761b140d2535855d21b969d76d76123317882d3a0c1a"},
+ {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b0c052709c8a257c93b0d4943b0b7a3035f87e2d6a8ac9407b6a992d206422f"},
+ {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d217e56ae067e87b4e1731d0dc62eebe887ced729ba5c2d4590e9e3e9fdbd88"},
+ {file = "shapely-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94ac128ae2ab4edd0bffcd4e566411ea7bdc738aeaf92c32a8a836abad725f9f"},
+ {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3ee28f5e63a130ec5af4dc3c4cb9c21c5788bb13c15e89190d163b14f9fb89"},
+ {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:737dba15011e5a9b54a8302f1748b62daa207c9bc06f820cd0ad32a041f1c6f2"},
+ {file = "shapely-2.0.2-cp311-cp311-win32.whl", hash = "sha256:45ac6906cff0765455a7b49c1670af6e230c419507c13e2f75db638c8fc6f3bd"},
+ {file = "shapely-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:dc9342fc82e374130db86a955c3c4525bfbf315a248af8277a913f30911bed9e"},
+ {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:06f193091a7c6112fc08dfd195a1e3846a64306f890b151fa8c63b3e3624202c"},
+ {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eebe544df5c018134f3c23b6515877f7e4cd72851f88a8d0c18464f414d141a2"},
+ {file = "shapely-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7e92e7c255f89f5cdf777690313311f422aa8ada9a3205b187113274e0135cd8"},
+ {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be46d5509b9251dd9087768eaf35a71360de6afac82ce87c636990a0871aa18b"},
+ {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5533a925d8e211d07636ffc2fdd9a7f9f13d54686d00577eeb11d16f00be9c4"},
+ {file = "shapely-2.0.2-cp312-cp312-win32.whl", hash = "sha256:084b023dae8ad3d5b98acee9d3bf098fdf688eb0bb9b1401e8b075f6a627b611"},
+ {file = "shapely-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:ea84d1cdbcf31e619d672b53c4532f06253894185ee7acb8ceb78f5f33cbe033"},
+ {file = "shapely-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed1e99702125e7baccf401830a3b94d810d5c70b329b765fe93451fe14cf565b"},
+ {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7d897e6bdc6bc64f7f65155dbbb30e49acaabbd0d9266b9b4041f87d6e52b3a"},
+ {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0521d76d1e8af01e712db71da9096b484f081e539d4f4a8c97342e7971d5e1b4"},
+ {file = "shapely-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:5324be299d4c533ecfcfd43424dfd12f9428fd6f12cda38a4316da001d6ef0ea"},
+ {file = "shapely-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:78128357a0cee573257a0c2c388d4b7bf13cb7dbe5b3fe5d26d45ebbe2a39e25"},
+ {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87dc2be34ac3a3a4a319b963c507ac06682978a5e6c93d71917618b14f13066e"},
+ {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:42997ac806e4583dad51c80a32d38570fd9a3d4778f5e2c98f9090aa7db0fe91"},
+ {file = "shapely-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ccfd5fa10a37e67dbafc601c1ddbcbbfef70d34c3f6b0efc866ddbdb55893a6c"},
+ {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7c95d3379ae3abb74058938a9fcbc478c6b2e28d20dace38f8b5c587dde90aa"},
+ {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a21353d28209fb0d8cc083e08ca53c52666e0d8a1f9bbe23b6063967d89ed24"},
+ {file = "shapely-2.0.2-cp38-cp38-win32.whl", hash = "sha256:03e63a99dfe6bd3beb8d5f41ec2086585bb969991d603f9aeac335ad396a06d4"},
+ {file = "shapely-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:c6fd29fbd9cd76350bd5cc14c49de394a31770aed02d74203e23b928f3d2f1aa"},
+ {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f217d28ecb48e593beae20a0082a95bd9898d82d14b8fcb497edf6bff9a44d7"},
+ {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:394e5085b49334fd5b94fa89c086edfb39c3ecab7f669e8b2a4298b9d523b3a5"},
+ {file = "shapely-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd3ad17b64466a033848c26cb5b509625c87d07dcf39a1541461cacdb8f7e91c"},
+ {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d41a116fcad58048d7143ddb01285e1a8780df6dc1f56c3b1e1b7f12ed296651"},
+ {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dea9a0651333cf96ef5bb2035044e3ad6a54f87d90e50fe4c2636debf1b77abc"},
+ {file = "shapely-2.0.2-cp39-cp39-win32.whl", hash = "sha256:b8eb0a92f7b8c74f9d8fdd1b40d395113f59bd8132ca1348ebcc1f5aece94b96"},
+ {file = "shapely-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:794affd80ca0f2c536fc948a3afa90bd8fb61ebe37fe873483ae818e7f21def4"},
+ {file = "shapely-2.0.2.tar.gz", hash = "sha256:1713cc04c171baffc5b259ba8531c58acc2a301707b7f021d88a15ed090649e7"},
+]
+
+[package.dependencies]
+numpy = ">=1.14"
+
+[package.extras]
+docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"]
+test = ["pytest", "pytest-cov"]
+
+[[package]]
+name = "shellingham"
+version = "1.5.4"
+description = "Tool to Detect Surrounding Shell"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
files = [
- {file = "Shapely-1.8.5.post1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d048f93e42ba578b82758c15d8ae037d08e69d91d9872bca5a1895b118f4e2b0"},
- {file = "Shapely-1.8.5.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99ab0ddc05e44acabdbe657c599fdb9b2d82e86c5493bdae216c0c4018a82dee"},
- {file = "Shapely-1.8.5.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:99a2f0da0109e81e0c101a2b4cd8412f73f5f299e7b5b2deaf64cd2a100ac118"},
- {file = "Shapely-1.8.5.post1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6fe855e7d45685926b6ba00aaeb5eba5862611f7465775dacd527e081a8ced6d"},
- {file = "Shapely-1.8.5.post1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec14ceca36f67cb48b34d02d7f65a9acae15cd72b48e303531893ba4a960f3ea"},
- {file = "Shapely-1.8.5.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a2b2a65fa7f97115c1cd989fe9d6f39281ca2a8a014f1d4904c1a6e34d7f25"},
- {file = "Shapely-1.8.5.post1-cp310-cp310-win32.whl", hash = "sha256:21776184516a16bf82a0c3d6d6a312b3cd15a4cabafc61ee01cf2714a82e8396"},
- {file = "Shapely-1.8.5.post1-cp310-cp310-win_amd64.whl", hash = "sha256:a354199219c8d836f280b88f2c5102c81bb044ccea45bd361dc38a79f3873714"},
- {file = "Shapely-1.8.5.post1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:783bad5f48e2708a0e2f695a34ed382e4162c795cb2f0368b39528ac1d6db7ed"},
- {file = "Shapely-1.8.5.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a23ef3882d6aa203dd3623a3d55d698f59bfbd9f8a3bfed52c2da05a7f0f8640"},
- {file = "Shapely-1.8.5.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab38f7b5196ace05725e407cb8cab9ff66edb8e6f7bb36a398e8f73f52a7aaa2"},
- {file = "Shapely-1.8.5.post1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d086591f744be483b34628b391d741e46f2645fe37594319e0a673cc2c26bcf"},
- {file = "Shapely-1.8.5.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4728666fff8cccc65a07448cae72c75a8773fea061c3f4f139c44adc429b18c3"},
- {file = "Shapely-1.8.5.post1-cp311-cp311-win32.whl", hash = "sha256:84010db15eb364a52b74ea8804ef92a6a930dfc1981d17a369444b6ddec66efd"},
- {file = "Shapely-1.8.5.post1-cp311-cp311-win_amd64.whl", hash = "sha256:48dcfffb9e225c0481120f4bdf622131c8c95f342b00b158cdbe220edbbe20b6"},
- {file = "Shapely-1.8.5.post1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2fd15397638df291c427a53d641d3e6fd60458128029c8c4f487190473a69a91"},
- {file = "Shapely-1.8.5.post1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a74631e511153366c6dbe3229fa93f877e3c87ea8369cd00f1d38c76b0ed9ace"},
- {file = "Shapely-1.8.5.post1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:66bdac74fbd1d3458fa787191a90fa0ae610f09e2a5ec398c36f968cc0ed743f"},
- {file = "Shapely-1.8.5.post1-cp36-cp36m-win32.whl", hash = "sha256:6d388c0c1bd878ed1af4583695690aa52234b02ed35f93a1c8486ff52a555838"},
- {file = "Shapely-1.8.5.post1-cp36-cp36m-win_amd64.whl", hash = "sha256:be9423d5a3577ac2e92c7e758bd8a2b205f5e51a012177a590bc46fc51eb4834"},
- {file = "Shapely-1.8.5.post1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5d7f85c2d35d39ff53c9216bc76b7641c52326f7e09aaad1789a3611a0f812f2"},
- {file = "Shapely-1.8.5.post1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:adcf8a11b98af9375e32bff91de184f33a68dc48b9cb9becad4f132fa25cfa3c"},
- {file = "Shapely-1.8.5.post1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:753ed0e21ab108bd4282405b9b659f2e985e8502b1a72b978eaa51d3496dee19"},
- {file = "Shapely-1.8.5.post1-cp37-cp37m-win32.whl", hash = "sha256:65b21243d8f6bcd421210daf1fabb9de84de2c04353c5b026173b88d17c1a581"},
- {file = "Shapely-1.8.5.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:370b574c78dc5af3a198a6da5d9b3d7c04654bd2ef7e80e80a3a0992dfb2d9cd"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:532a55ee2a6c52d23d6f7d1567c8f0473635f3b270262c44e1b0c88096827e22"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3480657460e939f45a7d359ef0e172a081f249312557fe9aa78c4fd3a362d993"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b65f5d530ba91e49ffc7c589255e878d2506a8b96ffce69d3b7c4500a9a9eaf8"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:147066da0be41b147a61f8eb805dea3b13709dbc873a431ccd7306e24d712bc0"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c2822111ddc5bcfb116e6c663e403579d0fe3f147d2a97426011a191c43a7458"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b47bb6f9369e8bf3e6dbd33e6a25a47ee02b2874792a529fe04a49bf8bc0df6"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-win32.whl", hash = "sha256:2e0a8c2e55f1be1312b51c92b06462ea89e6bb703fab4b114e7a846d941cfc40"},
- {file = "Shapely-1.8.5.post1-cp38-cp38-win_amd64.whl", hash = "sha256:0d885cb0cf670c1c834df3f371de8726efdf711f18e2a75da5cfa82843a7ab65"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0b4ee3132ee90f07d63db3aea316c4c065ed7a26231458dda0874414a09d6ba3"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:02dd5d7dc6e46515d88874134dc8fcdc65826bca93c3eecee59d1910c42c1b17"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c6a9a4a31cd6e86d0fbe8473ceed83d4fe760b19d949fb557ef668defafea0f6"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:38f0fbbcb8ca20c16451c966c1f527cc43968e121c8a048af19ed3e339a921cd"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78fb9d929b8ee15cfd424b6c10879ce1907f24e05fb83310fc47d2cd27088e40"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89164e7a9776a19e29f01369a98529321994e2e4d852b92b7e01d4d9804c55bf"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-win32.whl", hash = "sha256:8e59817b0fe63d34baedaabba8c393c0090f061917d18fc0bcc2f621937a8f73"},
- {file = "Shapely-1.8.5.post1-cp39-cp39-win_amd64.whl", hash = "sha256:e9c30b311de2513555ab02464ebb76115d242842b29c412f5a9aa0cac57be9f6"},
- {file = "Shapely-1.8.5.post1.tar.gz", hash = "sha256:ef3be705c3eac282a28058e6c6e5503419b250f482320df2172abcbea642c831"},
-]
-
-[package.extras]
-all = ["numpy", "pytest", "pytest-cov"]
-test = ["pytest", "pytest-cov"]
-vectorized = ["numpy"]
+ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"},
+ {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"},
+]
[[package]]
name = "six"
@@ -6765,13 +7575,13 @@ files = [
[[package]]
name = "smmap"
-version = "5.0.0"
+version = "5.0.1"
description = "A pure Python implementation of a sliding window memory map manager"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
files = [
- {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"},
- {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"},
+ {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"},
+ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"},
]
[[package]]
@@ -6798,67 +7608,54 @@ files = [
[[package]]
name = "soupsieve"
-version = "2.4.1"
+version = "2.5"
description = "A modern CSS selector implementation for Beautiful Soup."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"},
- {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"},
+ {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"},
+ {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
]
[[package]]
name = "sqlalchemy"
-version = "1.4.49"
+version = "1.4.50"
description = "Database Abstraction Library"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [
- {file = "SQLAlchemy-1.4.49-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e126cf98b7fd38f1e33c64484406b78e937b1a280e078ef558b95bf5b6895f6"},
- {file = "SQLAlchemy-1.4.49-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03db81b89fe7ef3857b4a00b63dedd632d6183d4ea5a31c5d8a92e000a41fc71"},
- {file = "SQLAlchemy-1.4.49-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:95b9df9afd680b7a3b13b38adf6e3a38995da5e162cc7524ef08e3be4e5ed3e1"},
- {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a63e43bf3f668c11bb0444ce6e809c1227b8f067ca1068898f3008a273f52b09"},
- {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f835c050ebaa4e48b18403bed2c0fda986525896efd76c245bdd4db995e51a4c"},
- {file = "SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c21b172dfb22e0db303ff6419451f0cac891d2e911bb9fbf8003d717f1bcf91"},
- {file = "SQLAlchemy-1.4.49-cp310-cp310-win32.whl", hash = "sha256:5fb1ebdfc8373b5a291485757bd6431de8d7ed42c27439f543c81f6c8febd729"},
- {file = "SQLAlchemy-1.4.49-cp310-cp310-win_amd64.whl", hash = "sha256:f8a65990c9c490f4651b5c02abccc9f113a7f56fa482031ac8cb88b70bc8ccaa"},
- {file = "SQLAlchemy-1.4.49-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8923dfdf24d5aa8a3adb59723f54118dd4fe62cf59ed0d0d65d940579c1170a4"},
- {file = "SQLAlchemy-1.4.49-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9ab2c507a7a439f13ca4499db6d3f50423d1d65dc9b5ed897e70941d9e135b0"},
- {file = "SQLAlchemy-1.4.49-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5debe7d49b8acf1f3035317e63d9ec8d5e4d904c6e75a2a9246a119f5f2fdf3d"},
- {file = "SQLAlchemy-1.4.49-cp311-cp311-win32.whl", hash = "sha256:82b08e82da3756765c2e75f327b9bf6b0f043c9c3925fb95fb51e1567fa4ee87"},
- {file = "SQLAlchemy-1.4.49-cp311-cp311-win_amd64.whl", hash = "sha256:171e04eeb5d1c0d96a544caf982621a1711d078dbc5c96f11d6469169bd003f1"},
- {file = "SQLAlchemy-1.4.49-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:36e58f8c4fe43984384e3fbe6341ac99b6b4e083de2fe838f0fdb91cebe9e9cb"},
- {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b31e67ff419013f99ad6f8fc73ee19ea31585e1e9fe773744c0f3ce58c039c30"},
- {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c14b29d9e1529f99efd550cd04dbb6db6ba5d690abb96d52de2bff4ed518bc95"},
- {file = "SQLAlchemy-1.4.49-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c40f3470e084d31247aea228aa1c39bbc0904c2b9ccbf5d3cfa2ea2dac06f26d"},
- {file = "SQLAlchemy-1.4.49-cp36-cp36m-win32.whl", hash = "sha256:706bfa02157b97c136547c406f263e4c6274a7b061b3eb9742915dd774bbc264"},
- {file = "SQLAlchemy-1.4.49-cp36-cp36m-win_amd64.whl", hash = "sha256:a7f7b5c07ae5c0cfd24c2db86071fb2a3d947da7bd487e359cc91e67ac1c6d2e"},
- {file = "SQLAlchemy-1.4.49-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:4afbbf5ef41ac18e02c8dc1f86c04b22b7a2125f2a030e25bbb4aff31abb224b"},
- {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24e300c0c2147484a002b175f4e1361f102e82c345bf263242f0449672a4bccf"},
- {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:201de072b818f8ad55c80d18d1a788729cccf9be6d9dc3b9d8613b053cd4836d"},
- {file = "SQLAlchemy-1.4.49-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653ed6817c710d0c95558232aba799307d14ae084cc9b1f4c389157ec50df5c"},
- {file = "SQLAlchemy-1.4.49-cp37-cp37m-win32.whl", hash = "sha256:647e0b309cb4512b1f1b78471fdaf72921b6fa6e750b9f891e09c6e2f0e5326f"},
- {file = "SQLAlchemy-1.4.49-cp37-cp37m-win_amd64.whl", hash = "sha256:ab73ed1a05ff539afc4a7f8cf371764cdf79768ecb7d2ec691e3ff89abbc541e"},
- {file = "SQLAlchemy-1.4.49-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:37ce517c011560d68f1ffb28af65d7e06f873f191eb3a73af5671e9c3fada08a"},
- {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1878ce508edea4a879015ab5215546c444233881301e97ca16fe251e89f1c55"},
- {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e8e608983e6f85d0852ca61f97e521b62e67969e6e640fe6c6b575d4db68557"},
- {file = "SQLAlchemy-1.4.49-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccf956da45290df6e809ea12c54c02ace7f8ff4d765d6d3dfb3655ee876ce58d"},
- {file = "SQLAlchemy-1.4.49-cp38-cp38-win32.whl", hash = "sha256:f167c8175ab908ce48bd6550679cc6ea20ae169379e73c7720a28f89e53aa532"},
- {file = "SQLAlchemy-1.4.49-cp38-cp38-win_amd64.whl", hash = "sha256:45806315aae81a0c202752558f0df52b42d11dd7ba0097bf71e253b4215f34f4"},
- {file = "SQLAlchemy-1.4.49-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b6d0c4b15d65087738a6e22e0ff461b407533ff65a73b818089efc8eb2b3e1de"},
- {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a843e34abfd4c797018fd8d00ffffa99fd5184c421f190b6ca99def4087689bd"},
- {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1c890421651b45a681181301b3497e4d57c0d01dc001e10438a40e9a9c25ee77"},
- {file = "SQLAlchemy-1.4.49-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d26f280b8f0a8f497bc10573849ad6dc62e671d2468826e5c748d04ed9e670d5"},
- {file = "SQLAlchemy-1.4.49-cp39-cp39-win32.whl", hash = "sha256:ec2268de67f73b43320383947e74700e95c6770d0c68c4e615e9897e46296294"},
- {file = "SQLAlchemy-1.4.49-cp39-cp39-win_amd64.whl", hash = "sha256:bbdf16372859b8ed3f4d05f925a984771cd2abd18bd187042f24be4886c2a15f"},
- {file = "SQLAlchemy-1.4.49.tar.gz", hash = "sha256:06ff25cbae30c396c4b7737464f2a7fc37a67b7da409993b182b024cec80aed9"},
+ {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d00665725063692c42badfd521d0c4392e83c6c826795d38eb88fb108e5660e5"},
+ {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85292ff52ddf85a39367057c3d7968a12ee1fb84565331a36a8fead346f08796"},
+ {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d0fed0f791d78e7767c2db28d34068649dfeea027b83ed18c45a423f741425cb"},
+ {file = "SQLAlchemy-1.4.50-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db4db3c08ffbb18582f856545f058a7a5e4ab6f17f75795ca90b3c38ee0a8ba4"},
+ {file = "SQLAlchemy-1.4.50-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14b0cacdc8a4759a1e1bd47dc3ee3f5db997129eb091330beda1da5a0e9e5bd7"},
+ {file = "SQLAlchemy-1.4.50-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fb9cb60e0f33040e4f4681e6658a7eb03b5cb4643284172f91410d8c493dace"},
+ {file = "SQLAlchemy-1.4.50-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4cb501d585aa74a0f86d0ea6263b9c5e1d1463f8f9071392477fd401bd3c7cc"},
+ {file = "SQLAlchemy-1.4.50-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a7a66297e46f85a04d68981917c75723e377d2e0599d15fbe7a56abed5e2d75"},
+ {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1db0221cb26d66294f4ca18c533e427211673ab86c1fbaca8d6d9ff78654293"},
+ {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7dbe6369677a2bea68fe9812c6e4bbca06ebfa4b5cde257b2b0bf208709131"},
+ {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a9bddb60566dc45c57fd0a5e14dd2d9e5f106d2241e0a2dc0c1da144f9444516"},
+ {file = "SQLAlchemy-1.4.50-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82dd4131d88395df7c318eeeef367ec768c2a6fe5bd69423f7720c4edb79473c"},
+ {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:273505fcad22e58cc67329cefab2e436006fc68e3c5423056ee0513e6523268a"},
+ {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3257a6e09626d32b28a0c5b4f1a97bced585e319cfa90b417f9ab0f6145c33c"},
+ {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d69738d582e3a24125f0c246ed8d712b03bd21e148268421e4a4d09c34f521a5"},
+ {file = "SQLAlchemy-1.4.50-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1c5d9cd3e6bf3d1ce56971c62a40c06bfc02861728f368dcfec8aeedb2814"},
+ {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1fcee5a2c859eecb4ed179edac5ffbc7c84ab09a5420219078ccc6edda45436"},
+ {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbaf6643a604aa17e7a7afd74f665f9db882df5c297bdd86c38368f2c471f37d"},
+ {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e70e0673d7d12fa6cd363453a0d22dac0d9978500aa6b46aa96e22690a55eab"},
+ {file = "SQLAlchemy-1.4.50-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b881ac07d15fb3e4f68c5a67aa5cdaf9eb8f09eb5545aaf4b0a5f5f4659be18"},
+ {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6997da81114daef9203d30aabfa6b218a577fc2bd797c795c9c88c9eb78d49"},
+ {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdb77e1789e7596b77fd48d99ec1d2108c3349abd20227eea0d48d3f8cf398d9"},
+ {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:128a948bd40780667114b0297e2cc6d657b71effa942e0a368d8cc24293febb3"},
+ {file = "SQLAlchemy-1.4.50-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2d526aeea1bd6a442abc7c9b4b00386fd70253b80d54a0930c0a216230a35be"},
+ {file = "SQLAlchemy-1.4.50.tar.gz", hash = "sha256:3b97ddf509fc21e10b09403b5219b06c5b558b27fc2453150274fa4e70707dbf"},
]
[package.dependencies]
greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"}
[package.extras]
-aiomysql = ["aiomysql", "greenlet (!=0.4.17)"]
+aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"]
aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"]
asyncio = ["greenlet (!=0.4.17)"]
asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"]
@@ -6982,13 +7779,13 @@ test = ["pytest", "pytest-cov"]
[[package]]
name = "stack-data"
-version = "0.6.2"
+version = "0.6.3"
description = "Extract data from python stack frames and tracebacks for informative displays"
optional = false
python-versions = "*"
files = [
- {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"},
- {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"},
+ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
+ {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
]
[package.dependencies]
@@ -7015,13 +7812,13 @@ widechars = ["wcwidth"]
[[package]]
name = "tenacity"
-version = "8.2.2"
+version = "8.2.3"
description = "Retry code until it succeeds"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
files = [
- {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"},
- {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"},
+ {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"},
+ {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"},
]
[package.extras]
@@ -7029,13 +7826,13 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"]
[[package]]
name = "termcolor"
-version = "2.2.0"
+version = "2.3.0"
description = "ANSI color formatting for output in terminal"
optional = false
python-versions = ">=3.7"
files = [
- {file = "termcolor-2.2.0-py3-none-any.whl", hash = "sha256:91ddd848e7251200eac969846cbae2dacd7d71c2871e92733289e7e3666f48e7"},
- {file = "termcolor-2.2.0.tar.gz", hash = "sha256:dfc8ac3f350788f23b2947b3e6cfa5a53b630b612e6cd8965a015a776020b99a"},
+ {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"},
+ {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"},
]
[package.extras]
@@ -7052,6 +7849,17 @@ files = [
{file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"},
]
+[[package]]
+name = "threadpoolctl"
+version = "3.2.0"
+description = "threadpoolctl"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"},
+ {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"},
+]
+
[[package]]
name = "toml"
version = "0.10.2"
@@ -7074,50 +7882,93 @@ files = [
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]
+[[package]]
+name = "tomlkit"
+version = "0.12.3"
+description = "Style preserving TOML library"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"},
+ {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"},
+]
+
[[package]]
name = "tornado"
-version = "6.3"
+version = "6.3.3"
description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
optional = false
python-versions = ">= 3.8"
files = [
- {file = "tornado-6.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:6cfff1e9c15c79e106b8352269d201f8fc0815914a6260f3893ca18b724ea94b"},
- {file = "tornado-6.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6164571f5b9f73143d1334df4584cb9ac86d20c461e17b6c189a19ead8bb93c1"},
- {file = "tornado-6.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4546003dc8b5733489139d3bff5fa6a0211be505faf819bd9970e7c2b32e8122"},
- {file = "tornado-6.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c659ab04d5aa477dbe44152c67d93f3ad3243b992d94f795ca1d5c73c37337ce"},
- {file = "tornado-6.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:912df5712024564e362ecce43c8d5862e14c78c8dd3846c9d889d44fbd7f4951"},
- {file = "tornado-6.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:c37b6a384d54ce6a31168d40ab21ad2591ddaf34973075cc0cad154402ecd9e8"},
- {file = "tornado-6.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:c9114a61a4588c09065b9996ae05462350d17160b92b9bf9a1e93689cc0424dc"},
- {file = "tornado-6.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:4d349846931557b7ec92f224b5d598b160e2ba26ae1812480b42e9622c884bf7"},
- {file = "tornado-6.3-cp38-abi3-win32.whl", hash = "sha256:d7b737e18f701de3e4a3b0824260b4d740e4d60607b8089bb80e80ffd464780e"},
- {file = "tornado-6.3-cp38-abi3-win_amd64.whl", hash = "sha256:720f53e6367b38190ae7fa398c25c086c69d88b3c6535bd6021a126b727fb5cd"},
- {file = "tornado-6.3.tar.gz", hash = "sha256:d68f3192936ff2c4add04dc21a436a43b4408d466746b78bb2b9d0a53a18683f"},
+ {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"},
+ {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"},
+ {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"},
+ {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"},
+ {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"},
+ {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"},
+ {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"},
+ {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"},
+ {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"},
+ {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"},
+ {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"},
]
[[package]]
name = "traitlets"
-version = "5.9.0"
+version = "5.13.0"
description = "Traitlets Python configuration system"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"},
- {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"},
+ {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"},
+ {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"},
]
[package.extras]
docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
-test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"]
+test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"]
+
+[[package]]
+name = "typer"
+version = "0.9.0"
+description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"},
+ {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"},
+]
+
+[package.dependencies]
+click = ">=7.1.1,<9.0.0"
+typing-extensions = ">=3.7.4.3"
+
+[package.extras]
+all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"]
+dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"]
+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)"]
+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,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"]
[[package]]
name = "typing-extensions"
-version = "4.5.0"
-description = "Backported and Experimental Type Hints for Python 3.7+"
+version = "4.9.0"
+description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"},
- {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"},
+ {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"},
+ {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"},
+]
+
+[[package]]
+name = "tzdata"
+version = "2023.3"
+description = "Provider of IANA time zone data"
+optional = false
+python-versions = ">=2"
+files = [
+ {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"},
+ {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"},
]
[[package]]
@@ -7144,6 +7995,24 @@ files = [
{file = "unicodecsv-0.14.1.tar.gz", hash = "sha256:018c08037d48649a0412063ff4eda26eaa81eff1546dbffa51fa5293276ff7fc"},
]
+[[package]]
+name = "universal-pathlib"
+version = "0.1.4"
+description = "pathlib api extended to use fsspec backends"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "universal_pathlib-0.1.4-py3-none-any.whl", hash = "sha256:f99186cf950bde1262de9a590bb019613ef84f9fabd9f276e8b019722201943a"},
+ {file = "universal_pathlib-0.1.4.tar.gz", hash = "sha256:82e5d86d16a27e0ea1adc7d88acbcba9d02d5a45488163174f96d9ac289db2e4"},
+]
+
+[package.dependencies]
+fsspec = ">=2022.1.0"
+
+[package.extras]
+dev = ["adlfs", "aiohttp", "cheroot", "gcsfs", "hadoop-test-cluster", "moto[s3,server]", "mypy (==1.3.0)", "packaging", "pyarrow", "pydantic", "pydantic-settings", "pylint (==2.17.4)", "pytest (==7.3.2)", "pytest-cov (==4.1.0)", "pytest-mock (==3.11.1)", "pytest-sugar (==0.9.6)", "requests", "s3fs", "webdav4[fsspec]", "wsgidav"]
+tests = ["mypy (==1.3.0)", "packaging", "pylint (==2.17.4)", "pytest (==7.3.2)", "pytest-cov (==4.1.0)", "pytest-mock (==3.11.1)", "pytest-sugar (==0.9.6)"]
+
[[package]]
name = "uritemplate"
version = "4.1.1"
@@ -7157,83 +8026,121 @@ files = [
[[package]]
name = "urllib3"
-version = "1.26.15"
+version = "2.0.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.7"
files = [
- {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"},
- {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"},
+ {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"},
+ {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"},
]
[package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "uvloop"
-version = "0.17.0"
+version = "0.19.0"
description = "Fast implementation of asyncio event loop on top of libuv"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8.0"
files = [
- {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"},
- {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"},
- {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"},
- {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"},
- {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"},
- {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"},
- {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"},
- {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"},
- {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"},
- {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"},
- {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"},
- {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"},
- {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"},
- {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"},
- {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"},
- {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"},
- {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"},
- {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"},
- {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"},
- {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"},
- {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"},
- {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"},
- {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"},
- {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"},
- {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"},
- {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"},
- {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"},
- {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"},
- {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"},
- {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"},
-]
-
-[package.extras]
-dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"]
+ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"},
+ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"},
+ {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"},
+ {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"},
+ {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"},
+ {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"},
+ {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"},
+ {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"},
+ {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"},
+ {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"},
+ {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"},
+ {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"},
+ {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"},
+ {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"},
+ {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"},
+ {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"},
+ {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"},
+ {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"},
+ {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"},
+ {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"},
+ {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"},
+ {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"},
+ {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"},
+ {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"},
+ {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"},
+ {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"},
+ {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"},
+ {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"},
+ {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"},
+ {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"},
+ {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"},
+]
+
+[package.extras]
docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"]
-test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"]
+test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"]
[[package]]
name = "virtualenv"
-version = "20.21.0"
+version = "20.24.6"
description = "Virtual Python Environment builder"
optional = false
python-versions = ">=3.7"
files = [
- {file = "virtualenv-20.21.0-py3-none-any.whl", hash = "sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc"},
- {file = "virtualenv-20.21.0.tar.gz", hash = "sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68"},
+ {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"},
+ {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"},
+]
+
+[package.dependencies]
+distlib = ">=0.3.7,<1"
+filelock = ">=3.12.2,<4"
+platformdirs = ">=3.9.1,<4"
+
+[package.extras]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
+test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"]
+
+[[package]]
+name = "wandb"
+version = "0.16.1"
+description = "A CLI and library for interacting with the Weights & Biases API."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "wandb-0.16.1-py3-none-any.whl", hash = "sha256:1d7423f92520984585bae9693bb637ae08d3e0c1d75ad4b34215bc44431f114c"},
+ {file = "wandb-0.16.1.tar.gz", hash = "sha256:ffe6e8dd8cc8fcd72010c1246fb3d6d226b37c4f111f3f94308a1c0ae28a2fec"},
]
[package.dependencies]
-distlib = ">=0.3.6,<1"
-filelock = ">=3.4.1,<4"
-platformdirs = ">=2.4,<4"
+appdirs = ">=1.4.3"
+Click = ">=7.1,<8.0.0 || >8.0.0"
+docker-pycreds = ">=0.4.0"
+GitPython = ">=1.0.0,<3.1.29 || >3.1.29"
+protobuf = {version = ">=3.19.0,<4.21.0 || >4.21.0,<5", markers = "python_version > \"3.9\" or sys_platform != \"linux\""}
+psutil = ">=5.0.0"
+PyYAML = "*"
+requests = ">=2.0.0,<3"
+sentry-sdk = ">=1.0.0"
+setproctitle = "*"
+setuptools = "*"
[package.extras]
-docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"]
-test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"]
+async = ["httpx (>=0.23.0)"]
+aws = ["boto3"]
+azure = ["azure-identity", "azure-storage-blob"]
+core = ["wandb-core (>=0.17.0b2)"]
+gcp = ["google-cloud-storage"]
+kubeflow = ["google-cloud-storage", "kubernetes", "minio", "sh"]
+launch = ["PyYAML (>=6.0.0)", "awscli", "azure-containerregistry", "azure-identity", "azure-storage-blob", "boto3", "botocore", "chardet", "google-auth", "google-cloud-aiplatform", "google-cloud-artifact-registry", "google-cloud-compute", "google-cloud-storage", "iso8601", "kubernetes", "kubernetes-asyncio", "nbconvert", "nbformat", "optuna", "typing-extensions"]
+media = ["bokeh", "moviepy", "numpy", "pillow", "plotly", "rdkit-pypi", "soundfile"]
+models = ["cloudpickle"]
+perf = ["orjson"]
+sweeps = ["sweeps (>=0.2.0)"]
[[package]]
name = "watchdog"
@@ -7276,13 +8183,13 @@ watchmedo = ["PyYAML (>=3.10)"]
[[package]]
name = "wcmatch"
-version = "8.4.1"
+version = "8.5"
description = "Wildcard/glob file name matcher."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "wcmatch-8.4.1-py3-none-any.whl", hash = "sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7"},
- {file = "wcmatch-8.4.1.tar.gz", hash = "sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943"},
+ {file = "wcmatch-8.5-py3-none-any.whl", hash = "sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5"},
+ {file = "wcmatch-8.5.tar.gz", hash = "sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3"},
]
[package.dependencies]
@@ -7290,13 +8197,13 @@ bracex = ">=2.1.1"
[[package]]
name = "wcwidth"
-version = "0.2.6"
+version = "0.2.9"
description = "Measures the displayed width of unicode strings in a terminal"
optional = false
python-versions = "*"
files = [
- {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"},
- {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"},
+ {file = "wcwidth-0.2.9-py2.py3-none-any.whl", hash = "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223"},
+ {file = "wcwidth-0.2.9.tar.gz", hash = "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"},
]
[[package]]
@@ -7417,94 +8324,165 @@ MarkupSafe = "*"
[package.extras]
email = ["email-validator"]
+[[package]]
+name = "xgboost"
+version = "1.7.6"
+description = "XGBoost Python Package"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "xgboost-1.7.6-py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.macosx_12_0_x86_64.whl", hash = "sha256:4c34675b4d2678c624ddde5d45361e7e16046923e362e4e609b88353e6b87124"},
+ {file = "xgboost-1.7.6-py3-none-macosx_12_0_arm64.whl", hash = "sha256:59b4b366d2cafc7f645e87d897983a5b59be02876194b1d213bd8d8b811d8ce8"},
+ {file = "xgboost-1.7.6-py3-none-manylinux2014_aarch64.whl", hash = "sha256:281c3c6f4fbed2d36bf95cd02a641afa95e72e9abde70064056da5e76233e8df"},
+ {file = "xgboost-1.7.6-py3-none-manylinux2014_x86_64.whl", hash = "sha256:b1d5db49b199152d62bd9217c98760207d3de86d2b9d243260c573ffe638f80a"},
+ {file = "xgboost-1.7.6-py3-none-win_amd64.whl", hash = "sha256:127cf1f5e2ec25cd41429394c6719b87af1456ce583e89f0bffd35d02ad18bcb"},
+ {file = "xgboost-1.7.6.tar.gz", hash = "sha256:1c527554a400445e0c38186039ba1a00425dcdb4e40b37eed0e74cb39a159c47"},
+]
+
+[package.dependencies]
+numpy = "*"
+scipy = "*"
+
+[package.extras]
+dask = ["dask", "distributed", "pandas"]
+datatable = ["datatable"]
+pandas = ["pandas"]
+plotting = ["graphviz", "matplotlib"]
+pyspark = ["cloudpickle", "pyspark", "scikit-learn"]
+scikit-learn = ["scikit-learn"]
+
+[[package]]
+name = "xyzservices"
+version = "2023.10.1"
+description = "Source of XYZ tiles providers"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "xyzservices-2023.10.1-py3-none-any.whl", hash = "sha256:6a4c38d3a9f89d3e77153eff9414b36a8ee0850c9e8b85796fd1b2a85b8dfd68"},
+ {file = "xyzservices-2023.10.1.tar.gz", hash = "sha256:091229269043bc8258042edbedad4fcb44684b0473ede027b5672ad40dc9fa02"},
+]
+
+[[package]]
+name = "yamllint"
+version = "1.33.0"
+description = "A linter for YAML files."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "yamllint-1.33.0-py3-none-any.whl", hash = "sha256:28a19f5d68d28d8fec538a1db21bb2d84c7dc2e2ea36266da8d4d1c5a683814d"},
+ {file = "yamllint-1.33.0.tar.gz", hash = "sha256:2dceab9ef2d99518a2fcf4ffc964d44250ac4459be1ba3ca315118e4a1a81f7d"},
+]
+
+[package.dependencies]
+pathspec = ">=0.5.3"
+pyyaml = "*"
+
+[package.extras]
+dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"]
+
[[package]]
name = "yarl"
-version = "1.8.2"
+version = "1.9.2"
description = "Yet another URL library"
optional = false
python-versions = ">=3.7"
files = [
- {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"},
- {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"},
- {file = "yarl-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe"},
- {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e"},
- {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996"},
- {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef"},
- {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8"},
- {file = "yarl-1.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6"},
- {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146"},
- {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f"},
- {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826"},
- {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3"},
- {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80"},
- {file = "yarl-1.8.2-cp310-cp310-win32.whl", hash = "sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42"},
- {file = "yarl-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574"},
- {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634"},
- {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd"},
- {file = "yarl-1.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581"},
- {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a"},
- {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf"},
- {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee"},
- {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76"},
- {file = "yarl-1.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b"},
- {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a"},
- {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6"},
- {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4"},
- {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c"},
- {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2"},
- {file = "yarl-1.8.2-cp311-cp311-win32.whl", hash = "sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b"},
- {file = "yarl-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c"},
- {file = "yarl-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef"},
- {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1"},
- {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077"},
- {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2"},
- {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89"},
- {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c"},
- {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0"},
- {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739"},
- {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b"},
- {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7"},
- {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37"},
- {file = "yarl-1.8.2-cp37-cp37m-win32.whl", hash = "sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89"},
- {file = "yarl-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5"},
- {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1"},
- {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918"},
- {file = "yarl-1.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229"},
- {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e"},
- {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e"},
- {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1"},
- {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3"},
- {file = "yarl-1.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901"},
- {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0"},
- {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05"},
- {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d"},
- {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c"},
- {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946"},
- {file = "yarl-1.8.2-cp38-cp38-win32.whl", hash = "sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165"},
- {file = "yarl-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f"},
- {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8"},
- {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf"},
- {file = "yarl-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77"},
- {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87"},
- {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0"},
- {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2"},
- {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08"},
- {file = "yarl-1.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d"},
- {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951"},
- {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220"},
- {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06"},
- {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516"},
- {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588"},
- {file = "yarl-1.8.2-cp39-cp39-win32.whl", hash = "sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83"},
- {file = "yarl-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778"},
- {file = "yarl-1.8.2.tar.gz", hash = "sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562"},
+ {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"},
+ {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"},
+ {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"},
+ {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"},
+ {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"},
+ {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"},
+ {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"},
+ {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"},
+ {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"},
+ {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"},
+ {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"},
+ {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"},
+ {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"},
+ {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"},
+ {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"},
+ {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"},
+ {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"},
+ {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"},
+ {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"},
+ {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"},
+ {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"},
+ {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"},
+ {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"},
+ {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"},
]
[package.dependencies]
idna = ">=2.0"
multidict = ">=4.0"
+[[package]]
+name = "zipp"
+version = "3.17.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"},
+ {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"},
+]
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"]
+testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"]
+
[metadata]
lock-version = "2.0"
python-versions = "3.10.8"
-content-hash = "0bcb4eea7c9025afe7e9b09880fe444f200641151dd90333006d43430aaf7954"
+content-hash = "e445af79a0eb25f73de6c46dbf4ab39af61a1ebed2cc2fb40a90168cee1c525c"
diff --git a/pyproject.toml b/pyproject.toml
index 9112e97c0..d6152994d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,81 +1,121 @@
[tool.poetry]
name = "otgenetics"
-version = "1.0.0"
+# !! version is managed by semantic_release
+version = "0.0.0"
description = "Open targets Genetics Portal Python ETL"
authors = ["Open Targets core team"]
-license = "Apache License v2"
-packages = [
- { include = "otg", from = "src"},
-]
+license = "Apache-2.0"
+readme = "README.md"
+documentation = "https://opentargets.github.io/genetics_etl_python/"
+repository = "https://github.com/opentargets/genetics_etl_python"
+packages = [{ include = "otg", from = "src" }]
+
+[tool.poetry.urls]
+"Bug Tracker" = "http://github.com/opentargets/issues"
+"Funding" = "https://www.opentargets.org"
[tool.poetry.scripts]
otg = "otg.cli:main"
[tool.poetry.dependencies]
python = "3.10.8"
-pyspark = "3.3.0"
-scipy = "^1.6.1"
-hydra-core = "^1.2.0"
+pyspark = "3.3.4"
+scipy = "^1.11.4"
+hydra-core = "^1.3.2"
pyliftover = "^0.4"
-numpy = "^1.23.2"
-hail = "^0.2.98"
+xgboost = "^1.7.3"
+numpy = "^1.26.2"
+hail = "0.2.126"
+wandb = "^0.16.1"
+google = "^3.0.0"
+omegaconf = "^2.3.0"
+typing-extensions = "^4.9.0"
+scikit-learn = "^1.3.2"
[tool.poetry.dev-dependencies]
-pre-commit = "^2.15.0"
-black = {version = "^22.6.0", allow-prereleases = true}
-mypy = "^0.971"
+pre-commit = "^3.6.0"
+mypy = "^1.8"
pep8-naming = "^0.13.2"
interrogate = "^1.5.0"
-isort = "^5.10.1"
+isort = "^5.13.2"
darglint = "^1.8.1"
-ruff = "^0.0.287"
+ruff = "^0.1.8"
[tool.poetry.group.docs.dependencies]
-mkdocs = "^1.4.0"
-mkdocstrings-python = "^0.7.1"
+mkdocs = "^1.5.3"
+mkdocstrings-python = "^1.7.5"
mkdocs-material = "*"
mkdocs-section-index = "^0.3.4"
-mkdocs-git-revision-date-localized-plugin = "^1.1.0"
-mkdocs-autolinks-plugin = "^0.6.0"
-mkdocs-minify-plugin = "^0.5.0"
-mkdocs-awesome-pages-plugin = "^2.8.0"
+mkdocs-git-revision-date-localized-plugin = "^1.2.2"
+mkdocs-autolinks-plugin = "^0.7.1"
+mkdocs-awesome-pages-plugin = "^2.9.2"
mkdocs-exclude = "^1.0.2"
-mkdocs-git-committers-plugin-2 = "^1.1.1"
-lxml = "^4.9.2"
+mkdocs-git-committers-plugin-2 = "^2.2.2"
+lxml = "^4.9.3"
+pymdown-extensions = "^10.5"
[tool.poetry.group.tests.dependencies]
-pytest-cov = "^4.0.0"
+pytest-cov = "^4.1.0"
pytest-sugar = "^0.9.5"
dbldatagen = "^0.3.1"
-pyparsing = "^3.0.9"
-pytest = "^7.2.2"
-pytest-xdist = "^3.3.1"
+pyparsing = "^3.1.1"
+pytest = "^7.4.2"
+pytest-xdist = "^3.5.0"
[tool.poetry.group.dev.dependencies]
-ipython = "^8.5.0"
-ipykernel = "^6.19.0"
-google-cloud-dataproc = "^5.4.1"
-apache-airflow = "^2.7.0"
-apache-airflow-providers-google = "^10.6.0"
+ipython = "^8.19.0"
+ipykernel = "^6.27.1"
+google-cloud-dataproc = "^5.8.0"
+apache-airflow = "^2.8.0"
+apache-airflow-providers-google = "^10.12.0"
+pydoclint = "^0.3.8"
+prettier = "^0.0.7"
+deptry = "^0.12.0"
+python-semantic-release = "^8.7.0"
+yamllint = "^1.33.0"
[tool.semantic_release]
-branch = "main"
-version_variable = "src/otg/__init__.py:__version__"
+logging_use_named_masks = true
+build_command = "poetry build"
+assets = []
+version_variable = ["src/otg/__init__.py:__version__"]
version_toml = ["pyproject.toml:tool.poetry.version"]
-version_source = "tag"
-commit_version_number = true # required for version_source = "tag"
-tag_commit = true
upload_to_pypi = false
-upload_to_release = false
+upload_to_release = true
+
+[tool.semantic_release.branches.main]
+match = "(main|master)"
+prerelease = false
+
+[tool.semantic_release.branches."release"]
+match = "release/*"
+prerelease = true
+prerelease_token = "rc"
+
+[tool.semantic_release.publish]
+dist_glob_patterns = ["dist/*"]
+upload_to_vcs_release = true
+
+[tool.semantic_release.changelog]
+changelog_file = "CHANGELOG.md"
+exclude_commit_patterns = ["chore\\(release\\):"]
+
+[tool.semantic_release.branches."step"]
+match = "(build|chore|ci|docs|feat|fix|perf|style|refactor|test)"
+prerelease = true
+prerelease_token = "alpha"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
-[tool.isort]
-profile = "black"
+[tool.deptry]
+extend_exclude = ["src/conftest.py", "src/airflow", "src/utils"]
+
+[tool.deptry.per_rule_ignores]
+DEP001 = ["otg"]
[tool.interrogate]
fail-under = 95
@@ -84,22 +124,126 @@ exclude = ["dist"]
[tool.pytest.ini_options]
addopts = "-n auto --doctest-modules --cov=src/ --cov-report=xml"
+pythonpath = [".", "./src/airflow/dags"]
-[[tool.mypy.overrides]]
-module = "google.protobuf.duration_pb2"
-ignore_missing_imports = true
+# Semi-strict mode for mypy
+[tool.mypy]
+check_untyped_defs = true
+disallow_any_generics = true
+disallow_incomplete_defs = true
+no_implicit_optional = true
+no_implicit_reexport = true
+strict_equality = true
+warn_redundant_casts = true
+warn_unused_ignores = true
+disallow_untyped_defs = true
[[tool.mypy.overrides]]
-module = "yaml"
+module = [
+ "google.cloud",
+ "yaml",
+ "hail",
+ "pyliftover",
+ "dbldatagen",
+ "scipy",
+ "scipy.stats",
+ "chardet",
+ "omegaconf",
+ "xgboost",
+ "sklearn",
+]
ignore_missing_imports = true
+
[tool.ruff]
-select = ["D", "E", "F", "B"]
-ignore = ["D417", "E501", "E203"]
-fixable = ["F401"]
-unfixable = ["B"]
-line-length = 88
-target-version = "py310"
+select = [
+ "B002", # Python does not support the unary prefix increment
+ "B007", # Loop control variable {name} not used within loop body
+ "B014", # Exception handler with duplicate exception
+ "B023", # Function definition does not bind loop variable {name}
+ "B026", # Star-arg unpacking after a keyword argument is strongly discouraged
+ "C", # complexity
+ "COM818", # Trailing comma on bare tuple prohibited
+ "D", # docstrings
+ "DTZ003", # Use datetime.now(tz=) instead of datetime.utcnow()
+ "DTZ004", # Use datetime.fromtimestamp(ts, tz=) instead of datetime.utcfromtimestamp(ts)
+ "E", # pycodestyle
+ "F", # pyflakes/autoflake
+ "G", # flake8-logging-format
+ "I", # isort
+ "ICN001", # import concentions; {name} should be imported as {asname}
+ "ISC001", # Implicitly concatenated string literals on one line
+ "N804", # First argument of a class method should be named cls
+ "N805", # First argument of a method should be named self
+ "N815", # Variable {name} in class scope should not be mixedCase
+ "PGH001", # No builtin eval() allowed
+ "PGH004", # Use specific rule codes when using noqa
+ "PLC0414", # Useless import alias. Import alias does not rename original package.
+ "PLC", # pylint
+ "PLE", # pylint
+ "PLR", # pylint
+ "PLW", # pylint
+ "Q000", # Double quotes found but single quotes preferred
+ "RUF006", # Store a reference to the return value of asyncio.create_task
+ "S102", # Use of exec detected
+ "S103", # bad-file-permissions
+ "S108", # hardcoded-temp-file
+ "S306", # suspicious-mktemp-usage
+ "S307", # suspicious-eval-usage
+ "S313", # suspicious-xmlc-element-tree-usage
+ "S314", # suspicious-xml-element-tree-usage
+ "S315", # suspicious-xml-expat-reader-usage
+ "S316", # suspicious-xml-expat-builder-usage
+ "S317", # suspicious-xml-sax-usage
+ "S318", # suspicious-xml-mini-dom-usage
+ "S319", # suspicious-xml-pull-dom-usage
+ "S320", # suspicious-xmle-tree-usage
+ "S601", # paramiko-call
+ "S602", # subprocess-popen-with-shell-equals-true
+ "S604", # call-with-shell-equals-true
+ "S608", # hardcoded-sql-expression
+ "S609", # unix-command-wildcard-injection
+ "SIM105", # Use contextlib.suppress({exception}) instead of try-except-pass
+ "SIM117", # Merge with-statements that use the same scope
+ "SIM118", # Use {key} in {dict} instead of {key} in {dict}.keys()
+ "SIM201", # Use {left} != {right} instead of not {left} == {right}
+ "SIM208", # Use {expr} instead of not (not {expr})
+ "SIM212", # Use {a} if {a} else {b} instead of {b} if not {a} else {a}
+ "SIM300", # Yoda conditions. Use 'age == 42' instead of '42 == age'.
+ "SIM401", # Use get from dict with default instead of an if block
+ "T100", # Trace found: {name} used
+ "T20", # flake8-print
+ "TID251", # Banned imports
+ "TRY004", # Prefer TypeError exception for invalid type
+ "TRY200", # Use raise from to specify exception cause
+ "TRY302", # Remove exception handler; error is immediately re-raised
+ "UP", # pyupgrade
+ "W", # pycodestyle
+]
+
+ignore = [
+ "E501", # line too long
+ "E731", # do not assign a lambda expression, use a def
+
+ # Ignore ignored, as the rule is now back in preview/nursery, which cannot
+ # be ignored anymore without warnings.
+ # https://github.com/astral-sh/ruff/issues/7491
+ # "PLC1901", # Lots of false positives
+
+ # False positives https://github.com/astral-sh/ruff/issues/5386
+ "PLC0208", # Use a sequence type instead of a `set` when iterating over values
+ "PLR0911", # Too many return statements ({returns} > {max_returns})
+ "PLR0912", # Too many branches ({branches} > {max_branches})
+ "PLR0913", # Too many arguments to function call ({c_args} > {max_args})
+ "PLR0915", # Too many statements ({statements} > {max_statements})
+ "PLR2004", # Magic value used in comparison, consider replacing {value} with a constant variable
+ "PLW2901", # Outer {outer_kind} variable {name} overwritten by inner {inner_kind} target
+ "UP006", # keep type annotation style as is
+ "UP007", # keep type annotation style as is
+ # Ignored due to performance: https://github.com/charliermarsh/ruff/issues/2923
+ "UP038", # Use `X | Y` in `isinstance` call instead of `(X, Y)`
+
+]
[tool.ruff.per-file-ignores]
"__init__.py" = ["E402"]
@@ -111,3 +255,12 @@ docstring-quotes = "double"
[tool.ruff.pydocstyle]
convention = "google"
+
+[tool.pydoclint]
+style = 'google'
+exclude = '\.git|\.venv|__init__.py|tests'
+require-return-section-when-returning-nothing = false
+check-return-types = true
+allow-init-docstring = true
+arg-type-hints-in-docstring = true
+skip-checking-short-docstrings = false
diff --git a/src/__init__.py b/src/__init__.py
deleted file mode 100644
index 3c5db3e2d..000000000
--- a/src/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-"""Main folder for run scripts.
-
-Collection of elements of the OpenTargets Genetics data release pipeline
-"""
-from __future__ import annotations
diff --git a/src/airflow/.env b/src/airflow/.env
index 2b6ade116..2bcd8244f 100644
--- a/src/airflow/.env
+++ b/src/airflow/.env
@@ -1,2 +1,6 @@
-AIRFLOW_UID=1126896676
AIRFLOW_IMAGE_NAME=extending_airflow:latest
+GOOGLE_LOCAL_CREDENTIALS_PATH=~/.config/gcloud
+GOOGLE_DOCKER_CREDENTIALS_PATH=/.config/gcloud
+GOOGLE_APPLICATION_CREDENTIALS=/.config/gcloud/service_account_credentials.json
+AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT='google-cloud-platform://?extra__google_cloud_platform__key_path=/.config/gcloud/service_account_credentials.json'
+GCP_PROJECT_ID=open-targets-genetics-dev
diff --git a/src/airflow/Dockerfile b/src/airflow/Dockerfile
index 2962e4a98..9ca7c9193 100644
--- a/src/airflow/Dockerfile
+++ b/src/airflow/Dockerfile
@@ -1,16 +1,17 @@
-FROM apache/airflow:2.7.1-python3.8
+FROM apache/airflow:slim-2.7.3-python3.10
+# Install additional Python requirements.
+# --no-cache-dir is a good practice when installing packages using pip, because it helps to keep the image lightweight.
COPY requirements.txt /requirements.txt
-RUN pip install --user --upgrade pip
-RUN pip install --no-cache-dir --user -r /requirements.txt # --no-cache-dir good practise when installing packages using pip. It helps to keep the image lightweight
-
+RUN pip install --quiet --user --no-cache-dir --upgrade pip setuptools && \
+ pip install --quiet --user --no-cache-dir -r /requirements.txt
# Source: https://airflow.apache.org/docs/docker-stack/recipes.html
# Installing the GCP CLI in the container
SHELL ["/bin/bash", "-o", "pipefail", "-e", "-u", "-x", "-c"]
USER 0
-ARG CLOUD_SDK_VERSION=322.0.0
+ARG CLOUD_SDK_VERSION=452.0.0
ENV GCLOUD_HOME=/home/google-cloud-sdk
ENV PATH="${GCLOUD_HOME}/bin/:${PATH}"
@@ -27,3 +28,6 @@ RUN DOWNLOAD_URL="https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/goo
--quiet \
&& rm -rf "${TMP_DIR}" \
&& gcloud --version
+
+# Switch back to a non-root user for security purposes
+USER airflow
diff --git a/src/airflow/config/.gitkeep b/src/airflow/config/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/airflow/dags/.gitkeep b/src/airflow/dags/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/airflow/dags/common_airflow.py b/src/airflow/dags/common_airflow.py
new file mode 100644
index 000000000..a859a870e
--- /dev/null
+++ b/src/airflow/dags/common_airflow.py
@@ -0,0 +1,354 @@
+"""Airflow boilerplate code which can be shared by several DAGs."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Any, Optional
+
+import pendulum
+import yaml
+from airflow.providers.google.cloud.operators.dataproc import (
+ ClusterGenerator,
+ DataprocCreateClusterOperator,
+ DataprocDeleteClusterOperator,
+ DataprocSubmitJobOperator,
+)
+from airflow.utils.trigger_rule import TriggerRule
+from google.cloud import dataproc_v1
+
+if TYPE_CHECKING:
+ from pathlib import Path
+
+# Code version. It has to be repeated here as well as in `pyproject.toml`, because Airflow isn't able to look at files outside of its `dags/` directory.
+OTG_VERSION = "1.0.0"
+
+
+# Cloud configuration.
+GCP_PROJECT = "open-targets-genetics-dev"
+GCP_REGION = "europe-west1"
+GCP_ZONE = "europe-west1-d"
+GCP_DATAPROC_IMAGE = "2.1"
+GCP_AUTOSCALING_POLICY = "otg-etl"
+
+
+# Cluster init configuration.
+INITIALISATION_BASE_PATH = (
+ f"gs://genetics_etl_python_playground/initialisation/{OTG_VERSION}"
+)
+CONFIG_TAG = f"{INITIALISATION_BASE_PATH}/config.tar.gz"
+PACKAGE_WHEEL = f"{INITIALISATION_BASE_PATH}/otgenetics-{OTG_VERSION}-py3-none-any.whl"
+INITIALISATION_EXECUTABLE_FILE = [
+ f"{INITIALISATION_BASE_PATH}/install_dependencies_on_cluster.sh"
+]
+
+
+# CLI configuration.
+CLUSTER_CONFIG_DIR = "/config"
+CONFIG_NAME = "config"
+PYTHON_CLI = "cli.py"
+
+
+# Shared DAG construction parameters.
+shared_dag_args = {
+ "owner": "Open Targets Data Team",
+ "retries": 0,
+}
+shared_dag_kwargs = {
+ "tags": ["genetics_etl", "experimental"],
+ "start_date": pendulum.now(tz="Europe/London").subtract(days=1),
+ "schedule": "@once",
+ "catchup": False,
+}
+
+
+def create_cluster(
+ cluster_name: str,
+ master_machine_type: str = "n1-highmem-8",
+ worker_machine_type: str = "n1-standard-16",
+ num_workers: int = 2,
+ num_preemptible_workers: int = 0,
+ num_local_ssds: int = 1,
+ autoscaling_policy: str = GCP_AUTOSCALING_POLICY,
+ master_disk_size: int = 500,
+) -> DataprocCreateClusterOperator:
+ """Generate an Airflow task to create a Dataproc cluster. Common parameters are reused, and varying parameters can be specified as needed.
+
+ Args:
+ cluster_name (str): Name of the cluster.
+ master_machine_type (str): Machine type for the master node. Defaults to "n1-highmem-8".
+ worker_machine_type (str): Machine type for the worker nodes. Defaults to "n1-standard-16".
+ num_workers (int): Number of worker nodes. Defaults to 2.
+ num_preemptible_workers (int): Number of preemptible worker nodes. Defaults to 0.
+ num_local_ssds (int): How many local SSDs to attach to each worker node, both primary and secondary. Defaults to 1.
+ autoscaling_policy (str): Name of the autoscaling policy to use. Defaults to GCP_AUTOSCALING_POLICY.
+ master_disk_size (int): Size of the master node's boot disk in GB. Defaults to 500.
+
+ Returns:
+ DataprocCreateClusterOperator: Airflow task to create a Dataproc cluster.
+ """
+ # Create base cluster configuration.
+ cluster_config = ClusterGenerator(
+ project_id=GCP_PROJECT,
+ zone=GCP_ZONE,
+ master_machine_type=master_machine_type,
+ worker_machine_type=worker_machine_type,
+ master_disk_size=master_disk_size,
+ worker_disk_size=500,
+ num_preemptible_workers=num_preemptible_workers,
+ num_workers=num_workers,
+ image_version=GCP_DATAPROC_IMAGE,
+ enable_component_gateway=True,
+ init_actions_uris=INITIALISATION_EXECUTABLE_FILE,
+ metadata={
+ "CONFIGTAR": CONFIG_TAG,
+ "PACKAGE": PACKAGE_WHEEL,
+ },
+ idle_delete_ttl=30 * 60, # In seconds.
+ autoscaling_policy=f"projects/{GCP_PROJECT}/regions/{GCP_REGION}/autoscalingPolicies/{autoscaling_policy}",
+ ).make()
+
+ # If specified, amend the configuration to include local SSDs for worker nodes.
+ if num_local_ssds:
+ for worker_section in ("worker_config", "secondary_worker_config"):
+ # Create a disk config section if it does not exist.
+ cluster_config[worker_section].setdefault("disk_config", {})
+ # Specify the number of local SSDs.
+ cluster_config[worker_section]["disk_config"][
+ "num_local_ssds"
+ ] = num_local_ssds
+
+ # Return the cluster creation operator.
+ return DataprocCreateClusterOperator(
+ task_id="create_cluster",
+ project_id=GCP_PROJECT,
+ cluster_config=cluster_config,
+ region=GCP_REGION,
+ cluster_name=cluster_name,
+ trigger_rule=TriggerRule.ALL_SUCCESS,
+ )
+
+
+def submit_job(
+ cluster_name: str,
+ task_id: str,
+ job_type: str,
+ job_specification: dict[str, Any],
+ trigger_rule: TriggerRule = TriggerRule.ALL_SUCCESS,
+) -> DataprocSubmitJobOperator:
+ """Submit an arbitrary job to a Dataproc cluster.
+
+ Args:
+ cluster_name (str): Name of the cluster.
+ task_id (str): Name of the task.
+ job_type (str): Type of the job to submit.
+ job_specification (dict[str, Any]): Specification of the job to submit.
+ trigger_rule (TriggerRule): Trigger rule for the task. Defaults to TriggerRule.ALL_SUCCESS.
+
+ Returns:
+ DataprocSubmitJobOperator: Airflow task to submit an arbitrary job to a Dataproc cluster.
+ """
+ return DataprocSubmitJobOperator(
+ task_id=task_id,
+ region=GCP_REGION,
+ project_id=GCP_PROJECT,
+ job={
+ "job_uuid": f"airflow-{task_id}",
+ "reference": {"project_id": GCP_PROJECT},
+ "placement": {"cluster_name": cluster_name},
+ job_type: job_specification,
+ },
+ trigger_rule=trigger_rule,
+ )
+
+
+def submit_pyspark_job(
+ cluster_name: str,
+ task_id: str,
+ python_module_path: str,
+ args: list[str],
+ trigger_rule: TriggerRule = TriggerRule.ALL_SUCCESS,
+) -> DataprocSubmitJobOperator:
+ """Submit a PySpark job to a Dataproc cluster.
+
+ Args:
+ cluster_name (str): Name of the cluster.
+ task_id (str): Name of the task.
+ python_module_path (str): Path to the Python module to run.
+ args (list[str]): Arguments to pass to the Python module.
+ trigger_rule (TriggerRule): Trigger rule for the task. Defaults to TriggerRule.ALL_SUCCESS.
+
+ Returns:
+ DataprocSubmitJobOperator: Airflow task to submit a PySpark job to a Dataproc cluster.
+ """
+ return submit_job(
+ cluster_name=cluster_name,
+ task_id=task_id,
+ job_type="pyspark_job",
+ trigger_rule=trigger_rule,
+ job_specification={
+ "main_python_file_uri": python_module_path,
+ "args": args,
+ "properties": {
+ "spark.jars": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
+ "spark.driver.extraClassPath": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
+ "spark.executor.extraClassPath": "./hail-all-spark.jar",
+ "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
+ "spark.kryo.registrator": "is.hail.kryo.HailKryoRegistrator",
+ },
+ },
+ )
+
+
+def submit_step(
+ cluster_name: str,
+ step_id: str,
+ task_id: str = "",
+ trigger_rule: TriggerRule = TriggerRule.ALL_SUCCESS,
+ other_args: Optional[list[str]] = None,
+) -> DataprocSubmitJobOperator:
+ """Submit a PySpark job to execute a specific CLI step.
+
+ Args:
+ cluster_name (str): Name of the cluster.
+ step_id (str): Name of the step in otg.
+ task_id (str): Name of the task. Defaults to step_id.
+ trigger_rule (TriggerRule): Trigger rule for the task. Defaults to TriggerRule.ALL_SUCCESS.
+ other_args (Optional[list[str]]): Other arguments to pass to the CLI step. Defaults to None.
+
+ Returns:
+ DataprocSubmitJobOperator: Airflow task to submit a PySpark job to execute a specific CLI step.
+ """
+ if task_id == "":
+ task_id = step_id
+ return submit_pyspark_job(
+ cluster_name=cluster_name,
+ task_id=task_id,
+ python_module_path=f"{INITIALISATION_BASE_PATH}/{PYTHON_CLI}",
+ trigger_rule=trigger_rule,
+ args=[f"step={step_id}"]
+ + (other_args if other_args is not None else [])
+ + [
+ f"--config-dir={CLUSTER_CONFIG_DIR}",
+ f"--config-name={CONFIG_NAME}",
+ ],
+ )
+
+
+def install_dependencies(cluster_name: str) -> DataprocSubmitJobOperator:
+ """Install dependencies on a Dataproc cluster.
+
+ Args:
+ cluster_name (str): Name of the cluster.
+
+ Returns:
+ DataprocSubmitJobOperator: Airflow task to install dependencies on a Dataproc cluster.
+ """
+ return submit_job(
+ cluster_name=cluster_name,
+ task_id="install_dependencies",
+ job_type="pig_job",
+ job_specification={
+ "jar_file_uris": [
+ f"gs://genetics_etl_python_playground/initialisation/{OTG_VERSION}/install_dependencies_on_cluster.sh"
+ ],
+ "query_list": {
+ "queries": [
+ "sh chmod 750 ${PWD}/install_dependencies_on_cluster.sh",
+ "sh ${PWD}/install_dependencies_on_cluster.sh",
+ ]
+ },
+ },
+ )
+
+
+def delete_cluster(cluster_name: str) -> DataprocDeleteClusterOperator:
+ """Generate an Airflow task to delete a Dataproc cluster.
+
+ Args:
+ cluster_name (str): Name of the cluster.
+
+ Returns:
+ DataprocDeleteClusterOperator: Airflow task to delete a Dataproc cluster.
+ """
+ return DataprocDeleteClusterOperator(
+ task_id="delete_cluster",
+ project_id=GCP_PROJECT,
+ cluster_name=cluster_name,
+ region=GCP_REGION,
+ trigger_rule=TriggerRule.ALL_DONE,
+ )
+
+
+def read_yaml_config(config_path: Path) -> Any:
+ """Parse a YAMl config file and do all necessary checks.
+
+ Args:
+ config_path (Path): Path to the YAML config file.
+
+ Returns:
+ Any: Parsed YAML config file.
+ """
+ assert config_path.exists(), f"YAML config path {config_path} does not exist."
+ with open(config_path) as config_file:
+ return yaml.safe_load(config_file)
+
+
+def generate_dag(cluster_name: str, tasks: list[DataprocSubmitJobOperator]) -> Any:
+ """For a list of tasks, generate a complete DAG.
+
+ Args:
+ cluster_name (str): Name of the cluster.
+ tasks (list[DataprocSubmitJobOperator]): List of tasks to execute.
+
+ Returns:
+ Any: Airflow DAG.
+ """
+ return (
+ create_cluster(cluster_name)
+ >> install_dependencies(cluster_name)
+ >> tasks
+ >> delete_cluster(cluster_name)
+ )
+
+
+def submit_pyspark_job_no_operator(
+ cluster_name: str,
+ step_id: str,
+ other_args: Optional[list[str]] = None,
+) -> None:
+ """Submits the Pyspark job to the cluster.
+
+ Args:
+ cluster_name (str): Cluster name
+ step_id (str): Step id
+ other_args (Optional[list[str]]): Other arguments to pass to the CLI step. Defaults to None.
+ """
+ # Create the job client.
+ job_client = dataproc_v1.JobControllerClient(
+ client_options={"api_endpoint": f"{GCP_REGION}-dataproc.googleapis.com:443"}
+ )
+
+ python_uri = f"{INITIALISATION_BASE_PATH}/{PYTHON_CLI}"
+ # Create the job config. 'main_jar_file_uri' can also be a
+ # Google Cloud Storage URL.
+ job_description = {
+ "placement": {"cluster_name": cluster_name},
+ "pyspark_job": {
+ "main_python_file_uri": python_uri,
+ "args": [f"step={step_id}"]
+ + (other_args if other_args is not None else [])
+ + [
+ f"--config-dir={CLUSTER_CONFIG_DIR}",
+ f"--config-name={CONFIG_NAME}",
+ ],
+ "properties": {
+ "spark.jars": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
+ "spark.driver.extraClassPath": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
+ "spark.executor.extraClassPath": "./hail-all-spark.jar",
+ "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
+ "spark.kryo.registrator": "is.hail.kryo.HailKryoRegistrator",
+ },
+ },
+ }
+ job_client.submit_job(
+ project_id=GCP_PROJECT, region=GCP_REGION, job=job_description
+ )
diff --git a/src/airflow/dags/configs/dag.yaml b/src/airflow/dags/configs/dag.yaml
index a9416b774..caf55b373 100644
--- a/src/airflow/dags/configs/dag.yaml
+++ b/src/airflow/dags/configs/dag.yaml
@@ -1,18 +1,18 @@
-- id: "my_gene_index"
-- id: "my_variant_annotation"
-- id: "my_ld_index"
-- id: "my_gwas_catalog"
+- id: "gene_index"
+- id: "gwas_catalog"
+- id: "variant_index"
prerequisites:
- - "my_variant_annotation"
- - "my_ld_index"
-- id: "my_variant_index"
+ - "gwas_catalog"
+- id: "v2g"
prerequisites:
- - "my_variant_annotation"
- - "my_gwas_catalog"
-- id: "my_v2g"
+ - "variant_index"
+ - "gene_index"
+- id: "study_locus_overlap"
prerequisites:
- - "my_variant_index"
- - "my_variant_annotation"
- - "my_gene_index"
-- id: "my_finngen"
-- id: "my_ukbiobank"
+ - "gwas_catalog"
+- id: "locus_to_gene"
+ prerequisites:
+ - "gwas_catalog"
+ - "variant_index"
+ - "v2g"
+ - "study_locus_overlap"
diff --git a/src/airflow/dags/dag_genetics_etl.py b/src/airflow/dags/dag_genetics_etl.py
new file mode 100644
index 000000000..1d27b8bba
--- /dev/null
+++ b/src/airflow/dags/dag_genetics_etl.py
@@ -0,0 +1,35 @@
+"""Airflow DAG for the ETL part of the pipeline."""
+from __future__ import annotations
+
+from pathlib import Path
+
+import common_airflow as common
+from airflow.models.dag import DAG
+
+CLUSTER_NAME = "otg-etl"
+SOURCE_CONFIG_FILE_PATH = Path(__file__).parent / "configs" / "dag.yaml"
+
+
+with DAG(
+ dag_id=Path(__file__).stem,
+ description="Open Targets Genetics ETL workflow",
+ default_args=common.shared_dag_args,
+ **common.shared_dag_kwargs,
+):
+ # Parse and define all steps and their prerequisites.
+ tasks = {}
+ steps = common.read_yaml_config(SOURCE_CONFIG_FILE_PATH)
+ for step in steps:
+ # Define task for the current step.
+ step_id = step["id"]
+ this_task = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id=step_id,
+ task_id=step_id,
+ )
+ # Chain prerequisites.
+ tasks[step_id] = this_task
+ for prerequisite in step.get("prerequisites", []):
+ this_task.set_upstream(tasks[prerequisite])
+ # Construct the DAG with all tasks.
+ dag = common.generate_dag(cluster_name=CLUSTER_NAME, tasks=list(tasks.values()))
diff --git a/src/airflow/dags/dag_preprocess.py b/src/airflow/dags/dag_preprocess.py
new file mode 100644
index 000000000..f0dde085e
--- /dev/null
+++ b/src/airflow/dags/dag_preprocess.py
@@ -0,0 +1,30 @@
+"""Airflow DAG for the Preprocess part of the pipeline."""
+from __future__ import annotations
+
+from pathlib import Path
+
+import common_airflow as common
+from airflow.models.dag import DAG
+
+CLUSTER_NAME = "otg-preprocess"
+
+ALL_STEPS = [
+ "finngen",
+ "eqtl_catalogue",
+ "ld_index",
+ "variant_annotation",
+ "ukbiobank",
+]
+
+
+with DAG(
+ dag_id=Path(__file__).stem,
+ description="Open Targets Genetics — Preprocess",
+ default_args=common.shared_dag_args,
+ **common.shared_dag_kwargs,
+):
+ all_tasks = [
+ common.submit_step(cluster_name=CLUSTER_NAME, step_id=step, task_id=step)
+ for step in ALL_STEPS
+ ]
+ dag = common.generate_dag(cluster_name=CLUSTER_NAME, tasks=all_tasks)
diff --git a/src/airflow/dags/finngen_harmonisation.py b/src/airflow/dags/finngen_harmonisation.py
new file mode 100644
index 000000000..ad88e695c
--- /dev/null
+++ b/src/airflow/dags/finngen_harmonisation.py
@@ -0,0 +1,77 @@
+"""Airflow DAG for the harmonisation part of the pipeline."""
+from __future__ import annotations
+
+import re
+import time
+from pathlib import Path
+from typing import Any
+
+import common_airflow as common
+from airflow.decorators import task
+from airflow.models.dag import DAG
+from airflow.providers.google.cloud.operators.gcs import GCSListObjectsOperator
+
+CLUSTER_NAME = "otg-finngen-harmonisation"
+AUTOSCALING = "gwascatalog-harmonisation" # same as GWAS Catalog harmonisation
+SUMMARY_STATS_BUCKET_NAME = "finngen-public-data-r10"
+RELEASEBUCKET = "gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX"
+SUMSTATS_PARQUET = f"{RELEASEBUCKET}/summary_statistics/finngen"
+
+with DAG(
+ dag_id=Path(__file__).stem,
+ description="Open Targets Genetics — Finngen harmonisation",
+ default_args=common.shared_dag_args,
+ **common.shared_dag_kwargs,
+):
+ # List raw harmonised files from GWAS Catalog
+ list_inputs = GCSListObjectsOperator(
+ task_id="list_raw_sumstats",
+ bucket=SUMMARY_STATS_BUCKET_NAME,
+ prefix="summary_stats",
+ match_glob="**/*.gz",
+ )
+
+ # Submit jobs to dataproc
+ @task(task_id="submit_jobs")
+ def submit_jobs(**kwargs: Any) -> None:
+ """Submit jobs to dataproc.
+
+ Args:
+ **kwargs (Any): Keyword arguments.
+ """
+ ti = kwargs["ti"]
+ todo = ti.xcom_pull(task_ids="list_raw_sumstats", key="return_value")
+ print("Number of jobs to submit: ", len(todo)) # noqa: T201
+ for i in range(len(todo)):
+ # Not to exceed default quota 400 jobs per minute
+ if i > 0 and i % 399 == 0:
+ time.sleep(60)
+ input_path = todo[i]
+ match_result = re.search(r"summary_stats/finngen_(.*).gz", input_path)
+ if match_result:
+ study_id = match_result.group(1)
+ print("Submitting job for study: ", study_id) # noqa: T201
+ common.submit_pyspark_job_no_operator(
+ cluster_name=CLUSTER_NAME,
+ step_id="finngen_sumstat_preprocess",
+ other_args=[
+ f"step.raw_sumstats_path=gs://{SUMMARY_STATS_BUCKET_NAME}/{input_path}",
+ f"step.out_sumstats_path={SUMSTATS_PARQUET}/{study_id}.parquet",
+ ],
+ )
+
+ # list_inputs >>
+ (
+ list_inputs
+ >> common.create_cluster(
+ CLUSTER_NAME,
+ autoscaling_policy=AUTOSCALING,
+ num_workers=8,
+ # num_preemptible_workers=8,
+ master_machine_type="n1-highmem-32",
+ worker_machine_type="n1-standard-2",
+ )
+ >> common.install_dependencies(CLUSTER_NAME)
+ >> submit_jobs()
+ >> common.delete_cluster(CLUSTER_NAME)
+ )
diff --git a/src/airflow/dags/finngen_preprocess.py b/src/airflow/dags/finngen_preprocess.py
new file mode 100644
index 000000000..3ca5f3907
--- /dev/null
+++ b/src/airflow/dags/finngen_preprocess.py
@@ -0,0 +1,80 @@
+"""Airflow DAG for the Preprocess part of the pipeline."""
+from __future__ import annotations
+
+from pathlib import Path
+
+import common_airflow as common
+from airflow.models.dag import DAG
+from airflow.utils.trigger_rule import TriggerRule
+
+CLUSTER_NAME = "otg-preprocess-finngen"
+AUTOSCALING = "finngen-preprocess"
+
+RELEASEBUCKET = "gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX"
+SUMSTATS = f"{RELEASEBUCKET}/summary_statistics/finngen"
+WINDOWBASED_CLUMPED = (
+ f"{RELEASEBUCKET}/study_locus/from_sumstats_study_locus_window_clumped/finngen"
+)
+LD_CLUMPED = f"{RELEASEBUCKET}/study_locus/from_sumstats_study_locus_ld_clumped/finngen"
+PICSED = f"{RELEASEBUCKET}/credible_set/from_sumstats_study_locus/finngen"
+
+with DAG(
+ dag_id=Path(__file__).stem,
+ description="Open Targets Genetics — Finngen preprocess",
+ default_args=common.shared_dag_args,
+ **common.shared_dag_kwargs,
+):
+ study_index = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="finngen_studies",
+ task_id="finngen_studies",
+ )
+
+ window_based_clumping = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="clump",
+ task_id="finngen_window_based_clumping",
+ other_args=[
+ f"step.input_path={SUMSTATS}",
+ f"step.clumped_study_locus_path={WINDOWBASED_CLUMPED}",
+ ],
+ )
+ ld_clumping = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="clump",
+ task_id="finngen_ld_clumping",
+ other_args=[
+ f"step.input_path={WINDOWBASED_CLUMPED}",
+ f"step.ld_index_path={RELEASEBUCKET}/ld_index",
+ f"step.study_index_path={RELEASEBUCKET}/study_index/finngen",
+ f"step.clumped_study_locus_path={LD_CLUMPED}",
+ ],
+ trigger_rule=TriggerRule.ALL_DONE,
+ )
+
+ pics = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="pics",
+ task_id="finngen_pics",
+ other_args=[
+ f"step.study_locus_ld_annotated_in={LD_CLUMPED}",
+ f"step.picsed_study_locus_out={PICSED}",
+ ],
+ # This allows to attempt running the task when above step fails do to failifexists
+ trigger_rule=TriggerRule.ALL_DONE,
+ )
+
+ (
+ common.create_cluster(
+ CLUSTER_NAME,
+ autoscaling_policy=AUTOSCALING,
+ master_disk_size=2000,
+ num_workers=6,
+ )
+ >> common.install_dependencies(CLUSTER_NAME)
+ >> study_index
+ >> window_based_clumping
+ >> ld_clumping
+ >> pics
+ >> common.delete_cluster(CLUSTER_NAME)
+ )
diff --git a/src/airflow/dags/genetics_etl_gcp.py b/src/airflow/dags/genetics_etl_gcp.py
deleted file mode 100644
index 9938daa08..000000000
--- a/src/airflow/dags/genetics_etl_gcp.py
+++ /dev/null
@@ -1,203 +0,0 @@
-"""Generate jinja2 template for workflow."""
-from __future__ import annotations
-
-from pathlib import Path
-
-import pendulum
-import yaml
-from airflow.decorators import dag, task_group
-from airflow.operators.empty import EmptyOperator
-from airflow.providers.google.cloud.operators.dataproc import (
- ClusterGenerator,
- DataprocCreateClusterOperator,
- DataprocDeleteClusterOperator,
- DataprocSubmitJobOperator,
-)
-from airflow.utils.trigger_rule import TriggerRule
-
-DAG_ID = "etl_using_external_flat_file"
-
-DAG_DIR = Path(__file__).parent
-CONFIG_DIR = "configs"
-
-SOURCES_FILE_NAME = "dag.yaml"
-SOURCE_CONFIG_FILE_PATH = DAG_DIR / CONFIG_DIR / SOURCES_FILE_NAME
-
-# Managed cluster
-project_id = "open-targets-genetics-dev"
-otg_version = "0.1.4"
-initialisation_base_path = (
- f"gs://genetics_etl_python_playground/initialisation/{otg_version}"
-)
-python_cli = f"{initialisation_base_path}/cli.py"
-config_name = "my_config"
-config_tar = f"{initialisation_base_path}/config.tar.gz"
-package_wheel = f"{initialisation_base_path}/otgenetics-{otg_version}-py3-none-any.whl"
-initialisation_executable_file = [f"{initialisation_base_path}/initialise_cluster.sh"]
-image_version = "2.1"
-num_local_ssds = 1
-# job
-cluster_config_dir = "/config"
-
-default_args = {
- "owner": "Open Targets Data Team",
- # Tell airflow to start one day ago, so that it runs as soon as you upload it
- "start_date": pendulum.now(tz="Europe/London").subtract(days=1),
- # "start_date": pendulum.datetime(2020, 1, 1, tz="Europe/London"),
- "schedule_interval": "@once",
- "project_id": project_id,
- "catchup": False,
- "retries": 3,
-}
-
-cluster_generator_config = ClusterGenerator(
- project_id=project_id,
- zone="europe-west1-d",
- master_machine_type="n1-standard-4",
- num_workers=0,
- init_actions_uris=initialisation_executable_file,
- # init_action_timeout="600s",
- enable_component_gateway=True,
- num_local_ssds=1,
- image_version=image_version,
- metadata={
- "CONFIGTAR": config_tar,
- "PACKAGE": package_wheel,
- },
-).make()
-
-
-def generate_pyspark_job_from_dict(
- step: dict,
- cluster_config_dir: str,
- config_name: str,
- cluster_name: str,
-) -> DataprocSubmitJobOperator:
- """Generates a pyspark job from dictionary describing step.
-
- Args:
- step (dict): Dictionary describing step.
- cluster_config_dir (str): Directory containing cluster config.
- config_name (str): Name of config file.
- cluster_name (str): Name of cluster.
-
- Returns:
- DataprocSubmitJobOperator: Operator for submitting pyspark job.
- """
- return DataprocSubmitJobOperator(
- task_id=f"job-{step['id']}",
- region="europe-west1",
- project_id=project_id,
- job={
- "job_uuid": f"airflow-{step['id']}",
- "reference": {"project_id": project_id},
- "placement": {"cluster_name": cluster_name},
- "pyspark_job": {
- "main_python_file_uri": f"{initialisation_base_path}/cli.py",
- "args": [
- f"step={ step['id'] }",
- f"--config-dir={ cluster_config_dir }",
- f"--config-name={ config_name }",
- ],
- "properties": {
- "spark.jars": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
- "spark.driver.extraClassPath": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
- "spark.executor.extraClassPath": "./hail-all-spark.jar",
- "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
- "spark.kryo.registrator": "is.hail.kryo.HailKryoRegistrator",
- },
- },
- },
- )
-
-
-@dag(
- dag_id=Path(__file__).stem,
- default_args=default_args,
- description="Open Targets Genetics ETL workflow",
- tags=["genetics_etl", "experimental"],
-)
-def create_dag() -> None:
- """Submit dataproc workflow."""
- start = EmptyOperator(task_id="start")
-
- source_config_file_path = Path(SOURCE_CONFIG_FILE_PATH)
-
- end = EmptyOperator(task_id="end", trigger_rule="all_done")
-
- if source_config_file_path.exists():
- with open(source_config_file_path, "r") as config_file:
- tasks_groups = {}
- steps = yaml.safe_load(config_file)
- for step in steps:
- print(step["id"])
-
- @task_group(
- group_id=step["id"],
- prefix_group_id=True,
- )
- def tgroup(step: dict) -> None:
- """Task group for step.
-
- Args:
- step (dict): Dictionary describing step.
- """
- cluster_name = (
- f"workflow-otg-cluster-{step['id'].replace('_', '-')}"
- )
- create_cluster = DataprocCreateClusterOperator(
- task_id=f"create_cluster_{step['id']}",
- project_id=project_id,
- cluster_config=cluster_generator_config,
- region="europe-west1",
- cluster_name=cluster_name,
- trigger_rule=TriggerRule.ALL_SUCCESS,
- )
- install_dependencies = DataprocSubmitJobOperator(
- task_id=f"install_dependencies_{step['id']}",
- region="europe-west1",
- project_id=project_id,
- job={
- "job_uuid": "airflow-install-dependencies",
- "reference": {"project_id": project_id},
- "placement": {"cluster_name": cluster_name},
- "pig_job": {
- "jar_file_uris": [
- f"gs://genetics_etl_python_playground/initialisation/{otg_version}/install_dependencies_on_cluster.sh"
- ],
- "query_list": {
- "queries": [
- "sh chmod 750 ${PWD}/install_dependencies_on_cluster.sh",
- "sh ${PWD}/install_dependencies_on_cluster.sh",
- ]
- },
- },
- },
- )
- task = generate_pyspark_job_from_dict(
- step,
- cluster_config_dir=cluster_config_dir,
- config_name=config_name,
- cluster_name=cluster_name,
- )
- delete_cluster = DataprocDeleteClusterOperator(
- task_id=f"delete_cluster_{step['id']}",
- project_id=project_id,
- cluster_name=cluster_name,
- region="europe-west1",
- trigger_rule=TriggerRule.ALL_DONE,
- deferrable=True,
- )
- create_cluster >> install_dependencies >> task >> delete_cluster
-
- thisgroup = tgroup(step)
- tasks_groups[step["id"]] = thisgroup
- if "prerequisites" in step:
- for prerequisite in step["prerequisites"]:
- print(f"|- {prerequisite}")
- thisgroup.set_upstream(tasks_groups[prerequisite])
-
- start >> thisgroup >> end
-
-
-dag = create_dag()
diff --git a/src/airflow/dags/gwas_catalog_harmonisation.py b/src/airflow/dags/gwas_catalog_harmonisation.py
new file mode 100644
index 000000000..180c7048a
--- /dev/null
+++ b/src/airflow/dags/gwas_catalog_harmonisation.py
@@ -0,0 +1,117 @@
+"""Airflow DAG for the harmonisation part of the pipeline."""
+from __future__ import annotations
+
+import re
+import time
+from pathlib import Path
+from typing import Any
+
+import common_airflow as common
+from airflow.decorators import task
+from airflow.models.dag import DAG
+from airflow.providers.google.cloud.operators.gcs import GCSListObjectsOperator
+
+CLUSTER_NAME = "otg-gwascatalog-harmonisation"
+AUTOSCALING = "gwascatalog-harmonisation"
+
+SUMMARY_STATS_BUCKET_NAME = "open-targets-gwas-summary-stats"
+
+with DAG(
+ dag_id=Path(__file__).stem,
+ description="Open Targets Genetics — GWAS Catalog harmonisation",
+ default_args=common.shared_dag_args,
+ **common.shared_dag_kwargs,
+):
+ # List raw harmonised files from GWAS Catalog
+ list_inputs = GCSListObjectsOperator(
+ task_id="list_raw_harmonised",
+ bucket=SUMMARY_STATS_BUCKET_NAME,
+ prefix="raw-harmonised",
+ match_glob="**/*.h.tsv.gz",
+ )
+ # List parquet files that have been previously processed
+ list_outputs = GCSListObjectsOperator(
+ task_id="list_harmonised_parquet",
+ bucket=SUMMARY_STATS_BUCKET_NAME,
+ prefix="harmonised",
+ match_glob="**/_SUCCESS",
+ )
+
+ # Create list of pending jobs
+ @task(task_id="create_to_do_list")
+ def create_to_do_list(**kwargs: Any) -> Any:
+ """Create the to-do list of studies.
+
+ Args:
+ **kwargs (Any): Keyword arguments.
+
+ Returns:
+ Any: To-do list.
+ """
+ ti = kwargs["ti"]
+ raw_harmonised = ti.xcom_pull(
+ task_ids="list_raw_harmonised", key="return_value"
+ )
+ print("Number of raw harmonised files: ", len(raw_harmonised)) # noqa: T201
+ to_do_list = []
+ # Remove the ones that have been processed
+ parquets = ti.xcom_pull(task_ids="list_harmonised_parquet", key="return_value")
+ print("Number of parquet files: ", len(parquets)) # noqa: T201
+ for path in raw_harmonised:
+ match_result = re.search(
+ r"raw-harmonised/(.*)/(GCST\d+)/harmonised/(.*)\.h\.tsv\.gz", path
+ )
+ if match_result:
+ study_id = match_result.group(2)
+ if f"harmonised/{study_id}.parquet/_SUCCESS" not in parquets:
+ to_do_list.append(path)
+ print("Number of jobs to submit: ", len(to_do_list)) # noqa: T201
+ ti.xcom_push(key="to_do_list", value=to_do_list)
+
+ # Submit jobs to dataproc
+ @task(task_id="submit_jobs")
+ def submit_jobs(**kwargs: Any) -> None:
+ """Submit jobs to dataproc.
+
+ Args:
+ **kwargs (Any): Keyword arguments.
+ """
+ ti = kwargs["ti"]
+ todo = ti.xcom_pull(task_ids="create_to_do_list", key="to_do_list")
+ print("Number of jobs to submit: ", len(todo)) # noqa: T201
+ for i in range(len(todo)):
+ # Not to exceed default quota 400 jobs per minute
+ if i > 0 and i % 399 == 0:
+ time.sleep(60)
+ input_path = todo[i]
+ match_result = re.search(
+ r"raw-harmonised/(.*)/(GCST\d+)/harmonised/(.*)\.h\.tsv\.gz", input_path
+ )
+ if match_result:
+ study_id = match_result.group(2)
+ print("Submitting job for study: ", study_id) # noqa: T201
+ common.submit_pyspark_job_no_operator(
+ cluster_name=CLUSTER_NAME,
+ step_id="gwas_catalog_sumstat_preprocess",
+ other_args=[
+ f"step.raw_sumstats_path=gs://{SUMMARY_STATS_BUCKET_NAME}/{input_path}",
+ f"step.out_sumstats_path=gs://{SUMMARY_STATS_BUCKET_NAME}/harmonised/{study_id}.parquet",
+ ],
+ )
+
+ # list_inputs >>
+ (
+ [list_inputs, list_outputs]
+ >> create_to_do_list()
+ >> common.create_cluster(
+ CLUSTER_NAME,
+ autoscaling_policy=AUTOSCALING,
+ num_workers=8,
+ num_preemptible_workers=8,
+ master_machine_type="n1-highmem-64",
+ worker_machine_type="n1-standard-2",
+ )
+ >> common.install_dependencies(CLUSTER_NAME)
+ >> submit_jobs()
+ # >> common.delete_cluster(CLUSTER_NAME)
+ )
diff --git a/src/airflow/dags/gwas_catalog_preprocess.py b/src/airflow/dags/gwas_catalog_preprocess.py
new file mode 100644
index 000000000..e21dcd9bd
--- /dev/null
+++ b/src/airflow/dags/gwas_catalog_preprocess.py
@@ -0,0 +1,96 @@
+"""Airflow DAG for the preprocessing of GWAS Catalog's harmonised summary statistics and curated associations."""
+from __future__ import annotations
+
+from pathlib import Path
+
+import common_airflow as common
+from airflow.models.dag import DAG
+from airflow.utils.task_group import TaskGroup
+from airflow.utils.trigger_rule import TriggerRule
+
+CLUSTER_NAME = "otg-preprocess-gwascatalog"
+AUTOSCALING = "otg-preprocess-gwascatalog"
+
+SUMSTATS = "gs://open-targets-gwas-summary-stats/harmonised"
+RELEASEBUCKET = "gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX"
+
+with DAG(
+ dag_id=Path(__file__).stem,
+ description="Open Targets Genetics — GWAS Catalog preprocess",
+ default_args=common.shared_dag_args,
+ **common.shared_dag_kwargs,
+):
+ with TaskGroup(group_id="summary_stats_preprocessing") as summary_stats_group:
+ summary_stats_window_clumping = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="clump",
+ task_id="catalog_sumstats_window_clumping",
+ other_args=[
+ f"step.input_path={SUMSTATS}",
+ f"step.clumped_study_locus_path={RELEASEBUCKET}/study_locus/window_clumped/from_sumstats/catalog",
+ ],
+ )
+ summary_stats_ld_clumping = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="clump",
+ task_id="catalog_sumstats_ld_clumping",
+ other_args=[
+ f"step.input_path={RELEASEBUCKET}/study_locus/window_clumped/from_sumstats/catalog",
+ "step.ld_index_path={RELEASEBUCKET}/ld_index",
+ "step.study_index_path={RELEASEBUCKET}/study_index/catalog",
+ "step.clumped_study_locus_path={RELEASEBUCKET}/study_locus/ld_clumped/from_sumstats/catalog",
+ ],
+ trigger_rule=TriggerRule.ALL_DONE,
+ )
+ summary_stats_pics = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="pics",
+ task_id="catalog_sumstats_pics",
+ other_args=[
+ "step.study_locus_ld_annotated_in={RELEASEBUCKET}/study_locus/ld_clumped/from_sumstats/catalog",
+ "step.picsed_study_locus_out={RELEASEBUCKET}/credible_set/from_sumstats/catalog",
+ ],
+ trigger_rule=TriggerRule.ALL_DONE,
+ )
+ summary_stats_window_clumping >> summary_stats_ld_clumping >> summary_stats_pics
+
+ with TaskGroup(group_id="curation_preprocessing") as curation_group:
+ parse_study_and_curated_assocs = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="gwas_catalog_ingestion",
+ task_id="catalog_ingestion",
+ )
+
+ curation_ld_clumping = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="clump",
+ task_id="catalog_curation_ld_clumping",
+ other_args=[
+ "step.input_path={RELEASEBUCKET}/study_locus/catalog_curated",
+ "step.ld_index_path={RELEASEBUCKET}/ld_index",
+ "step.study_index_path={RELEASEBUCKET}/study_index/catalog",
+ "step.clumped_study_locus_path={RELEASEBUCKET}/study_locus/ld_clumped/catalog_curated",
+ ],
+ trigger_rule=TriggerRule.ALL_DONE,
+ )
+
+ curation_pics = common.submit_step(
+ cluster_name=CLUSTER_NAME,
+ step_id="pics",
+ task_id="catalog_curation_pics",
+ other_args=[
+ "step.study_locus_ld_annotated_in={RELEASEBUCKET}/study_locus/ld_clumped/catalog_curated",
+ "step.picsed_study_locus_out={RELEASEBUCKET}/credible_set/catalog_curated",
+ ],
+ trigger_rule=TriggerRule.ALL_DONE,
+ )
+ parse_study_and_curated_assocs >> curation_ld_clumping >> curation_pics
+
+ (
+ common.create_cluster(
+ CLUSTER_NAME, autoscaling_policy=AUTOSCALING, num_workers=5
+ )
+ >> common.install_dependencies(CLUSTER_NAME)
+ >> [summary_stats_group, curation_group]
+ >> common.delete_cluster(CLUSTER_NAME)
+ )
diff --git a/src/airflow/docker-compose.yaml b/src/airflow/docker-compose.yaml
index 32c50f23d..8e8523490 100644
--- a/src/airflow/docker-compose.yaml
+++ b/src/airflow/docker-compose.yaml
@@ -16,7 +16,7 @@
# under the License.
#
-# Basic Airflow cluster configuration for CeleryExecutor with Redis and PostgreSQL.
+# Basic Airflow cluster configuration for LocalExecutor with PostgreSQL.
#
# WARNING: This configuration is for local development. Do not use it in a production deployment.
#
@@ -24,7 +24,7 @@
# The following variables are supported:
#
# AIRFLOW_IMAGE_NAME - Docker image name used to run Airflow.
-# Default: apache/airflow:2.7.1
+# Default: apache/airflow:slim-2.7.2-python3.10
# AIRFLOW_UID - User ID in Airflow containers
# Default: 50000
# AIRFLOW_PROJ_DIR - Base path to which all the files will be volumed.
@@ -43,39 +43,35 @@
# Default: ''
#
# Feel free to modify this file to suit your needs.
----
-version: '3.8'
-x-airflow-common:
- &airflow-common
+version: "3.8"
+x-airflow-common: &airflow-common
# In order to add custom dependencies or upgrade provider packages you can use your extended image.
# Comment the image line, place your Dockerfile in the directory where you placed the docker-compose.yaml
# and uncomment the "build" line below, Then run `docker-compose build` to build the images.
- image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.1}
+ image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:slim-2.7.2-python3.10}
# build: .
- environment:
- &airflow-common-env
+ environment: &airflow-common-env
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
# For backward compatibility, with Airflow <2.3
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
- AIRFLOW__CORE__FERNET_KEY: ''
- AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: 'true'
- AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
- AIRFLOW__API__AUTH_BACKENDS: 'airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session'
+ AIRFLOW__CORE__FERNET_KEY: ""
+ AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: "true"
+ AIRFLOW__CORE__LOAD_EXAMPLES: "false"
+ AIRFLOW__API__AUTH_BACKENDS: "airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session"
# yamllint disable rule:line-length
# Use simple http server on scheduler for health checks
# See https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/logging-monitoring/check-health.html#scheduler-health-check-server
# yamllint enable rule:line-length
- AIRFLOW__SCHEDULER__ENABLE_HEALTH_CHECK: 'true'
+ AIRFLOW__SCHEDULER__ENABLE_HEALTH_CHECK: "true"
# WARNING: Use _PIP_ADDITIONAL_REQUIREMENTS option ONLY for a quick checks
# for other purpose (development, test and especially production usage) build/extend Airflow image.
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}
# GCLOUD Authentication
- GOOGLE_APPLICATION_CREDENTIALS: /.google/credentials/google_credentials.json
- AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT: 'google-cloud-platform://?extra__google_cloud_platform__key_path=/.google/credentials/google_credentials.json'
- # Nice to have, Not necessary
- GCP_PROJECT_ID: 'open-targets-genetics-dev'
- GCP_GCS_BUCKET: 'gs://genetics_etl_python_playground/'
+ GOOGLE_APPLICATION_CREDENTIALS: ${GOOGLE_APPLICATION_CREDENTIALS:-}
+ AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT: ${AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT:-}
+ GCP_PROJECT_ID: ${GCP_PROJECT_ID:-}
+ GCP_GCS_BUCKET: ${GCP_GCS_BUCKET:-}
volumes:
- ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
@@ -83,17 +79,12 @@ x-airflow-common:
- ${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config
- ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
# GCLOUD Authentication
- - ~/.google/credentials/:/.google/credentials:ro
+ - ${GOOGLE_LOCAL_CREDENTIALS_PATH}:/${GOOGLE_DOCKER_CREDENTIALS_PATH}:ro
user: "${AIRFLOW_UID:-50000}:0"
- depends_on:
- &airflow-common-depends-on
- redis:
- condition: service_healthy
+ depends_on: &airflow-common-depends-on
postgres:
condition: service_healthy
-
-
services:
postgres:
image: postgres:13
@@ -110,33 +101,6 @@ services:
start_period: 5s
restart: always
- redis:
- image: redis:latest
- expose:
- - 6379
- healthcheck:
- test: ["CMD", "redis-cli", "ping"]
- interval: 10s
- timeout: 30s
- retries: 50
- start_period: 30s
- restart: always
-
- airflow-scheduler:
- <<: *airflow-common
- command: scheduler
- healthcheck:
- test: ["CMD", "curl", "--fail", "http://localhost:8974/health"]
- interval: 30s
- timeout: 10s
- retries: 5
- start_period: 30s
- restart: always
- depends_on:
- <<: *airflow-common-depends-on
- airflow-init:
- condition: service_completed_successfully
-
airflow-webserver:
<<: *airflow-common
command: webserver
@@ -154,11 +118,11 @@ services:
airflow-init:
condition: service_completed_successfully
- airflow-triggerer:
+ airflow-scheduler:
<<: *airflow-common
- command: triggerer
+ command: scheduler
healthcheck:
- test: ["CMD-SHELL", 'airflow jobs check --job-type TriggererJob --hostname "$${HOSTNAME}"']
+ test: ["CMD", "curl", "--fail", "http://localhost:8974/health"]
interval: 30s
timeout: 10s
retries: 5
@@ -238,14 +202,27 @@ services:
# yamllint enable rule:line-length
environment:
<<: *airflow-common-env
- _AIRFLOW_DB_MIGRATE: 'true'
- _AIRFLOW_WWW_USER_CREATE: 'true'
+ _AIRFLOW_DB_MIGRATE: "true"
+ _AIRFLOW_WWW_USER_CREATE: "true"
_AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME:-airflow}
_AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD:-airflow}
- _PIP_ADDITIONAL_REQUIREMENTS: ''
+ _PIP_ADDITIONAL_REQUIREMENTS: ""
user: "0:0"
volumes:
- ${AIRFLOW_PROJ_DIR:-.}:/sources
+ airflow-cli:
+ <<: *airflow-common
+ profiles:
+ - debug
+ environment:
+ <<: *airflow-common-env
+ CONNECTION_CHECK_MAX_COUNT: "0"
+ # Workaround for entrypoint issue. See: https://github.com/apache/airflow/issues/16252
+ command:
+ - bash
+ - -c
+ - airflow
+
volumes:
postgres-db-volume:
diff --git a/src/airflow/logs/.gitkeep b/src/airflow/logs/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/airflow/plugins/.gitkeep b/src/airflow/plugins/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/airflow/requirements.txt b/src/airflow/requirements.txt
index 185ee6d67..e9fd45142 100644
--- a/src/airflow/requirements.txt
+++ b/src/airflow/requirements.txt
@@ -1 +1,2 @@
-apache-airflow-providers-google
+apache-airflow-providers-google==10.10.1
+psycopg2-binary==2.9.9
diff --git a/src/conftest.py b/src/conftest.py
index 03b82efb8..fd8c0ad07 100644
--- a/src/conftest.py
+++ b/src/conftest.py
@@ -6,48 +6,31 @@
import pytest
from pyspark.sql import SparkSession
+from utils.spark import get_spark_testing_conf
+
@pytest.fixture(scope="session", autouse=True)
-def spark(doctest_namespace: dict[str, Any], tmp_path_factory: Any) -> SparkSession:
+def spark(
+ doctest_namespace: dict[str, Any], tmp_path_factory: pytest.TempPathFactory
+) -> SparkSession:
"""Local spark session for testing purposes.
It returns a session and make it available to doctests through
the `spark` namespace.
Args:
- doctest_namespace (Dict[str, Any]): pytest namespace for doctests
+ doctest_namespace (dict[str, Any]): pytest namespace for doctests
+ tmp_path_factory (pytest.TempPathFactory): pytest tmp_path_factory
Returns:
SparkSession: local spark session
"""
- # init spark session
+ # Restart new session:
spark = (
- SparkSession.builder.master("local[1]")
- .config("spark.driver.bindAddress", "127.0.0.1")
- .config("spark.executor.cores", "1")
- .config("spark.executor.instances", "1")
- # no shuffling
- .config("spark.sql.shuffle.partitions", "1")
- # ui settings
- .config("spark.ui.showConsoleProgress", "false")
- .config("spark.ui.enabled", "false")
- .config("spark.ui.dagGraph.retainedRootRDDs", "1")
- .config("spark.ui.retainedJobs", "1")
- .config("spark.ui.retainedStages", "1")
- .config("spark.ui.retainedTasks", "1")
- .config("spark.sql.ui.retainedExecutions", "1")
- .config("spark.worker.ui.retainedExecutors", "1")
- .config("spark.worker.ui.retainedDrivers", "1")
- # fixed memory
- .config("spark.driver.memory", "2g")
- .config("spark.sql.warehouse.dir", tmp_path_factory.mktemp("warehouse"))
- .config(
- "spark.driver.extraJavaOptions",
- "-Dderby.system.home={tmp_path_factory.mktemp('derby')}",
- )
+ SparkSession.builder.config(conf=get_spark_testing_conf())
+ .master("local[1]")
.appName("test")
.getOrCreate()
)
-
doctest_namespace["spark"] = spark
return spark
diff --git a/src/otg/__init__.py b/src/otg/__init__.py
index 9a6eccd24..f54d16b97 100644
--- a/src/otg/__init__.py
+++ b/src/otg/__init__.py
@@ -1,3 +1,5 @@
"""Modules supporting Genetics Portal analysis."""
from __future__ import annotations
+
+__version__ = "0.0.0"
diff --git a/src/otg/assets/schemas/gene_index.json b/src/otg/assets/schemas/gene_index.json
index cd901a995..c8139c20d 100644
--- a/src/otg/assets/schemas/gene_index.json
+++ b/src/otg/assets/schemas/gene_index.json
@@ -32,30 +32,14 @@
"metadata": {}
},
{
+ "metadata": {},
"name": "obsoleteSymbols",
- "type": {
- "type": "array",
- "elementType": {
- "type": "struct",
- "fields": [
- {
- "name": "label",
- "type": "string",
- "nullable": true,
- "metadata": {}
- },
- {
- "name": "source",
- "type": "string",
- "nullable": true,
- "metadata": {}
- }
- ]
- },
- "containsNull": true
- },
"nullable": true,
- "metadata": {}
+ "type": {
+ "containsNull": true,
+ "elementType": "string",
+ "type": "array"
+ }
},
{
"name": "tss",
diff --git a/src/otg/assets/schemas/l2g_feature.json b/src/otg/assets/schemas/l2g_feature.json
new file mode 100644
index 000000000..3139a57e4
--- /dev/null
+++ b/src/otg/assets/schemas/l2g_feature.json
@@ -0,0 +1,29 @@
+{
+ "type": "struct",
+ "fields": [
+ {
+ "name": "studyLocusId",
+ "type": "long",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "geneId",
+ "type": "string",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "featureName",
+ "type": "string",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "featureValue",
+ "type": "float",
+ "nullable": false,
+ "metadata": {}
+ }
+ ]
+}
diff --git a/src/otg/assets/schemas/l2g_feature_matrix.json b/src/otg/assets/schemas/l2g_feature_matrix.json
new file mode 100644
index 000000000..c88bc21af
--- /dev/null
+++ b/src/otg/assets/schemas/l2g_feature_matrix.json
@@ -0,0 +1,119 @@
+{
+ "fields": [
+ {
+ "metadata": {},
+ "name": "studyLocusId",
+ "nullable": false,
+ "type": "long"
+ },
+ {
+ "metadata": {},
+ "name": "geneId",
+ "nullable": false,
+ "type": "string"
+ },
+ {
+ "metadata": {},
+ "name": "goldStandardSet",
+ "nullable": true,
+ "type": "string"
+ },
+ {
+ "metadata": {},
+ "name": "distanceTssMean",
+ "nullable": true,
+ "type": "float"
+ },
+ {
+ "metadata": {},
+ "name": "distanceTssMinimum",
+ "nullable": true,
+ "type": "float"
+ },
+ {
+ "metadata": {},
+ "name": "vepMaximumNeighborhood",
+ "nullable": true,
+ "type": "float"
+ },
+ {
+ "metadata": {},
+ "name": "vepMaximum",
+ "nullable": true,
+ "type": "float"
+ },
+ {
+ "metadata": {},
+ "name": "eqtlColocClppLocalMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "eqtlColocClppNeighborhoodMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "eqtlColocLlrLocalMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "eqtlColocLlrNeighborhoodMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "pqtlColocClppLocalMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "pqtlColocClppNeighborhoodMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "pqtlColocLlrLocalMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "pqtlColocLlrNeighborhoodMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "sqtlColocClppLocalMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "sqtlColocClppNeighborhoodMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "sqtlColocLlrLocalMaximum",
+ "nullable": true,
+ "type": "double"
+ },
+ {
+ "metadata": {},
+ "name": "sqtlColocLlrNeighborhoodMaximum",
+ "nullable": true,
+ "type": "double"
+ }
+ ],
+ "type": "struct"
+}
diff --git a/src/otg/assets/schemas/l2g_gold_standard.json b/src/otg/assets/schemas/l2g_gold_standard.json
new file mode 100644
index 000000000..cf19d6b52
--- /dev/null
+++ b/src/otg/assets/schemas/l2g_gold_standard.json
@@ -0,0 +1,45 @@
+{
+ "type": "struct",
+ "fields": [
+ {
+ "name": "studyLocusId",
+ "type": "long",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "variantId",
+ "type": "string",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "studyId",
+ "type": "string",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "geneId",
+ "type": "string",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "goldStandardSet",
+ "type": "string",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "metadata": {},
+ "name": "sources",
+ "nullable": true,
+ "type": {
+ "containsNull": true,
+ "elementType": "string",
+ "type": "array"
+ }
+ }
+ ]
+}
diff --git a/src/otg/assets/schemas/l2g_predictions.json b/src/otg/assets/schemas/l2g_predictions.json
new file mode 100644
index 000000000..16b274207
--- /dev/null
+++ b/src/otg/assets/schemas/l2g_predictions.json
@@ -0,0 +1,23 @@
+{
+ "type": "struct",
+ "fields": [
+ {
+ "name": "studyLocusId",
+ "type": "long",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "geneId",
+ "type": "string",
+ "nullable": false,
+ "metadata": {}
+ },
+ {
+ "name": "score",
+ "type": "double",
+ "nullable": false,
+ "metadata": {}
+ }
+ ]
+}
diff --git a/src/otg/assets/schemas/study_index.json b/src/otg/assets/schemas/study_index.json
index 282b2e156..f7e577921 100644
--- a/src/otg/assets/schemas/study_index.json
+++ b/src/otg/assets/schemas/study_index.json
@@ -35,6 +35,12 @@
"nullable": true,
"metadata": {}
},
+ {
+ "name": "geneId",
+ "type": "string",
+ "nullable": true,
+ "metadata": {}
+ },
{
"name": "pubmedId",
"type": "string",
@@ -83,19 +89,29 @@
},
{
"name": "nCases",
- "type": "long",
+ "type": "integer",
"nullable": true,
"metadata": {}
},
{
"name": "nControls",
- "type": "long",
+ "type": "integer",
"nullable": true,
"metadata": {}
},
{
"name": "nSamples",
- "type": "long",
+ "type": "integer",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "cohorts",
+ "type": {
+ "type": "array",
+ "elementType": "string",
+ "containsNull": true
+ },
"nullable": true,
"metadata": {}
},
@@ -134,7 +150,7 @@
"fields": [
{
"name": "sampleSize",
- "type": "long",
+ "type": "integer",
"nullable": true,
"metadata": {}
},
@@ -160,7 +176,7 @@
"fields": [
{
"name": "sampleSize",
- "type": "long",
+ "type": "integer",
"nullable": true,
"metadata": {}
},
diff --git a/src/otg/assets/schemas/study_locus.json b/src/otg/assets/schemas/study_locus.json
index a67b58b8a..97f9da3bf 100644
--- a/src/otg/assets/schemas/study_locus.json
+++ b/src/otg/assets/schemas/study_locus.json
@@ -36,36 +36,6 @@
"nullable": true,
"type": "double"
},
- {
- "metadata": {},
- "name": "oddsRatio",
- "nullable": true,
- "type": "double"
- },
- {
- "metadata": {},
- "name": "oddsRatioConfidenceIntervalLower",
- "nullable": true,
- "type": "double"
- },
- {
- "metadata": {},
- "name": "oddsRatioConfidenceIntervalUpper",
- "nullable": true,
- "type": "double"
- },
- {
- "metadata": {},
- "name": "betaConfidenceIntervalLower",
- "nullable": true,
- "type": "double"
- },
- {
- "metadata": {},
- "name": "betaConfidenceIntervalUpper",
- "nullable": true,
- "type": "double"
- },
{
"metadata": {},
"name": "pValueMantissa",
@@ -112,6 +82,12 @@
"nullable": true,
"type": "string"
},
+ {
+ "metadata": {},
+ "name": "sampleSize",
+ "nullable": true,
+ "type": "integer"
+ },
{
"metadata": {},
"name": "ldSet",
diff --git a/src/otg/assets/schemas/study_locus_overlap.json b/src/otg/assets/schemas/study_locus_overlap.json
index 962a1186d..103321f79 100644
--- a/src/otg/assets/schemas/study_locus_overlap.json
+++ b/src/otg/assets/schemas/study_locus_overlap.json
@@ -15,7 +15,7 @@
{
"metadata": {},
"name": "chromosome",
- "nullable": false,
+ "nullable": true,
"type": "string"
},
{
@@ -27,7 +27,7 @@
{
"metadata": {},
"name": "statistics",
- "nullable": false,
+ "nullable": true,
"type": {
"fields": [
{
diff --git a/src/otg/assets/schemas/summary_statistics.json b/src/otg/assets/schemas/summary_statistics.json
index 4b2f47ea6..7e41cc99e 100644
--- a/src/otg/assets/schemas/summary_statistics.json
+++ b/src/otg/assets/schemas/summary_statistics.json
@@ -32,15 +32,9 @@
},
{
"metadata": {},
- "name": "betaConfidenceIntervalLower",
+ "name": "sampleSize",
"nullable": true,
- "type": "double"
- },
- {
- "metadata": {},
- "name": "betaConfidenceIntervalUpper",
- "nullable": true,
- "type": "double"
+ "type": "integer"
},
{
"metadata": {},
diff --git a/src/otg/assets/schemas/v2g.json b/src/otg/assets/schemas/v2g.json
index 2ce41b2c6..afbe401dd 100644
--- a/src/otg/assets/schemas/v2g.json
+++ b/src/otg/assets/schemas/v2g.json
@@ -61,18 +61,6 @@
"nullable": true,
"metadata": {}
},
- {
- "name": "position",
- "type": "integer",
- "nullable": false,
- "metadata": {}
- },
- {
- "name": "label",
- "type": "string",
- "nullable": true,
- "metadata": {}
- },
{
"name": "variantFunctionalConsequenceId",
"type": "string",
diff --git a/src/otg/assets/schemas/variant_annotation.json b/src/otg/assets/schemas/variant_annotation.json
index a5e914d68..826eabaf9 100644
--- a/src/otg/assets/schemas/variant_annotation.json
+++ b/src/otg/assets/schemas/variant_annotation.json
@@ -20,7 +20,7 @@
"metadata": {}
},
{
- "name": "gnomad3VariantId",
+ "name": "gnomadVariantId",
"type": "string",
"nullable": false,
"metadata": {}
@@ -92,26 +92,72 @@
"metadata": {}
},
{
- "name": "cadd",
+ "name": "inSilicoPredictors",
+ "nullable": false,
+ "metadata": {},
"type": {
"type": "struct",
"fields": [
{
- "name": "phred",
- "type": "float",
+ "name": "cadd",
+ "nullable": true,
+ "metadata": {},
+ "type": {
+ "type": "struct",
+ "fields": [
+ {
+ "name": "raw",
+ "type": "float",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "phred",
+ "type": "float",
+ "nullable": true,
+ "metadata": {}
+ }
+ ]
+ }
+ },
+ {
+ "name": "revelMax",
+ "type": "double",
"nullable": true,
"metadata": {}
},
{
- "name": "raw",
+ "name": "spliceaiDsMax",
"type": "float",
"nullable": true,
"metadata": {}
+ },
+ {
+ "name": "pangolinLargestDs",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "phylop",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "siftMax",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "polyphenMax",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
}
]
- },
- "nullable": true,
- "metadata": {}
+ }
},
{
"name": "vep",
@@ -158,30 +204,6 @@
"type": "string",
"nullable": true,
"metadata": {}
- },
- {
- "name": "polyphenScore",
- "type": "double",
- "nullable": true,
- "metadata": {}
- },
- {
- "name": "polyphenPrediction",
- "type": "string",
- "nullable": true,
- "metadata": {}
- },
- {
- "name": "siftScore",
- "type": "double",
- "nullable": true,
- "metadata": {}
- },
- {
- "name": "siftPrediction",
- "type": "string",
- "nullable": true,
- "metadata": {}
}
]
},
diff --git a/src/otg/assets/schemas/variant_index.json b/src/otg/assets/schemas/variant_index.json
index e4f41caa7..c6a3702c9 100644
--- a/src/otg/assets/schemas/variant_index.json
+++ b/src/otg/assets/schemas/variant_index.json
@@ -76,26 +76,72 @@
"metadata": {}
},
{
- "name": "cadd",
+ "name": "inSilicoPredictors",
+ "nullable": false,
+ "metadata": {},
"type": {
"type": "struct",
"fields": [
{
- "name": "phred",
- "type": "float",
+ "name": "cadd",
+ "nullable": true,
+ "metadata": {},
+ "type": {
+ "type": "struct",
+ "fields": [
+ {
+ "name": "raw",
+ "type": "float",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "phred",
+ "type": "float",
+ "nullable": true,
+ "metadata": {}
+ }
+ ]
+ }
+ },
+ {
+ "name": "revelMax",
+ "type": "double",
"nullable": true,
"metadata": {}
},
{
- "name": "raw",
+ "name": "spliceaiDsMax",
"type": "float",
"nullable": true,
"metadata": {}
+ },
+ {
+ "name": "pangolinLargestDs",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "phylop",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "siftMax",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
+ },
+ {
+ "name": "polyphenMax",
+ "type": "double",
+ "nullable": true,
+ "metadata": {}
}
]
- },
- "nullable": true,
- "metadata": {}
+ }
},
{
"name": "mostSevereConsequence",
diff --git a/src/otg/cli.py b/src/otg/cli.py
index 9c2faa05d..e30d587a6 100644
--- a/src/otg/cli.py
+++ b/src/otg/cli.py
@@ -3,27 +3,19 @@
import hydra
from hydra.utils import instantiate
-from omegaconf import OmegaConf
+from omegaconf import DictConfig, OmegaConf
-from otg.config import Config, register_configs
-register_configs()
-
-
-@hydra.main(version_base="1.1", config_path=None, config_name="config")
-def main(cfg: Config) -> None:
+@hydra.main(version_base="1.3", config_path=None, config_name="config")
+def main(cfg: DictConfig) -> None:
"""OTG ETL CLI.
Args:
- cfg (Config): hydra configuration object
+ cfg (DictConfig): hydra configuration object
"""
- # Print config
- print(OmegaConf.to_yaml(cfg))
- # Instantiate ETL session
- session = instantiate(cfg.session)
+ print(OmegaConf.to_yaml(cfg)) # noqa: T201
# Initialise and run step
- step = instantiate(cfg.step, session=session)
- step.run()
+ instantiate(cfg.step)
if __name__ == "__main__":
diff --git a/src/otg/clump.py b/src/otg/clump.py
new file mode 100644
index 000000000..6ace21076
--- /dev/null
+++ b/src/otg/clump.py
@@ -0,0 +1,73 @@
+"""Step to run clump associations from summary statistics or study locus."""
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+
+from omegaconf import MISSING
+
+from otg.common.session import Session
+from otg.dataset.ld_index import LDIndex
+from otg.dataset.study_index import StudyIndex
+from otg.dataset.study_locus import StudyLocus
+from otg.dataset.summary_statistics import SummaryStatistics
+
+
+@dataclass
+class ClumpStep:
+ """Perform clumping of an association dataset to identify independent signals.
+
+ Two types of clumping are supported and are applied based on the input dataset:
+ - Clumping of summary statistics based on a window-based approach.
+ - Clumping of study locus based on LD.
+
+ Both approaches yield a StudyLocus dataset.
+
+ Attributes:
+ session (Session): Session object.
+ input_path (str): Input path for the study locus or summary statistics files.
+ study_index_path (str): Path to study index.
+ ld_index_path (str): Path to LD index.
+ locus_collect_distance (int | None): The distance to collect locus around semi-indices.
+ clumped_study_locus_path (str): Output path for the clumped study locus dataset.
+ """
+
+ session: Session = MISSING
+ input_path: str = MISSING
+ clumped_study_locus_path: str = MISSING
+ study_index_path: str | None = field(default=None)
+ ld_index_path: str | None = field(default=None)
+
+ locus_collect_distance: int | None = field(default=None)
+
+ def __post_init__(self: ClumpStep) -> None:
+ """Run the clumping step.
+
+ Raises:
+ ValueError: If study index and LD index paths are not provided for study locus.
+ """
+ input_cols = self.session.spark.read.parquet(
+ self.input_path, recursiveFileLookup=True
+ ).columns
+ if "studyLocusId" in input_cols:
+ if self.study_index_path is None or self.ld_index_path is None:
+ raise ValueError(
+ "Study index and LD index paths are required for clumping study locus."
+ )
+ study_locus = StudyLocus.from_parquet(self.session, self.input_path)
+ ld_index = LDIndex.from_parquet(self.session, self.ld_index_path)
+ study_index = StudyIndex.from_parquet(self.session, self.study_index_path)
+
+ clumped_study_locus = study_locus.annotate_ld(
+ study_index=study_index, ld_index=ld_index
+ ).clump()
+ else:
+ sumstats = SummaryStatistics.from_parquet(
+ self.session, self.input_path, recursiveFileLookup=True
+ ).coalesce(4000)
+ clumped_study_locus = sumstats.window_based_clumping(
+ locus_collect_distance=self.locus_collect_distance
+ )
+
+ clumped_study_locus.df.write.mode(self.session.write_mode).parquet(
+ self.clumped_study_locus_path
+ )
diff --git a/src/otg/colocalisation.py b/src/otg/colocalisation.py
index c5a35c717..4a0a7bacc 100644
--- a/src/otg/colocalisation.py
+++ b/src/otg/colocalisation.py
@@ -3,30 +3,45 @@
from dataclasses import dataclass
+from omegaconf import MISSING
+
from otg.common.session import Session
-from otg.config import ColocalisationStepConfig
from otg.dataset.study_index import StudyIndex
from otg.dataset.study_locus import CredibleInterval, StudyLocus
from otg.method.colocalisation import Coloc, ECaviar
@dataclass
-class ColocalisationStep(ColocalisationStepConfig):
+class ColocalisationStep:
"""Colocalisation step.
This workflow runs colocalization analyses that assess the degree to which independent signals of the association share the same causal variant in a region of the genome, typically limited by linkage disequilibrium (LD).
+
+ Attributes:
+ session (Session): Session object.
+ study_locus_path (DictConfig): Input Study-locus path.
+ coloc_path (DictConfig): Output Colocalisation path.
+ priorc1 (float): Prior on variant being causal for trait 1.
+ priorc2 (float): Prior on variant being causal for trait 2.
+ priorc12 (float): Prior on variant being causal for traits 1 and 2.
"""
- session: Session = Session()
+ session: Session = MISSING
+ study_locus_path: str = MISSING
+ study_index_path: str = MISSING
+ coloc_path: str = MISSING
+ priorc1: float = 1e-4
+ priorc2: float = 1e-4
+ priorc12: float = 1e-5
- def run(self: ColocalisationStep) -> None:
- """Run colocalisation step."""
+ def __post_init__(self: ColocalisationStep) -> None:
+ """Run step."""
# Study-locus information
sl = StudyLocus.from_parquet(self.session, self.study_locus_path)
si = StudyIndex.from_parquet(self.session, self.study_index_path)
# Study-locus overlaps for 95% credible sets
- sl_overlaps = sl.credible_set(CredibleInterval.IS95).overlaps(si)
+ sl_overlaps = sl.filter_credible_set(CredibleInterval.IS95).find_overlaps(si)
coloc_results = Coloc.colocalise(
sl_overlaps, self.priorc1, self.priorc2, self.priorc12
diff --git a/src/otg/common/Liftover.py b/src/otg/common/Liftover.py
index 2b28783c6..e0ac577c9 100644
--- a/src/otg/common/Liftover.py
+++ b/src/otg/common/Liftover.py
@@ -1,10 +1,12 @@
"""LiftOver support."""
from __future__ import annotations
+import tempfile
from typing import TYPE_CHECKING
import pyspark.sql.functions as f
import pyspark.sql.types as t
+from google.cloud import storage
from pyliftover import LiftOver
if TYPE_CHECKING:
@@ -24,22 +26,29 @@ class LiftOverSpark:
- If regions are provided, the mapping is dropped if the new region is reversed (mapped_start > mapped_end).
- If regions are provided, the mapping is dropped if the difference of the lenght of the mapped region and original is larger than a threshold.
- When lifting over intervals, only unique coordinates are lifted, they joined back to the original dataframe.
+
+ Args:
+ chain_file (str): Path to the chain file
+ max_difference (int): Maximum difference between the length of the mapped region and the original region. Defaults to 100.
"""
- def __init__(
+ def __init__( # noqa: D107
self: LiftOverSpark, chain_file: str, max_difference: int = 100
) -> None:
- """Intialise LiftOverSpark object.
-
- Args:
- chain_file (str): Path to the chain file
- max_difference (int): Maximum difference between the length of the mapped region and the original region. Defaults to 100.
- """
self.chain_file = chain_file
self.max_difference = max_difference
- # Initializing liftover object by opening the chain file:
- self.lo = LiftOver(chain_file)
+ # Initializing liftover object by opening the chain file - LiftOver only supports local files:
+ if chain_file.startswith("gs://"):
+ bucket_name = chain_file.split("/")[2]
+ blob_name = "/".join(chain_file.split("/")[3:])
+ with tempfile.NamedTemporaryFile(delete=True) as temp_file:
+ storage.Client().bucket(bucket_name).blob(
+ blob_name
+ ).download_to_filename(temp_file.name)
+ self.lo = LiftOver(temp_file.name)
+ else:
+ self.lo = LiftOver(chain_file)
# UDF to do map genomic coordinates to liftover coordinates:
self.liftover_udf = f.udf(
diff --git a/src/otg/common/schemas.py b/src/otg/common/schemas.py
index c45d8b42c..11ea852f6 100644
--- a/src/otg/common/schemas.py
+++ b/src/otg/common/schemas.py
@@ -4,36 +4,37 @@
import importlib.resources as pkg_resources
import json
from collections import namedtuple
+from typing import Any
-from pyspark.sql.types import ArrayType, StructType
+import pyspark.sql.types as t
from otg.assets import schemas
-def parse_spark_schema(schema_json: str) -> StructType:
+def parse_spark_schema(schema_json: str) -> t.StructType:
"""Parse Spark schema from JSON.
Args:
schema_json (str): JSON filename containing spark schema in the schemas package
Returns:
- StructType: Spark schema
+ t.StructType: Spark schema
"""
core_schema = json.loads(
pkg_resources.read_text(schemas, schema_json, encoding="utf-8")
)
- return StructType.fromJson(core_schema)
+ return t.StructType.fromJson(core_schema)
-def flatten_schema(schema: StructType, prefix: str = "") -> list:
+def flatten_schema(schema: t.StructType, prefix: str = "") -> list[Any]:
"""It takes a Spark schema and returns a list of all fields in the schema once flattened.
Args:
- schema: The schema of the dataframe
- prefix: The prefix to prepend to the field names.
+ schema (t.StructType): The schema of the dataframe
+ prefix (str): The prefix to prepend to the field names. Defaults to "".
Returns:
- list: A list of all the columns in the dataframe.
+ list[Any]: A list of all the columns in the dataframe.
Examples:
>>> from pyspark.sql.types import ArrayType, StringType, StructField, StructType
@@ -52,11 +53,13 @@ def flatten_schema(schema: StructType, prefix: str = "") -> list:
for field in schema.fields:
name = f"{prefix}.{field.name}" if prefix else field.name
dtype = field.dataType
- if isinstance(dtype, StructType):
- fields.append(Field(name, ArrayType(StructType())))
+ if isinstance(dtype, t.StructType):
+ fields.append(Field(name, t.ArrayType(t.StructType())))
fields += flatten_schema(dtype, prefix=name)
- elif isinstance(dtype, ArrayType) and isinstance(dtype.elementType, StructType):
- fields.append(Field(name, ArrayType(StructType())))
+ elif isinstance(dtype, t.ArrayType) and isinstance(
+ dtype.elementType, t.StructType
+ ):
+ fields.append(Field(name, t.ArrayType(t.StructType())))
fields += flatten_schema(dtype.elementType, prefix=name)
else:
fields.append(Field(name, dtype))
diff --git a/src/otg/common/session.py b/src/otg/common/session.py
index c2ba59a6c..a985d4dcd 100644
--- a/src/otg/common/session.py
+++ b/src/otg/common/session.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Any, Dict
+from typing import TYPE_CHECKING
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
@@ -13,25 +13,51 @@
class Session:
- """Spark session class."""
+ """This class provides a Spark session and logger."""
- def __init__(
+ def __init__( # noqa: D107
self: Session,
spark_uri: str = "local[*]",
write_mode: str = "errorifexists",
app_name: str = "otgenetics",
hail_home: str | None = None,
+ start_hail: bool = False,
+ extended_spark_conf: dict[str, str] | None = None,
) -> None:
"""Initialises spark session and logger.
Args:
- spark_uri (str): spark uri
- app_name (str): spark application name
- write_mode (str): spark write mode
- hail_home (str | None): path to hail installation
+ spark_uri (str): Spark URI. Defaults to "local[*]".
+ write_mode (str): Spark write mode. Defaults to "errorifexists".
+ app_name (str): Spark application name. Defaults to "otgenetics".
+ hail_home (str | None): Path to Hail installation. Defaults to None.
+ start_hail (bool): Whether to start Hail. Defaults to False.
+ extended_spark_conf (dict[str, str] | None): Extended Spark configuration. Defaults to None.
"""
- # create executors based on resources
- default_spark_conf = (
+ merged_conf = self._create_merged_config(
+ start_hail, hail_home, extended_spark_conf
+ )
+
+ self.spark = (
+ SparkSession.builder.config(conf=merged_conf)
+ .master(spark_uri)
+ .appName(app_name)
+ .getOrCreate()
+ )
+ self.logger = Log4j(self.spark)
+
+ self.write_mode = write_mode
+
+ self.hail_home = hail_home
+ self.start_hail = start_hail
+
+ def _default_config(self: Session) -> SparkConf:
+ """Default spark configuration.
+
+ Returns:
+ SparkConf: Default spark configuration.
+ """
+ return (
SparkConf()
# Dynamic allocation
.set("spark.dynamicAllocation.enabled", "true")
@@ -41,65 +67,94 @@ def __init__(
"spark.shuffle.service.enabled", "true"
) # required for dynamic allocation
)
- spark_config = (
- (
- default_spark_conf.set(
- "spark.jars",
- f"{hail_home}/backend/hail-all-spark.jar",
- )
- .set(
- "spark.driver.extraClassPath",
- f"{hail_home}/backend/hail-all-spark.jar",
- )
- .set("spark.executor.extraClassPath", "./hail-all-spark.jar")
- .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
- .set("spark.kryo.registrator", "is.hail.kryo.HailKryoRegistrator")
- .set("spark.sql.files.openCostInBytes", "50gb")
- .set("spark.sql.files.maxPartitionBytes", "50gb")
- # .set("spark.kryoserializer.buffer", "512m")
+
+ def _hail_config(
+ self: Session, start_hail: bool, hail_home: str | None
+ ) -> SparkConf:
+ """Returns the Hail specific Spark configuration.
+
+ Args:
+ start_hail (bool): Whether to start Hail.
+ hail_home (str | None): Path to Hail installation.
+
+ Returns:
+ SparkConf: Hail specific Spark configuration.
+
+ Raises:
+ ValueError: If Hail home is not specified but Hail is requested.
+ """
+ if not start_hail:
+ return SparkConf()
+ if not hail_home:
+ raise ValueError("Hail home must be specified to start Hail.")
+ return (
+ SparkConf()
+ .set("spark.jars", f"{hail_home}/backend/hail-all-spark.jar")
+ .set(
+ "spark.driver.extraClassPath", f"{hail_home}/backend/hail-all-spark.jar"
)
- if hail_home is not None
- else default_spark_conf
+ .set("spark.executor.extraClassPath", "./hail-all-spark.jar")
+ .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
+ .set("spark.kryo.registrator", "is.hail.kryo.HailKryoRegistrator")
)
- self.spark = (
- SparkSession.builder.config(conf=spark_config)
- .master(spark_uri)
- .appName(app_name)
- .getOrCreate()
+
+ def _create_merged_config(
+ self: Session,
+ start_hail: bool,
+ hail_home: str | None,
+ extended_spark_conf: dict[str, str] | None,
+ ) -> SparkConf:
+ """Merges the default, and optionally the Hail and extended configurations if provided.
+
+ Args:
+ start_hail (bool): Whether to start Hail.
+ hail_home (str | None): Path to Hail installation. Defaults to None.
+ extended_spark_conf (dict[str, str] | None): Extended Spark configuration.
+
+ Returns:
+ SparkConf: Merged Spark configuration.
+ """
+ all_settings = (
+ self._default_config().getAll()
+ + self._hail_config(start_hail, hail_home).getAll()
)
- self.logger = Log4j(self.spark)
- self.write_mode = write_mode
+ if extended_spark_conf:
+ all_settings += list(extended_spark_conf.items())
+ return SparkConf().setAll(all_settings)
def read_parquet(
- self: Session, path: str, schema: StructType, **kwargs: Dict[str, Any]
+ self: Session,
+ path: str,
+ schema: StructType,
+ **kwargs: bool | float | int | str | None,
) -> DataFrame:
"""Reads parquet dataset with a provided schema.
Args:
path (str): parquet dataset path
schema (StructType): Spark schema
- **kwargs: Additional arguments to pass to spark.read.parquet
+ **kwargs (bool | float | int | str | None): Additional arguments to pass to spark.read.parquet
Returns:
DataFrame: Dataframe with provided schema
"""
- return self.spark.read.schema(schema).parquet(path, **kwargs, inferSchema=False) # type: ignore
+ return self.spark.read.schema(schema).parquet(path, **kwargs)
class Log4j:
"""Log4j logger class."""
- def __init__(self: Log4j, spark: SparkSession) -> None:
- """Initialise logger.
+ def __init__(self, spark: SparkSession) -> None:
+ """Log4j logger class. This class provides a wrapper around the Log4j logging system.
Args:
- spark (SparkSession): Available spark session
+ spark (SparkSession): The Spark session used to access Spark context and Log4j logging.
"""
# get spark app details with which to prefix all messages
- log4j = spark.sparkContext._jvm.org.apache.log4j # type: ignore
+ log4j = spark.sparkContext._jvm.org.apache.log4j # type: ignore[assignment, unused-ignore]
self.logger = log4j.Logger.getLogger(__name__)
- log4j_logger = spark.sparkContext._jvm.org.apache.log4j # type: ignore
+ log4j_logger = spark.sparkContext._jvm.org.apache.log4j # type: ignore[assignment, unused-ignore]
self.logger = log4j_logger.LogManager.getLogger(__name__)
def error(self: Log4j, message: str) -> None:
@@ -107,33 +162,21 @@ def error(self: Log4j, message: str) -> None:
Args:
message (str): Error message to write to log
-
- Returns:
- _type_: None
"""
self.logger.error(message)
- return None
def warn(self: Log4j, message: str) -> None:
"""Log a warning.
Args:
message (str): Warning messsage to write to log
-
- Returns:
- _type_: None
"""
- self.logger.warn(message)
- return None
+ self.logger.warning(message)
def info(self: Log4j, message: str) -> None:
"""Log information.
Args:
message (str): Information message to write to log
-
- Returns:
- _type_: None
"""
self.logger.info(message)
- return None
diff --git a/src/otg/common/spark_helpers.py b/src/otg/common/spark_helpers.py
index 0c6a28934..bd22d91c9 100644
--- a/src/otg/common/spark_helpers.py
+++ b/src/otg/common/spark_helpers.py
@@ -3,20 +3,98 @@
import re
import sys
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any, Iterable, Optional
import pyspark.sql.functions as f
import pyspark.sql.types as t
from pyspark.ml import Pipeline
from pyspark.ml.feature import MinMaxScaler, VectorAssembler
from pyspark.ml.functions import vector_to_array
-from pyspark.sql import Window
+from pyspark.sql import Row, Window
+from pyspark.sql.types import FloatType
from scipy.stats import norm
if TYPE_CHECKING:
from pyspark.sql import Column, DataFrame, WindowSpec
+def convert_from_wide_to_long(
+ df: DataFrame,
+ id_vars: Iterable[str],
+ var_name: str,
+ value_name: str,
+ value_vars: Optional[Iterable[str]] = None,
+) -> DataFrame:
+ """Converts a dataframe from wide to long format.
+
+ Args:
+ df (DataFrame): Dataframe to melt
+ id_vars (Iterable[str]): List of fixed columns to keep
+ var_name (str): Name of the column containing the variable names
+ value_name (str): Name of the column containing the values
+ value_vars (Optional[Iterable[str]]): List of columns to melt. Defaults to None.
+
+ Returns:
+ DataFrame: Melted dataframe
+
+ Examples:
+ >>> df = spark.createDataFrame([("a", 1, 2)], ["id", "feature_1", "feature_2"])
+ >>> convert_from_wide_to_long(df, ["id"], "feature", "value").show()
+ +---+---------+-----+
+ | id| feature|value|
+ +---+---------+-----+
+ | a|feature_1| 1.0|
+ | a|feature_2| 2.0|
+ +---+---------+-----+
+
+ """
+ if not value_vars:
+ value_vars = [c for c in df.columns if c not in id_vars]
+ _vars_and_vals = f.array(
+ *(
+ f.struct(
+ f.lit(c).alias(var_name), f.col(c).cast(FloatType()).alias(value_name)
+ )
+ for c in value_vars
+ )
+ )
+
+ # Add to the DataFrame and explode to convert into rows
+ _tmp = df.withColumn("_vars_and_vals", f.explode(_vars_and_vals))
+
+ cols = list(id_vars) + [
+ f.col("_vars_and_vals")[x].alias(x) for x in [var_name, value_name]
+ ]
+ return _tmp.select(*cols)
+
+
+def convert_from_long_to_wide(
+ df: DataFrame, id_vars: list[str], var_name: str, value_name: str
+) -> DataFrame:
+ """Converts a dataframe from long to wide format using Spark pivot built-in function.
+
+ Args:
+ df (DataFrame): Dataframe to pivot
+ id_vars (list[str]): List of fixed columns to keep
+ var_name (str): Name of the column to pivot on
+ value_name (str): Name of the column containing the values
+
+ Returns:
+ DataFrame: Pivoted dataframe
+
+ Examples:
+ >>> df = spark.createDataFrame([("a", "feature_1", 1), ("a", "feature_2", 2)], ["id", "featureName", "featureValue"])
+ >>> convert_from_long_to_wide(df, ["id"], "featureName", "featureValue").show()
+ +---+---------+---------+
+ | id|feature_1|feature_2|
+ +---+---------+---------+
+ | a| 1| 2|
+ +---+---------+---------+
+
+ """
+ return df.groupBy(id_vars).pivot(var_name).agg(f.first(value_name))
+
+
def pvalue_to_zscore(pval_col: Column) -> Column:
"""Convert p-value column to z-score column.
@@ -77,7 +155,15 @@ def nullify_empty_array(column: Column) -> Column:
def get_top_ranked_in_window(df: DataFrame, w: WindowSpec) -> DataFrame:
- """Returns the record with the top rank within each group of the window."""
+ """Returns the record with the top rank within each group of the window.
+
+ Args:
+ df (DataFrame): The DataFrame to be processed.
+ w (WindowSpec): The window to be used for ranking.
+
+ Returns:
+ DataFrame: The DataFrame with the record with the top rank within each group of the window.
+ """
return (
df.withColumn("row_number", f.row_number().over(w))
.filter(f.col("row_number") == 1)
@@ -94,7 +180,7 @@ def get_record_with_minimum_value(
Args:
df (DataFrame): The DataFrame to be processed.
- grouping_col (str): The column name(s) to group the DataFrame by.
+ grouping_col (Column | str | list[Column | str]): The column(s) to group the DataFrame by.
sorting_col (str): The column name to sort the DataFrame by.
Returns:
@@ -106,14 +192,14 @@ def get_record_with_minimum_value(
def get_record_with_maximum_value(
df: DataFrame,
- grouping_col: Column | str | list[Column | str],
+ grouping_col: str | list[str],
sorting_col: str,
) -> DataFrame:
"""Returns the record with the maximum value of the sorting column within each group of the grouping column.
Args:
df (DataFrame): The DataFrame to be processed.
- grouping_col (str): The column name(s) to group the DataFrame by.
+ grouping_col (str | list[str]): The column(s) to group the DataFrame by.
sorting_col (str): The column name to sort the DataFrame by.
Returns:
@@ -164,6 +250,38 @@ def normalise_column(
)
+def neglog_pvalue_to_mantissa_and_exponent(p_value: Column) -> tuple[Column, Column]:
+ """Computing p-value mantissa and exponent based on the negative 10 based logarithm of the p-value.
+
+ Args:
+ p_value (Column): Neg-log p-value (string)
+
+ Returns:
+ tuple[Column, Column]: mantissa and exponent of the p-value
+
+ Examples:
+ >>> (
+ ... spark.createDataFrame([(4.56, 'a'),(2109.23, 'b')], ['negLogPv', 'label'])
+ ... .select('negLogPv',*neglog_pvalue_to_mantissa_and_exponent(f.col('negLogPv')))
+ ... .show()
+ ... )
+ +--------+------------------+--------------+
+ |negLogPv| pValueMantissa|pValueExponent|
+ +--------+------------------+--------------+
+ | 4.56| 3.63078054770101| -5|
+ | 2109.23|1.6982436524618154| -2110|
+ +--------+------------------+--------------+
+
+ """
+ exponent: Column = f.ceil(p_value)
+ mantissa: Column = f.pow(f.lit(10), (p_value - exponent + f.lit(1)))
+
+ return (
+ mantissa.cast(t.DoubleType()).alias("pValueMantissa"),
+ (-1 * exponent).cast(t.IntegerType()).alias("pValueExponent"),
+ )
+
+
def calculate_neglog_pvalue(
p_value_mantissa: Column, p_value_exponent: Column
) -> Column:
@@ -231,7 +349,15 @@ def column2camel_case(col_name: str) -> str:
def order_array_of_structs_by_field(column_name: str, field_name: str) -> Column:
- """Sort a column of array of structs by a field in descending order, nulls last."""
+ """Sort a column of array of structs by a field in descending order, nulls last.
+
+ Args:
+ column_name (str): Column name
+ field_name (str): Field name
+
+ Returns:
+ Column: Sorted column
+ """
return f.expr(
f"""
array_sort(
@@ -245,3 +371,63 @@ def order_array_of_structs_by_field(column_name: str, field_name: str) -> Column
end)
"""
)
+
+
+def pivot_df(
+ df: DataFrame,
+ pivot_col: str,
+ value_col: str,
+ grouping_cols: list[Column],
+) -> DataFrame:
+ """Pivot a dataframe.
+
+ Args:
+ df (DataFrame): Dataframe to pivot
+ pivot_col (str): Column to pivot on
+ value_col (str): Column to pivot
+ grouping_cols (list[Column]): Columns to group by
+
+ Returns:
+ DataFrame: Pivoted dataframe
+ """
+ pivot_values = df.select(pivot_col).distinct().rdd.flatMap(lambda x: x).collect()
+ return (
+ df.groupBy(grouping_cols)
+ .pivot(pivot_col)
+ .agg({value_col: "first"})
+ .select(
+ grouping_cols
+ + [
+ f.when(f.col(x).isNull(), None)
+ .otherwise(f.col(x))
+ .alias(f"{x}_{value_col}")
+ for x in pivot_values
+ ],
+ )
+ )
+
+
+def get_value_from_row(row: Row, column: str) -> Any:
+ """Extract index value from a row if exists.
+
+ Args:
+ row (Row): One row from a dataframe
+ column (str): column label we want to extract.
+
+ Returns:
+ Any: value of the column in the row
+
+ Raises:
+ ValueError: if the column is not in the row
+
+ Examples:
+ >>> get_value_from_row(Row(geneName="AR", chromosome="X"), "chromosome")
+ 'X'
+ >>> get_value_from_row(Row(geneName="AR", chromosome="X"), "disease")
+ Traceback (most recent call last):
+ ...
+ ValueError: Column disease not found in row Row(geneName='AR', chromosome='X')
+ """
+ if column not in row:
+ raise ValueError(f"Column {column} not found in row {row}")
+ return row[column]
diff --git a/src/otg/common/utils.py b/src/otg/common/utils.py
index d91cab45d..d05810670 100644
--- a/src/otg/common/utils.py
+++ b/src/otg/common/utils.py
@@ -3,7 +3,7 @@
import sys
from math import floor, log10
-from typing import TYPE_CHECKING, List, Tuple
+from typing import TYPE_CHECKING, Tuple
import hail as hl
from pyspark.sql import functions as f
@@ -22,13 +22,11 @@ def parse_region(region: str) -> Tuple[str, int, int]:
Args:
region (str): Genomic region expected to follow chr##:#,###-#,### format or ##:####-#####.
- Raises:
- ValueError: If the end and start positions cannot be casted to integer or not all
- three values value error is raised.
-
Returns:
Tuple[str, int, int]: Chromosome, start position, end position
+ Raises:
+ ValueError: If the end and start positions cannot be casted to integer or not all three values value error is raised.
Examples:
>>> parse_region('chr6:28,510,120-33,480,577')
@@ -63,7 +61,7 @@ def calculate_confidence_interval(
pvalue_exponent: Column,
beta: Column,
standard_error: Column,
-) -> tuple:
+) -> tuple[Column, Column]:
"""Calculate the confidence interval for the effect based on the p-value and the effect size.
If the standard error already available, don't re-calculate from p-value.
@@ -75,7 +73,7 @@ def calculate_confidence_interval(
standard_error (Column): standard error.
Returns:
- tuple: betaConfidenceIntervalLower (float), betaConfidenceIntervalUpper (float)
+ tuple[Column, Column]: betaConfidenceIntervalLower (float), betaConfidenceIntervalUpper (float)
Examples:
>>> df = spark.createDataFrame([
@@ -88,9 +86,9 @@ def calculate_confidence_interval(
+---------------+---------------+----+--------------+---------------------------+---------------------------+
|pvalue_mantissa|pvalue_exponent|beta|standard_error|betaConfidenceIntervalLower|betaConfidenceIntervalUpper|
+---------------+---------------+----+--------------+---------------------------+---------------------------+
- | 2.5| -10| 0.5| 0.2| 0.3| 0.7|
- | 3.0| -5| 1.0| null| 0.7603910153486024| 1.2396089846513976|
- | 1.5| -8|-0.2| 0.1| -0.30000000000000004| -0.1|
+ | 2.5| -10| 0.5| 0.2| 0.10799999999999998| 0.892|
+ | 3.0| -5| 1.0| null| 0.5303663900832607| 1.4696336099167393|
+ | 1.5| -8|-0.2| 0.1| -0.396| -0.00400000000000...|
+---------------+---------------+----+--------------+---------------------------+---------------------------+
"""
@@ -106,15 +104,20 @@ def calculate_confidence_interval(
).otherwise(standard_error)
# Calculate upper and lower confidence interval:
- ci_lower = (beta - standard_error).alias("betaConfidenceIntervalLower")
- ci_upper = (beta + standard_error).alias("betaConfidenceIntervalUpper")
+ z_score_095 = 1.96
+ ci_lower = (beta - z_score_095 * standard_error).alias(
+ "betaConfidenceIntervalLower"
+ )
+ ci_upper = (beta + z_score_095 * standard_error).alias(
+ "betaConfidenceIntervalUpper"
+ )
return (ci_lower, ci_upper)
def convert_odds_ratio_to_beta(
beta: Column, odds_ratio: Column, standard_error: Column
-) -> List[Column]:
+) -> list[Column]:
"""Harmonizes effect and standard error to beta.
Args:
@@ -123,7 +126,7 @@ def convert_odds_ratio_to_beta(
standard_error (Column): Standard error of the effect
Returns:
- tuple: beta, standard error
+ list[Column]: beta, standard error
Examples:
>>> df = spark.createDataFrame([{"beta": 0.1, "oddsRatio": 1.1, "standardError": 0.1}, {"beta": None, "oddsRatio": 1.1, "standardError": 0.1}, {"beta": 0.1, "oddsRatio": None, "standardError": 0.1}, {"beta": 0.1, "oddsRatio": 1.1, "standardError": None}])
@@ -154,15 +157,14 @@ def convert_odds_ratio_to_beta(
return [beta, standard_error]
-def parse_pvalue(pv: Column) -> List[Column]:
+def parse_pvalue(pv: Column) -> list[Column]:
"""This function takes a p-value string and returns two columns mantissa (float), exponent (integer).
Args:
pv (Column): P-value as string
Returns:
- Column: p-value mantissa (float)
- Column: p-value exponent (integer)
+ list[Column]: pValueMantissa (float), pValueExponent (integer)
Examples:
>>> d = [("0.01",),("4.2E-45",),("43.2E5",),("0",),("1",)]
@@ -213,12 +215,12 @@ def convert_gnomad_position_to_ensembl(
the position is unchanged. More info about the problem: https://www.biostars.org/p/84686/
Args:
- position (Column): Column
- reference (Column): The reference allele.
- alternate (Column): The alternate allele
+ position (Column): Position of the variant in GnomAD's coordinates system.
+ reference (Column): The reference allele in GnomAD's coordinates system.
+ alternate (Column): The alternate allele in GnomAD's coordinates system.
Returns:
- The position of the variant in the Ensembl genome.
+ Column: The position of the variant in the Ensembl genome.
Examples:
>>> d = [(1, "A", "C"), (2, "AA", "C"), (3, "A", "AA")]
@@ -277,6 +279,9 @@ def split_pvalue(pvalue: float) -> tuple[float, int]:
Returns:
tuple[float, int]: Tuple with mantissa and exponent
+ Raises:
+ ValueError: If p-value is not between 0 and 1
+
Examples:
>>> split_pvalue(0.00001234)
(1.234, -5)
@@ -318,5 +323,5 @@ def parse_efos(efo_uri: Column) -> Column:
"""
- colname = efo_uri._jc.toString() # type: ignore
+ colname = efo_uri._jc.toString()
return f.array_sort(f.expr(f"regexp_extract_all(`{colname}`, '([A-Z]+_[0-9]+)')"))
diff --git a/src/otg/config.py b/src/otg/config.py
deleted file mode 100644
index 163a6bd34..000000000
--- a/src/otg/config.py
+++ /dev/null
@@ -1,322 +0,0 @@
-"""Config management for OTG."""
-
-from __future__ import annotations
-
-from dataclasses import dataclass, field
-from typing import Any, Dict, List, Optional
-
-from hydra.core.config_store import ConfigStore
-from omegaconf import MISSING
-
-
-@dataclass
-class Config:
- """Configuration for otg."""
-
- defaults: List[Dict[str, str]] = field(
- default_factory=lambda: [{"step": "???"}, {"session": "session_config"}]
- )
-
- step: Any = MISSING
- session: Any = MISSING
-
-
-@dataclass
-class SessionConfig:
- """ETL config."""
-
- _target_: str = "otg.common.session.Session"
- app_name: str = "otgenetics"
- spark_uri: str = "local[*]"
- write_mode: str = "overwrite"
- hail_home: Optional[str] = None
-
-
-@dataclass
-class LDIndexStepConfig:
- """LD matrix step requirements.
-
- Attributes:
- ld_matrix_template (str): Template path for LD matrix from gnomAD.
- ld_index_raw_template (str): Template path for the variant indices correspondance in the LD Matrix from gnomAD.
- min_r2 (float): Minimum r2 to consider when considering variants within a window.
- grch37_to_grch38_chain_path (str): Path to GRCh37 to GRCh38 chain file.
- ld_populations (List[str]): List of population-specific LD matrices to process.
- ld_index_out (str): Output LD index path.
- """
-
- _target_: str = "otg.ld_index.LDIndexStep"
- ld_matrix_template: str = "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.adj.ld.bm"
- ld_index_raw_template: str = "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.ld.variant_indices.ht"
- min_r2: float = 0.5
- grch37_to_grch38_chain_path: str = (
- "gs://hail-common/references/grch37_to_grch38.over.chain.gz"
- )
- ld_populations: List[str] = field(
- default_factory=lambda: [
- "afr", # African-American
- "amr", # American Admixed/Latino
- "asj", # Ashkenazi Jewish
- "eas", # East Asian
- "fin", # Finnish
- "nfe", # Non-Finnish European
- "nwe", # Northwestern European
- "seu", # Southeastern European
- ]
- )
- ld_index_out: str = MISSING
-
-
-@dataclass
-class VariantIndexStepConfig:
- """Variant index step requirements.
-
- Attributes:
- variant_annotation_path (str): Input variant annotation path.
- study_locus_path (str): Input study-locus path.
- variant_index_path (str): Output variant index path.
- """
-
- _target_: str = "otg.variant_index.VariantIndexStep"
- variant_annotation_path: str = MISSING
- study_locus_path: str = MISSING
- variant_index_path: str = MISSING
-
-
-@dataclass
-class ColocalisationStepConfig:
- """Colocalisation step requirements.
-
- Attributes:
- study_locus_path (DictConfig): Input Study-locus path.
- coloc_path (DictConfig): Output Colocalisation path.
- priorc1 (float): Prior on variant being causal for trait 1.
- priorc2 (float): Prior on variant being causal for trait 2.
- priorc12 (float): Prior on variant being causal for traits 1 and 2.
- """
-
- _target_: str = "otg.colocalisation.ColocalisationStep"
- study_locus_path: str = MISSING
- study_index_path: str = MISSING
- coloc_path: str = MISSING
- priorc1: float = 1e-4
- priorc2: float = 1e-4
- priorc12: float = 1e-5
-
-
-@dataclass
-class VariantAnnotationStepConfig:
- """Variant annotation step requirements.
-
- Attributes:
- gnomad_genomes (str): Path to gnomAD genomes hail table.
- chain_38_to_37 (str): Path to GRCh38 to GRCh37 chain file.
- variant_annotation_path (str): Output variant annotation path.
- populations (List[str]): List of populations to include.
- """
-
- _target_: str = "otg.variant_annotation.VariantAnnotationStep"
- gnomad_genomes: str = MISSING
- chain_38_to_37: str = MISSING
- variant_annotation_path: str = MISSING
- populations: List[str] = field(
- default_factory=lambda: [
- "afr", # African-American
- "amr", # American Admixed/Latino
- "ami", # Amish ancestry
- "asj", # Ashkenazi Jewish
- "eas", # East Asian
- "fin", # Finnish
- "nfe", # Non-Finnish European
- "mid", # Middle Eastern
- "sas", # South Asian
- "oth", # Other
- ]
- )
-
-
-@dataclass
-class V2GStepConfig:
- """Variant to gene (V2G) step requirements.
-
- Attributes:
- variant_index_path (str): Input variant index path.
- variant_annotation_path (str): Input variant annotation path.
- gene_index_path (str): Input gene index path.
- vep_consequences_path (str): Input VEP consequences path.
- lift_over_chain_file_path (str): Path to GRCh37 to GRCh38 chain file.
- approved_biotypes (list[str]): List of approved biotypes.
- anderson_path (str): Anderson intervals path.
- javierre_path (str): Javierre intervals path.
- jung_path (str): Jung intervals path.
- thurnman_path (str): Thurnman intervals path.
- liftover_max_length_difference (int): Maximum length difference for liftover.
- max_distance (int): Maximum distance to consider.
- output_path (str): Output V2G path.
- """
-
- _target_: str = "otg.v2g.V2GStep"
- variant_index_path: str = MISSING
- variant_annotation_path: str = MISSING
- gene_index_path: str = MISSING
- vep_consequences_path: str = MISSING
- liftover_chain_file_path: str = MISSING
- anderson_path: str = MISSING
- javierre_path: str = MISSING
- jung_path: str = MISSING
- thurnman_path: str = MISSING
- liftover_max_length_difference: int = 100
- max_distance: int = 500_000
- v2g_path: str = MISSING
- approved_biotypes: List[str] = field(
- default_factory=lambda: [
- "protein_coding",
- "3prime_overlapping_ncRNA",
- "antisense",
- "bidirectional_promoter_lncRNA",
- "IG_C_gene",
- "IG_D_gene",
- "IG_J_gene",
- "IG_V_gene",
- "lincRNA",
- "macro_lncRNA",
- "non_coding",
- "sense_intronic",
- "sense_overlapping",
- ]
- )
-
-
-@dataclass
-class GWASCatalogStepConfig:
- """GWAS Catalog step requirements.
-
- Attributes:
- catalog_studies_file (str): Raw GWAS catalog studies file.
- catalog_ancestry_file (str): Ancestry annotations file from GWAS Catalog.
- catalog_sumstats_lut (str): GWAS Catalog summary statistics lookup table.
- catalog_associations_file (str): Raw GWAS catalog associations file.
- variant_annotation_path (str): Input variant annotation path.
- ld_populations (list): List of populations to include.
- min_r2 (float): Minimum r2 to consider when considering variants within a window.
- catalog_studies_out (str): Output GWAS catalog studies path.
- catalog_associations_out (str): Output GWAS catalog associations path.
- """
-
- _target_: str = "otg.gwas_catalog.GWASCatalogStep"
- catalog_studies_file: str = MISSING
- catalog_ancestry_file: str = MISSING
- catalog_sumstats_lut: str = MISSING
- catalog_associations_file: str = MISSING
- variant_annotation_path: str = MISSING
- ld_index_path: str = MISSING
- min_r2: float = 0.5
- catalog_studies_out: str = MISSING
- catalog_associations_out: str = MISSING
-
-
-@dataclass
-class StudyLocusOverlapStepConfig:
- """StudyLocus overlaps index step requirements.
-
- Attributes:
- study_locus_path (str): Input study-locus path.
- study_index_path (str): Input study index path to extract the type of study.
- overlaps_index_out (str): Output overlaps index path.
- """
-
- _target_: str = "otg.overlaps.OverlapsIndexStep"
- study_locus_path: str = MISSING
- study_index_path: str = MISSING
- overlaps_index_out: str = MISSING
-
-
-@dataclass
-class GeneIndexStepConfig:
- """Gene index step requirements.
-
- Attributes:
- target_path (str): Open targets Platform target dataset path.
- gene_index_path (str): Output gene index path.
- """
-
- _target_: str = "otg.gene_index.GeneIndexStep"
- target_path: str = MISSING
- gene_index_path: str = MISSING
-
-
-@dataclass
-class GWASCatalogSumstatsPreprocessConfig:
- """GWAS Catalog Sumstats Preprocessing step requirements.
-
- Attributes:
- raw_sumstats_path (str): Input raw GWAS Catalog summary statistics path.
- out_sumstats_path (str): Output GWAS Catalog summary statistics path.
- study_id (str): GWAS Catalog study identifier.
- """
-
- _target_: str = (
- "otg.gwas_catalog_sumstat_preprocess.GWASCatalogSumstatsPreprocessStep"
- )
- raw_sumstats_path: str = MISSING
- out_sumstats_path: str = MISSING
- study_id: str = MISSING
-
-
-@dataclass
-class FinnGenStepConfig:
- """FinnGen study table ingestion step requirements.
-
- Attributes:
- finngen_phenotype_table_url (str): FinnGen API for fetching the list of studies.
- finngen_release_prefix (str): Release prefix pattern.
- finngen_sumstat_url_prefix (str): URL prefix for summary statistics location.
- finngen_sumstat_url_suffix (str): URL prefix suffix for summary statistics location.
- finngen_study_index_out (str): Output path for the FinnGen study index dataset.
- finngen_summary_stats_out (str): Output path for the FinnGen summary statistics.
- """
-
- _target_: str = "otg.finngen.FinnGenStep"
- finngen_phenotype_table_url: str = MISSING
- finngen_release_prefix: str = MISSING
- finngen_sumstat_url_prefix: str = MISSING
- finngen_sumstat_url_suffix: str = MISSING
- finngen_study_index_out: str = MISSING
- finngen_summary_stats_out: str = MISSING
-
-
-@dataclass
-class UKBiobankStepConfig:
- """UKBiobank study table ingestion step requirements.
-
- Attributes:
- ukbiobank_manifest (str): UKBiobank manifest of studies.
- ukbiobank_study_index_out (str): Output path for the UKBiobank study index dataset.
- """
-
- _target_: str = "otg.ukbiobank.UKBiobankStep"
- ukbiobank_manifest: str = MISSING
- ukbiobank_study_index_out: str = MISSING
-
-
-# Register all configs
-def register_configs() -> None:
- """Register configs."""
- cs = ConfigStore.instance()
- cs.store(name="config", node=Config)
- cs.store(name="session_config", group="session", node=SessionConfig)
- cs.store(name="gene_index", group="step", node=GeneIndexStepConfig)
- cs.store(name="ld_index", group="step", node=LDIndexStepConfig)
- cs.store(name="variant_index", group="step", node=VariantIndexStepConfig)
- cs.store(name="variant_annotation", group="step", node=VariantAnnotationStepConfig)
- cs.store(name="v2g", group="step", node=V2GStepConfig)
- cs.store(name="colocalisation", group="step", node=ColocalisationStepConfig)
- cs.store(name="gwas_catalog", group="step", node=GWASCatalogStepConfig)
- cs.store(name="finngen", group="step", node=FinnGenStepConfig)
- cs.store(name="ukbiobank", group="step", node=UKBiobankStepConfig)
- cs.store(
- name="gwas_catalog_sumstats_preprocess",
- group="step",
- node=GWASCatalogSumstatsPreprocessConfig,
- )
- cs.store(name="study_locus_overlap", group="step", node=StudyLocusOverlapStepConfig)
diff --git a/src/otg/dataset/colocalisation.py b/src/otg/dataset/colocalisation.py
index c3c650885..b67b10374 100644
--- a/src/otg/dataset/colocalisation.py
+++ b/src/otg/dataset/colocalisation.py
@@ -1,4 +1,4 @@
-"""Variant index dataset."""
+"""Colocalisation dataset."""
from __future__ import annotations
from dataclasses import dataclass
@@ -17,5 +17,9 @@ class Colocalisation(Dataset):
@classmethod
def get_schema(cls: type[Colocalisation]) -> StructType:
- """Provides the schema for the Colocalisation dataset."""
+ """Provides the schema for the Colocalisation dataset.
+
+ Returns:
+ StructType: Schema for the Colocalisation dataset
+ """
return parse_spark_schema("colocalisation.json")
diff --git a/src/otg/dataset/dataset.py b/src/otg/dataset/dataset.py
index ad92eb80b..0d04a2779 100644
--- a/src/otg/dataset/dataset.py
+++ b/src/otg/dataset/dataset.py
@@ -3,7 +3,9 @@
from abc import ABC, abstractmethod
from dataclasses import dataclass
-from typing import TYPE_CHECKING, Any, Dict
+from typing import TYPE_CHECKING, Any
+
+from typing_extensions import Self
from otg.common.schemas import flatten_schema
@@ -18,7 +20,7 @@
class Dataset(ABC):
"""Open Targets Genetics Dataset.
- `Dataset` is a wrapper around a Spark DataFrame with a predefined schema. Schemas for each child dataset are described in the `json.schemas` module.
+ `Dataset` is a wrapper around a Spark DataFrame with a predefined schema. Schemas for each child dataset are described in the `schemas` module.
"""
_df: DataFrame
@@ -30,36 +32,69 @@ def __post_init__(self: Dataset) -> None:
@property
def df(self: Dataset) -> DataFrame:
- """Dataframe included in the Dataset."""
+ """Dataframe included in the Dataset.
+
+ Returns:
+ DataFrame: Dataframe included in the Dataset
+ """
return self._df
@df.setter
def df(self: Dataset, new_df: DataFrame) -> None: # noqa: CCE001
- """Dataframe setter."""
+ """Dataframe setter.
+
+ Args:
+ new_df (DataFrame): New dataframe to be included in the Dataset
+ """
self._df: DataFrame = new_df
self.validate_schema()
@property
def schema(self: Dataset) -> StructType:
- """Dataframe expected schema."""
+ """Dataframe expected schema.
+
+ Returns:
+ StructType: Dataframe expected schema
+ """
return self._schema
@classmethod
@abstractmethod
- def get_schema(cls: type[Dataset]) -> StructType:
- """Abstract method to get the schema. Must be implemented by child classes."""
+ def get_schema(cls: type[Self]) -> StructType:
+ """Abstract method to get the schema. Must be implemented by child classes.
+
+ Returns:
+ StructType: Schema for the Dataset
+ """
pass
@classmethod
def from_parquet(
- cls: type[Dataset], session: Session, path: str, **kwargs: Dict[str, Any]
- ) -> Dataset:
- """Reads a parquet file into a Dataset with a given schema."""
+ cls: type[Self],
+ session: Session,
+ path: str,
+ **kwargs: bool | float | int | str | None,
+ ) -> Self:
+ """Reads a parquet file into a Dataset with a given schema.
+
+ Args:
+ session (Session): Spark session
+ path (str): Path to the parquet file
+ **kwargs (bool | float | int | str | None): Additional arguments to pass to spark.read.parquet
+
+ Returns:
+ Self: Dataset with the parquet file contents
+
+ Raises:
+ ValueError: Parquet file is empty
+ """
schema = cls.get_schema()
df = session.read_parquet(path=path, schema=schema, **kwargs)
+ if df.isEmpty():
+ raise ValueError(f"Parquet file is empty: {path}")
return cls(_df=df, _schema=schema)
- def validate_schema(self: Dataset) -> None: # sourcery skip: invert-any-all
+ def validate_schema(self: Dataset) -> None:
"""Validate DataFrame schema against expected class schema.
Raises:
@@ -116,12 +151,50 @@ def validate_schema(self: Dataset) -> None: # sourcery skip: invert-any-all
f"The following fields present differences in their datatypes: {fields_with_different_observed_datatype}."
)
- def persist(self: Dataset) -> Dataset:
- """Persist in memory the DataFrame included in the Dataset."""
+ def persist(self: Self) -> Self:
+ """Persist in memory the DataFrame included in the Dataset.
+
+ Returns:
+ Self: Persisted Dataset
+ """
self.df = self._df.persist()
return self
- def unpersist(self: Dataset) -> Dataset:
- """Remove the persisted DataFrame from memory."""
+ def unpersist(self: Self) -> Self:
+ """Remove the persisted DataFrame from memory.
+
+ Returns:
+ Self: Unpersisted Dataset
+ """
self.df = self._df.unpersist()
return self
+
+ def coalesce(self: Self, num_partitions: int, **kwargs: Any) -> Self:
+ """Coalesce the DataFrame included in the Dataset.
+
+ Coalescing is efficient for decreasing the number of partitions because it avoids a full shuffle of the data.
+
+ Args:
+ num_partitions (int): Number of partitions to coalesce to
+ **kwargs (Any): Arguments to pass to the coalesce method
+
+ Returns:
+ Self: Coalesced Dataset
+ """
+ self.df = self._df.coalesce(num_partitions, **kwargs)
+ return self
+
+ def repartition(self: Self, num_partitions: int, **kwargs: Any) -> Self:
+ """Repartition the DataFrame included in the Dataset.
+
+ Repartitioning creates new partitions with data that is distributed evenly.
+
+ Args:
+ num_partitions (int): Number of partitions to repartition to
+ **kwargs (Any): Arguments to pass to the repartition method
+
+ Returns:
+ Self: Repartitioned Dataset
+ """
+ self.df = self._df.repartition(num_partitions, **kwargs)
+ return self
diff --git a/src/otg/dataset/gene_index.py b/src/otg/dataset/gene_index.py
index 3b67560da..fd93d6506 100644
--- a/src/otg/dataset/gene_index.py
+++ b/src/otg/dataset/gene_index.py
@@ -23,14 +23,18 @@ class GeneIndex(Dataset):
@classmethod
def get_schema(cls: type[GeneIndex]) -> StructType:
- """Provides the schema for the GeneIndex dataset."""
+ """Provides the schema for the GeneIndex dataset.
+
+ Returns:
+ StructType: Schema for the GeneIndex dataset
+ """
return parse_spark_schema("gene_index.json")
- def filter_by_biotypes(self: GeneIndex, biotypes: list) -> GeneIndex:
+ def filter_by_biotypes(self: GeneIndex, biotypes: list[str]) -> GeneIndex:
"""Filter by approved biotypes.
Args:
- biotypes (list): List of Ensembl biotypes to keep.
+ biotypes (list[str]): List of Ensembl biotypes to keep.
Returns:
GeneIndex: Gene index dataset filtered by biotypes.
@@ -64,7 +68,7 @@ def symbols_lut(self: GeneIndex) -> DataFrame:
"""
return self.df.select(
f.explode(
- f.array_union(f.array("approvedSymbol"), f.col("obsoleteSymbols.label"))
+ f.array_union(f.array("approvedSymbol"), f.col("obsoleteSymbols"))
).alias("geneSymbol"),
"*",
)
diff --git a/src/otg/dataset/intervals.py b/src/otg/dataset/intervals.py
index 526650569..4b2844adc 100644
--- a/src/otg/dataset/intervals.py
+++ b/src/otg/dataset/intervals.py
@@ -6,11 +6,14 @@
import pyspark.sql.functions as f
+from otg.common.Liftover import LiftOverSpark
from otg.common.schemas import parse_spark_schema
from otg.dataset.dataset import Dataset
+from otg.dataset.gene_index import GeneIndex
from otg.dataset.v2g import V2G
if TYPE_CHECKING:
+ from pyspark.sql import SparkSession
from pyspark.sql.types import StructType
from otg.dataset.variant_index import VariantIndex
@@ -22,9 +25,56 @@ class Intervals(Dataset):
@classmethod
def get_schema(cls: type[Intervals]) -> StructType:
- """Provides the schema for the Intervals dataset."""
+ """Provides the schema for the Intervals dataset.
+
+ Returns:
+ StructType: Schema for the Intervals dataset
+ """
return parse_spark_schema("intervals.json")
+ @classmethod
+ def from_source(
+ cls: type[Intervals],
+ spark: SparkSession,
+ source_name: str,
+ source_path: str,
+ gene_index: GeneIndex,
+ lift: LiftOverSpark,
+ ) -> Intervals:
+ """Collect interval data for a particular source.
+
+ Args:
+ spark (SparkSession): Spark session
+ source_name (str): Name of the interval source
+ source_path (str): Path to the interval source file
+ gene_index (GeneIndex): Gene index
+ lift (LiftOverSpark): LiftOverSpark instance to convert coordinats from hg37 to hg38
+
+ Returns:
+ Intervals: Intervals dataset
+
+ Raises:
+ ValueError: If the source name is not recognised
+ """
+ from otg.datasource.intervals.andersson import IntervalsAndersson
+ from otg.datasource.intervals.javierre import IntervalsJavierre
+ from otg.datasource.intervals.jung import IntervalsJung
+ from otg.datasource.intervals.thurman import IntervalsThurman
+
+ source_to_class = {
+ "andersson": IntervalsAndersson,
+ "javierre": IntervalsJavierre,
+ "jung": IntervalsJung,
+ "thurman": IntervalsThurman,
+ }
+
+ if source_name not in source_to_class:
+ raise ValueError(f"Unknown interval source: {source_name}")
+
+ source_class = source_to_class[source_name]
+ data = source_class.read(spark, source_path) # type: ignore
+ return source_class.parse(data, gene_index, lift) # type: ignore
+
def v2g(self: Intervals, variant_index: VariantIndex) -> V2G:
"""Convert intervals into V2G by intersecting with a variant index.
@@ -36,7 +86,6 @@ def v2g(self: Intervals, variant_index: VariantIndex) -> V2G:
"""
return V2G(
_df=(
- # TODO: We can include the start and end position as part of the `on` clause in the join
self.df.alias("interval")
.join(
variant_index.df.selectExpr(
@@ -50,7 +99,7 @@ def v2g(self: Intervals, variant_index: VariantIndex) -> V2G:
],
how="inner",
)
- .drop("start", "end", "vi_chromosome")
+ .drop("start", "end", "vi_chromosome", "position")
),
_schema=V2G.get_schema(),
)
diff --git a/src/otg/dataset/l2g_feature.py b/src/otg/dataset/l2g_feature.py
new file mode 100644
index 000000000..44d6dddd5
--- /dev/null
+++ b/src/otg/dataset/l2g_feature.py
@@ -0,0 +1,25 @@
+"""L2G Feature Dataset."""
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import TYPE_CHECKING
+
+from otg.common.schemas import parse_spark_schema
+from otg.dataset.dataset import Dataset
+
+if TYPE_CHECKING:
+ from pyspark.sql.types import StructType
+
+
+@dataclass
+class L2GFeature(Dataset):
+ """Locus-to-gene feature dataset."""
+
+ @classmethod
+ def get_schema(cls: type[L2GFeature]) -> StructType:
+ """Provides the schema for the L2GFeature dataset.
+
+ Returns:
+ StructType: Schema for the L2GFeature dataset
+ """
+ return parse_spark_schema("l2g_feature.json")
diff --git a/src/otg/dataset/l2g_feature_matrix.py b/src/otg/dataset/l2g_feature_matrix.py
new file mode 100644
index 000000000..7952a1b37
--- /dev/null
+++ b/src/otg/dataset/l2g_feature_matrix.py
@@ -0,0 +1,170 @@
+"""Feature matrix of study locus pairs annotated with their functional genomics features."""
+from __future__ import annotations
+
+from dataclasses import dataclass
+from functools import reduce
+from typing import TYPE_CHECKING, Type
+
+from otg.common.schemas import parse_spark_schema
+from otg.common.spark_helpers import convert_from_long_to_wide
+from otg.dataset.dataset import Dataset
+from otg.method.l2g.feature_factory import StudyLocusFactory
+
+if TYPE_CHECKING:
+ from pyspark.sql.types import StructType
+
+ # from otg.dataset.colocalisation import Colocalisation
+ from otg.dataset.study_index import StudyIndex
+ from otg.dataset.study_locus import StudyLocus
+ from otg.dataset.v2g import V2G
+
+
+@dataclass
+class L2GFeatureMatrix(Dataset):
+ """Dataset with features for Locus to Gene prediction.
+
+ Attributes:
+ features_list (list[str] | None): List of features to use. If None, all possible features are used.
+ """
+
+ features_list: list[str] | None = None
+
+ def __post_init__(self: L2GFeatureMatrix) -> None:
+ """Post-initialisation to set the features list. If not provided, all columns except the fixed ones are used."""
+ fixed_cols = ["studyLocusId", "geneId", "goldStandardSet"]
+ self.features_list = self.features_list or [
+ col for col in self._df.columns if col not in fixed_cols
+ ]
+
+ @classmethod
+ def generate_features(
+ cls: Type[L2GFeatureMatrix],
+ features_list: list[str],
+ study_locus: StudyLocus,
+ study_index: StudyIndex,
+ variant_gene: V2G,
+ # colocalisation: Colocalisation,
+ ) -> L2GFeatureMatrix:
+ """Generate features from the OTG datasets.
+
+ Args:
+ features_list (list[str]): List of features to generate
+ study_locus (StudyLocus): Study locus dataset
+ study_index (StudyIndex): Study index dataset
+ variant_gene (V2G): Variant to gene dataset
+
+ Returns:
+ L2GFeatureMatrix: L2G feature matrix dataset
+
+ Raises:
+ ValueError: If the feature matrix is empty
+ """
+ if features_dfs := [
+ # Extract features
+ # ColocalisationFactory._get_coloc_features(
+ # study_locus, study_index, colocalisation
+ # ).df,
+ StudyLocusFactory._get_tss_distance_features(study_locus, variant_gene).df,
+ StudyLocusFactory._get_vep_features(study_locus, variant_gene).df,
+ ]:
+ fm = reduce(
+ lambda x, y: x.unionByName(y),
+ features_dfs,
+ )
+ else:
+ raise ValueError("No features found")
+
+ # raise error if the feature matrix is empty
+ if fm.limit(1).count() != 0:
+ return cls(
+ _df=convert_from_long_to_wide(
+ fm, ["studyLocusId", "geneId"], "featureName", "featureValue"
+ ),
+ _schema=cls.get_schema(),
+ features_list=features_list,
+ )
+ raise ValueError("L2G Feature matrix is empty")
+
+ @classmethod
+ def get_schema(cls: type[L2GFeatureMatrix]) -> StructType:
+ """Provides the schema for the L2gFeatureMatrix dataset.
+
+ Returns:
+ StructType: Schema for the L2gFeatureMatrix dataset
+ """
+ return parse_spark_schema("l2g_feature_matrix.json")
+
+ def calculate_feature_missingness_rate(
+ self: L2GFeatureMatrix,
+ ) -> dict[str, float]:
+ """Calculate the proportion of missing values in each feature.
+
+ Returns:
+ dict[str, float]: Dictionary of feature names and their missingness rate.
+
+ Raises:
+ ValueError: If no features are found.
+ """
+ total_count = self._df.count()
+ if not self.features_list:
+ raise ValueError("No features found")
+
+ return {
+ feature: (
+ self._df.filter(
+ (self._df[feature].isNull()) | (self._df[feature] == 0)
+ ).count()
+ / total_count
+ )
+ for feature in self.features_list
+ }
+
+ def fill_na(
+ self: L2GFeatureMatrix, value: float = 0.0, subset: list[str] | None = None
+ ) -> L2GFeatureMatrix:
+ """Fill missing values in a column with a given value.
+
+ Args:
+ value (float): Value to replace missing values with. Defaults to 0.0.
+ subset (list[str] | None): Subset of columns to consider. Defaults to None.
+
+ Returns:
+ L2GFeatureMatrix: L2G feature matrix dataset
+ """
+ self.df = self._df.fillna(value, subset=subset)
+ return self
+
+ def select_features(
+ self: L2GFeatureMatrix, features_list: list[str] | None
+ ) -> L2GFeatureMatrix:
+ """Select a subset of features from the feature matrix.
+
+ Args:
+ features_list (list[str] | None): List of features to select
+
+ Returns:
+ L2GFeatureMatrix: L2G feature matrix dataset
+ """
+ features_list = features_list or self.features_list
+ fixed_cols = ["studyLocusId", "geneId", "goldStandardSet"]
+ self.df = self._df.select(fixed_cols + features_list) # type: ignore
+ return self
+
+ def train_test_split(
+ self: L2GFeatureMatrix, fraction: float
+ ) -> tuple[L2GFeatureMatrix, L2GFeatureMatrix]:
+ """Split the dataset into training and test sets.
+
+ Args:
+ fraction (float): Fraction of the dataset to use for training
+
+ Returns:
+ tuple[L2GFeatureMatrix, L2GFeatureMatrix]: Training and test datasets
+ """
+ train, test = self._df.randomSplit([fraction, 1 - fraction], seed=42)
+ return (
+ L2GFeatureMatrix(
+ _df=train, _schema=L2GFeatureMatrix.get_schema()
+ ).persist(),
+ L2GFeatureMatrix(_df=test, _schema=L2GFeatureMatrix.get_schema()).persist(),
+ )
diff --git a/src/otg/dataset/l2g_gold_standard.py b/src/otg/dataset/l2g_gold_standard.py
new file mode 100644
index 000000000..27d7321f3
--- /dev/null
+++ b/src/otg/dataset/l2g_gold_standard.py
@@ -0,0 +1,199 @@
+"""L2G gold standard dataset."""
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import TYPE_CHECKING, Type
+
+import pyspark.sql.functions as f
+from pyspark.sql import Window
+
+from otg.common.schemas import parse_spark_schema
+from otg.common.spark_helpers import get_record_with_maximum_value
+from otg.dataset.dataset import Dataset
+
+if TYPE_CHECKING:
+ from pyspark.sql import DataFrame
+ from pyspark.sql.types import StructType
+
+ from otg.dataset.study_locus_overlap import StudyLocusOverlap
+ from otg.dataset.v2g import V2G
+
+
+@dataclass
+class L2GGoldStandard(Dataset):
+ """L2G gold standard dataset."""
+
+ INTERACTION_THRESHOLD = 0.7
+ GS_POSITIVE_LABEL = "positive"
+ GS_NEGATIVE_LABEL = "negative"
+
+ @classmethod
+ def from_otg_curation(
+ cls: type[L2GGoldStandard],
+ gold_standard_curation: DataFrame,
+ v2g: V2G,
+ study_locus_overlap: StudyLocusOverlap,
+ interactions: DataFrame,
+ ) -> L2GGoldStandard:
+ """Initialise L2GGoldStandard from source dataset.
+
+ Args:
+ gold_standard_curation (DataFrame): Gold standard curation dataframe, extracted from
+ v2g (V2G): Variant to gene dataset to bring distance between a variant and a gene's TSS
+ study_locus_overlap (StudyLocusOverlap): Study locus overlap dataset to remove duplicated loci
+ interactions (DataFrame): Gene-gene interactions dataset to remove negative cases where the gene interacts with a positive gene
+
+ Returns:
+ L2GGoldStandard: L2G Gold Standard dataset
+ """
+ from otg.datasource.open_targets.l2g_gold_standard import (
+ OpenTargetsL2GGoldStandard,
+ )
+
+ interactions_df = cls.process_gene_interactions(interactions)
+
+ return (
+ OpenTargetsL2GGoldStandard.as_l2g_gold_standard(gold_standard_curation, v2g)
+ # .filter_unique_associations(study_locus_overlap)
+ .remove_false_negatives(interactions_df)
+ )
+
+ @classmethod
+ def get_schema(cls: type[L2GGoldStandard]) -> StructType:
+ """Provides the schema for the L2GGoldStandard dataset.
+
+ Returns:
+ StructType: Spark schema for the L2GGoldStandard dataset
+ """
+ return parse_spark_schema("l2g_gold_standard.json")
+
+ @classmethod
+ def process_gene_interactions(
+ cls: Type[L2GGoldStandard], interactions: DataFrame
+ ) -> DataFrame:
+ """Extract top scoring gene-gene interaction from the interactions dataset of the Platform.
+
+ Args:
+ interactions (DataFrame): Gene-gene interactions dataset from the Open Targets Platform
+
+ Returns:
+ DataFrame: Top scoring gene-gene interaction per pair of genes
+
+ Examples:
+ >>> interactions = spark.createDataFrame([("gene1", "gene2", 0.8), ("gene1", "gene2", 0.5), ("gene2", "gene3", 0.7)], ["targetA", "targetB", "scoring"])
+ >>> L2GGoldStandard.process_gene_interactions(interactions).show()
+ +-------+-------+-----+
+ |geneIdA|geneIdB|score|
+ +-------+-------+-----+
+ | gene1| gene2| 0.8|
+ | gene2| gene3| 0.7|
+ +-------+-------+-----+
+
+ """
+ return get_record_with_maximum_value(
+ interactions,
+ ["targetA", "targetB"],
+ "scoring",
+ ).selectExpr(
+ "targetA as geneIdA",
+ "targetB as geneIdB",
+ "scoring as score",
+ )
+
+ def filter_unique_associations(
+ self: L2GGoldStandard,
+ study_locus_overlap: StudyLocusOverlap,
+ ) -> L2GGoldStandard:
+ """Refines the gold standard to filter out loci that are not independent.
+
+ Rules:
+ - If two loci point to the same gene, one positive and one negative, and have overlapping variants, we keep the positive one.
+ - If two loci point to the same gene, both positive or negative, and have overlapping variants, we drop one.
+ - If two loci point to different genes, and have overlapping variants, we keep both.
+
+ Args:
+ study_locus_overlap (StudyLocusOverlap): A dataset detailing variants that overlap between StudyLocus.
+
+ Returns:
+ L2GGoldStandard: L2GGoldStandard updated to exclude false negatives and redundant positives.
+ """
+ squared_overlaps = study_locus_overlap._convert_to_square_matrix()
+ unique_associations = (
+ self.df.alias("left")
+ # identify all the study loci that point to the same gene
+ .withColumn(
+ "sl_same_gene",
+ f.collect_set("studyLocusId").over(Window.partitionBy("geneId")),
+ )
+ # identify all the study loci that have an overlapping variant
+ .join(
+ squared_overlaps.df.alias("right"),
+ (f.col("left.studyLocusId") == f.col("right.leftStudyLocusId"))
+ & (f.col("left.variantId") == f.col("right.tagVariantId")),
+ "left",
+ )
+ .withColumn(
+ "overlaps",
+ f.when(f.col("right.tagVariantId").isNotNull(), f.lit(True)).otherwise(
+ f.lit(False)
+ ),
+ )
+ # drop redundant rows: where the variantid overlaps and the gene is "explained" by more than one study locus
+ .filter(~((f.size("sl_same_gene") > 1) & (f.col("overlaps") == 1)))
+ .select(*self.df.columns)
+ )
+ return L2GGoldStandard(_df=unique_associations, _schema=self.get_schema())
+
+ def remove_false_negatives(
+ self: L2GGoldStandard,
+ interactions_df: DataFrame,
+ ) -> L2GGoldStandard:
+ """Refines the gold standard to remove negative gold standard instances where the gene interacts with a positive gene.
+
+ Args:
+ interactions_df (DataFrame): Top scoring gene-gene interaction per pair of genes
+
+ Returns:
+ L2GGoldStandard: A refined set of locus-to-gene associations with increased reliability, having excluded loci that were likely false negatives due to gene-gene interaction confounding.
+ """
+ squared_interactions = interactions_df.unionByName(
+ interactions_df.selectExpr(
+ "geneIdB as geneIdA", "geneIdA as geneIdB", "score"
+ )
+ ).filter(f.col("score") > self.INTERACTION_THRESHOLD)
+ df = (
+ self.df.alias("left")
+ .join(
+ # bring gene partners
+ squared_interactions.alias("right"),
+ f.col("left.geneId") == f.col("right.geneIdA"),
+ "left",
+ )
+ .withColumnRenamed("geneIdB", "interactorGeneId")
+ .join(
+ # bring gold standard status for gene partners
+ self.df.selectExpr(
+ "geneId as interactorGeneId",
+ "goldStandardSet as interactorGeneIdGoldStandardSet",
+ ),
+ "interactorGeneId",
+ "left",
+ )
+ # remove self-interactions
+ .filter(
+ (f.col("geneId") != f.col("interactorGeneId"))
+ | (f.col("interactorGeneId").isNull())
+ )
+ # remove false negatives
+ .filter(
+ # drop rows where the GS gene is negative but the interactor is a GS positive
+ ~(f.col("goldStandardSet") == "negative")
+ & (f.col("interactorGeneIdGoldStandardSet") == "positive")
+ |
+ # keep rows where the gene does not interact
+ (f.col("interactorGeneId").isNull())
+ )
+ .select(*self.df.columns)
+ .distinct()
+ )
+ return L2GGoldStandard(_df=df, _schema=self.get_schema())
diff --git a/src/otg/dataset/l2g_prediction.py b/src/otg/dataset/l2g_prediction.py
new file mode 100644
index 000000000..67e522756
--- /dev/null
+++ b/src/otg/dataset/l2g_prediction.py
@@ -0,0 +1,89 @@
+"""Dataset that contains the Locus to Gene predictions."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import TYPE_CHECKING, Type
+
+import pyspark.sql.functions as f
+from pyspark.ml.functions import vector_to_array
+
+from otg.common.schemas import parse_spark_schema
+
+# from otg.dataset.colocalisation import Colocalisation
+from otg.dataset.dataset import Dataset
+from otg.dataset.l2g_feature_matrix import L2GFeatureMatrix
+from otg.dataset.study_index import StudyIndex
+from otg.dataset.study_locus import StudyLocus
+from otg.dataset.v2g import V2G
+from otg.method.l2g.model import LocusToGeneModel
+
+if TYPE_CHECKING:
+ from pyspark.sql.types import StructType
+
+
+@dataclass
+class L2GPrediction(Dataset):
+ """Dataset that contains the Locus to Gene predictions.
+
+ It is the result of applying the L2G model on a feature matrix, which contains all
+ the study/locus pairs and their functional annotations. The score column informs the
+ confidence of the prediction that a gene is causal to an association.
+ """
+
+ @classmethod
+ def get_schema(cls: type[L2GPrediction]) -> StructType:
+ """Provides the schema for the L2GPrediction dataset.
+
+ Returns:
+ StructType: Schema for the L2GPrediction dataset
+ """
+ return parse_spark_schema("l2g_predictions.json")
+
+ @classmethod
+ def from_credible_set(
+ cls: Type[L2GPrediction],
+ model_path: str,
+ features_list: list[str],
+ study_locus: StudyLocus,
+ study_index: StudyIndex,
+ v2g: V2G,
+ # coloc: Colocalisation,
+ ) -> L2GPrediction:
+ """Initialise L2G from feature matrix.
+
+ Args:
+ model_path (str): Path to the fitted model
+ features_list (list[str]): List of features to use for the model
+ study_locus (StudyLocus): Study locus dataset
+ study_index (StudyIndex): Study index dataset
+ v2g (V2G): Variant to gene dataset
+
+ Returns:
+ L2GPrediction: L2G dataset
+ """
+ fm = L2GFeatureMatrix.generate_features(
+ features_list=features_list,
+ study_locus=study_locus,
+ study_index=study_index,
+ variant_gene=v2g,
+ # colocalisation=coloc,
+ ).fill_na()
+ return L2GPrediction(
+ # Load and apply fitted model
+ _df=(
+ LocusToGeneModel.load_from_disk(
+ model_path,
+ features_list=features_list,
+ )
+ .predict(fm)
+ # the probability of the positive class is the second element inside the probability array
+ # - this is selected as the L2G probability
+ .select(
+ "studyLocusId",
+ "geneId",
+ vector_to_array(f.col("probability"))[1].alias("score"),
+ )
+ ),
+ _schema=cls.get_schema(),
+ )
diff --git a/src/otg/dataset/ld_index.py b/src/otg/dataset/ld_index.py
index 477d6ccc3..ff43662e0 100644
--- a/src/otg/dataset/ld_index.py
+++ b/src/otg/dataset/ld_index.py
@@ -17,5 +17,9 @@ class LDIndex(Dataset):
@classmethod
def get_schema(cls: type[LDIndex]) -> StructType:
- """Provides the schema for the LDIndex dataset."""
+ """Provides the schema for the LDIndex dataset.
+
+ Returns:
+ StructType: Schema for the LDIndex dataset
+ """
return parse_spark_schema("ld_index.json")
diff --git a/src/otg/dataset/study_index.py b/src/otg/dataset/study_index.py
index 9af6d075a..f928e84b5 100644
--- a/src/otg/dataset/study_index.py
+++ b/src/otg/dataset/study_index.py
@@ -1,4 +1,4 @@
-"""Variant index dataset."""
+"""Study index dataset."""
from __future__ import annotations
import importlib.resources as pkg_resources
@@ -35,7 +35,7 @@ def _aggregate_samples_by_ancestry(merged: Column, ancestry: Column) -> Column:
sample. (a struct)
Returns:
- the modified "merged" column after aggregating the samples by ancestry.
+ Column: the modified "merged" column after aggregating the samples by ancestry.
"""
# Iterating over the list of ancestries and adding the sample size if label matches:
return f.transform(
@@ -79,7 +79,11 @@ def _map_ancestries_to_ld_population(gwas_ancestry_label: Column) -> Column:
@classmethod
def get_schema(cls: type[StudyIndex]) -> StructType:
- """Provide the schema for the StudyIndex dataset."""
+ """Provide the schema for the StudyIndex dataset.
+
+ Returns:
+ StructType: The schema of the StudyIndex dataset.
+ """
return parse_spark_schema("study_index.json")
@classmethod
@@ -92,7 +96,7 @@ def aggregate_and_map_ancestries(
discovery_samples (Column): A list of struct column. Has an `ancestry` column and a `sampleSize` columns
Returns:
- A list of struct with mapped LD population and their relative sample size.
+ Column: A list of struct with mapped LD population and their relative sample size.
"""
# Map ancestry categories to population labels of the LD index:
mapped_ancestries = f.transform(
diff --git a/src/otg/dataset/study_locus.py b/src/otg/dataset/study_locus.py
index 8969a0391..d84f40e55 100644
--- a/src/otg/dataset/study_locus.py
+++ b/src/otg/dataset/study_locus.py
@@ -1,4 +1,4 @@
-"""Variant index dataset."""
+"""Study locus dataset."""
from __future__ import annotations
from dataclasses import dataclass
@@ -20,6 +20,7 @@
from pyspark.sql import Column, DataFrame
from pyspark.sql.types import StructType
+ from otg.dataset.ld_index import LDIndex
from otg.dataset.study_index import StudyIndex
@@ -36,6 +37,7 @@ class StudyLocusQualityCheck(Enum):
AMBIGUOUS_STUDY (str): Association with ambiguous study
UNRESOLVED_LD (str): Variant not found in LD reference
LD_CLUMPED (str): Explained by a more significant variant in high LD (clumped)
+ UNPICSABLE (str): Unable to calculate PIPs with the provided data
"""
SUBSIGNIFICANT_FLAG = "Subsignificant p-value"
@@ -48,6 +50,7 @@ class StudyLocusQualityCheck(Enum):
UNRESOLVED_LD = "Variant not found in LD reference"
LD_CLUMPED = "Explained by a more significant variant in high LD (clumped)"
NO_POPULATION = "Study does not have population annotation to resolve LD"
+ NOT_QUALIFYING_LD_BLOCK = "LD block does not contain variants at the required R^2 threshold"
class CredibleInterval(Enum):
@@ -117,7 +120,7 @@ def _align_overlapping_tags(
Args:
loci_to_overlap (DataFrame): containing `studyLocusId`, `studyType`, `chromosome`, `tagVariantId`, `logABF` and `posteriorProbability` columns.
- peak_overlaps (DataFrame): containing `left_studyLocusId`, `right_studyLocusId` and `chromosome` columns.
+ peak_overlaps (DataFrame): containing `leftStudyLocusId`, `rightStudyLocusId` and `chromosome` columns.
Returns:
StudyLocusOverlap: Pairs of overlapping study-locus with aligned tags.
@@ -170,7 +173,7 @@ def _align_overlapping_tags(
)
@staticmethod
- def _update_quality_flag(
+ def update_quality_flag(
qc: Column, flag_condition: Column, flag_text: StudyLocusQualityCheck
) -> Column:
"""Update the provided quality control list with a new flag if condition is met.
@@ -202,20 +205,25 @@ def assign_study_locus_id(study_id_col: Column, variant_id_col: Column) -> Colum
Examples:
>>> df = spark.createDataFrame([("GCST000001", "1_1000_A_C"), ("GCST000002", "1_1000_A_C")]).toDF("studyId", "variantId")
- >>> df.withColumn("study_locus_id", StudyLocus.assign_study_locus_id(*[f.col("variantId"), f.col("studyId")])).show()
- +----------+----------+--------------------+
- | studyId| variantId| study_locus_id|
- +----------+----------+--------------------+
- |GCST000001|1_1000_A_C| 7437284926964690765|
- |GCST000002|1_1000_A_C|-7653912547667845377|
- +----------+----------+--------------------+
+ >>> df.withColumn("study_locus_id", StudyLocus.assign_study_locus_id(f.col("studyId"), f.col("variantId"))).show()
+ +----------+----------+-------------------+
+ | studyId| variantId| study_locus_id|
+ +----------+----------+-------------------+
+ |GCST000001|1_1000_A_C|1553357789130151995|
+ |GCST000002|1_1000_A_C|-415050894682709184|
+ +----------+----------+-------------------+
"""
- return f.xxhash64(*[study_id_col, variant_id_col]).alias("studyLocusId")
+ variant_id_col = f.coalesce(variant_id_col, f.rand().cast("string"))
+ return f.xxhash64(study_id_col, variant_id_col).alias("studyLocusId")
@classmethod
def get_schema(cls: type[StudyLocus]) -> StructType:
- """Provides the schema for the StudyLocus dataset."""
+ """Provides the schema for the StudyLocus dataset.
+
+ Returns:
+ StructType: schema for the StudyLocus dataset.
+ """
return parse_spark_schema("study_locus.json")
def filter_credible_set(
@@ -232,7 +240,10 @@ def filter_credible_set(
"""
self.df = self._df.withColumn(
"locus",
- f.expr(f"filter(locus, tag -> (tag.{credible_interval.value}))"),
+ f.filter(
+ f.col("locus"),
+ lambda tag: (tag[credible_interval.value]),
+ ),
)
return self
@@ -271,25 +282,25 @@ def find_overlaps(self: StudyLocus, study_index: StudyIndex) -> StudyLocusOverla
# study-locus overlap by aligning overlapping variants
return self._align_overlapping_tags(loci_to_overlap, peak_overlaps)
- def unique_lead_tag_variants(self: StudyLocus) -> DataFrame:
- """All unique lead and tag variants contained in the `StudyLocus` dataframe.
+ def unique_variants_in_locus(self: StudyLocus) -> DataFrame:
+ """All unique variants collected in a `StudyLocus` dataframe.
Returns:
DataFrame: A dataframe containing `variantId` and `chromosome` columns.
"""
- lead_tags = (
- self.df.select(
- f.col("variantId"),
- f.col("chromosome"),
- f.explode("ldSet.tagVariantId").alias("tagVariantId"),
- )
- .repartition("chromosome")
- .persist()
- )
return (
- lead_tags.select("variantId", "chromosome")
- .union(
- lead_tags.select(f.col("tagVariantId").alias("variantId"), "chromosome")
+ self.df.withColumn(
+ "variantId",
+ # Joint array of variants in that studylocus. Locus can be null
+ f.explode(
+ f.array_union(
+ f.array(f.col("variantId")),
+ f.coalesce(f.col("locus.variantId"), f.array()),
+ )
+ ),
+ )
+ .select(
+ "variantId", f.split(f.col("variantId"), "_")[0].alias("chromosome")
)
.distinct()
)
@@ -314,6 +325,9 @@ def annotate_credible_sets(self: StudyLocus) -> StudyLocus:
Returns:
StudyLocus: including annotation on `is95CredibleSet` and `is99CredibleSet`.
+
+ Raises:
+ ValueError: If `locus` column is not available.
"""
if "locus" not in self.df.columns:
raise ValueError("Locus column not available.")
@@ -357,6 +371,22 @@ def annotate_credible_sets(self: StudyLocus) -> StudyLocus:
)
return self
+ def annotate_ld(
+ self: StudyLocus, study_index: StudyIndex, ld_index: LDIndex
+ ) -> StudyLocus:
+ """Annotate LD information to study-locus.
+
+ Args:
+ study_index (StudyIndex): Study index to resolve ancestries.
+ ld_index (LDIndex): LD index to resolve LD information.
+
+ Returns:
+ StudyLocus: Study locus annotated with ld information from LD index.
+ """
+ from otg.method.ld import LDAnnotator
+
+ return LDAnnotator.ld_annotate(self, study_index, ld_index)
+
def clump(self: StudyLocus) -> StudyLocus:
"""Perform LD clumping of the studyLocus.
@@ -382,7 +412,7 @@ def clump(self: StudyLocus) -> StudyLocus:
)
.withColumn(
"qualityControls",
- StudyLocus._update_quality_flag(
+ StudyLocus.update_quality_flag(
f.col("qualityControls"),
f.col("is_lead_linked"),
StudyLocusQualityCheck.LD_CLUMPED,
@@ -398,11 +428,11 @@ def _qc_unresolved_ld(
"""Flag associations with variants that are not found in the LD reference.
Returns:
- StudyLocusGWASCatalog | StudyLocus: Updated study locus.
+ StudyLocus: Updated study locus.
"""
self.df = self.df.withColumn(
"qualityControls",
- self._update_quality_flag(
+ self.update_quality_flag(
f.col("qualityControls"),
f.col("ldSet").isNull(),
StudyLocusQualityCheck.UNRESOLVED_LD,
@@ -414,7 +444,7 @@ def _qc_no_population(self: StudyLocus) -> StudyLocus:
"""Flag associations where the study doesn't have population information to resolve LD.
Returns:
- StudyLocusGWASCatalog | StudyLocus: Updated study locus.
+ StudyLocus: Updated study locus.
"""
# If the tested column is not present, return self unchanged:
if "ldPopulationStructure" not in self.df.columns:
@@ -422,7 +452,7 @@ def _qc_no_population(self: StudyLocus) -> StudyLocus:
self.df = self.df.withColumn(
"qualityControls",
- self._update_quality_flag(
+ self.update_quality_flag(
f.col("qualityControls"),
f.col("ldPopulationStructure").isNull(),
StudyLocusQualityCheck.NO_POPULATION,
diff --git a/src/otg/dataset/study_locus_overlap.py b/src/otg/dataset/study_locus_overlap.py
index 430abfed9..d0730d723 100644
--- a/src/otg/dataset/study_locus_overlap.py
+++ b/src/otg/dataset/study_locus_overlap.py
@@ -1,4 +1,4 @@
-"""Variant index dataset."""
+"""Study locus overlap index dataset."""
from __future__ import annotations
from dataclasses import dataclass
@@ -26,7 +26,11 @@ class StudyLocusOverlap(Dataset):
@classmethod
def get_schema(cls: type[StudyLocusOverlap]) -> StructType:
- """Provides the schema for the StudyLocusOverlap dataset."""
+ """Provides the schema for the StudyLocusOverlap dataset.
+
+ Returns:
+ StructType: Schema for the StudyLocusOverlap dataset
+ """
return parse_spark_schema("study_locus_overlap.json")
@classmethod
@@ -43,3 +47,20 @@ def from_associations(
StudyLocusOverlap: Study-locus overlap dataset
"""
return study_locus.find_overlaps(study_index)
+
+ def _convert_to_square_matrix(self: StudyLocusOverlap) -> StudyLocusOverlap:
+ """Convert the dataset to a square matrix.
+
+ Returns:
+ StudyLocusOverlap: Square matrix of the dataset
+ """
+ return StudyLocusOverlap(
+ _df=self.df.unionByName(
+ self.df.selectExpr(
+ "leftStudyLocusId as rightStudyLocusId",
+ "rightStudyLocusId as leftStudyLocusId",
+ "tagVariantId",
+ )
+ ).distinct(),
+ _schema=self.get_schema(),
+ )
diff --git a/src/otg/dataset/summary_statistics.py b/src/otg/dataset/summary_statistics.py
index 64f2fcc1b..4ee82e7eb 100644
--- a/src/otg/dataset/summary_statistics.py
+++ b/src/otg/dataset/summary_statistics.py
@@ -26,7 +26,11 @@ class SummaryStatistics(Dataset):
@classmethod
def get_schema(cls: type[SummaryStatistics]) -> StructType:
- """Provides the schema for the SummaryStatistics dataset."""
+ """Provides the schema for the SummaryStatistics dataset.
+
+ Returns:
+ StructType: Schema for the SummaryStatistics dataset
+ """
return parse_spark_schema("summary_statistics.json")
def pvalue_filter(self: SummaryStatistics, pvalue: float) -> SummaryStatistics:
@@ -53,40 +57,37 @@ def pvalue_filter(self: SummaryStatistics, pvalue: float) -> SummaryStatistics:
def window_based_clumping(
self: SummaryStatistics,
- distance: int,
+ distance: int = 500_000,
gwas_significance: float = 5e-8,
- with_locus: bool = False,
baseline_significance: float = 0.05,
locus_collect_distance: int | None = None,
) -> StudyLocus:
"""Generate study-locus from summary statistics by distance based clumping + collect locus.
Args:
- distance (int): Distance in base pairs to be used for clumping.
+ distance (int): Distance in base pairs to be used for clumping. Defaults to 500_000.
gwas_significance (float, optional): GWAS significance threshold. Defaults to 5e-8.
baseline_significance (float, optional): Baseline significance threshold for inclusion in the locus. Defaults to 0.05.
- locus_collect_distance (int, optional): The distance to collect locus around semi-indices. If not provided, defaults to `distance`.
+ locus_collect_distance (int | None): The distance to collect locus around semi-indices. If not provided, locus is not collected.
Returns:
StudyLocus: Clumped study-locus containing variants based on window.
"""
- if locus_collect_distance is None:
- locus_collect_distance = distance
- # Based on if we want to get the locus different clumping function is called:
- if with_locus:
- clumped_df = WindowBasedClumping.clump_with_locus(
+ return (
+ WindowBasedClumping.clump_with_locus(
self,
window_length=distance,
p_value_significance=gwas_significance,
p_value_baseline=baseline_significance,
locus_window_length=locus_collect_distance,
)
- else:
- clumped_df = WindowBasedClumping.clump(
- self, window_length=distance, p_value_significance=gwas_significance
+ if locus_collect_distance
+ else WindowBasedClumping.clump(
+ self,
+ window_length=distance,
+ p_value_significance=gwas_significance,
)
-
- return clumped_df
+ )
def exclude_region(self: SummaryStatistics, region: str) -> SummaryStatistics:
"""Exclude a region from the summary stats dataset.
diff --git a/src/otg/dataset/v2g.py b/src/otg/dataset/v2g.py
index 2985f3e6a..b13608f8e 100644
--- a/src/otg/dataset/v2g.py
+++ b/src/otg/dataset/v2g.py
@@ -4,6 +4,8 @@
from dataclasses import dataclass
from typing import TYPE_CHECKING
+import pyspark.sql.functions as f
+
from otg.common.schemas import parse_spark_schema
from otg.dataset.dataset import Dataset
@@ -22,11 +24,15 @@ class V2G(Dataset):
@classmethod
def get_schema(cls: type[V2G]) -> StructType:
- """Provides the schema for the V2G dataset."""
+ """Provides the schema for the V2G dataset.
+
+ Returns:
+ StructType: Schema for the V2G dataset
+ """
return parse_spark_schema("v2g.json")
def filter_by_genes(self: V2G, genes: GeneIndex) -> V2G:
- """Filter by V2G dataset by genes.
+ """Filter V2G dataset by genes.
Args:
genes (GeneIndex): Gene index dataset to filter by
@@ -36,3 +42,10 @@ def filter_by_genes(self: V2G, genes: GeneIndex) -> V2G:
"""
self.df = self._df.join(genes.df.select("geneId"), on="geneId", how="inner")
return self
+
+ def extract_distance_tss_minimum(self: V2G) -> None:
+ """Extract minimum distance to TSS."""
+ self.df = self._df.filter(f.col("distance")).withColumn(
+ "distanceTssMinimum",
+ f.expr("min(distTss) OVER (PARTITION BY studyLocusId)"),
+ )
diff --git a/src/otg/dataset/variant_annotation.py b/src/otg/dataset/variant_annotation.py
index 16e9573e3..0515621fa 100644
--- a/src/otg/dataset/variant_annotation.py
+++ b/src/otg/dataset/variant_annotation.py
@@ -2,7 +2,7 @@
from __future__ import annotations
from dataclasses import dataclass
-from typing import TYPE_CHECKING, Optional
+from typing import TYPE_CHECKING
import pyspark.sql.functions as f
@@ -24,7 +24,11 @@ class VariantAnnotation(Dataset):
@classmethod
def get_schema(cls: type[VariantAnnotation]) -> StructType:
- """Provides the schema for the VariantAnnotation dataset."""
+ """Provides the schema for the VariantAnnotation dataset.
+
+ Returns:
+ StructType: Schema for the VariantAnnotation dataset
+ """
return parse_spark_schema("variant_annotation.json")
def max_maf(self: VariantAnnotation) -> Column:
@@ -43,29 +47,32 @@ def max_maf(self: VariantAnnotation) -> Column:
)
def filter_by_variant_df(
- self: VariantAnnotation, df: DataFrame, cols: list[str]
+ self: VariantAnnotation, df: DataFrame
) -> VariantAnnotation:
"""Filter variant annotation dataset by a variant dataframe.
Args:
df (DataFrame): A dataframe of variants
- cols (List[str]): A list of columns to join on
Returns:
VariantAnnotation: A filtered variant annotation dataset
"""
- self.df = self._df.join(f.broadcast(df.select(cols)), on=cols, how="inner")
+ self.df = self._df.join(
+ f.broadcast(df.select("variantId", "chromosome")),
+ on=["variantId", "chromosome"],
+ how="inner",
+ )
return self
def get_transcript_consequence_df(
- self: VariantAnnotation, filter_by: Optional[GeneIndex] = None
+ self: VariantAnnotation, gene_index: GeneIndex | None = None
) -> DataFrame:
"""Dataframe of exploded transcript consequences.
Optionally the trancript consequences can be reduced to the universe of a gene index.
Args:
- filter_by (GeneIndex): A gene index. Defaults to None.
+ gene_index (GeneIndex | None): A gene index. Defaults to None.
Returns:
DataFrame: A dataframe exploded by transcript consequences with the columns variantId, chromosome, transcriptConsequence
@@ -80,9 +87,9 @@ def get_transcript_consequence_df(
"transcriptConsequence",
f.col("transcriptConsequence.geneId").alias("geneId"),
)
- if filter_by:
+ if gene_index:
transript_consequences = transript_consequences.join(
- f.broadcast(filter_by.df),
+ f.broadcast(gene_index.df),
on=["chromosome", "geneId"],
)
return transript_consequences.persist()
@@ -90,44 +97,37 @@ def get_transcript_consequence_df(
def get_most_severe_vep_v2g(
self: VariantAnnotation,
vep_consequences: DataFrame,
- filter_by: GeneIndex,
+ gene_index: GeneIndex,
) -> V2G:
- """Creates a dataset with variant to gene assignments based on VEP's predicted consequence on the transcript.
+ """Creates a dataset with variant to gene assignments based on VEP's predicted consequence of the transcript.
Optionally the trancript consequences can be reduced to the universe of a gene index.
Args:
vep_consequences (DataFrame): A dataframe of VEP consequences
- filter_by (GeneIndex): A gene index to filter by. Defaults to None.
+ gene_index (GeneIndex): A gene index to filter by. Defaults to None.
Returns:
V2G: High and medium severity variant to gene assignments
"""
- vep_lut = vep_consequences.select(
- f.element_at(f.split("Accession", r"/"), -1).alias(
- "variantFunctionalConsequenceId"
- ),
- f.col("Term").alias("label"),
- f.col("v2g_score").cast("double").alias("score"),
- )
-
return V2G(
- _df=self.get_transcript_consequence_df(filter_by).select(
+ _df=self.get_transcript_consequence_df(gene_index)
+ .select(
"variantId",
"chromosome",
- "position",
f.col("transcriptConsequence.geneId").alias("geneId"),
f.explode("transcriptConsequence.consequenceTerms").alias("label"),
f.lit("vep").alias("datatypeId"),
f.lit("variantConsequence").alias("datasourceId"),
)
- # A variant can have multiple predicted consequences on a transcript, the most severe one is selected
.join(
- f.broadcast(vep_lut),
+ f.broadcast(vep_consequences),
on="label",
how="inner",
)
+ .drop("label")
.filter(f.col("score") != 0)
+ # A variant can have multiple predicted consequences on a transcript, the most severe one is selected
.transform(
lambda df: get_record_with_maximum_value(
df, ["variantId", "geneId"], "score"
@@ -136,81 +136,20 @@ def get_most_severe_vep_v2g(
_schema=V2G.get_schema(),
)
- def get_polyphen_v2g(
- self: VariantAnnotation, filter_by: Optional[GeneIndex] = None
- ) -> V2G:
- """Creates a dataset with variant to gene assignments with a PolyPhen's predicted score on the transcript.
-
- Polyphen informs about the probability that a substitution is damaging. Optionally the trancript consequences can be reduced to the universe of a gene index.
-
- Args:
- filter_by (GeneIndex): A gene index to filter by. Defaults to None.
-
- Returns:
- V2G: variant to gene assignments with their polyphen scores
- """
- return V2G(
- _df=(
- self.get_transcript_consequence_df(filter_by)
- .filter(f.col("transcriptConsequence.polyphenScore").isNotNull())
- .select(
- "variantId",
- "chromosome",
- "position",
- "geneId",
- f.col("transcriptConsequence.polyphenScore").alias("score"),
- f.col("transcriptConsequence.polyphenPrediction").alias("label"),
- f.lit("vep").alias("datatypeId"),
- f.lit("polyphen").alias("datasourceId"),
- )
- ),
- _schema=V2G.get_schema(),
- )
-
- def get_sift_v2g(self: VariantAnnotation, filter_by: GeneIndex) -> V2G:
- """Creates a dataset with variant to gene assignments with a SIFT's predicted score on the transcript.
-
- SIFT informs about the probability that a substitution is tolerated so scores nearer zero are more likely to be deleterious.
- Optionally the trancript consequences can be reduced to the universe of a gene index.
-
- Args:
- filter_by (GeneIndex): A gene index to filter by.
-
- Returns:
- V2G: variant to gene assignments with their SIFT scores
- """
- return V2G(
- _df=(
- self.get_transcript_consequence_df(filter_by)
- .filter(f.col("transcriptConsequence.siftScore").isNotNull())
- .select(
- "variantId",
- "chromosome",
- "position",
- "geneId",
- f.expr("1 - transcriptConsequence.siftScore").alias("score"),
- f.col("transcriptConsequence.siftPrediction").alias("label"),
- f.lit("vep").alias("datatypeId"),
- f.lit("sift").alias("datasourceId"),
- )
- ),
- _schema=V2G.get_schema(),
- )
-
- def get_plof_v2g(self: VariantAnnotation, filter_by: GeneIndex) -> V2G:
+ def get_plof_v2g(self: VariantAnnotation, gene_index: GeneIndex) -> V2G:
"""Creates a dataset with variant to gene assignments with a flag indicating if the variant is predicted to be a loss-of-function variant by the LOFTEE algorithm.
Optionally the trancript consequences can be reduced to the universe of a gene index.
Args:
- filter_by (GeneIndex): A gene index to filter by.
+ gene_index (GeneIndex): A gene index to filter by.
Returns:
V2G: variant to gene assignments from the LOFTEE algorithm
"""
return V2G(
_df=(
- self.get_transcript_consequence_df(filter_by)
+ self.get_transcript_consequence_df(gene_index)
.filter(f.col("transcriptConsequence.lof").isNotNull())
.withColumn(
"isHighQualityPlof",
@@ -227,7 +166,6 @@ def get_plof_v2g(self: VariantAnnotation, filter_by: GeneIndex) -> V2G:
.select(
"variantId",
"chromosome",
- "position",
"geneId",
"isHighQualityPlof",
f.col("score"),
@@ -240,13 +178,13 @@ def get_plof_v2g(self: VariantAnnotation, filter_by: GeneIndex) -> V2G:
def get_distance_to_tss(
self: VariantAnnotation,
- filter_by: GeneIndex,
+ gene_index: GeneIndex,
max_distance: int = 500_000,
) -> V2G:
"""Extracts variant to gene assignments for variants falling within a window of a gene's TSS.
Args:
- filter_by (GeneIndex): A gene index to filter by.
+ gene_index (GeneIndex): A gene index to filter by.
max_distance (int): The maximum distance from the TSS to consider. Defaults to 500_000.
Returns:
@@ -256,7 +194,7 @@ def get_distance_to_tss(
_df=(
self.df.alias("variant")
.join(
- f.broadcast(filter_by.locations_lut()).alias("gene"),
+ f.broadcast(gene_index.locations_lut()).alias("gene"),
on=[
f.col("variant.chromosome") == f.col("gene.chromosome"),
f.abs(f.col("variant.position") - f.col("gene.tss"))
@@ -264,15 +202,18 @@ def get_distance_to_tss(
],
how="inner",
)
+ .withColumn(
+ "distance", f.abs(f.col("variant.position") - f.col("gene.tss"))
+ )
.withColumn(
"inverse_distance",
- max_distance - f.abs(f.col("variant.position") - f.col("gene.tss")),
+ max_distance - f.col("distance"),
)
.transform(lambda df: normalise_column(df, "inverse_distance", "score"))
.select(
"variantId",
f.col("variant.chromosome").alias("chromosome"),
- "position",
+ "distance",
"geneId",
"score",
f.lit("distance").alias("datatypeId"),
diff --git a/src/otg/dataset/variant_index.py b/src/otg/dataset/variant_index.py
index 38a0052d4..647584f98 100644
--- a/src/otg/dataset/variant_index.py
+++ b/src/otg/dataset/variant_index.py
@@ -9,6 +9,7 @@
from otg.common.schemas import parse_spark_schema
from otg.common.spark_helpers import nullify_empty_array
from otg.dataset.dataset import Dataset
+from otg.dataset.study_locus import StudyLocus
if TYPE_CHECKING:
from pyspark.sql.types import StructType
@@ -25,15 +26,28 @@ class VariantIndex(Dataset):
@classmethod
def get_schema(cls: type[VariantIndex]) -> StructType:
- """Provides the schema for the VariantIndex dataset."""
+ """Provides the schema for the VariantIndex dataset.
+
+ Returns:
+ StructType: Schema for the VariantIndex dataset
+ """
return parse_spark_schema("variant_index.json")
@classmethod
def from_variant_annotation(
cls: type[VariantIndex],
variant_annotation: VariantAnnotation,
+ study_locus: StudyLocus,
) -> VariantIndex:
- """Initialise VariantIndex from pre-existing variant annotation dataset."""
+ """Initialise VariantIndex from pre-existing variant annotation dataset.
+
+ Args:
+ variant_annotation (VariantAnnotation): Variant annotation dataset
+ study_locus (StudyLocus): Study locus dataset with the variants to intersect with the variant annotation dataset
+
+ Returns:
+ VariantIndex: Variant index dataset
+ """
unchanged_cols = [
"variantId",
"chromosome",
@@ -44,11 +58,14 @@ def from_variant_annotation(
"positionB37",
"alleleType",
"alleleFrequencies",
- "cadd",
+ "inSilicoPredictors",
]
+ va_slimmed = variant_annotation.filter_by_variant_df(
+ study_locus.unique_variants_in_locus()
+ )
return cls(
_df=(
- variant_annotation.df.select(
+ va_slimmed.df.select(
*unchanged_cols,
f.col("vep.mostSevereConsequence").alias("mostSevereConsequence"),
# filters/rsid are arrays that can be empty, in this case we convert them to null
diff --git a/src/otg/datasource/eqtl_catalogue/__init__.py b/src/otg/datasource/eqtl_catalogue/__init__.py
new file mode 100644
index 000000000..9632698b0
--- /dev/null
+++ b/src/otg/datasource/eqtl_catalogue/__init__.py
@@ -0,0 +1,3 @@
+"""eQTL Catalogue datasource classes."""
+
+from __future__ import annotations
diff --git a/src/otg/datasource/eqtl_catalogue/study_index.py b/src/otg/datasource/eqtl_catalogue/study_index.py
new file mode 100644
index 000000000..760cb3a74
--- /dev/null
+++ b/src/otg/datasource/eqtl_catalogue/study_index.py
@@ -0,0 +1,151 @@
+"""Study Index for eQTL Catalogue data source."""
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, List
+
+import pyspark.sql.functions as f
+
+from otg.dataset.study_index import StudyIndex
+
+if TYPE_CHECKING:
+ from pyspark.sql import DataFrame
+ from pyspark.sql.column import Column
+
+
+class EqtlCatalogueStudyIndex:
+ """Study index dataset from eQTL Catalogue."""
+
+ @staticmethod
+ def _all_attributes() -> List[Column]:
+ """A helper function to return all study index attribute expressions.
+
+ Returns:
+ List[Column]: all study index attribute expressions.
+ """
+ study_attributes = [
+ # Project ID, example: "GTEx_V8".
+ f.col("study").alias("projectId"),
+ # Partial study ID, example: "GTEx_V8_Adipose_Subcutaneous". This ID will be converted to final only when
+ # summary statistics are parsed, because it must also include a gene ID.
+ f.concat(f.col("study"), f.lit("_"), f.col("qtl_group")).alias("studyId"),
+ # Summary stats location.
+ f.col("ftp_path").alias("summarystatsLocation"),
+ # Constant value fields.
+ f.lit(True).alias("hasSumstats"),
+ f.lit("eqtl").alias("studyType"),
+ ]
+ tissue_attributes = [
+ # Human readable tissue label, example: "Adipose - Subcutaneous".
+ f.col("tissue_label").alias("traitFromSource"),
+ # Ontology identifier for the tissue, for example: "UBERON:0001157".
+ f.array(
+ f.regexp_replace(
+ f.regexp_replace(
+ f.col("tissue_ontology_id"),
+ "UBER_",
+ "UBERON_",
+ ),
+ "_",
+ ":",
+ )
+ ).alias("traitFromSourceMappedIds"),
+ ]
+ sample_attributes = [
+ f.lit(838).cast("integer").alias("nSamples"),
+ f.lit("838 (281 females and 557 males)").alias("initialSampleSize"),
+ f.array(
+ f.struct(
+ f.lit(715).cast("integer").alias("sampleSize"),
+ f.lit("European American").alias("ancestry"),
+ ),
+ f.struct(
+ f.lit(103).cast("integer").alias("sampleSize"),
+ f.lit("African American").alias("ancestry"),
+ ),
+ f.struct(
+ f.lit(12).cast("integer").alias("sampleSize"),
+ f.lit("Asian American").alias("ancestry"),
+ ),
+ f.struct(
+ f.lit(16).cast("integer").alias("sampleSize"),
+ f.lit("Hispanic or Latino").alias("ancestry"),
+ ),
+ ).alias("discoverySamples"),
+ ]
+ publication_attributes = [
+ f.lit("32913098").alias("pubmedId"),
+ f.lit(
+ "The GTEx Consortium atlas of genetic regulatory effects across human tissues"
+ ).alias("publicationTitle"),
+ f.lit("GTEx Consortium").alias("publicationFirstAuthor"),
+ f.lit("2020-09-11").alias("publicationDate"),
+ f.lit("Science").alias("publicationJournal"),
+ ]
+ return (
+ study_attributes
+ + tissue_attributes
+ + sample_attributes
+ + publication_attributes
+ )
+
+ @classmethod
+ def from_source(
+ cls: type[EqtlCatalogueStudyIndex],
+ eqtl_studies: DataFrame,
+ ) -> StudyIndex:
+ """Ingest study level metadata from eQTL Catalogue.
+
+ Args:
+ eqtl_studies (DataFrame): ingested but unprocessed eQTL Catalogue studies.
+
+ Returns:
+ StudyIndex: preliminary processed study index for eQTL Catalogue studies.
+ """
+ return StudyIndex(
+ _df=eqtl_studies.select(*cls._all_attributes()).withColumn(
+ "ldPopulationStructure",
+ StudyIndex.aggregate_and_map_ancestries(f.col("discoverySamples")),
+ ),
+ _schema=StudyIndex.get_schema(),
+ )
+
+ @classmethod
+ def add_gene_id_column(
+ cls: type[EqtlCatalogueStudyIndex],
+ study_index_df: DataFrame,
+ summary_stats_df: DataFrame,
+ ) -> StudyIndex:
+ """Add a geneId column to the study index and explode.
+
+ While the original list contains one entry per tissue, what we consider as a single study is one mini-GWAS for
+ an expression of a _particular gene_ in a particular study. At this stage we have a study index with partial
+ study IDs like "PROJECT_QTLGROUP", and a summary statistics object with full study IDs like
+ "PROJECT_QTLGROUP_GENEID", so we need to perform a merge and explosion to obtain our final study index.
+
+ Args:
+ study_index_df (DataFrame): preliminary study index for eQTL Catalogue studies.
+ summary_stats_df (DataFrame): summary statistics dataframe for eQTL Catalogue data.
+
+ Returns:
+ StudyIndex: final study index for eQTL Catalogue studies.
+ """
+ partial_to_full_study_id = (
+ summary_stats_df.select(f.col("studyId"))
+ .distinct()
+ .select(
+ f.col("studyId").alias("fullStudyId"), # PROJECT_QTLGROUP_GENEID
+ f.regexp_extract(f.col("studyId"), r"(.*)_[\_]+", 1).alias(
+ "studyId"
+ ), # PROJECT_QTLGROUP
+ )
+ .groupBy("studyId")
+ .agg(f.collect_list("fullStudyId").alias("fullStudyIdList"))
+ )
+ study_index_df = (
+ study_index_df.join(partial_to_full_study_id, "studyId", "inner")
+ .withColumn("fullStudyId", f.explode("fullStudyIdList"))
+ .drop("fullStudyIdList")
+ .withColumn("geneId", f.regexp_extract(f.col("studyId"), r".*_([\_]+)", 1))
+ .drop("fullStudyId")
+ )
+ return StudyIndex(_df=study_index_df, _schema=StudyIndex.get_schema())
diff --git a/src/otg/datasource/eqtl_catalogue/summary_stats.py b/src/otg/datasource/eqtl_catalogue/summary_stats.py
new file mode 100644
index 000000000..51d15f622
--- /dev/null
+++ b/src/otg/datasource/eqtl_catalogue/summary_stats.py
@@ -0,0 +1,93 @@
+"""Summary statistics ingestion for eQTL Catalogue."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import TYPE_CHECKING
+
+import pyspark.sql.functions as f
+import pyspark.sql.types as t
+
+from otg.common.utils import parse_pvalue
+from otg.dataset.summary_statistics import SummaryStatistics
+
+if TYPE_CHECKING:
+ from pyspark.sql import DataFrame
+ from pyspark.sql.column import Column
+
+
+@dataclass
+class EqtlCatalogueSummaryStats:
+ """Summary statistics dataset for eQTL Catalogue."""
+
+ @staticmethod
+ def _full_study_id_regexp() -> Column:
+ """Constructs a full study ID from the URI.
+
+ Returns:
+ Column: expression to extract a full study ID from the URI.
+ """
+ # Example of a URI which is used for parsing:
+ # "gs://genetics_etl_python_playground/input/preprocess/eqtl_catalogue/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz".
+
+ # Regular expession to extract project ID from URI. Example: "GTEx_V8".
+ _project_id = f.regexp_extract(
+ f.input_file_name(),
+ r"imported/([^/]+)/.*",
+ 1,
+ )
+ # Regular expression to extract QTL group from URI. Example: "Adipose_Subcutaneous".
+ _qtl_group = f.regexp_extract(f.input_file_name(), r"([^/]+)\.tsv\.gz", 1)
+ # Extracting gene ID from the column. Example: "ENSG00000225630".
+ _gene_id = f.col("gene_id")
+
+ # We can now construct the full study ID based on all fields.
+ # Example: "GTEx_V8_Adipose_Subcutaneous_ENSG00000225630".
+ return f.concat(_project_id, f.lit("_"), _qtl_group, f.lit("_"), _gene_id)
+
+ @classmethod
+ def from_source(
+ cls: type[EqtlCatalogueSummaryStats],
+ summary_stats_df: DataFrame,
+ ) -> SummaryStatistics:
+ """Ingests all summary stats for all eQTL Catalogue studies.
+
+ Args:
+ summary_stats_df (DataFrame): an ingested but unprocessed summary statistics dataframe from eQTL Catalogue.
+
+ Returns:
+ SummaryStatistics: a processed summary statistics dataframe for eQTL Catalogue.
+ """
+ processed_summary_stats_df = (
+ summary_stats_df.select(
+ # Construct study ID from the appropriate columns.
+ cls._full_study_id_regexp().alias("studyId"),
+ # Add variant information.
+ f.concat_ws(
+ "_",
+ f.col("chromosome"),
+ f.col("position"),
+ f.col("ref"),
+ f.col("alt"),
+ ).alias("variantId"),
+ f.col("chromosome"),
+ f.col("position").cast(t.IntegerType()),
+ # Parse p-value into mantissa and exponent.
+ *parse_pvalue(f.col("pvalue")),
+ # Add beta, standard error, and allele frequency information.
+ f.col("beta").cast("double"),
+ f.col("se").cast("double").alias("standardError"),
+ f.col("maf").cast("float").alias("effectAlleleFrequencyFromSource"),
+ )
+ # Drop rows which don't have proper position or beta value.
+ .filter(
+ f.col("position").cast(t.IntegerType()).isNotNull()
+ & (f.col("beta") != 0)
+ )
+ )
+
+ # Initialise a summary statistics object.
+ return SummaryStatistics(
+ _df=processed_summary_stats_df,
+ _schema=SummaryStatistics.get_schema(),
+ )
diff --git a/src/otg/datasource/finngen/__init__.py b/src/otg/datasource/finngen/__init__.py
index 544779b18..56e902233 100644
--- a/src/otg/datasource/finngen/__init__.py
+++ b/src/otg/datasource/finngen/__init__.py
@@ -1,3 +1,3 @@
-"""GWAS Catalog Data Source."""
+"""FinnGen datasource classes."""
from __future__ import annotations
diff --git a/src/otg/datasource/finngen/study_index.py b/src/otg/datasource/finngen/study_index.py
index 48829a267..b542ac655 100644
--- a/src/otg/datasource/finngen/study_index.py
+++ b/src/otg/datasource/finngen/study_index.py
@@ -1,22 +1,20 @@
"""Study Index for Finngen data source."""
from __future__ import annotations
-from typing import TYPE_CHECKING
+from urllib.request import urlopen
import pyspark.sql.functions as f
+from pyspark.sql import SparkSession
from otg.dataset.study_index import StudyIndex
-if TYPE_CHECKING:
- from pyspark.sql import DataFrame
-
-class FinnGenStudyIndex(StudyIndex):
+class FinnGenStudyIndex:
"""Study index dataset from FinnGen.
The following information is aggregated/extracted:
- - Study ID in the special format (FINNGEN_R9_*)
+ - Study ID in the special format (e.g. FINNGEN_R10_*)
- Trait name (for example, Amoebiasis)
- Number of cases and controls
- Link to the summary statistics location
@@ -24,35 +22,41 @@ class FinnGenStudyIndex(StudyIndex):
Some fields are also populated as constants, such as study type and the initial sample size.
"""
+ finngen_phenotype_table_url: str = "https://r10.finngen.fi/api/phenos"
+ finngen_release_prefix: str = "FINNGEN_R10"
+ finngen_summary_stats_url_prefix: str = (
+ "gs://finngen-public-data-r10/summary_stats/finngen_R10_"
+ )
+ finngen_summary_stats_url_suffix: str = ".gz"
+
@classmethod
def from_source(
cls: type[FinnGenStudyIndex],
- finngen_studies: DataFrame,
- finngen_release_prefix: str,
- finngen_summary_stats_url_prefix: str,
- finngen_summary_stats_url_suffix: str,
- ) -> FinnGenStudyIndex:
+ spark: SparkSession,
+ ) -> StudyIndex:
"""This function ingests study level metadata from FinnGen.
Args:
- finngen_studies (DataFrame): FinnGen raw study table
- finngen_release_prefix (str): Release prefix pattern.
- finngen_sumstat_url_prefix (str): URL prefix for summary statistics location.
- finngen_sumstat_url_suffix (str): URL prefix suffix for summary statistics location.
+ spark (SparkSession): Spark session object.
Returns:
- FinnGenStudyIndex: Parsed and annotated FinnGen study table.
+ StudyIndex: Parsed and annotated FinnGen study table.
"""
- return FinnGenStudyIndex(
- _df=finngen_studies.select(
- f.concat(f.lit(f"{finngen_release_prefix}_"), f.col("phenocode")).alias(
- "studyId"
- ),
+ json_data = urlopen(cls.finngen_phenotype_table_url).read().decode("utf-8")
+ rdd = spark.sparkContext.parallelize([json_data])
+ raw_df = spark.read.json(rdd)
+ return StudyIndex(
+ _df=raw_df.select(
+ f.concat(
+ f.lit(f"{cls.finngen_release_prefix}_"), f.col("phenocode")
+ ).alias("studyId"),
f.col("phenostring").alias("traitFromSource"),
- f.col("num_cases").alias("nCases"),
- f.col("num_controls").alias("nControls"),
- (f.col("num_cases") + f.col("num_controls")).alias("nSamples"),
- f.lit(finngen_release_prefix).alias("projectId"),
+ f.col("num_cases").cast("integer").alias("nCases"),
+ f.col("num_controls").cast("integer").alias("nControls"),
+ (f.col("num_cases") + f.col("num_controls"))
+ .cast("integer")
+ .alias("nSamples"),
+ f.lit(cls.finngen_release_prefix).alias("projectId"),
f.lit("gwas").alias("studyType"),
f.lit(True).alias("hasSumstats"),
f.lit("377,277 (210,870 females and 166,407 males)").alias(
@@ -60,18 +64,20 @@ def from_source(
),
f.array(
f.struct(
- f.lit(377277).cast("long").alias("sampleSize"),
+ f.lit(377277).cast("integer").alias("sampleSize"),
f.lit("Finnish").alias("ancestry"),
)
).alias("discoverySamples"),
+ # Cohort label is consistent with GWAS Catalog curation.
+ f.array(f.lit("FinnGen")).alias("cohorts"),
f.concat(
- f.lit(finngen_summary_stats_url_prefix),
+ f.lit(cls.finngen_summary_stats_url_prefix),
f.col("phenocode"),
- f.lit(finngen_summary_stats_url_suffix),
+ f.lit(cls.finngen_summary_stats_url_suffix),
).alias("summarystatsLocation"),
).withColumn(
"ldPopulationStructure",
- cls.aggregate_and_map_ancestries(f.col("discoverySamples")),
+ StudyIndex.aggregate_and_map_ancestries(f.col("discoverySamples")),
),
- _schema=cls.get_schema(),
+ _schema=StudyIndex.get_schema(),
)
diff --git a/src/otg/datasource/finngen/summary_stats.py b/src/otg/datasource/finngen/summary_stats.py
index e2b4807a9..8fc966c5b 100644
--- a/src/otg/datasource/finngen/summary_stats.py
+++ b/src/otg/datasource/finngen/summary_stats.py
@@ -3,36 +3,63 @@
from __future__ import annotations
from dataclasses import dataclass
-from typing import TYPE_CHECKING
import pyspark.sql.functions as f
import pyspark.sql.types as t
+from pyspark.sql import SparkSession
+from pyspark.sql.types import StringType, StructField, StructType
-from otg.common.utils import calculate_confidence_interval, parse_pvalue
+from otg.common.utils import parse_pvalue
from otg.dataset.summary_statistics import SummaryStatistics
-if TYPE_CHECKING:
- from pyspark.sql import DataFrame
-
@dataclass
-class FinnGenSummaryStats(SummaryStatistics):
+class FinnGenSummaryStats:
"""Summary statistics dataset for FinnGen."""
+ raw_schema: t.StructType = StructType(
+ [
+ StructField("#chrom", StringType(), True),
+ StructField("pos", StringType(), True),
+ StructField("ref", StringType(), True),
+ StructField("alt", StringType(), True),
+ StructField("rsids", StringType(), True),
+ StructField("nearest_genes", StringType(), True),
+ StructField("pval", StringType(), True),
+ StructField("mlogp", StringType(), True),
+ StructField("beta", StringType(), True),
+ StructField("sebeta", StringType(), True),
+ StructField("af_alt", StringType(), True),
+ StructField("af_alt_cases", StringType(), True),
+ StructField("af_alt_controls", StringType(), True),
+ ]
+ )
+
@classmethod
- def from_finngen_harmonized_summary_stats(
+ def from_source(
cls: type[FinnGenSummaryStats],
- summary_stats_df: DataFrame,
- ) -> FinnGenSummaryStats:
- """Ingests all summary statst for all FinnGen studies."""
+ spark: SparkSession,
+ raw_file: str,
+ ) -> SummaryStatistics:
+ """Ingests all summary statst for all FinnGen studies.
+
+ Args:
+ spark (SparkSession): Spark session object.
+ raw_file (str): Path to raw summary statistics .gz files.
+
+ Returns:
+ SummaryStatistics: Processed summary statistics dataset
+ """
+ study_id = raw_file.split("/")[-1].split(".")[0].upper()
processed_summary_stats_df = (
- summary_stats_df
+ spark.read.schema(cls.raw_schema)
+ .option("delimiter", "\t")
+ .csv(raw_file, header=True)
# Drop rows which don't have proper position.
- .filter(f.col("pos").cast(t.IntegerType()).isNotNull()).select(
+ .filter(f.col("pos").cast(t.IntegerType()).isNotNull())
+ .select(
# From the full path, extracts just the filename, and converts to upper case to get the study ID.
- f.upper(f.regexp_extract(f.input_file_name(), r"([^/]+)\.gz", 1)).alias(
- "studyId"
- ),
+ f.lit(study_id).alias("studyId"),
# Add variant information.
f.concat_ws(
"_",
@@ -51,19 +78,16 @@ def from_finngen_harmonized_summary_stats(
f.col("af_alt").cast("float").alias("effectAlleleFrequencyFromSource"),
)
# Calculating the confidence intervals.
- .select(
- "*",
- *calculate_confidence_interval(
- f.col("pValueMantissa"),
- f.col("pValueExponent"),
- f.col("beta"),
- f.col("standardError"),
- ),
+ .filter(
+ f.col("pos").cast(t.IntegerType()).isNotNull() & (f.col("beta") != 0)
)
+ # Average ~20Mb partitions with 30 partitions per study
+ .repartitionByRange(30, "chromosome", "position")
+ .sortWithinPartitions("chromosome", "position")
)
# Initializing summary statistics object:
- return cls(
+ return SummaryStatistics(
_df=processed_summary_stats_df,
- _schema=cls.get_schema(),
+ _schema=SummaryStatistics.get_schema(),
)
diff --git a/src/otg/datasource/gnomad/ld.py b/src/otg/datasource/gnomad/ld.py
index ea131203a..c6b5477cd 100644
--- a/src/otg/datasource/gnomad/ld.py
+++ b/src/otg/datasource/gnomad/ld.py
@@ -2,6 +2,7 @@
from __future__ import annotations
import sys
+from dataclasses import dataclass, field
from functools import reduce
from typing import TYPE_CHECKING
@@ -10,6 +11,7 @@
from hail.linalg import BlockMatrix
from pyspark.sql import Window
+from otg.common.spark_helpers import get_top_ranked_in_window, get_value_from_row
from otg.common.utils import _liftover_loci, convert_gnomad_position_to_ensembl
from otg.dataset.ld_index import LDIndex
@@ -17,18 +19,37 @@
from pyspark.sql import DataFrame
+@dataclass
class GnomADLDMatrix:
- """Importer of LD information from GnomAD.
+ """Toolset ot interact with GnomAD LD dataset (version: r2.1.1).
- The information comes from LD matrices [made available by GnomAD](https://gnomad.broadinstitute.org/downloads/#v2-linkage-disequilibrium) in Hail's native format. We aggregate the LD information across 8 ancestries.
- The basic steps to generate the LDIndex are:
-
- 1. Convert a LD matrix to a Spark DataFrame.
- 2. Resolve the matrix indices to variant IDs by lifting over the coordinates to GRCh38.
- 3. Aggregate the LD information across populations.
+ Datasets are accessed in Hail's native format, as provided by the [GnomAD consortium](https://gnomad.broadinstitute.org/downloads/#v2-linkage-disequilibrium).
+ Attributes:
+ ld_matrix_template (str): Template for the LD matrix path. Defaults to "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.adj.ld.bm".
+ ld_index_raw_template (str): Template for the LD index path. Defaults to "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.ld.variant_indices.ht".
+ grch37_to_grch38_chain_path (str): Path to the chain file used to lift over the coordinates. Defaults to "gs://hail-common/references/grch37_to_grch38.over.chain.gz".
+ ld_populations (list[str]): List of populations to use to build the LDIndex. Defaults to ["afr", "amr", "asj", "eas", "fin", "nfe", "nwe", "seu"].
"""
+ ld_matrix_template: str = "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.adj.ld.bm"
+ ld_index_raw_template: str = "gs://gcp-public-data--gnomad/release/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.ld.variant_indices.ht"
+ grch37_to_grch38_chain_path: str = (
+ "gs://hail-common/references/grch37_to_grch38.over.chain.gz"
+ )
+ ld_populations: list[str] = field(
+ default_factory=lambda: [
+ "afr", # African-American
+ "amr", # American Admixed/Latino
+ "asj", # Ashkenazi Jewish
+ "eas", # East Asian
+ "fin", # Finnish
+ "nfe", # Non-Finnish European
+ "nwe", # Northwestern European
+ "seu", # Southeastern European
+ ]
+ )
+
@staticmethod
def _aggregate_ld_index_across_populations(
unaggregated_ld_index: DataFrame,
@@ -79,7 +100,15 @@ def _aggregate_ld_index_across_populations(
def _convert_ld_matrix_to_table(
block_matrix: BlockMatrix, min_r2: float
) -> DataFrame:
- """Convert LD matrix to table."""
+ """Convert LD matrix to table.
+
+ Args:
+ block_matrix (BlockMatrix): LD matrix
+ min_r2 (float): Minimum r2 value to keep in the table
+
+ Returns:
+ DataFrame: LD matrix as a Spark DataFrame
+ """
table = block_matrix.entries(keyed=False)
return (
table.filter(hl.abs(table.entry) >= min_r2**0.5)
@@ -95,7 +124,18 @@ def _create_ldindex_for_population(
grch37_to_grch38_chain_path: str,
min_r2: float,
) -> DataFrame:
- """Create LDIndex for a specific population."""
+ """Create LDIndex for a specific population.
+
+ Args:
+ population_id (str): Population ID
+ ld_matrix_path (str): Path to the LD matrix
+ ld_index_raw_path (str): Path to the LD index
+ grch37_to_grch38_chain_path (str): Path to the chain file used to lift over the coordinates
+ min_r2 (float): Minimum r2 value to keep in the table
+
+ Returns:
+ DataFrame: LDIndex for a specific population
+ """
# Prepare LD Block matrix
ld_matrix = GnomADLDMatrix._convert_ld_matrix_to_table(
BlockMatrix.read(ld_matrix_path), min_r2
@@ -148,6 +188,7 @@ def _process_variant_indices(
)
.select(
"chromosome",
+ "position",
f.concat_ws(
"_",
f.col("chromosome"),
@@ -167,7 +208,15 @@ def _process_variant_indices(
def _resolve_variant_indices(
ld_index: DataFrame, ld_matrix: DataFrame
) -> DataFrame:
- """Resolve the `i` and `j` indices of the block matrix to variant IDs (build 38)."""
+ """Resolve the `i` and `j` indices of the block matrix to variant IDs (build 38).
+
+ Args:
+ ld_index (DataFrame): Dataframe with resolved variant indices
+ ld_matrix (DataFrame): Dataframe with the filtered LD matrix
+
+ Returns:
+ DataFrame: Dataframe with variant IDs instead of `i` and `j` indices
+ """
ld_index_i = ld_index.selectExpr(
"idx as i", "variantId as variantId_i", "chromosome"
)
@@ -219,31 +268,39 @@ def _transpose_ld_matrix(ld_matrix: DataFrame) -> DataFrame:
f.col("variantId_i") != f.col("variantId_j")
).unionByName(ld_matrix_transposed)
- @classmethod
def as_ld_index(
- cls: type[GnomADLDMatrix],
- ld_populations: list[str],
- ld_matrix_template: str,
- ld_index_raw_template: str,
- grch37_to_grch38_chain_path: str,
+ self: GnomADLDMatrix,
min_r2: float,
) -> LDIndex:
- """Create LDIndex dataset aggregating the LD information across a set of populations."""
+ """Create LDIndex dataset aggregating the LD information across a set of populations.
+
+ **The basic steps to generate the LDIndex are:**
+
+ 1. Convert LD matrix to a Spark DataFrame.
+ 2. Resolve the matrix indices to variant IDs by lifting over the coordinates to GRCh38.
+ 3. Aggregate the LD information across populations.
+
+ Args:
+ min_r2 (float): Minimum r2 value to keep in the table
+
+ Returns:
+ LDIndex: LDIndex dataset
+ """
ld_indices_unaggregated = []
- for pop in ld_populations:
+ for pop in self.ld_populations:
try:
- ld_matrix_path = ld_matrix_template.format(POP=pop)
- ld_index_raw_path = ld_index_raw_template.format(POP=pop)
- pop_ld_index = cls._create_ldindex_for_population(
+ ld_matrix_path = self.ld_matrix_template.format(POP=pop)
+ ld_index_raw_path = self.ld_index_raw_template.format(POP=pop)
+ pop_ld_index = self._create_ldindex_for_population(
pop,
ld_matrix_path,
ld_index_raw_path.format(pop),
- grch37_to_grch38_chain_path,
+ self.grch37_to_grch38_chain_path,
min_r2,
)
ld_indices_unaggregated.append(pop_ld_index)
except Exception as e:
- print(f"Failed to create LDIndex for population {pop}: {e}")
+ print(f"Failed to create LDIndex for population {pop}: {e}") # noqa: T201
sys.exit(1)
ld_index_unaggregated = (
@@ -254,6 +311,140 @@ def as_ld_index(
.withColumnRenamed("variantId_j", "tagVariantId")
)
return LDIndex(
- _df=cls._aggregate_ld_index_across_populations(ld_index_unaggregated),
+ _df=self._aggregate_ld_index_across_populations(ld_index_unaggregated),
_schema=LDIndex.get_schema(),
)
+
+ def get_ld_variants(
+ self: GnomADLDMatrix,
+ gnomad_ancestry: str,
+ chromosome: str,
+ start: int,
+ end: int,
+ ) -> DataFrame | None:
+ """Return melted LD table with resolved variant id based on ancestry and genomic location.
+
+ Args:
+ gnomad_ancestry (str): GnomAD major ancestry label eg. `nfe`
+ chromosome (str): chromosome label
+ start (int): window upper bound
+ end (int): window lower bound
+
+ Returns:
+ DataFrame | None: LD table with resolved variant id based on ancestry and genomic location
+ """
+ # Extracting locus:
+ ld_index_df = (
+ self._process_variant_indices(
+ hl.read_table(self.ld_index_raw_template.format(POP=gnomad_ancestry)),
+ self.grch37_to_grch38_chain_path,
+ )
+ .filter(
+ (f.col("chromosome") == chromosome)
+ & (f.col("position") >= start)
+ & (f.col("position") <= end)
+ )
+ .select("chromosome", "position", "variantId", "idx")
+ .persist()
+ )
+
+ if ld_index_df.limit(1).count() == 0:
+ # If the returned slice from the ld index is empty, return None
+ return None
+
+ # Compute start and end indices
+ start_index = get_value_from_row(
+ get_top_ranked_in_window(
+ ld_index_df, Window.partitionBy().orderBy(f.col("position").asc())
+ ).collect()[0],
+ "idx",
+ )
+ end_index = get_value_from_row(
+ get_top_ranked_in_window(
+ ld_index_df, Window.partitionBy().orderBy(f.col("position").desc())
+ ).collect()[0],
+ "idx",
+ )
+
+ return self._extract_square_matrix(
+ ld_index_df, gnomad_ancestry, start_index, end_index
+ )
+
+ def _extract_square_matrix(
+ self: GnomADLDMatrix,
+ ld_index_df: DataFrame,
+ gnomad_ancestry: str,
+ start_index: int,
+ end_index: int,
+ ) -> DataFrame:
+ """Return LD square matrix for a region where coordinates are normalised.
+
+ Args:
+ ld_index_df (DataFrame): Look up table between a variantId and its index in the LD matrix
+ gnomad_ancestry (str): GnomAD major ancestry label eg. `nfe`
+ start_index (int): start index of the slice
+ end_index (int): end index of the slice
+
+ Returns:
+ DataFrame: square LD matrix resolved to variants.
+ """
+ return (
+ self.get_ld_matrix_slice(
+ gnomad_ancestry, start_index=start_index, end_index=end_index
+ )
+ .join(
+ ld_index_df.select(
+ f.col("idx").alias("idx_i"),
+ f.col("variantId").alias("variantId_i"),
+ ),
+ on="idx_i",
+ how="inner",
+ )
+ .join(
+ ld_index_df.select(
+ f.col("idx").alias("idx_j"),
+ f.col("variantId").alias("variantId_j"),
+ ),
+ on="idx_j",
+ how="inner",
+ )
+ .select("variantId_i", "variantId_j", "r")
+ )
+
+ def get_ld_matrix_slice(
+ self: GnomADLDMatrix,
+ gnomad_ancestry: str,
+ start_index: int,
+ end_index: int,
+ ) -> DataFrame:
+ """Extract a slice of the LD matrix based on the provided ancestry and stop and end indices.
+
+ - The half matrix is completed into a full square.
+ - The returned indices are adjusted based on the start index.
+
+ Args:
+ gnomad_ancestry (str): LD population label eg. `nfe`
+ start_index (int): start index of the slice
+ end_index (int): end index of the slice
+
+ Returns:
+ DataFrame: square slice of the LD matrix melted as dataframe with idx_i, idx_j and r columns
+ """
+ # Extracting block matrix slice:
+ half_matrix = BlockMatrix.read(
+ self.ld_matrix_template.format(POP=gnomad_ancestry)
+ ).filter(range(start_index, end_index + 1), range(start_index, end_index + 1))
+
+ # Return converted Dataframe:
+ return (
+ (half_matrix + half_matrix.T)
+ .entries()
+ .to_spark()
+ .select(
+ (f.col("i") + start_index).alias("idx_i"),
+ (f.col("j") + start_index).alias("idx_j"),
+ f.when(f.col("i") == f.col("j"), f.col("entry") / 2)
+ .otherwise(f.col("entry"))
+ .alias("r"),
+ )
+ )
diff --git a/src/otg/datasource/gnomad/variants.py b/src/otg/datasource/gnomad/variants.py
index d9353a9e2..3c7716490 100644
--- a/src/otg/datasource/gnomad/variants.py
+++ b/src/otg/datasource/gnomad/variants.py
@@ -1,6 +1,7 @@
"""Import gnomAD variants dataset."""
from __future__ import annotations
+from dataclasses import dataclass, field
from typing import TYPE_CHECKING
import hail as hl
@@ -11,8 +12,32 @@
from hail.expr.expressions import Int32Expression, StringExpression
+@dataclass
class GnomADVariants:
- """GnomAD variants included in the GnomAD genomes dataset."""
+ """GnomAD variants included in the GnomAD genomes dataset.
+
+ Attributes:
+ gnomad_genomes (str): Path to gnomAD genomes hail table. Defaults to gnomAD's 4.0 release.
+ chain_hail_38_37 (str): Path to GRCh38 to GRCh37 chain file. Defaults to Hail's chain file.
+ populations (list[str]): List of populations to include. Defaults to all populations.
+ """
+
+ gnomad_genomes: str = "gs://gcp-public-data--gnomad/release/4.0/ht/genomes/gnomad.genomes.v4.0.sites.ht/"
+ chain_hail_38_37: str = "gs://hail-common/references/grch38_to_grch37.over.chain.gz"
+ populations: list[str] = field(
+ default_factory=lambda: [
+ "afr", # African-American
+ "amr", # American Admixed/Latino
+ "ami", # Amish ancestry
+ "asj", # Ashkenazi Jewish
+ "eas", # East Asian
+ "fin", # Finnish
+ "nfe", # Non-Finnish European
+ "mid", # Middle Eastern
+ "sas", # South Asian
+ "remaining", # Other
+ ]
+ )
@staticmethod
def _convert_gnomad_position_to_ensembl_hail(
@@ -31,19 +56,13 @@ def _convert_gnomad_position_to_ensembl_hail(
alternate (StringExpression): The alternate allele
Returns:
- The position of the variant according to Ensembl genome.
+ Int32Expression: The position of the variant according to Ensembl genome.
"""
return hl.if_else(
(reference.length() > 1) | (alternate.length() > 1), position + 1, position
)
- @classmethod
- def as_variant_annotation(
- cls: type[GnomADVariants],
- gnomad_file: str,
- grch38_to_grch37_chain: str,
- populations: list,
- ) -> VariantAnnotation:
+ def as_variant_annotation(self: GnomADVariants) -> VariantAnnotation:
"""Generate variant annotation dataset from gnomAD.
Some relevant modifications to the original dataset are:
@@ -52,24 +71,19 @@ def as_variant_annotation(
2. Genome coordinates are liftovered from GRCh38 to GRCh37 to keep as annotation.
3. Field names are converted to camel case to follow the convention.
- Args:
- gnomad_file (str): Path to `gnomad.genomes.vX.X.X.sites.ht` gnomAD dataset
- grch38_to_grch37_chain (str): Path to chain file for liftover
- populations (list): List of populations to include in the dataset
-
Returns:
VariantAnnotation: Variant annotation dataset
"""
# Load variants dataset
ht = hl.read_table(
- gnomad_file,
+ self.gnomad_genomes,
_load_refs=False,
)
# Liftover
grch37 = hl.get_reference("GRCh37")
grch38 = hl.get_reference("GRCh38")
- grch38.add_liftover(grch38_to_grch37_chain, grch37)
+ grch38.add_liftover(self.chain_hail_38_37, grch37)
# Drop non biallelic variants
ht = ht.filter(ht.alleles.length() == 2)
@@ -79,7 +93,7 @@ def as_variant_annotation(
return VariantAnnotation(
_df=(
ht.select(
- gnomad3VariantId=hl.str("-").join(
+ gnomadVariantId=hl.str("-").join(
[
ht.locus.contig.replace("chr", ""),
hl.str(ht.locus.position),
@@ -109,11 +123,9 @@ def as_variant_annotation(
alternateAllele=ht.alleles[1],
rsIds=ht.rsid,
alleleType=ht.allele_info.allele_type,
- cadd=hl.struct(
- phred=ht.cadd.phred,
- raw=ht.cadd.raw_score,
- ),
- alleleFrequencies=hl.set([f"{pop}-adj" for pop in populations]).map(
+ alleleFrequencies=hl.set(
+ [f"{pop}_adj" for pop in self.populations]
+ ).map(
lambda p: hl.struct(
populationName=p,
alleleFrequency=ht.freq[ht.globals.freq_index_dict[p]].AF,
@@ -127,10 +139,6 @@ def as_variant_annotation(
consequenceTerms=x.consequence_terms,
geneId=x.gene_id,
lof=x.lof,
- polyphenScore=x.polyphen_score,
- polyphenPrediction=x.polyphen_prediction,
- siftScore=x.sift_score,
- siftPrediction=x.sift_prediction,
),
# Only keeping canonical transcripts
ht.vep.transcript_consequences.filter(
@@ -139,6 +147,18 @@ def as_variant_annotation(
),
),
),
+ inSilicoPredictors=hl.struct(
+ cadd=hl.struct(
+ phred=ht.in_silico_predictors.cadd.phred,
+ raw=ht.in_silico_predictors.cadd.raw_score,
+ ),
+ revelMax=ht.in_silico_predictors.revel_max,
+ spliceaiDsMax=ht.in_silico_predictors.spliceai_ds_max,
+ pangolinLargestDs=ht.in_silico_predictors.pangolin_largest_ds,
+ phylop=ht.in_silico_predictors.phylop,
+ siftMax=ht.in_silico_predictors.sift_max,
+ polyphenMax=ht.in_silico_predictors.polyphen_max,
+ ),
)
.key_by("chromosome", "position")
.drop("locus", "alleles")
diff --git a/src/otg/datasource/gwas_catalog/associations.py b/src/otg/datasource/gwas_catalog/associations.py
index 4dc148a6a..9c3e6293f 100644
--- a/src/otg/datasource/gwas_catalog/associations.py
+++ b/src/otg/datasource/gwas_catalog/associations.py
@@ -28,8 +28,8 @@
@dataclass
-class GWASCatalogAssociations(StudyLocus):
- """Study-locus dataset derived from GWAS Catalog."""
+class GWASCatalogCuratedAssociationsParser:
+ """GWAS Catalog curated associations parser."""
@staticmethod
def _parse_pvalue(pvalue: Column) -> tuple[Column, Column]:
@@ -45,7 +45,7 @@ def _parse_pvalue(pvalue: Column) -> tuple[Column, Column]:
>>> import pyspark.sql.types as t
>>> d = [("1.0"), ("0.5"), ("1E-20"), ("3E-3"), ("1E-1000")]
>>> df = spark.createDataFrame(d, t.StringType())
- >>> df.select('value',*GWASCatalogAssociations._parse_pvalue(f.col('value'))).show()
+ >>> df.select('value',*GWASCatalogCuratedAssociationsParser._parse_pvalue(f.col('value'))).show()
+-------+--------------+--------------+
| value|pValueMantissa|pValueExponent|
+-------+--------------+--------------+
@@ -79,7 +79,7 @@ def _normalise_pvaluetext(p_value_text: Column) -> Column:
>>> import pyspark.sql.types as t
>>> d = [("European Ancestry"), ("African ancestry"), ("Alzheimer’s Disease"), ("(progression)"), (""), (None)]
>>> df = spark.createDataFrame(d, t.StringType())
- >>> df.withColumn('normalised', GWASCatalogAssociations._normalise_pvaluetext(f.col('value'))).show()
+ >>> df.withColumn('normalised', GWASCatalogCuratedAssociationsParser._normalise_pvaluetext(f.col('value'))).show()
+-------------------+----------+
| value|normalised|
+-------------------+----------+
@@ -121,7 +121,7 @@ def _normalise_risk_allele(risk_allele: Column) -> Column:
>>> import pyspark.sql.types as t
>>> d = [("rs1234-A-G"), ("rs1234-A"), ("rs1234-A; rs1235-G")]
>>> df = spark.createDataFrame(d, t.StringType())
- >>> df.withColumn('normalised', GWASCatalogAssociations._normalise_risk_allele(f.col('value'))).show()
+ >>> df.withColumn('normalised', GWASCatalogCuratedAssociationsParser._normalise_risk_allele(f.col('value'))).show()
+------------------+----------+
| value|normalised|
+------------------+----------+
@@ -147,7 +147,7 @@ def _collect_rsids(
risk_allele (Column): The risk allele for the SNP.
Returns:
- An array of distinct values.
+ Column: An array of distinct values.
"""
# The current snp id field is just a number at the moment (stored as a string). Adding 'rs' prefix if looks good.
snp_id_current = f.when(
@@ -180,12 +180,12 @@ def _map_to_variant_annotation_variants(
f.col("CHR_ID").alias("chromosome"),
f.col("CHR_POS").cast(IntegerType()).alias("position"),
# List of all SNPs associated with the variant
- GWASCatalogAssociations._collect_rsids(
+ GWASCatalogCuratedAssociationsParser._collect_rsids(
f.split(f.col("SNPS"), "; ").getItem(0),
f.col("SNP_ID_CURRENT"),
f.split(f.col("STRONGEST SNP-RISK ALLELE"), "; ").getItem(0),
).alias("rsIdsGwasCatalog"),
- GWASCatalogAssociations._normalise_risk_allele(
+ GWASCatalogCuratedAssociationsParser._normalise_risk_allele(
f.col("STRONGEST SNP-RISK ALLELE")
).alias("riskAllele"),
)
@@ -218,18 +218,18 @@ def _map_to_variant_annotation_variants(
)
.withColumn(
"rsIdFilter",
- GWASCatalogAssociations._flag_mappings_to_retain(
+ GWASCatalogCuratedAssociationsParser._flag_mappings_to_retain(
f.col("studyLocusId"),
- GWASCatalogAssociations._compare_rsids(
+ GWASCatalogCuratedAssociationsParser._compare_rsids(
f.col("rsIdsGnomad"), f.col("rsIdsGwasCatalog")
),
),
)
.withColumn(
"concordanceFilter",
- GWASCatalogAssociations._flag_mappings_to_retain(
+ GWASCatalogCuratedAssociationsParser._flag_mappings_to_retain(
f.col("studyLocusId"),
- GWASCatalogAssociations._check_concordance(
+ GWASCatalogCuratedAssociationsParser._check_concordance(
f.col("riskAllele"),
f.col("referenceAllele"),
f.col("alternateAllele"),
@@ -271,7 +271,7 @@ def _compare_rsids(gnomad: Column, gwas: Column) -> Column:
gwas (Column): rsids from the GWAS Catalog
Returns:
- A boolean column that is true if the GnomAD rsIDs can be found in the GWAS rsIDs.
+ Column: A boolean column that is true if the GnomAD rsIDs can be found in the GWAS rsIDs.
Examples:
>>> d = [
@@ -281,7 +281,7 @@ def _compare_rsids(gnomad: Column, gwas: Column) -> Column:
... (4, [], []),
... ]
>>> df = spark.createDataFrame(d, ['associationId', 'gnomad', 'gwas'])
- >>> df.withColumn("rsid_matches", GWASCatalogAssociations._compare_rsids(f.col("gnomad"),f.col('gwas'))).show()
+ >>> df.withColumn("rsid_matches", GWASCatalogCuratedAssociationsParser._compare_rsids(f.col("gnomad"),f.col('gwas'))).show()
+-------------+--------------+-------+------------+
|associationId| gnomad| gwas|rsid_matches|
+-------------+--------------+-------+------------+
@@ -312,7 +312,7 @@ def _flag_mappings_to_retain(
filter_column (Column): boolean col indicating to keep a mapping
Returns:
- A column with a boolean value.
+ Column: A column with a boolean value.
Examples:
>>> d = [
@@ -324,7 +324,7 @@ def _flag_mappings_to_retain(
... (3, True),
... ]
>>> df = spark.createDataFrame(d, ['associationId', 'filter'])
- >>> df.withColumn("isConcordant", GWASCatalogAssociations._flag_mappings_to_retain(f.col("associationId"),f.col('filter'))).show()
+ >>> df.withColumn("isConcordant", GWASCatalogCuratedAssociationsParser._flag_mappings_to_retain(f.col("associationId"),f.col('filter'))).show()
+-------------+------+------------+
|associationId|filter|isConcordant|
+-------------+------+------------+
@@ -364,7 +364,7 @@ def _check_concordance(
alternate_allele (Column): The alternate allele of the variant.
Returns:
- A boolean column that is True if the risk allele is the same as the reference or alternate allele,
+ Column: A boolean column that is True if the risk allele is the same as the reference or alternate allele,
or if the reverse complement of the risk allele is the same as the reference or alternate allele.
Examples:
@@ -376,7 +376,7 @@ def _check_concordance(
... (None, None, 'A'),
... ]
>>> df = spark.createDataFrame(d, ['riskAllele', 'referenceAllele', 'alternateAllele'])
- >>> df.withColumn("isConcordant", GWASCatalogAssociations._check_concordance(f.col("riskAllele"),f.col('referenceAllele'), f.col('alternateAllele'))).show()
+ >>> df.withColumn("isConcordant", GWASCatalogCuratedAssociationsParser._check_concordance(f.col("riskAllele"),f.col('referenceAllele'), f.col('alternateAllele'))).show()
+----------+---------------+---------------+------------+
|riskAllele|referenceAllele|alternateAllele|isConcordant|
+----------+---------------+---------------+------------+
@@ -426,12 +426,12 @@ def _get_reverse_complement(allele_col: Column) -> Column:
allele_col (Column): The column containing the allele to reverse complement.
Returns:
- A column that is the reverse complement of the allele column.
+ Column: A column that is the reverse complement of the allele column.
Examples:
>>> d = [{"allele": 'A'}, {"allele": 'T'},{"allele": 'G'}, {"allele": 'C'},{"allele": 'AC'}, {"allele": 'GTaatc'},{"allele": '?'}, {"allele": None}]
>>> df = spark.createDataFrame(d)
- >>> df.withColumn("revcom_allele", GWASCatalogAssociations._get_reverse_complement(f.col("allele"))).show()
+ >>> df.withColumn("revcom_allele", GWASCatalogCuratedAssociationsParser._get_reverse_complement(f.col("allele"))).show()
+------+-------------+
|allele|revcom_allele|
+------+-------------+
@@ -464,12 +464,12 @@ def _effect_needs_harmonisation(
reference_allele (Column): Effect allele column
Returns:
- A boolean column indicating if the effect allele needs to be harmonised.
+ Column: A boolean column indicating if the effect allele needs to be harmonised.
Examples:
>>> d = [{"risk": 'A', "reference": 'A'}, {"risk": 'A', "reference": 'T'}, {"risk": 'AT', "reference": 'TA'}, {"risk": 'AT', "reference": 'AT'}]
>>> df = spark.createDataFrame(d)
- >>> df.withColumn("needs_harmonisation", GWASCatalogAssociations._effect_needs_harmonisation(f.col("risk"), f.col("reference"))).show()
+ >>> df.withColumn("needs_harmonisation", GWASCatalogCuratedAssociationsParser._effect_needs_harmonisation(f.col("risk"), f.col("reference"))).show()
+---------+----+-------------------+
|reference|risk|needs_harmonisation|
+---------+----+-------------------+
@@ -483,7 +483,9 @@ def _effect_needs_harmonisation(
"""
return (risk_allele == reference_allele) | (
risk_allele
- == GWASCatalogAssociations._get_reverse_complement(reference_allele)
+ == GWASCatalogCuratedAssociationsParser._get_reverse_complement(
+ reference_allele
+ )
)
@staticmethod
@@ -497,12 +499,12 @@ def _are_alleles_palindromic(
alternate_allele (Column): Alternate allele column
Returns:
- A boolean column indicating if the alleles are palindromic.
+ Column: A boolean column indicating if the alleles are palindromic.
Examples:
>>> d = [{"reference": 'A', "alternate": 'T'}, {"reference": 'AT', "alternate": 'AG'}, {"reference": 'AT', "alternate": 'AT'}, {"reference": 'CATATG', "alternate": 'CATATG'}, {"reference": '-', "alternate": None}]
>>> df = spark.createDataFrame(d)
- >>> df.withColumn("is_palindromic", GWASCatalogAssociations._are_alleles_palindromic(f.col("reference"), f.col("alternate"))).show()
+ >>> df.withColumn("is_palindromic", GWASCatalogCuratedAssociationsParser._are_alleles_palindromic(f.col("reference"), f.col("alternate"))).show()
+---------+---------+--------------+
|alternate|reference|is_palindromic|
+---------+---------+--------------+
@@ -515,7 +517,9 @@ def _are_alleles_palindromic(
"""
- revcomp = GWASCatalogAssociations._get_reverse_complement(alternate_allele)
+ revcomp = GWASCatalogCuratedAssociationsParser._get_reverse_complement(
+ alternate_allele
+ )
return (
f.when(reference_allele == revcomp, True)
.when(revcomp.isNull(), False)
@@ -543,24 +547,24 @@ def _harmonise_beta(
confidence_interval (Column): GWAS Catalog confidence interval column
Returns:
- A column containing the beta value.
+ Column: A column containing the beta value.
"""
return (
f.when(
- GWASCatalogAssociations._are_alleles_palindromic(
+ GWASCatalogCuratedAssociationsParser._are_alleles_palindromic(
reference_allele, alternate_allele
),
None,
)
.when(
(
- GWASCatalogAssociations._effect_needs_harmonisation(
+ GWASCatalogCuratedAssociationsParser._effect_needs_harmonisation(
risk_allele, reference_allele
)
& confidence_interval.contains("increase")
)
| (
- ~GWASCatalogAssociations._effect_needs_harmonisation(
+ ~GWASCatalogCuratedAssociationsParser._effect_needs_harmonisation(
risk_allele, reference_allele
)
& confidence_interval.contains("decrease")
@@ -593,10 +597,10 @@ def _harmonise_beta_ci(
direction (str): This is the direction of the confidence interval. It can be either "upper" or "lower".
Returns:
- The upper and lower bounds of the confidence interval for the beta coefficient.
+ Column: The upper and lower bounds of the confidence interval for the beta coefficient.
"""
zscore_95 = f.lit(1.96)
- beta = GWASCatalogAssociations._harmonise_beta(
+ beta = GWASCatalogCuratedAssociationsParser._harmonise_beta(
risk_allele,
reference_allele,
alternate_allele,
@@ -628,18 +632,18 @@ def _harmonise_odds_ratio(
confidence_interval (Column): GWAS Catalog confidence interval column
Returns:
- A column with the odds ratio, or 1/odds_ratio if harmonization required.
+ Column: A column with the odds ratio, or 1/odds_ratio if harmonization required.
"""
return (
f.when(
- GWASCatalogAssociations._are_alleles_palindromic(
+ GWASCatalogCuratedAssociationsParser._are_alleles_palindromic(
reference_allele, alternate_allele
),
None,
)
.when(
(
- GWASCatalogAssociations._effect_needs_harmonisation(
+ GWASCatalogCuratedAssociationsParser._effect_needs_harmonisation(
risk_allele, reference_allele
)
& ~confidence_interval.rlike("|".join(["decrease", "increase"]))
@@ -672,10 +676,10 @@ def _harmonise_odds_ratio_ci(
direction (str): This is the direction of the confidence interval. It can be either "upper" or "lower".
Returns:
- The upper and lower bounds of the 95% confidence interval for the odds ratio.
+ Column: The upper and lower bounds of the 95% confidence interval for the odds ratio.
"""
zscore_95 = f.lit(1.96)
- odds_ratio = GWASCatalogAssociations._harmonise_odds_ratio(
+ odds_ratio = GWASCatalogCuratedAssociationsParser._harmonise_odds_ratio(
risk_allele,
reference_allele,
alternate_allele,
@@ -705,7 +709,7 @@ def _concatenate_substudy_description(
mapped_trait_uri (Column): GWAS Catalog mapped trait URI column
Returns:
- A column with the substudy description in the shape trait|pvaluetext1_pvaluetext2|EFO1_EFO2.
+ Column: A column with the substudy description in the shape trait|pvaluetext1_pvaluetext2|EFO1_EFO2.
Examples:
>>> df = spark.createDataFrame([
@@ -713,7 +717,7 @@ def _concatenate_substudy_description(
... ("Schizophrenia", "http://www.ebi.ac.uk/efo/MONDO_0005090", None)],
... ["association_trait", "mapped_trait_uri", "pvalue_text"]
... )
- >>> df.withColumn('substudy_description', GWASCatalogAssociations._concatenate_substudy_description(df.association_trait, df.pvalue_text, df.mapped_trait_uri)).show(truncate=False)
+ >>> df.withColumn('substudy_description', GWASCatalogCuratedAssociationsParser._concatenate_substudy_description(df.association_trait, df.pvalue_text, df.mapped_trait_uri)).show(truncate=False)
+-----------------+-------------------------------------------------------------------------+-----------------+------------------------------------------+
|association_trait|mapped_trait_uri |pvalue_text |substudy_description |
+-----------------+-------------------------------------------------------------------------+-----------------+------------------------------------------+
@@ -723,7 +727,7 @@ def _concatenate_substudy_description(
"""
p_value_text = f.coalesce(
- GWASCatalogAssociations._normalise_pvaluetext(pvalue_text),
+ GWASCatalogCuratedAssociationsParser._normalise_pvaluetext(pvalue_text),
f.array(f.lit("no_pvalue_text")),
)
return f.concat_ws(
@@ -767,18 +771,22 @@ def _qc_all(
Returns:
Column: Updated QC column with flag.
"""
- qc = GWASCatalogAssociations._qc_variant_interactions(
+ qc = GWASCatalogCuratedAssociationsParser._qc_variant_interactions(
qc, strongest_snp_risk_allele
)
- qc = GWASCatalogAssociations._qc_subsignificant_associations(
+ qc = GWASCatalogCuratedAssociationsParser._qc_subsignificant_associations(
qc, p_value_mantissa, p_value_exponent, p_value_cutoff
)
- qc = GWASCatalogAssociations._qc_genomic_location(qc, chromosome, position)
- qc = GWASCatalogAssociations._qc_variant_inconsistencies(
+ qc = GWASCatalogCuratedAssociationsParser._qc_genomic_location(
+ qc, chromosome, position
+ )
+ qc = GWASCatalogCuratedAssociationsParser._qc_variant_inconsistencies(
qc, chromosome, position, strongest_snp_risk_allele
)
- qc = GWASCatalogAssociations._qc_unmapped_variants(qc, alternate_allele)
- qc = GWASCatalogAssociations._qc_palindromic_alleles(
+ qc = GWASCatalogCuratedAssociationsParser._qc_unmapped_variants(
+ qc, alternate_allele
+ )
+ qc = GWASCatalogCuratedAssociationsParser._qc_palindromic_alleles(
qc, reference_allele, alternate_allele
)
return qc
@@ -796,7 +804,7 @@ def _qc_variant_interactions(
Returns:
Column: Updated QC column with flag.
"""
- return GWASCatalogAssociations._update_quality_flag(
+ return StudyLocus.update_quality_flag(
qc,
strongest_snp_risk_allele.contains(";"),
StudyLocusQualityCheck.COMPOSITE_FLAG,
@@ -824,7 +832,7 @@ def _qc_subsignificant_associations(
>>> import pyspark.sql.types as t
>>> d = [{'qc': None, 'p_value_mantissa': 1, 'p_value_exponent': -7}, {'qc': None, 'p_value_mantissa': 1, 'p_value_exponent': -8}, {'qc': None, 'p_value_mantissa': 5, 'p_value_exponent': -8}, {'qc': None, 'p_value_mantissa': 1, 'p_value_exponent': -9}]
>>> df = spark.createDataFrame(d, t.StructType([t.StructField('qc', t.ArrayType(t.StringType()), True), t.StructField('p_value_mantissa', t.IntegerType()), t.StructField('p_value_exponent', t.IntegerType())]))
- >>> df.withColumn('qc', GWASCatalogAssociations._qc_subsignificant_associations(f.col("qc"), f.col("p_value_mantissa"), f.col("p_value_exponent"), 5e-8)).show(truncate = False)
+ >>> df.withColumn('qc', GWASCatalogCuratedAssociationsParser._qc_subsignificant_associations(f.col("qc"), f.col("p_value_mantissa"), f.col("p_value_exponent"), 5e-8)).show(truncate = False)
+------------------------+----------------+----------------+
|qc |p_value_mantissa|p_value_exponent|
+------------------------+----------------+----------------+
@@ -836,7 +844,7 @@ def _qc_subsignificant_associations(
"""
- return StudyLocus._update_quality_flag(
+ return StudyLocus.update_quality_flag(
qc,
calculate_neglog_pvalue(p_value_mantissa, p_value_exponent)
< f.lit(-np.log10(pvalue_cutoff)),
@@ -861,7 +869,7 @@ def _qc_genomic_location(
>>> import pyspark.sql.types as t
>>> d = [{'qc': None, 'chromosome': None, 'position': None}, {'qc': None, 'chromosome': '1', 'position': None}, {'qc': None, 'chromosome': None, 'position': 1}, {'qc': None, 'chromosome': '1', 'position': 1}]
>>> df = spark.createDataFrame(d, schema=t.StructType([t.StructField('qc', t.ArrayType(t.StringType()), True), t.StructField('chromosome', t.StringType()), t.StructField('position', t.IntegerType())]))
- >>> df.withColumn('qc', GWASCatalogAssociations._qc_genomic_location(df.qc, df.chromosome, df.position)).show(truncate=False)
+ >>> df.withColumn('qc', GWASCatalogCuratedAssociationsParser._qc_genomic_location(df.qc, df.chromosome, df.position)).show(truncate=False)
+----------------------------+----------+--------+
|qc |chromosome|position|
+----------------------------+----------+--------+
@@ -873,7 +881,7 @@ def _qc_genomic_location(
"""
- return StudyLocus._update_quality_flag(
+ return StudyLocus.update_quality_flag(
qc,
position.isNull() | chromosome.isNull(),
StudyLocusQualityCheck.NO_GENOMIC_LOCATION_FLAG,
@@ -897,7 +905,7 @@ def _qc_variant_inconsistencies(
Returns:
Column: Updated QC column with flag.
"""
- return GWASCatalogAssociations._update_quality_flag(
+ return StudyLocus.update_quality_flag(
qc,
# Number of chromosomes does not correspond to the number of positions:
(f.size(f.split(chromosome, ";")) != f.size(f.split(position, ";")))
@@ -925,7 +933,7 @@ def _qc_unmapped_variants(qc: Column, alternate_allele: Column) -> Column:
>>> d = [{'alternate_allele': 'A', 'qc': None}, {'alternate_allele': None, 'qc': None}]
>>> schema = t.StructType([t.StructField('alternate_allele', t.StringType(), True), t.StructField('qc', t.ArrayType(t.StringType()), True)])
>>> df = spark.createDataFrame(data=d, schema=schema)
- >>> df.withColumn("new_qc", GWASCatalogAssociations._qc_unmapped_variants(f.col("qc"), f.col("alternate_allele"))).show()
+ >>> df.withColumn("new_qc", GWASCatalogCuratedAssociationsParser._qc_unmapped_variants(f.col("qc"), f.col("alternate_allele"))).show()
+----------------+----+--------------------+
|alternate_allele| qc| new_qc|
+----------------+----+--------------------+
@@ -935,7 +943,7 @@ def _qc_unmapped_variants(qc: Column, alternate_allele: Column) -> Column:
"""
- return GWASCatalogAssociations._update_quality_flag(
+ return StudyLocus.update_quality_flag(
qc,
alternate_allele.isNull(),
StudyLocusQualityCheck.NON_MAPPED_VARIANT_FLAG,
@@ -960,7 +968,7 @@ def _qc_palindromic_alleles(
>>> schema = t.StructType([t.StructField('reference_allele', t.StringType(), True), t.StructField('alternate_allele', t.StringType(), True), t.StructField('qc', t.ArrayType(t.StringType()), True)])
>>> d = [{'reference_allele': 'A', 'alternate_allele': 'T', 'qc': None}, {'reference_allele': 'AT', 'alternate_allele': 'TA', 'qc': None}, {'reference_allele': 'AT', 'alternate_allele': 'AT', 'qc': None}]
>>> df = spark.createDataFrame(data=d, schema=schema)
- >>> df.withColumn("qc", GWASCatalogAssociations._qc_palindromic_alleles(f.col("qc"), f.col("reference_allele"), f.col("alternate_allele"))).show(truncate=False)
+ >>> df.withColumn("qc", GWASCatalogCuratedAssociationsParser._qc_palindromic_alleles(f.col("qc"), f.col("reference_allele"), f.col("alternate_allele"))).show(truncate=False)
+----------------+----------------+---------------------------------------+
|reference_allele|alternate_allele|qc |
+----------------+----------------+---------------------------------------+
@@ -971,9 +979,9 @@ def _qc_palindromic_alleles(
"""
- return StudyLocus._update_quality_flag(
+ return StudyLocus.update_quality_flag(
qc,
- GWASCatalogAssociations._are_alleles_palindromic(
+ GWASCatalogCuratedAssociationsParser._are_alleles_palindromic(
reference_allele, alternate_allele
),
StudyLocusQualityCheck.PALINDROMIC_ALLELE_FLAG,
@@ -981,11 +989,11 @@ def _qc_palindromic_alleles(
@classmethod
def from_source(
- cls: type[GWASCatalogAssociations],
+ cls: type[GWASCatalogCuratedAssociationsParser],
gwas_associations: DataFrame,
variant_annotation: VariantAnnotation,
pvalue_threshold: float = 5e-8,
- ) -> GWASCatalogAssociations:
+ ) -> StudyLocusGWASCatalog:
"""Read GWASCatalog associations.
It reads the GWAS Catalog association dataset, selects and renames columns, casts columns, and
@@ -997,30 +1005,32 @@ def from_source(
pvalue_threshold (float): P-value threshold for flagging associations
Returns:
- StudyLocusGWASCatalog: StudyLocusGWASCatalog dataset
+ StudyLocusGWASCatalog: GWASCatalogAssociations dataset
"""
- return GWASCatalogAssociations(
+ return StudyLocusGWASCatalog(
_df=gwas_associations.withColumn(
"studyLocusId", f.monotonically_increasing_id().cast(LongType())
)
.transform(
# Map/harmonise variants to variant annotation dataset:
# This function adds columns: variantId, referenceAllele, alternateAllele, chromosome, position
- lambda df: GWASCatalogAssociations._map_to_variant_annotation_variants(
+ lambda df: GWASCatalogCuratedAssociationsParser._map_to_variant_annotation_variants(
df, variant_annotation
)
)
.withColumn(
# Perform all quality control checks:
"qualityControls",
- GWASCatalogAssociations._qc_all(
+ GWASCatalogCuratedAssociationsParser._qc_all(
f.array().alias("qualityControls"),
f.col("CHR_ID"),
f.col("CHR_POS").cast(IntegerType()),
f.col("referenceAllele"),
f.col("alternateAllele"),
f.col("STRONGEST SNP-RISK ALLELE"),
- *GWASCatalogAssociations._parse_pvalue(f.col("P-VALUE")),
+ *GWASCatalogCuratedAssociationsParser._parse_pvalue(
+ f.col("P-VALUE")
+ ),
pvalue_threshold,
),
)
@@ -1033,8 +1043,8 @@ def from_source(
"position",
f.col("STUDY ACCESSION").alias("studyId"),
# beta value of the association
- GWASCatalogAssociations._harmonise_beta(
- GWASCatalogAssociations._normalise_risk_allele(
+ GWASCatalogCuratedAssociationsParser._harmonise_beta(
+ GWASCatalogCuratedAssociationsParser._normalise_risk_allele(
f.col("STRONGEST SNP-RISK ALLELE")
),
f.col("referenceAllele"),
@@ -1042,68 +1052,10 @@ def from_source(
f.col("OR or BETA"),
f.col("95% CI (TEXT)"),
).alias("beta"),
- # odds ratio of the association
- GWASCatalogAssociations._harmonise_odds_ratio(
- GWASCatalogAssociations._normalise_risk_allele(
- f.col("STRONGEST SNP-RISK ALLELE")
- ),
- f.col("referenceAllele"),
- f.col("alternateAllele"),
- f.col("OR or BETA"),
- f.col("95% CI (TEXT)"),
- ).alias("oddsRatio"),
- # CI lower of the beta value
- GWASCatalogAssociations._harmonise_beta_ci(
- GWASCatalogAssociations._normalise_risk_allele(
- f.col("STRONGEST SNP-RISK ALLELE")
- ),
- f.col("referenceAllele"),
- f.col("alternateAllele"),
- f.col("OR or BETA"),
- f.col("95% CI (TEXT)"),
- f.col("P-VALUE"),
- "lower",
- ).alias("betaConfidenceIntervalLower"),
- # CI upper for the beta value
- GWASCatalogAssociations._harmonise_beta_ci(
- GWASCatalogAssociations._normalise_risk_allele(
- f.col("STRONGEST SNP-RISK ALLELE")
- ),
- f.col("referenceAllele"),
- f.col("alternateAllele"),
- f.col("OR or BETA"),
- f.col("95% CI (TEXT)"),
- f.col("P-VALUE"),
- "upper",
- ).alias("betaConfidenceIntervalUpper"),
- # CI lower of the odds ratio value
- GWASCatalogAssociations._harmonise_odds_ratio_ci(
- GWASCatalogAssociations._normalise_risk_allele(
- f.col("STRONGEST SNP-RISK ALLELE")
- ),
- f.col("referenceAllele"),
- f.col("alternateAllele"),
- f.col("OR or BETA"),
- f.col("95% CI (TEXT)"),
- f.col("P-VALUE"),
- "lower",
- ).alias("oddsRatioConfidenceIntervalLower"),
- # CI upper of the odds ratio value
- GWASCatalogAssociations._harmonise_odds_ratio_ci(
- GWASCatalogAssociations._normalise_risk_allele(
- f.col("STRONGEST SNP-RISK ALLELE")
- ),
- f.col("referenceAllele"),
- f.col("alternateAllele"),
- f.col("OR or BETA"),
- f.col("95% CI (TEXT)"),
- f.col("P-VALUE"),
- "upper",
- ).alias("oddsRatioConfidenceIntervalUpper"),
# p-value of the association, string: split into exponent and mantissa.
- *GWASCatalogAssociations._parse_pvalue(f.col("P-VALUE")),
+ *GWASCatalogCuratedAssociationsParser._parse_pvalue(f.col("P-VALUE")),
# Capturing phenotype granularity at the association level
- GWASCatalogAssociations._concatenate_substudy_description(
+ GWASCatalogCuratedAssociationsParser._concatenate_substudy_description(
f.col("DISEASE/TRAIT"),
f.col("P-VALUE (TEXT)"),
f.col("MAPPED_TRAIT_URI"),
@@ -1111,12 +1063,20 @@ def from_source(
# Quality controls (array of strings)
"qualityControls",
),
- _schema=GWASCatalogAssociations.get_schema(),
+ _schema=StudyLocusGWASCatalog.get_schema(),
)
+
+@dataclass
+class StudyLocusGWASCatalog(StudyLocus):
+ """Study locus Dataset for GWAS Catalog curated associations.
+
+ A study index dataset captures all the metadata for all studies including GWAS and Molecular QTL.
+ """
+
def update_study_id(
- self: GWASCatalogAssociations, study_annotation: DataFrame
- ) -> GWASCatalogAssociations:
+ self: StudyLocusGWASCatalog, study_annotation: DataFrame
+ ) -> StudyLocusGWASCatalog:
"""Update final studyId and studyLocusId with a dataframe containing study annotation.
Args:
@@ -1137,7 +1097,7 @@ def update_study_id(
)
return self
- def _qc_ambiguous_study(self: GWASCatalogAssociations) -> GWASCatalogAssociations:
+ def qc_ambiguous_study(self: StudyLocusGWASCatalog) -> StudyLocusGWASCatalog:
"""Flag associations with variants that can not be unambiguously associated with one study.
Returns:
@@ -1149,7 +1109,7 @@ def _qc_ambiguous_study(self: GWASCatalogAssociations) -> GWASCatalogAssociation
self._df.withColumn(
"qualityControls",
- StudyLocus._update_quality_flag(
+ StudyLocus.update_quality_flag(
f.col("qualityControls"),
f.count(f.col("variantId")).over(assoc_ambiguity_window) > 1,
StudyLocusQualityCheck.AMBIGUOUS_STUDY,
diff --git a/src/otg/datasource/gwas_catalog/study_index.py b/src/otg/datasource/gwas_catalog/study_index.py
index 34cdb8d09..27988c29d 100644
--- a/src/otg/datasource/gwas_catalog/study_index.py
+++ b/src/otg/datasource/gwas_catalog/study_index.py
@@ -16,8 +16,8 @@
@dataclass
-class GWASCatalogStudyIndex(StudyIndex):
- """Study index from GWAS Catalog.
+class StudyIndexGWASCatalogParser:
+ """GWAS Catalog study index parser.
The following information is harmonised from the GWAS Catalog:
@@ -58,7 +58,7 @@ def _parse_discovery_samples(discovery_samples: Column) -> Column:
... ).alias('discoverySampleSize')
... )
... .orderBy('studyId')
- ... .withColumn('discoverySampleSize', GWASCatalogStudyIndex._parse_discovery_samples(f.col('discoverySampleSize')))
+ ... .withColumn('discoverySampleSize', StudyIndexGWASCatalogParser._parse_discovery_samples(f.col('discoverySampleSize')))
... .select('discoverySampleSize')
... .show(truncate=False)
... )
@@ -70,7 +70,7 @@ def _parse_discovery_samples(discovery_samples: Column) -> Column:
+--------------------------------------------+
"""
- # To initialize return objects for aggregate functions, schema has to be definied:
+ # To initialize return objects for aggregate functions, schema has to be defined:
schema = t.ArrayType(
t.StructType(
[
@@ -96,7 +96,7 @@ def _parse_discovery_samples(discovery_samples: Column) -> Column:
),
lambda ancestry: f.struct(
ancestry.alias("ancestry"),
- f.lit(0).cast(t.LongType()).alias("sampleSize"),
+ f.lit(0).alias("sampleSize"),
),
)
@@ -120,7 +120,7 @@ def _parse_discovery_samples(discovery_samples: Column) -> Column:
exploded_ancestries.alias("ancestries"),
resolved_sample_count.alias("sample_count"),
),
- GWASCatalogStudyIndex._merge_ancestries_and_counts,
+ StudyIndexGWASCatalogParser._merge_ancestries_and_counts,
),
f.array().cast(schema),
lambda x, y: f.array_union(x, y),
@@ -130,7 +130,7 @@ def _parse_discovery_samples(discovery_samples: Column) -> Column:
return f.aggregate(
parsed_sample_size,
unique_ancestries,
- GWASCatalogStudyIndex._normalize_ancestries,
+ StudyIndexGWASCatalogParser._normalize_ancestries,
)
@staticmethod
@@ -155,7 +155,7 @@ def _normalize_ancestries(merged: Column, ancestry: Column) -> Column:
f.struct(
a.ancestry.alias("ancestry"),
(a.sampleSize + ancestry.sampleSize)
- .cast(t.LongType())
+ .cast(t.IntegerType())
.alias("sampleSize"),
),
).otherwise(a),
@@ -178,7 +178,7 @@ def _merge_ancestries_and_counts(ancestry_group: Column) -> Column:
>>> data = [(12, ['African', 'European']),(12, ['African'])]
>>> (
... spark.createDataFrame(data, ['sample_count', 'ancestries'])
- ... .select(GWASCatalogStudyIndex._merge_ancestries_and_counts(f.struct('sample_count', 'ancestries')).alias('test'))
+ ... .select(StudyIndexGWASCatalogParser._merge_ancestries_and_counts(f.struct('sample_count', 'ancestries')).alias('test'))
... .show(truncate=False)
... )
+-------------------------------+
@@ -201,19 +201,45 @@ def _merge_ancestries_and_counts(ancestry_group: Column) -> Column:
),
)
+ @staticmethod
+ def parse_cohorts(raw_cohort: Column) -> Column:
+ """Return a list of unique cohort labels from pipe separated list if provided.
+
+ Args:
+ raw_cohort (Column): Cohort list column, where labels are separated by `|` sign.
+
+ Returns:
+ Column: an array colun with string elements.
+
+ Examples:
+ >>> data = [('BioME|CaPS|Estonia|FHS|UKB|GERA|GERA|GERA',),(None,),]
+ >>> spark.createDataFrame(data, ['cohorts']).select(StudyIndexGWASCatalogParser.parse_cohorts(f.col('cohorts')).alias('parsedCohorts')).show(truncate=False)
+ +--------------------------------------+
+ |parsedCohorts |
+ +--------------------------------------+
+ |[BioME, CaPS, Estonia, FHS, UKB, GERA]|
+ |[null] |
+ +--------------------------------------+
+
+ """
+ return f.when(
+ (raw_cohort.isNull()) | (raw_cohort == ""),
+ f.array(f.lit(None).cast(t.StringType())),
+ ).otherwise(f.array_distinct(f.split(raw_cohort, r"\|")))
+
@classmethod
def _parse_study_table(
- cls: type[GWASCatalogStudyIndex], catalog_studies: DataFrame
- ) -> GWASCatalogStudyIndex:
+ cls: type[StudyIndexGWASCatalogParser], catalog_studies: DataFrame
+ ) -> StudyIndexGWASCatalog:
"""Harmonise GWASCatalog study table with `StudyIndex` schema.
Args:
catalog_studies (DataFrame): GWAS Catalog study table
Returns:
- GWASCatalogStudyIndex: Parsed and annotated GWAS Catalog study table.
+ StudyIndexGWASCatalog: Parsed and annotated GWAS Catalog study table.
"""
- return GWASCatalogStudyIndex(
+ return StudyIndexGWASCatalog(
_df=catalog_studies.select(
f.coalesce(
f.col("STUDY ACCESSION"), f.monotonically_increasing_id()
@@ -234,16 +260,16 @@ def _parse_study_table(
"backgroundTraitFromSourceMappedIds"
),
),
- _schema=GWASCatalogStudyIndex.get_schema(),
+ _schema=StudyIndexGWASCatalog.get_schema(),
)
@classmethod
def from_source(
- cls: type[GWASCatalogStudyIndex],
+ cls: type[StudyIndexGWASCatalogParser],
catalog_studies: DataFrame,
ancestry_file: DataFrame,
sumstats_lut: DataFrame,
- ) -> StudyIndex:
+ ) -> StudyIndexGWASCatalog:
"""Ingests study level metadata from the GWAS Catalog.
Args:
@@ -252,26 +278,34 @@ def from_source(
sumstats_lut (DataFrame): GWAS Catalog summary statistics list.
Returns:
- GWASCatalogStudyIndex: Parsed and annotated GWAS Catalog study table.
+ StudyIndexGWASCatalog: Parsed and annotated GWAS Catalog study table.
"""
# Read GWAS Catalogue raw data
return (
cls._parse_study_table(catalog_studies)
- ._annotate_ancestries(ancestry_file)
- ._annotate_sumstats_info(sumstats_lut)
- ._annotate_discovery_sample_sizes()
+ .annotate_ancestries(ancestry_file)
+ .annotate_sumstats_info(sumstats_lut)
+ .annotate_discovery_sample_sizes()
)
+
+@dataclass
+class StudyIndexGWASCatalog(StudyIndex):
+ """Study index dataset from GWAS Catalog.
+
+ A study index dataset captures all the metadata for all studies including GWAS and Molecular QTL.
+ """
+
def update_study_id(
- self: GWASCatalogStudyIndex, study_annotation: DataFrame
- ) -> GWASCatalogStudyIndex:
+ self: StudyIndexGWASCatalog, study_annotation: DataFrame
+ ) -> StudyIndexGWASCatalog:
"""Update studyId with a dataframe containing study.
Args:
study_annotation (DataFrame): Dataframe containing `updatedStudyId`, `traitFromSource`, `traitFromSourceMappedIds` and key column `studyId`.
Returns:
- GWASCatalogStudyIndex: Updated study table.
+ StudyIndexGWASCatalog: Updated study table.
"""
self.df = (
self._df.join(
@@ -306,9 +340,9 @@ def update_study_id(
return self
- def _annotate_ancestries(
- self: GWASCatalogStudyIndex, ancestry_lut: DataFrame
- ) -> GWASCatalogStudyIndex:
+ def annotate_ancestries(
+ self: StudyIndexGWASCatalog, ancestry_lut: DataFrame
+ ) -> StudyIndexGWASCatalog:
"""Extracting sample sizes and ancestry information.
This function parses the ancestry data. Also get counts for the europeans in the same
@@ -318,8 +352,12 @@ def _annotate_ancestries(
ancestry_lut (DataFrame): Ancestry table as downloaded from the GWAS Catalog
Returns:
- GWASCatalogStudyIndex: Slimmed and cleaned version of the ancestry annotation.
+ StudyIndexGWASCatalog: Slimmed and cleaned version of the ancestry annotation.
"""
+ from otg.datasource.gwas_catalog.study_index import (
+ StudyIndexGWASCatalogParser as GWASCatalogStudyIndexParser,
+ )
+
ancestry = (
ancestry_lut
# Convert column headers to camelcase:
@@ -332,6 +370,14 @@ def _annotate_ancestries(
) # studyId has not been split yet
)
+ # Parsing cohort information:
+ cohorts = ancestry_lut.select(
+ f.col("STUDY ACCESSION").alias("studyId"),
+ GWASCatalogStudyIndexParser.parse_cohorts(f.col("COHORT(S)")).alias(
+ "cohorts"
+ ),
+ ).distinct()
+
# Get a high resolution dataset on experimental stage:
ancestry_stages = (
ancestry.groupBy("studyId")
@@ -341,13 +387,14 @@ def _annotate_ancestries(
f.struct(
f.col("broadAncestralCategory").alias("ancestry"),
f.col("numberOfIndividuals")
- .cast(t.LongType())
+ .cast(t.IntegerType())
.alias("sampleSize"),
)
)
)
.withColumn(
- "discoverySamples", self._parse_discovery_samples(f.col("initial"))
+ "discoverySamples",
+ GWASCatalogStudyIndexParser._parse_discovery_samples(f.col("initial")),
)
.withColumnRenamed("replication", "replicationSamples")
# Mapping discovery stage ancestries to LD reference:
@@ -418,19 +465,21 @@ def _annotate_ancestries(
europeans_deconvoluted, on="studyId", how="outer"
)
- self.df = self.df.join(parsed_ancestry_lut, on="studyId", how="left")
+ self.df = self.df.join(parsed_ancestry_lut, on="studyId", how="left").join(
+ cohorts, on="studyId", how="left"
+ )
return self
- def _annotate_sumstats_info(
- self: GWASCatalogStudyIndex, sumstats_lut: DataFrame
- ) -> GWASCatalogStudyIndex:
+ def annotate_sumstats_info(
+ self: StudyIndexGWASCatalog, sumstats_lut: DataFrame
+ ) -> StudyIndexGWASCatalog:
"""Annotate summary stat locations.
Args:
sumstats_lut (DataFrame): listing GWAS Catalog summary stats paths
Returns:
- GWASCatalogStudyIndex: including `summarystatsLocation` and `hasSumstats` columns
+ StudyIndexGWASCatalog: including `summarystatsLocation` and `hasSumstats` columns
"""
gwas_sumstats_base_uri = (
"ftp://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/"
@@ -457,15 +506,15 @@ def _annotate_sumstats_info(
)
return self
- def _annotate_discovery_sample_sizes(
- self: GWASCatalogStudyIndex,
- ) -> GWASCatalogStudyIndex:
+ def annotate_discovery_sample_sizes(
+ self: StudyIndexGWASCatalog,
+ ) -> StudyIndexGWASCatalog:
"""Extract the sample size of the discovery stage of the study as annotated in the GWAS Catalog.
For some studies that measure quantitative traits, nCases and nControls can't be extracted. Therefore, we assume these are 0.
Returns:
- GWASCatalogStudyIndex: object with columns `nCases`, `nControls`, and `nSamples` per `studyId` correctly extracted.
+ StudyIndexGWASCatalog: object with columns `nCases`, `nControls`, and `nSamples` per `studyId` correctly extracted.
"""
sample_size_lut = (
self.df.select(
@@ -494,9 +543,9 @@ def _annotate_discovery_sample_sizes(
# Aggregating sample sizes for all ancestries:
.groupBy("studyId") # studyId has not been split yet
.agg(
- f.sum("nCases").alias("nCases"),
- f.sum("nControls").alias("nControls"),
- f.sum("sampleSize").alias("nSamples"),
+ f.sum("nCases").cast("integer").alias("nCases"),
+ f.sum("nControls").cast("integer").alias("nControls"),
+ f.sum("sampleSize").cast("integer").alias("nSamples"),
)
)
self.df = self.df.join(sample_size_lut, on="studyId", how="left")
diff --git a/src/otg/datasource/gwas_catalog/study_splitter.py b/src/otg/datasource/gwas_catalog/study_splitter.py
index f31d147be..d03c5c8c5 100644
--- a/src/otg/datasource/gwas_catalog/study_splitter.py
+++ b/src/otg/datasource/gwas_catalog/study_splitter.py
@@ -10,8 +10,8 @@
if TYPE_CHECKING:
from pyspark.sql import Column
- from otg.datasource.gwas_catalog.associations import GWASCatalogAssociations
- from otg.datasource.gwas_catalog.study_index import GWASCatalogStudyIndex
+ from otg.datasource.gwas_catalog.study_index import StudyIndexGWASCatalog
+ from otg.datasource.gwas_catalog.study_locus_dataset import StudyLocusGWASCatalog
class GWASCatalogStudySplitter:
@@ -24,8 +24,8 @@ def _resolve_trait(
"""Resolve trait names by consolidating association-level and study-level trait names.
Args:
- association_trait (Column): Association-level trait name.
study_trait (Column): Study-level trait name.
+ association_trait (Column): Association-level trait name.
p_value_text (Column): P-value text.
Returns:
@@ -74,7 +74,7 @@ def _resolve_study_id(study_id: Column, sub_study_description: Column) -> Column
"""
split_w = Window.partitionBy(study_id).orderBy(sub_study_description)
row_number = f.dense_rank().over(split_w)
- substudy_count = f.count(row_number).over(split_w)
+ substudy_count = f.approx_count_distinct(row_number).over(split_w)
return f.when(substudy_count == 1, study_id).otherwise(
f.concat_ws("_", study_id, row_number)
)
@@ -82,20 +82,20 @@ def _resolve_study_id(study_id: Column, sub_study_description: Column) -> Column
@classmethod
def split(
cls: type[GWASCatalogStudySplitter],
- studies: GWASCatalogStudyIndex,
- associations: GWASCatalogAssociations,
- ) -> Tuple[GWASCatalogStudyIndex, GWASCatalogAssociations]:
+ studies: StudyIndexGWASCatalog,
+ associations: StudyLocusGWASCatalog,
+ ) -> Tuple[StudyIndexGWASCatalog, StudyLocusGWASCatalog]:
"""Splitting multi-trait GWAS Catalog studies.
If assigned disease of the study and the association don't agree, we assume the study needs to be split.
Then disease EFOs, trait names and study ID are consolidated
Args:
- studies (GWASCatalogStudyIndex): GWAS Catalog studies.
+ studies (StudyIndexGWASCatalog): GWAS Catalog studies.
associations (StudyLocusGWASCatalog): GWAS Catalog associations.
Returns:
- A tuple of the split associations and studies.
+ Tuple[StudyIndexGWASCatalog, StudyLocusGWASCatalog]: Split studies and associations.
"""
# Composite of studies and associations to resolve scattered information
st_ass = (
@@ -132,5 +132,5 @@ def split(
st_ass.select(
"updatedStudyId", "studyId", "subStudyDescription"
).distinct()
- )._qc_ambiguous_study(),
+ ).qc_ambiguous_study(),
)
diff --git a/src/otg/datasource/gwas_catalog/summary_statistics.py b/src/otg/datasource/gwas_catalog/summary_statistics.py
index 046c88810..94ac3027e 100644
--- a/src/otg/datasource/gwas_catalog/summary_statistics.py
+++ b/src/otg/datasource/gwas_catalog/summary_statistics.py
@@ -2,21 +2,52 @@
from __future__ import annotations
+import re
from dataclasses import dataclass
from typing import TYPE_CHECKING
import pyspark.sql.functions as f
import pyspark.sql.types as t
-from otg.common.utils import (
- calculate_confidence_interval,
- convert_odds_ratio_to_beta,
- parse_pvalue,
-)
+from otg.common.spark_helpers import neglog_pvalue_to_mantissa_and_exponent
+from otg.common.utils import convert_odds_ratio_to_beta, parse_pvalue
from otg.dataset.summary_statistics import SummaryStatistics
if TYPE_CHECKING:
- from pyspark.sql import DataFrame
+ from pyspark.sql import SparkSession
+
+
+def filename_to_study_identifier(path: str) -> str:
+ """Extract GWAS Catalog study identifier from path.
+
+ There's an expectation that the filename has to have the GCST accession of the study.
+
+ Args:
+ path(str): filename of the harmonized summary statistics.
+
+ Returns:
+ str: GWAS Catalog stuy accession.
+
+ Raises:
+ ValueError: If the path does not contain the GWAS Catalog study identifier.
+
+ Examples:
+ >>> filename_to_study_identifier("http://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/GCST006001-GCST007000/GCST006090/harmonised/29895819-GCST006090-HP_0000975.h.tsv.gz")
+ 'GCST006090'
+ >>> filename_to_study_identifier("wrong/path")
+ Traceback (most recent call last):
+ ...
+ ValueError: Path ("wrong/path") does not contain GWAS Catalog study identifier.
+ """
+ file_name = path.split("/")[-1]
+ study_id_matches = re.search(r"(GCST\d+)", file_name)
+
+ if not study_id_matches:
+ raise ValueError(
+ f'Path ("{path}") does not contain GWAS Catalog study identifier.'
+ )
+
+ return study_id_matches[0]
@dataclass
@@ -26,59 +57,134 @@ class GWASCatalogSummaryStatistics(SummaryStatistics):
@classmethod
def from_gwas_harmonized_summary_stats(
cls: type[GWASCatalogSummaryStatistics],
- sumstats_df: DataFrame,
- study_id: str,
+ spark: SparkSession,
+ sumstats_file: str,
) -> GWASCatalogSummaryStatistics:
"""Create summary statistics object from summary statistics flatfile, harmonized by the GWAS Catalog.
+ Things got slightly complicated given the GWAS Catalog harmonization pipelines changed recently so we had to accomodate to
+ both formats.
+
Args:
- sumstats_df (DataFrame): Harmonized dataset read as a spark dataframe from GWAS Catalog.
- study_id (str): GWAS Catalog study accession.
+ spark (SparkSession): spark session
+ sumstats_file (str): list of GWAS Catalog summary stat files, with study ids in them.
Returns:
- SummaryStatistics
+ GWASCatalogSummaryStatistics: Summary statistics object.
"""
+ sumstats_df = spark.read.csv(sumstats_file, sep="\t", header=True).withColumn(
+ # Parsing GWAS Catalog study identifier from filename:
+ "studyId",
+ f.lit(filename_to_study_identifier(sumstats_file)),
+ )
+
+ # Parsing variant id fields:
+ chromosome = (
+ f.col("hm_chrom")
+ if "hm_chrom" in sumstats_df.columns
+ else f.col("chromosome")
+ ).cast(t.StringType())
+ position = (
+ f.col("hm_pos")
+ if "hm_pos" in sumstats_df.columns
+ else f.col("base_pair_location")
+ ).cast(t.IntegerType())
+ ref_allele = (
+ f.col("hm_other_allele")
+ if "hm_other_allele" in sumstats_df.columns
+ else f.col("other_allele")
+ )
+ alt_allele = (
+ f.col("hm_effect_allele")
+ if "hm_effect_allele" in sumstats_df.columns
+ else f.col("effect_allele")
+ )
+
+ # Parsing p-value (get a tuple with mantissa and exponent):
+ p_value_expression = (
+ parse_pvalue(f.col("p_value"))
+ if "p_value" in sumstats_df.columns
+ else neglog_pvalue_to_mantissa_and_exponent(f.col("neg_log_10_p_value"))
+ )
+
# The effect allele frequency is an optional column, we have to test if it is there:
- allele_frequency_expression = (
- f.col("hm_effect_allele_frequency").cast(t.FloatType())
- if "hm_effect_allele_frequency" in sumstats_df.columns
+ allele_frequency = (
+ f.col("effect_allele_frequency")
+ if "effect_allele_frequency" in sumstats_df.columns
else f.lit(None)
+ ).cast(t.FloatType())
+
+ # Do we have sample size? This expression captures 99.7% of sample size columns.
+ sample_size = (f.col("n") if "n" in sumstats_df.columns else f.lit(None)).cast(
+ t.IntegerType()
)
+ # Depending on the input, we might have beta, but the column might not be there at all also old format calls differently:
+ beta_expression = (
+ f.col("hm_beta")
+ if "hm_beta" in sumstats_df.columns
+ else f.col("beta")
+ if "beta" in sumstats_df.columns
+ # If no column, create one:
+ else f.lit(None)
+ ).cast(t.DoubleType())
+
+ # We might have odds ratio or hazard ratio, wich are basically the same:
+ odds_ratio_expression = (
+ f.col("hm_odds_ratio")
+ if "hm_odds_ratio" in sumstats_df.columns
+ else f.col("odds_ratio")
+ if "odds_ratio" in sumstats_df.columns
+ else f.col("hazard_ratio")
+ if "hazard_ratio" in sumstats_df.columns
+ # If no column, create one:
+ else f.lit(None)
+ ).cast(t.DoubleType())
+
+ # Does the file have standard error column?
+ standard_error = (
+ f.col("standard_error")
+ if "standard_error" in sumstats_df.columns
+ else f.lit(None)
+ ).cast(t.DoubleType())
+
# Processing columns of interest:
processed_sumstats_df = (
sumstats_df
# Dropping rows which doesn't have proper position:
- .filter(f.col("hm_pos").cast(t.IntegerType()).isNotNull())
.select(
- # Adding study identifier:
- f.lit(study_id).cast(t.StringType()).alias("studyId"),
+ "studyId",
# Adding variant identifier:
- f.col("hm_variant_id").alias("variantId"),
- f.col("hm_chrom").alias("chromosome"),
- f.col("hm_pos").cast(t.IntegerType()).alias("position"),
+ f.concat_ws(
+ "_",
+ chromosome,
+ position,
+ ref_allele,
+ alt_allele,
+ ).alias("variantId"),
+ chromosome.alias("chromosome"),
+ position.alias("position"),
# Parsing p-value mantissa and exponent:
- *parse_pvalue(f.col("p_value")),
+ *p_value_expression,
# Converting/calculating effect and confidence interval:
*convert_odds_ratio_to_beta(
- f.col("hm_beta").cast(t.DoubleType()),
- f.col("hm_odds_ratio").cast(t.DoubleType()),
- f.col("standard_error").cast(t.DoubleType()),
+ beta_expression,
+ odds_ratio_expression,
+ standard_error,
),
- allele_frequency_expression.alias("effectAlleleFrequencyFromSource"),
+ allele_frequency.alias("effectAlleleFrequencyFromSource"),
+ sample_size.alias("sampleSize"),
)
- # The previous select expression generated the necessary fields for calculating the confidence intervals:
- .select(
- "*",
- *calculate_confidence_interval(
- f.col("pValueMantissa"),
- f.col("pValueExponent"),
- f.col("beta"),
- f.col("standardError"),
- ),
+ .filter(
+ # Dropping associations where no harmonized position is available:
+ f.col("position").isNotNull()
+ &
+ # We are not interested in associations with zero effect:
+ (f.col("beta") != 0)
)
- .repartition(200, "chromosome")
- .sortWithinPartitions("position")
+ .orderBy(f.col("chromosome"), f.col("position"))
+ # median study size is 200Mb, max is 2.6Gb
+ .repartition(20)
)
# Initializing summary statistics object:
diff --git a/src/otg/datasource/intervals/andersson.py b/src/otg/datasource/intervals/andersson.py
index 67a3f01d7..92eb1c025 100644
--- a/src/otg/datasource/intervals/andersson.py
+++ b/src/otg/datasource/intervals/andersson.py
@@ -18,12 +18,20 @@
from otg.dataset.gene_index import GeneIndex
-class IntervalsAndersson(Intervals):
+class IntervalsAndersson:
"""Interval dataset from Andersson et al. 2014."""
@staticmethod
- def read_andersson(spark: SparkSession, path: str):
- """Read andersson2014 dataset."""
+ def read(spark: SparkSession, path: str) -> DataFrame:
+ """Read andersson2014 dataset.
+
+ Args:
+ spark (SparkSession): Spark session
+ path (str): Path to the dataset
+
+ Returns:
+ DataFrame: Raw Andersson et al. dataframe
+ """
input_schema = t.StructType.fromJson(
json.loads(
pkg_resources.read_text(schemas, "andersson2014.json", encoding="utf-8")
@@ -47,8 +55,7 @@ def parse(
"""Parse Andersson et al. 2014 dataset.
Args:
- session (Session): session
- path (str): Path to dataset
+ raw_anderson_df (DataFrame): Raw Andersson et al. dataset
gene_index (GeneIndex): Gene index
lift (LiftOverSpark): LiftOverSpark instance
@@ -93,7 +100,7 @@ def parse(
.orderBy("chrom", "start")
)
- return cls(
+ return Intervals(
_df=(
# Lift over the intervals:
lift.convert_intervals(parsed_anderson_df, "chrom", "start", "end")
diff --git a/src/otg/datasource/intervals/javierre.py b/src/otg/datasource/intervals/javierre.py
index 7fc7e858e..2070f166f 100644
--- a/src/otg/datasource/intervals/javierre.py
+++ b/src/otg/datasource/intervals/javierre.py
@@ -15,11 +15,11 @@
from otg.dataset.gene_index import GeneIndex
-class IntervalsJavierre(Intervals):
+class IntervalsJavierre:
"""Interval dataset from Javierre et al. 2016."""
@staticmethod
- def read_javierre(spark: SparkSession, path: str):
+ def read(spark: SparkSession, path: str) -> DataFrame:
"""Read Javierre dataset.
Args:
@@ -27,7 +27,7 @@ def read_javierre(spark: SparkSession, path: str):
path (str): Path to dataset
Returns:
- DataFrame: DataFrame with raw Javierre data
+ DataFrame: Raw Javierre dataset
"""
return spark.read.parquet(path)
@@ -41,8 +41,7 @@ def parse(
"""Parse Javierre et al. 2016 dataset.
Args:
- session (Session): session
- path (str): Path to dataset
+ javierre_raw (DataFrame): Raw Javierre data
gene_index (GeneIndex): Gene index
lift (LiftOverSpark): LiftOverSpark instance
@@ -140,7 +139,7 @@ def parse(
)
# Joining back the data:
- return cls(
+ return Intervals(
_df=(
javierre_remapped.join(
unique_intervals_with_genes,
diff --git a/src/otg/datasource/intervals/jung.py b/src/otg/datasource/intervals/jung.py
index 3ca26f026..8ae7310d2 100644
--- a/src/otg/datasource/intervals/jung.py
+++ b/src/otg/datasource/intervals/jung.py
@@ -15,11 +15,11 @@
from otg.dataset.gene_index import GeneIndex
-class IntervalsJung(Intervals):
+class IntervalsJung:
"""Interval dataset from Jung et al. 2019."""
@staticmethod
- def read_jung(spark: SparkSession, path: str):
+ def read(spark: SparkSession, path: str) -> DataFrame:
"""Read jung dataset.
Args:
@@ -53,7 +53,7 @@ def parse(
pmid = "31501517"
# Lifting over the coordinates:
- return cls(
+ return Intervals(
_df=(
jung_raw.withColumn(
"interval", f.split(f.col("Interacting_fragment"), r"\.")
diff --git a/src/otg/datasource/intervals/thurnman.py b/src/otg/datasource/intervals/thurman.py
similarity index 86%
rename from src/otg/datasource/intervals/thurnman.py
rename to src/otg/datasource/intervals/thurman.py
index 18587066d..46a814500 100644
--- a/src/otg/datasource/intervals/thurnman.py
+++ b/src/otg/datasource/intervals/thurman.py
@@ -15,19 +15,19 @@
from otg.dataset.gene_index import GeneIndex
-class IntervalsThurnman(Intervals):
+class IntervalsThurman:
"""Interval dataset from Thurman et al. 2012."""
@staticmethod
- def read_thurnman(spark: SparkSession, path: str):
- """Read thurnman dataset.
+ def read(spark: SparkSession, path: str) -> DataFrame:
+ """Read thurman dataset.
Args:
spark (SparkSession): Spark session
path (str): Path to dataset
Returns:
- DataFrame: DataFrame with raw thurnman data
+ DataFrame: DataFrame with raw thurman data
"""
thurman_schema = t.StructType(
[
@@ -45,28 +45,28 @@ def read_thurnman(spark: SparkSession, path: str):
@classmethod
def parse(
- cls: type[IntervalsThurnman],
- thurnman_raw: DataFrame,
+ cls: type[IntervalsThurman],
+ thurman_raw: DataFrame,
gene_index: GeneIndex,
lift: LiftOverSpark,
) -> Intervals:
"""Parse the Thurman et al. 2012 dataset.
Args:
- thurnman_raw (DataFrame): raw Thurman et al. 2019 dataset
+ thurman_raw (DataFrame): raw Thurman et al. 2019 dataset
gene_index (GeneIndex): gene index
lift (LiftOverSpark): LiftOverSpark instance
Returns:
- Intervals: Interval dataset containing Thurnman et al. 2012 data
+ Intervals: Interval dataset containing Thurman et al. 2012 data
"""
dataset_name = "thurman2012"
experiment_type = "dhscor"
pmid = "22955617"
- return cls(
+ return Intervals(
_df=(
- thurnman_raw.select(
+ thurman_raw.select(
f.regexp_replace(f.col("chrom"), "chr", "").alias("chrom"),
"start",
"end",
@@ -100,5 +100,5 @@ def parse(
)
.distinct()
),
- _schema=cls.get_schema(),
+ _schema=Intervals.get_schema(),
)
diff --git a/src/otg/datasource/open_targets/l2g_gold_standard.py b/src/otg/datasource/open_targets/l2g_gold_standard.py
new file mode 100644
index 000000000..b51099cff
--- /dev/null
+++ b/src/otg/datasource/open_targets/l2g_gold_standard.py
@@ -0,0 +1,123 @@
+"""Parser for OTPlatform locus to gene gold standards curation."""
+from __future__ import annotations
+
+from typing import Type
+
+import pyspark.sql.functions as f
+from pyspark.sql import DataFrame
+
+from otg.dataset.l2g_gold_standard import L2GGoldStandard
+from otg.dataset.study_locus import StudyLocus
+from otg.dataset.v2g import V2G
+
+
+class OpenTargetsL2GGoldStandard:
+ """Parser for OTGenetics locus to gene gold standards curation.
+
+ The curation is processed to generate a dataset with 2 labels:
+ - Gold Standard Positive (GSP): When the lead variant is part of a curated list of GWAS loci with known gene-trait associations.
+ - Gold Standard Negative (GSN): When the lead variant is not part of a curated list of GWAS loci with known gene-trait associations but is in the vicinity of a gene's TSS.
+ """
+
+ LOCUS_TO_GENE_WINDOW = 500_000
+
+ @classmethod
+ def parse_positive_curation(
+ cls: Type[OpenTargetsL2GGoldStandard], gold_standard_curation: DataFrame
+ ) -> DataFrame:
+ """Parse positive set from gold standard curation.
+
+ Args:
+ gold_standard_curation (DataFrame): Gold standard curation dataframe
+
+ Returns:
+ DataFrame: Positive set
+ """
+ return (
+ gold_standard_curation.filter(
+ f.col("gold_standard_info.highest_confidence").isin(["High", "Medium"])
+ )
+ .select(
+ f.col("association_info.otg_id").alias("studyId"),
+ f.col("gold_standard_info.gene_id").alias("geneId"),
+ f.concat_ws(
+ "_",
+ f.col("sentinel_variant.locus_GRCh38.chromosome"),
+ f.col("sentinel_variant.locus_GRCh38.position"),
+ f.col("sentinel_variant.alleles.reference"),
+ f.col("sentinel_variant.alleles.alternative"),
+ ).alias("variantId"),
+ f.col("metadata.set_label").alias("source"),
+ )
+ .withColumn(
+ "studyLocusId",
+ StudyLocus.assign_study_locus_id(f.col("studyId"), f.col("variantId")),
+ )
+ .groupBy("studyLocusId", "studyId", "variantId", "geneId")
+ .agg(f.collect_set("source").alias("sources"))
+ )
+
+ @classmethod
+ def expand_gold_standard_with_negatives(
+ cls: Type[OpenTargetsL2GGoldStandard], positive_set: DataFrame, v2g: V2G
+ ) -> DataFrame:
+ """Create full set of positive and negative evidence of locus to gene associations.
+
+ Negative evidence consists of all genes within a window of 500kb of the lead variant that are not in the positive set.
+
+ Args:
+ positive_set (DataFrame): Positive set from curation
+ v2g (V2G): Variant to gene dataset to bring distance between a variant and a gene's TSS
+
+ Returns:
+ DataFrame: Full set of positive and negative evidence of locus to gene associations
+ """
+ return (
+ positive_set.withColumnRenamed("geneId", "curated_geneId")
+ .join(
+ v2g.df.selectExpr(
+ "variantId", "geneId as non_curated_geneId", "distance"
+ ).filter(f.col("distance") <= cls.LOCUS_TO_GENE_WINDOW),
+ on="variantId",
+ how="left",
+ )
+ .withColumn(
+ "goldStandardSet",
+ f.when(
+ (f.col("curated_geneId") == f.col("non_curated_geneId"))
+ # to keep the positives that are outside the v2g dataset
+ | (f.col("non_curated_geneId").isNull()),
+ f.lit(L2GGoldStandard.GS_POSITIVE_LABEL),
+ ).otherwise(L2GGoldStandard.GS_NEGATIVE_LABEL),
+ )
+ .withColumn(
+ "geneId",
+ f.when(
+ f.col("goldStandardSet") == L2GGoldStandard.GS_POSITIVE_LABEL,
+ f.col("curated_geneId"),
+ ).otherwise(f.col("non_curated_geneId")),
+ )
+ .drop("distance", "curated_geneId", "non_curated_geneId")
+ )
+
+ @classmethod
+ def as_l2g_gold_standard(
+ cls: type[OpenTargetsL2GGoldStandard],
+ gold_standard_curation: DataFrame,
+ v2g: V2G,
+ ) -> L2GGoldStandard:
+ """Initialise L2GGoldStandard from source dataset.
+
+ Args:
+ gold_standard_curation (DataFrame): Gold standard curation dataframe, extracted from https://github.com/opentargets/genetics-gold-standards
+ v2g (V2G): Variant to gene dataset to bring distance between a variant and a gene's TSS
+
+ Returns:
+ L2GGoldStandard: L2G Gold Standard dataset. False negatives have not yet been removed.
+ """
+ return L2GGoldStandard(
+ _df=cls.parse_positive_curation(gold_standard_curation).transform(
+ cls.expand_gold_standard_with_negatives, v2g
+ ),
+ _schema=L2GGoldStandard.get_schema(),
+ )
diff --git a/src/otg/datasource/open_targets/target.py b/src/otg/datasource/open_targets/target.py
index 3d334d34d..c4d6a3803 100644
--- a/src/otg/datasource/open_targets/target.py
+++ b/src/otg/datasource/open_targets/target.py
@@ -8,7 +8,14 @@
class OpenTargetsTarget:
- """Parser for OTPlatform target dataset."""
+ """Parser for OTPlatform target dataset.
+
+ Genomic data from Open Targets provides gene identification and genomic coordinates that are integrated into the gene index of our ETL pipeline.
+
+ The EMBL-EBI Ensembl database is used as a source for human targets in the Platform, with the Ensembl gene ID as the primary identifier. The criteria for target inclusion is:
+ - Genes from all biotypes encoded in canonical chromosomes
+ - Genes in alternative assemblies encoding for a reviewed protein product.
+ """
@staticmethod
def _get_gene_tss(strand_col: Column, start_col: Column, end_col: Column) -> Column:
@@ -37,7 +44,9 @@ def _get_gene_tss(strand_col: Column, start_col: Column, end_col: Column) -> Col
return f.when(strand_col == 1, start_col).when(strand_col == -1, end_col)
@classmethod
- def as_gene_index(cls: type[GeneIndex], target_index: DataFrame) -> GeneIndex:
+ def as_gene_index(
+ cls: type[OpenTargetsTarget], target_index: DataFrame
+ ) -> GeneIndex:
"""Initialise GeneIndex from source dataset.
Args:
@@ -49,6 +58,10 @@ def as_gene_index(cls: type[GeneIndex], target_index: DataFrame) -> GeneIndex:
return GeneIndex(
_df=target_index.select(
f.coalesce(f.col("id"), f.lit("unknown")).alias("geneId"),
+ "approvedSymbol",
+ "approvedName",
+ "biotype",
+ f.col("obsoleteSymbols.label").alias("obsoleteSymbols"),
f.coalesce(f.col("genomicLocation.chromosome"), f.lit("unknown")).alias(
"chromosome"
),
diff --git a/src/otg/datasource/ukbiobank/study_index.py b/src/otg/datasource/ukbiobank/study_index.py
index 46322df92..7ef33f46c 100644
--- a/src/otg/datasource/ukbiobank/study_index.py
+++ b/src/otg/datasource/ukbiobank/study_index.py
@@ -11,7 +11,7 @@
from pyspark.sql import DataFrame
-class UKBiobankStudyIndex(StudyIndex):
+class UKBiobankStudyIndex:
"""Study index dataset from UKBiobank.
The following information is extracted:
@@ -36,7 +36,7 @@ class UKBiobankStudyIndex(StudyIndex):
def from_source(
cls: type[UKBiobankStudyIndex],
ukbiobank_studies: DataFrame,
- ) -> UKBiobankStudyIndex:
+ ) -> StudyIndex:
"""This function ingests study level metadata from UKBiobank.
The University of Michigan SAIGE analysis (N=1281) utilized PheCode derived phenotypes and a novel method that ensures accurate P values, even with highly unbalanced case-control ratios (Zhou et al., 2018).
@@ -47,7 +47,7 @@ def from_source(
ukbiobank_studies (DataFrame): UKBiobank study manifest file loaded in spark session.
Returns:
- UKBiobankStudyIndex: Annotated UKBiobank study table.
+ StudyIndex: Annotated UKBiobank study table.
"""
return StudyIndex(
_df=(
@@ -76,10 +76,10 @@ def from_source(
"publicationJournal"
),
f.col("n_total").cast("string").alias("initialSampleSize"),
- f.col("n_cases").cast("long").alias("nCases"),
+ f.col("n_cases").cast("integer").alias("nCases"),
f.array(
f.struct(
- f.col("n_total").cast("long").alias("sampleSize"),
+ f.col("n_total").cast("integer").alias("sampleSize"),
f.concat(f.lit("European="), f.col("n_total")).alias(
"ancestry"
),
@@ -103,7 +103,7 @@ def from_source(
)
.withColumn(
"ldPopulationStructure",
- cls.aggregate_and_map_ancestries(f.col("discoverySamples")),
+ StudyIndex.aggregate_and_map_ancestries(f.col("discoverySamples")),
)
),
_schema=StudyIndex.get_schema(),
diff --git a/src/otg/eqtl_catalogue.py b/src/otg/eqtl_catalogue.py
new file mode 100644
index 000000000..c57f95ed3
--- /dev/null
+++ b/src/otg/eqtl_catalogue.py
@@ -0,0 +1,67 @@
+"""Step to run eQTL Catalogue study table ingestion."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from omegaconf import MISSING
+
+from otg.common.session import Session
+from otg.datasource.eqtl_catalogue.study_index import EqtlCatalogueStudyIndex
+from otg.datasource.eqtl_catalogue.summary_stats import EqtlCatalogueSummaryStats
+
+
+@dataclass
+class EqtlCatalogueStep:
+ """eQTL Catalogue ingestion step.
+
+ Attributes:
+ session (Session): Session object.
+ eqtl_catalogue_paths_imported (str): eQTL Catalogue input files for the harmonised and imported data.
+ eqtl_catalogue_study_index_out (str): Output path for the eQTL Catalogue study index dataset.
+ eqtl_catalogue_summary_stats_out (str): Output path for the eQTL Catalogue summary stats.
+ """
+
+ session: Session = MISSING
+
+ eqtl_catalogue_paths_imported: str = MISSING
+ eqtl_catalogue_study_index_out: str = MISSING
+ eqtl_catalogue_summary_stats_out: str = MISSING
+
+ def __post_init__(self: EqtlCatalogueStep) -> None:
+ """Run step."""
+ # Fetch study index.
+ df = self.session.spark.read.option("delimiter", "\t").csv(
+ self.eqtl_catalogue_paths_imported, header=True
+ )
+ # Process partial study index. At this point, it is not complete because we don't have the gene IDs, which we
+ # will only get once the summary stats are ingested.
+ study_index_df = EqtlCatalogueStudyIndex.from_source(df).df
+
+ # Fetch summary stats.
+ input_filenames = [row.summarystatsLocation for row in study_index_df.collect()]
+ summary_stats_df = (
+ self.session.spark.read.option("delimiter", "\t")
+ .csv(input_filenames, header=True)
+ .repartition(1280)
+ )
+ # Process summary stats.
+ summary_stats_df = EqtlCatalogueSummaryStats.from_source(summary_stats_df).df
+
+ # Add geneId column to the study index.
+ study_index_df = EqtlCatalogueStudyIndex.add_gene_id_column(
+ study_index_df,
+ summary_stats_df,
+ ).df
+
+ # Write study index.
+ study_index_df.write.mode(self.session.write_mode).parquet(
+ self.eqtl_catalogue_study_index_out
+ )
+ # Write summary stats.
+ (
+ summary_stats_df.sortWithinPartitions("position")
+ .write.partitionBy("chromosome")
+ .mode(self.session.write_mode)
+ .parquet(self.eqtl_catalogue_summary_stats_out)
+ )
diff --git a/src/otg/finngen.py b/src/otg/finngen.py
deleted file mode 100644
index b62762598..000000000
--- a/src/otg/finngen.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""Step to run FinnGen study table ingestion."""
-
-from __future__ import annotations
-
-from dataclasses import dataclass
-from urllib.request import urlopen
-
-from otg.common.session import Session
-from otg.config import FinnGenStepConfig
-from otg.datasource.finngen.study_index import FinnGenStudyIndex
-from otg.datasource.finngen.summary_stats import FinnGenSummaryStats
-
-
-@dataclass
-class FinnGenStep(FinnGenStepConfig):
- """FinnGen ingestion step."""
-
- session: Session = Session()
-
- def run(self: FinnGenStep) -> None:
- """Run FinnGen ingestion step."""
- # Read the JSON data from the URL.
- json_data = urlopen(self.finngen_phenotype_table_url).read().decode("utf-8")
- rdd = self.session.spark.sparkContext.parallelize([json_data])
- df = self.session.spark.read.json(rdd)
-
- # Parse the study index data.
- finngen_studies = FinnGenStudyIndex.from_source(
- df,
- self.finngen_release_prefix,
- self.finngen_sumstat_url_prefix,
- self.finngen_sumstat_url_suffix,
- )
-
- # Write the study index output.
- finngen_studies.df.write.mode(self.session.write_mode).parquet(
- self.finngen_study_index_out
- )
-
- # Prepare list of files for ingestion.
- input_filenames = [
- row.summarystatsLocation for row in finngen_studies.collect()
- ]
- summary_stats_df = self.session.spark.read.option("delimiter", "\t").csv(
- input_filenames, header=True
- )
-
- # Specify data processing instructions.
- summary_stats_df = FinnGenSummaryStats.from_finngen_harmonized_summary_stats(
- summary_stats_df
- ).df
-
- # Sort and partition for output.
- summary_stats_df.sortWithinPartitions("position").write.partitionBy(
- "studyId", "chromosome"
- ).mode(self.session.write_mode).parquet(self.finngen_summary_stats_out)
diff --git a/src/otg/finngen_studies.py b/src/otg/finngen_studies.py
new file mode 100644
index 000000000..9a1d800e8
--- /dev/null
+++ b/src/otg/finngen_studies.py
@@ -0,0 +1,31 @@
+"""Step to run FinnGen study table ingestion."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from omegaconf import MISSING
+
+from otg.common.session import Session
+from otg.datasource.finngen.study_index import FinnGenStudyIndex
+
+
+@dataclass
+class FinnGenStudiesStep:
+ """FinnGen study index generation step.
+
+ Attributes:
+ session (Session): Session object.
+ finngen_study_index_out (str): Output path for the FinnGen study index dataset.
+ """
+
+ session: Session = MISSING
+ finngen_study_index_out: str = MISSING
+ finngen_summary_stats_out: str = MISSING
+
+ def __post_init__(self: FinnGenStudiesStep) -> None:
+ """Run step."""
+ # Fetch study index.
+ FinnGenStudyIndex.from_source(self.session.spark).df.write.mode(
+ self.session.write_mode
+ ).parquet(self.finngen_study_index_out)
diff --git a/src/otg/finngen_sumstat_preprocess.py b/src/otg/finngen_sumstat_preprocess.py
new file mode 100644
index 000000000..959c000dc
--- /dev/null
+++ b/src/otg/finngen_sumstat_preprocess.py
@@ -0,0 +1,36 @@
+"""Step to run FinnGen study table ingestion."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from omegaconf import MISSING
+
+from otg.common.session import Session
+from otg.datasource.finngen.summary_stats import FinnGenSummaryStats
+
+
+@dataclass
+class FinnGenSumstatPreprocessStep:
+ """FinnGen sumstats preprocessing.
+
+ Attributes:
+ session (Session): Session object.
+ finngen_study_index_out (str): Output path for the FinnGen study index dataset.
+ finngen_summary_stats_out (str): Output path for the FinnGen summary statistics.
+ """
+
+ session: Session = MISSING
+ raw_sumstats_path: str = MISSING
+ out_sumstats_path: str = MISSING
+
+ def __post_init__(self: FinnGenSumstatPreprocessStep) -> None:
+ """Run step."""
+ # Process summary stats.
+ (
+ FinnGenSummaryStats.from_source(
+ self.session.spark, raw_file=self.raw_sumstats_path
+ )
+ .df.write.mode(self.session.write_mode)
+ .parquet(self.out_sumstats_path)
+ )
diff --git a/src/otg/gene_index.py b/src/otg/gene_index.py
index 90d23553e..4a2cc34c1 100644
--- a/src/otg/gene_index.py
+++ b/src/otg/gene_index.py
@@ -3,22 +3,30 @@
from dataclasses import dataclass
+from omegaconf import MISSING
+
from otg.common.session import Session
-from otg.config import GeneIndexStepConfig
from otg.datasource.open_targets.target import OpenTargetsTarget
@dataclass
-class GeneIndexStep(GeneIndexStepConfig):
+class GeneIndexStep:
"""Gene index step.
This step generates a gene index dataset from an Open Targets Platform target dataset.
+
+ Attributes:
+ session (Session): Session object.
+ target_path (str): Open targets Platform target dataset path.
+ gene_index_path (str): Output gene index path.
"""
- session: Session = Session()
+ session: Session = MISSING
+ target_path: str = MISSING
+ gene_index_path: str = MISSING
- def run(self: GeneIndexStep) -> None:
- """Run Target index step."""
+ def __post_init__(self: GeneIndexStep) -> None:
+ """Run step."""
# Extract
platform_target = self.session.spark.read.parquet(self.target_path)
# Transform
diff --git a/src/otg/gwas_catalog.py b/src/otg/gwas_catalog.py
deleted file mode 100644
index a81c7c5f4..000000000
--- a/src/otg/gwas_catalog.py
+++ /dev/null
@@ -1,71 +0,0 @@
-"""Step to generate variant annotation dataset."""
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-import hail as hl
-
-from otg.common.session import Session
-from otg.config import GWASCatalogStepConfig
-from otg.dataset.ld_index import LDIndex
-from otg.dataset.variant_annotation import VariantAnnotation
-from otg.datasource.gwas_catalog.associations import GWASCatalogAssociations
-from otg.datasource.gwas_catalog.study_index import GWASCatalogStudyIndex
-from otg.datasource.gwas_catalog.study_splitter import GWASCatalogStudySplitter
-from otg.method.ld import LDAnnotator
-from otg.method.pics import PICS
-
-
-@dataclass
-class GWASCatalogStep(GWASCatalogStepConfig):
- """GWAS Catalog step."""
-
- session: Session = Session()
-
- def run(self: GWASCatalogStep) -> None:
- """Run GWAS Catalog ingestion step to extract GWASCatalog Study and StudyLocus tables."""
- hl.init(sc=self.session.spark.sparkContext, log="/dev/null")
- # All inputs:
- # Variant annotation dataset
- va = VariantAnnotation.from_parquet(self.session, self.variant_annotation_path)
- # GWAS Catalog raw study information
- catalog_studies = self.session.spark.read.csv(
- self.catalog_studies_file, sep="\t", header=True
- )
- # GWAS Catalog ancestry information
- ancestry_lut = self.session.spark.read.csv(
- self.catalog_ancestry_file, sep="\t", header=True
- )
- # GWAS Catalog summary statistics information
- sumstats_lut = self.session.spark.read.csv(
- self.catalog_sumstats_lut, sep="\t", header=False
- )
- # GWAS Catalog raw association information
- catalog_associations = self.session.spark.read.csv(
- self.catalog_associations_file, sep="\t", header=True
- )
- # LD index dataset
- ld_index = LDIndex.from_parquet(self.session, self.ld_index_path)
-
- # Transform:
- # GWAS Catalog study index and study-locus splitted
- study_index, study_locus = GWASCatalogStudySplitter.split(
- GWASCatalogStudyIndex.from_source(
- catalog_studies, ancestry_lut, sumstats_lut
- ),
- GWASCatalogAssociations.from_source(catalog_associations, va),
- )
-
- # Annotate LD information and clump associations dataset
- study_locus_ld = LDAnnotator.ld_annotate(study_locus, study_index, ld_index)
-
- # Fine-mapping LD-clumped study-locus using PICS
- finemapped_study_locus = PICS.finemap(study_locus_ld).annotate_credible_sets()
-
- # Write:
- study_index.df.write.mode(self.session.write_mode).parquet(
- self.catalog_studies_out
- )
- finemapped_study_locus.df.write.mode(self.session.write_mode).parquet(
- self.catalog_associations_out
- )
diff --git a/src/otg/gwas_catalog_ingestion.py b/src/otg/gwas_catalog_ingestion.py
new file mode 100644
index 000000000..bea0bbed2
--- /dev/null
+++ b/src/otg/gwas_catalog_ingestion.py
@@ -0,0 +1,75 @@
+"""Step to process GWAS Catalog associations and study table."""
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from omegaconf import MISSING
+
+from otg.common.session import Session
+from otg.dataset.variant_annotation import VariantAnnotation
+from otg.datasource.gwas_catalog.associations import (
+ GWASCatalogCuratedAssociationsParser,
+)
+from otg.datasource.gwas_catalog.study_index import StudyIndexGWASCatalogParser
+from otg.datasource.gwas_catalog.study_splitter import GWASCatalogStudySplitter
+
+
+@dataclass
+class GWASCatalogIngestionStep:
+ """GWAS Catalog ingestion step to extract GWASCatalog Study and StudyLocus tables.
+
+ !!!note This step currently only processes the GWAS Catalog curated list of top hits.
+
+ Attributes:
+ session (Session): Session object.
+ catalog_study_files (list[str]): List of raw GWAS catalog studies file.
+ catalog_ancestry_files (list[str]): List of raw ancestry annotations files from GWAS Catalog.
+ catalog_sumstats_lut (str): GWAS Catalog summary statistics lookup table.
+ catalog_associations_file (str): Raw GWAS catalog associations file.
+ variant_annotation_path (str): Input variant annotation path.
+ ld_populations (list): List of populations to include.
+ catalog_studies_out (str): Output GWAS catalog studies path.
+ catalog_associations_out (str): Output GWAS catalog associations path.
+ """
+
+ session: Session = MISSING
+ catalog_study_files: list[str] = MISSING
+ catalog_ancestry_files: list[str] = MISSING
+ catalog_sumstats_lut: str = MISSING
+ catalog_associations_file: str = MISSING
+ variant_annotation_path: str = MISSING
+ catalog_studies_out: str = MISSING
+ catalog_associations_out: str = MISSING
+
+ def __post_init__(self: GWASCatalogIngestionStep) -> None:
+ """Run step."""
+ # Extract
+ va = VariantAnnotation.from_parquet(self.session, self.variant_annotation_path)
+ catalog_studies = self.session.spark.read.csv(
+ self.catalog_study_files, sep="\t", header=True
+ )
+ ancestry_lut = self.session.spark.read.csv(
+ self.catalog_ancestry_files, sep="\t", header=True
+ )
+ sumstats_lut = self.session.spark.read.csv(
+ self.catalog_sumstats_lut, sep="\t", header=False
+ )
+ catalog_associations = self.session.spark.read.csv(
+ self.catalog_associations_file, sep="\t", header=True
+ ).persist()
+
+ # Transform
+ study_index, study_locus = GWASCatalogStudySplitter.split(
+ StudyIndexGWASCatalogParser.from_source(
+ catalog_studies, ancestry_lut, sumstats_lut
+ ),
+ GWASCatalogCuratedAssociationsParser.from_source(catalog_associations, va),
+ )
+
+ # Load
+ study_index.df.write.mode(self.session.write_mode).parquet(
+ self.catalog_studies_out
+ )
+ study_locus.df.write.mode(self.session.write_mode).parquet(
+ self.catalog_associations_out
+ )
diff --git a/src/otg/gwas_catalog_sumstat_preprocess.py b/src/otg/gwas_catalog_sumstat_preprocess.py
index 2a3584f78..682aed1cf 100644
--- a/src/otg/gwas_catalog_sumstat_preprocess.py
+++ b/src/otg/gwas_catalog_sumstat_preprocess.py
@@ -3,34 +3,34 @@
from dataclasses import dataclass
+from omegaconf import MISSING
+
from otg.common.session import Session
-from otg.config import GWASCatalogSumstatsPreprocessConfig
from otg.datasource.gwas_catalog.summary_statistics import GWASCatalogSummaryStatistics
@dataclass
-class GWASCatalogSumstatsPreprocessStep(GWASCatalogSumstatsPreprocessConfig):
- """Step to preprocess GWAS Catalog harmonised summary stats."""
+class GWASCatalogSumstatsPreprocessStep:
+ """Step to preprocess GWAS Catalog harmonised summary stats.
+
+ Attributes:
+ session (Session): Session object.
+ raw_sumstats_path (str): Input raw GWAS Catalog summary statistics path.
+ out_sumstats_path (str): Output GWAS Catalog summary statistics path.
+ """
- session: Session = Session()
+ session: Session = MISSING
+ raw_sumstats_path: str = MISSING
+ out_sumstats_path: str = MISSING
- def run(self: GWASCatalogSumstatsPreprocessStep) -> None:
- """Run Step."""
+ def __post_init__(self: GWASCatalogSumstatsPreprocessStep) -> None:
+ """Run step."""
# Extract
self.session.logger.info(self.raw_sumstats_path)
self.session.logger.info(self.out_sumstats_path)
- self.session.logger.info(self.study_id)
-
- # Reading dataset:
- raw_dataset = self.session.spark.read.csv(
- self.raw_sumstats_path, header=True, sep="\t"
- )
- self.session.logger.info(
- f"Number of single point associations: {raw_dataset.count()}"
- )
# Processing dataset:
GWASCatalogSummaryStatistics.from_gwas_harmonized_summary_stats(
- raw_dataset, self.study_id
+ self.session.spark, self.raw_sumstats_path
).df.write.mode(self.session.write_mode).parquet(self.out_sumstats_path)
self.session.logger.info("Processing dataset successfully completed.")
diff --git a/src/otg/l2g.py b/src/otg/l2g.py
new file mode 100644
index 000000000..701bad308
--- /dev/null
+++ b/src/otg/l2g.py
@@ -0,0 +1,210 @@
+"""Step to run Locus to Gene either for inference or for training."""
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+from typing import Any
+
+import pyspark.sql.functions as f
+import sklearn
+from omegaconf import MISSING
+from xgboost.spark import SparkXGBClassifier
+
+from otg.common.session import Session
+
+# from otg.dataset.colocalisation import Colocalisation
+from otg.dataset.l2g_feature_matrix import L2GFeatureMatrix
+from otg.dataset.l2g_gold_standard import L2GGoldStandard
+from otg.dataset.l2g_prediction import L2GPrediction
+from otg.dataset.study_index import StudyIndex
+from otg.dataset.study_locus import StudyLocus
+from otg.dataset.study_locus_overlap import StudyLocusOverlap
+from otg.dataset.v2g import V2G
+from otg.method.l2g.model import LocusToGeneModel
+from otg.method.l2g.trainer import LocusToGeneTrainer
+
+
+@dataclass
+class LocusToGeneStep:
+ """Locus to gene step.
+
+ Attributes:
+ session (Session): Session object.
+ extended_spark_conf (dict[str, str] | None): Extended Spark configuration.
+ run_mode (str): One of "train" or "predict".
+ wandb_run_name (str | None): Name of the run to be tracked on W&B.
+ perform_cross_validation (bool): Whether to perform cross validation.
+ model_path (str | None): Path to save the model.
+ predictions_path (str | None): Path to save the predictions.
+ credible_set_path (str): Path to credible set Parquet files.
+ variant_gene_path (str): Path to variant to gene Parquet files.
+ colocalisation_path (str): Path to colocalisation Parquet files.
+ study_index_path (str): Path to study index Parquet files.
+ study_locus_overlap_path (str): Path to study locus overlap Parquet files.
+ gold_standard_curation_path (str | None): Path to gold standard curation JSON files.
+ gene_interactions_path (str | None): Path to gene interactions Parquet files.
+ features_list (list[str]): List of features to use.
+ hyperparameters (dict): Hyperparameters for the model.
+ """
+
+ extended_spark_conf: dict[str, str] | None = None
+
+ session: Session = MISSING
+ run_mode: str = MISSING
+ wandb_run_name: str | None = None
+ perform_cross_validation: bool = False
+ model_path: str = MISSING
+ predictions_path: str = MISSING
+ credible_set_path: str = MISSING
+ variant_gene_path: str = MISSING
+ colocalisation_path: str = MISSING
+ study_index_path: str = MISSING
+ study_locus_overlap_path: str = MISSING
+ gold_standard_curation_path: str = MISSING
+ gene_interactions_path: str = MISSING
+ features_list: list[str] = field(
+ default_factory=lambda: [
+ # average distance of all tagging variants to gene TSS
+ "distanceTssMean",
+ # # minimum distance of all tagging variants to gene TSS
+ "distanceTssMinimum",
+ # # maximum vep consequence score of the locus 95% credible set among all genes in the vicinity
+ "vepMaximumNeighborhood",
+ # # maximum vep consequence score of the locus 95% credible set split by gene
+ "vepMaximum",
+ # # max clpp for each (study, locus, gene) aggregating over all eQTLs
+ # "eqtlColocClppLocalMaximum",
+ # # max clpp for each (study, locus) aggregating over all eQTLs
+ # "eqtlColocClppNeighborhoodMaximum",
+ # # max log-likelihood ratio value for each (study, locus, gene) aggregating over all eQTLs
+ # "eqtlColocLlrLocalMaximum",
+ # # max log-likelihood ratio value for each (study, locus) aggregating over all eQTLs
+ # "eqtlColocLlrNeighborhoodMaximum",
+ # # max clpp for each (study, locus, gene) aggregating over all pQTLs
+ # "pqtlColocClppLocalMaximum",
+ # # max clpp for each (study, locus) aggregating over all pQTLs
+ # "pqtlColocClppNeighborhoodMaximum",
+ # # max log-likelihood ratio value for each (study, locus, gene) aggregating over all pQTLs
+ # "pqtlColocLlrLocalMaximum",
+ # # max log-likelihood ratio value for each (study, locus) aggregating over all pQTLs
+ # "pqtlColocLlrNeighborhoodMaximum",
+ # # max clpp for each (study, locus, gene) aggregating over all sQTLs
+ # "sqtlColocClppLocalMaximum",
+ # # max clpp for each (study, locus) aggregating over all sQTLs
+ # "sqtlColocClppNeighborhoodMaximum",
+ # # max log-likelihood ratio value for each (study, locus, gene) aggregating over all sQTLs
+ # "sqtlColocLlrLocalMaximum",
+ # # max log-likelihood ratio value for each (study, locus) aggregating over all sQTLs
+ # "sqtlColocLlrNeighborhoodMaximum",
+ ]
+ )
+ hyperparameters: dict[str, Any] = field(
+ default_factory=lambda: {
+ "max_depth": 5,
+ "loss_function": "binary:logistic",
+ }
+ )
+
+ def __post_init__(self: LocusToGeneStep) -> None:
+ """Run step.
+
+ Raises:
+ ValueError: if run_mode is not one of "train" or "predict".
+ """
+ print("Sci-kit learn version: ", sklearn.__version__) # noqa: T201
+ if self.run_mode not in ["train", "predict"]:
+ raise ValueError(
+ f"run_mode must be one of 'train' or 'predict', got {self.run_mode}"
+ )
+ # Load common inputs
+ credible_set = StudyLocus.from_parquet(
+ self.session, self.credible_set_path, recursiveFileLookup=True
+ )
+ studies = StudyIndex.from_parquet(
+ self.session, self.study_index_path, recursiveFileLookup=True
+ )
+ v2g = V2G.from_parquet(self.session, self.variant_gene_path)
+ # coloc = Colocalisation.from_parquet(self.session, self.colocalisation_path) # TODO: run step
+
+ if self.run_mode == "train":
+ # Process gold standard and L2G features
+ study_locus_overlap = StudyLocusOverlap.from_parquet(
+ self.session, self.study_locus_overlap_path
+ )
+ gs_curation = self.session.spark.read.json(self.gold_standard_curation_path)
+ interactions = self.session.spark.read.parquet(self.gene_interactions_path)
+
+ gold_standards = L2GGoldStandard.from_otg_curation(
+ gold_standard_curation=gs_curation,
+ v2g=v2g,
+ study_locus_overlap=study_locus_overlap,
+ interactions=interactions,
+ )
+
+ fm = L2GFeatureMatrix.generate_features(
+ features_list=self.features_list,
+ study_locus=credible_set,
+ study_index=studies,
+ variant_gene=v2g,
+ # colocalisation=coloc,
+ )
+
+ # Join and fill null values with 0
+ data = L2GFeatureMatrix(
+ _df=fm.df.join(
+ f.broadcast(
+ gold_standards.df.drop("variantId", "studyId", "sources")
+ ),
+ on=["studyLocusId", "geneId"],
+ how="inner",
+ ),
+ _schema=L2GFeatureMatrix.get_schema(),
+ ).fill_na()
+
+ # Instantiate classifier
+ estimator = SparkXGBClassifier(
+ eval_metric="logloss",
+ features_col="features",
+ label_col="label",
+ max_depth=5,
+ )
+ l2g_model = LocusToGeneModel(
+ features_list=list(self.features_list), estimator=estimator
+ )
+ if self.perform_cross_validation:
+ # Perform cross validation to extract what are the best hyperparameters
+ cv_folds = self.hyperparameters.get("cross_validation_folds", 5)
+ LocusToGeneTrainer.cross_validate(
+ l2g_model=l2g_model,
+ data=data,
+ num_folds=cv_folds,
+ )
+ else:
+ # Train model
+ LocusToGeneTrainer.train(
+ data=data,
+ l2g_model=l2g_model,
+ features_list=list(self.features_list),
+ model_path=self.model_path,
+ evaluate=True,
+ wandb_run_name=self.wandb_run_name,
+ **self.hyperparameters,
+ )
+ self.session.logger.info(self.model_path)
+
+ if self.run_mode == "predict":
+ if not self.model_path or not self.predictions_path:
+ raise ValueError(
+ "model_path and predictions_path must be set for predict mode."
+ )
+ predictions = L2GPrediction.from_credible_set(
+ self.model_path,
+ self.features_list,
+ credible_set,
+ studies,
+ v2g,
+ # coloc
+ )
+ predictions.df.write.mode(self.session.write_mode).parquet(
+ self.predictions_path
+ )
+ self.session.logger.info(self.predictions_path)
diff --git a/src/otg/ld_index.py b/src/otg/ld_index.py
index ccc416df5..54ab93066 100644
--- a/src/otg/ld_index.py
+++ b/src/otg/ld_index.py
@@ -4,36 +4,38 @@
from dataclasses import dataclass
import hail as hl
+from omegaconf import MISSING
from otg.common.session import Session
-from otg.config import LDIndexStepConfig
from otg.datasource.gnomad.ld import GnomADLDMatrix
@dataclass
-class LDIndexStep(LDIndexStepConfig):
+class LDIndexStep:
"""LD index step.
!!! warning "This step is resource intensive"
Suggested params: high memory machine, 5TB of boot disk, no SSDs.
+ Attributes:
+ session (Session): Session object.
+ min_r2 (float): Minimum r2 to consider when considering variants within a window.
+ ld_index_out (str): Output LD index path.
"""
- session: Session = Session()
+ session: Session = MISSING
- def run(self: LDIndexStep) -> None:
- """Run LD index dump step."""
+ min_r2: float = 0.5
+ ld_index_out: str = MISSING
+
+ def __post_init__(self: LDIndexStep) -> None:
+ """Run step."""
hl.init(sc=self.session.spark.sparkContext, log="/dev/null")
- ld_index = GnomADLDMatrix.as_ld_index(
- self.ld_populations,
- self.ld_matrix_template,
- self.ld_index_raw_template,
- self.grch37_to_grch38_chain_path,
- self.min_r2,
- )
- self.session.logger.info(f"Writing LD index to: {self.ld_index_out}")
(
- ld_index.df.write.partitionBy("chromosome")
+ GnomADLDMatrix()
+ .as_ld_index(self.min_r2)
+ .df.write.partitionBy("chromosome")
.mode(self.session.write_mode)
- .parquet(f"{self.ld_index_out}")
+ .parquet(self.ld_index_out)
)
+ self.session.logger.info(self.ld_index_out)
diff --git a/src/otg/method/clump.py b/src/otg/method/clump.py
index abf0c6e2b..9f117fc01 100644
--- a/src/otg/method/clump.py
+++ b/src/otg/method/clump.py
@@ -32,7 +32,7 @@ def _is_lead_linked(
variant_id (Column): Lead variant id
p_value_exponent (Column): p-value exponent
p_value_mantissa (Column): p-value mantissa
- locus (Column): Credible set
+ ld_set (Column): Array of variants in LD with the lead variant
Returns:
Column: Boolean in which True indicates that the lead is linked to another tag in the same dataset.
diff --git a/src/otg/method/colocalisation.py b/src/otg/method/colocalisation.py
index 5787b61d6..6e72d570f 100644
--- a/src/otg/method/colocalisation.py
+++ b/src/otg/method/colocalisation.py
@@ -13,7 +13,7 @@
from otg.dataset.colocalisation import Colocalisation
if TYPE_CHECKING:
- from numpy import ndarray
+ from numpy.typing import NDArray
from pyspark.sql import Column
from otg.dataset.study_locus_overlap import StudyLocusOverlap
@@ -105,14 +105,14 @@ class Coloc:
"""
@staticmethod
- def _get_logsum(log_abf: ndarray) -> float:
+ def _get_logsum(log_abf: NDArray[np.float64]) -> float:
"""Calculates logsum of vector.
This function calculates the log of the sum of the exponentiated
logs taking out the max, i.e. insuring that the sum is not Inf
Args:
- log_abf (ndarray): log approximate bayes factor
+ log_abf (NDArray[np.float64]): log approximate bayes factor
Returns:
float: logsum
@@ -127,11 +127,11 @@ def _get_logsum(log_abf: ndarray) -> float:
return float(result)
@staticmethod
- def _get_posteriors(all_abfs: ndarray) -> DenseVector:
+ def _get_posteriors(all_abfs: NDArray[np.float64]) -> DenseVector:
"""Calculate posterior probabilities for each hypothesis.
Args:
- all_abfs (ndarray): h0-h4 bayes factors
+ all_abfs (NDArray[np.float64]): h0-h4 bayes factors
Returns:
DenseVector: Posterior
diff --git a/src/otg/method/l2g/__init__.py b/src/otg/method/l2g/__init__.py
new file mode 100644
index 000000000..c08bd9bd7
--- /dev/null
+++ b/src/otg/method/l2g/__init__.py
@@ -0,0 +1,3 @@
+"""Method classes for Locus-To-Gene."""
+
+from __future__ import annotations
diff --git a/src/otg/method/l2g/evaluator.py b/src/otg/method/l2g/evaluator.py
new file mode 100644
index 000000000..f41b1d45e
--- /dev/null
+++ b/src/otg/method/l2g/evaluator.py
@@ -0,0 +1,204 @@
+"""Module that integrates Spark ML Evaluators with W&B for experiment tracking."""
+from __future__ import annotations
+
+import itertools
+from typing import TYPE_CHECKING, Any, Dict
+
+from pyspark import keyword_only
+from pyspark.ml.evaluation import (
+ BinaryClassificationEvaluator,
+ Evaluator,
+ MulticlassClassificationEvaluator,
+)
+from pyspark.ml.param import Param, Params, TypeConverters
+from wandb.sdk.wandb_run import Run
+
+if TYPE_CHECKING:
+ from pyspark.sql import DataFrame
+
+
+class WandbEvaluator(Evaluator):
+ """Wrapper for pyspark Evaluators. It is expected that the user will provide an Evaluators, and this wrapper will log metrics from said evaluator to W&B."""
+
+ spark_ml_evaluator: Param[Evaluator] = Param(
+ Params._dummy(), "spark_ml_evaluator", "evaluator from pyspark.ml.evaluation"
+ )
+
+ wandb_run: Param[Run] = Param(
+ Params._dummy(),
+ "wandb_run",
+ "wandb run. Expects an already initialized run. You should set this, or wandb_run_kwargs, NOT BOTH",
+ )
+
+ wandb_run_kwargs: Param[Any] = Param(
+ Params._dummy(),
+ "wandb_run_kwargs",
+ "kwargs to be passed to wandb.init. You should set this, or wandb_runId, NOT BOTH. Setting this is useful when using with WandbCrossValdidator",
+ )
+
+ wandb_runId: Param[str] = Param( # noqa: N815
+ Params._dummy(),
+ "wandb_runId",
+ "wandb run id. if not providing an intialized run to wandb_run, a run with id wandb_runId will be resumed",
+ )
+
+ wandb_project_name: Param[str] = Param(
+ Params._dummy(),
+ "wandb_project_name",
+ "name of W&B project",
+ typeConverter=TypeConverters.toString,
+ )
+
+ label_values: Param[list[str]] = Param(
+ Params._dummy(),
+ "label_values",
+ "for classification and multiclass classification, this is a list of values the label can assume\nIf provided Multiclass or Multilabel evaluator without label_values, we'll figure it out from dataset passed through to evaluate.",
+ )
+
+ _input_kwargs: Dict[str, Any]
+
+ @keyword_only
+ def __init__(
+ self: WandbEvaluator,
+ label_values: list[str] | None = None,
+ **kwargs: BinaryClassificationEvaluator
+ | MulticlassClassificationEvaluator
+ | Run,
+ ) -> None:
+ """Initialize a WandbEvaluator.
+
+ Args:
+ label_values (list[str] | None): List of label values.
+ **kwargs (BinaryClassificationEvaluator | MulticlassClassificationEvaluator | Run): Keyword arguments.
+ """
+ if label_values is None:
+ label_values = []
+ super(Evaluator, self).__init__()
+
+ self.metrics = {
+ MulticlassClassificationEvaluator: [
+ "f1",
+ "accuracy",
+ "weightedPrecision",
+ "weightedRecall",
+ "weightedTruePositiveRate",
+ "weightedFalsePositiveRate",
+ "weightedFMeasure",
+ "truePositiveRateByLabel",
+ "falsePositiveRateByLabel",
+ "precisionByLabel",
+ "recallByLabel",
+ "fMeasureByLabel",
+ "logLoss",
+ "hammingLoss",
+ ],
+ BinaryClassificationEvaluator: ["areaUnderROC", "areaUnderPR"],
+ }
+
+ self._setDefault(label_values=[])
+ kwargs = self._input_kwargs
+ self._set(**kwargs)
+
+ def setspark_ml_evaluator(self: WandbEvaluator, value: Evaluator) -> None:
+ """Set the spark_ml_evaluator parameter.
+
+ Args:
+ value (Evaluator): Spark ML evaluator.
+ """
+ self._set(spark_ml_evaluator=value)
+
+ def setlabel_values(self: WandbEvaluator, value: list[str]) -> None:
+ """Set the label_values parameter.
+
+ Args:
+ value (list[str]): List of label values.
+ """
+ self._set(label_values=value)
+
+ def getspark_ml_evaluator(self: WandbEvaluator) -> Evaluator:
+ """Get the spark_ml_evaluator parameter.
+
+ Returns:
+ Evaluator: Spark ML evaluator.
+ """
+ return self.getOrDefault(self.spark_ml_evaluator)
+
+ def getwandb_run(self: WandbEvaluator) -> Run:
+ """Get the wandb_run parameter.
+
+ Returns:
+ Run: Wandb run object.
+ """
+ return self.getOrDefault(self.wandb_run)
+
+ def getwandb_project_name(self: WandbEvaluator) -> Any:
+ """Get the wandb_project_name parameter.
+
+ Returns:
+ Any: Name of the W&B project.
+ """
+ return self.getOrDefault(self.wandb_project_name)
+
+ def getlabel_values(self: WandbEvaluator) -> list[str]:
+ """Get the label_values parameter.
+
+ Returns:
+ list[str]: List of label values.
+ """
+ return self.getOrDefault(self.label_values)
+
+ def _evaluate(self: WandbEvaluator, dataset: DataFrame) -> float:
+ """Evaluate the model on the given dataset.
+
+ Args:
+ dataset (DataFrame): Dataset to evaluate the model on.
+
+ Returns:
+ float: Metric value.
+ """
+ dataset.persist()
+ metric_values: list[tuple[str, Any]] = []
+ label_values = self.getlabel_values()
+ spark_ml_evaluator: BinaryClassificationEvaluator | MulticlassClassificationEvaluator = (
+ self.getspark_ml_evaluator() # type: ignore[assignment, unused-ignore]
+ )
+ run = self.getwandb_run()
+ evaluator_type = type(spark_ml_evaluator)
+ for metric in self.metrics[evaluator_type]:
+ if "ByLabel" in metric and label_values == []:
+ print( # noqa: T201
+ "no label_values for the target have been provided and will be determined by the dataset. This could take some time"
+ )
+ label_values = [
+ r[spark_ml_evaluator.getLabelCol()]
+ for r in dataset.select(spark_ml_evaluator.getLabelCol())
+ .distinct()
+ .collect()
+ ]
+ if isinstance(label_values[0], list):
+ merged = list(itertools.chain(*label_values))
+ label_values = list(dict.fromkeys(merged).keys())
+ self.setlabel_values(label_values)
+ for label in label_values:
+ out = spark_ml_evaluator.evaluate(
+ dataset,
+ {
+ spark_ml_evaluator.metricLabel: label, # type: ignore[assignment, unused-ignore]
+ spark_ml_evaluator.metricName: metric,
+ },
+ )
+ metric_values.append((f"{metric}:{label}", out))
+ out = spark_ml_evaluator.evaluate(
+ dataset, {spark_ml_evaluator.metricName: metric}
+ )
+ metric_values.append((f"{metric}", out))
+ run.log(dict(metric_values))
+ config = [
+ (f"{k.parent.split('_')[0]}.{k.name}", v)
+ for k, v in spark_ml_evaluator.extractParamMap().items()
+ if "metric" not in k.name
+ ]
+ run.config.update(dict(config))
+ return_metric = spark_ml_evaluator.evaluate(dataset)
+ dataset.unpersist()
+ return return_metric
diff --git a/src/otg/method/l2g/feature_factory.py b/src/otg/method/l2g/feature_factory.py
new file mode 100644
index 000000000..19ba5bb88
--- /dev/null
+++ b/src/otg/method/l2g/feature_factory.py
@@ -0,0 +1,360 @@
+"""Collection of methods that extract features from the OTG datasets to be fed in L2G."""
+from __future__ import annotations
+
+from functools import reduce
+from typing import TYPE_CHECKING
+
+import pyspark.sql.functions as f
+
+from otg.common.spark_helpers import (
+ convert_from_wide_to_long,
+ get_record_with_maximum_value,
+)
+from otg.dataset.l2g_feature import L2GFeature
+from otg.dataset.study_locus import CredibleInterval, StudyLocus
+
+if TYPE_CHECKING:
+ from pyspark.sql import Column, DataFrame
+
+ from otg.dataset.colocalisation import Colocalisation
+ from otg.dataset.study_index import StudyIndex
+ from otg.dataset.v2g import V2G
+
+
+class ColocalisationFactory:
+ """Feature extraction in colocalisation."""
+
+ @staticmethod
+ def _get_max_coloc_per_study_locus(
+ study_locus: StudyLocus,
+ studies: StudyIndex,
+ colocalisation: Colocalisation,
+ colocalisation_method: str,
+ ) -> L2GFeature:
+ """Get the maximum colocalisation posterior probability for each pair of overlapping study-locus per type of colocalisation method and QTL type.
+
+ Args:
+ study_locus (StudyLocus): Study locus dataset
+ studies (StudyIndex): Study index dataset
+ colocalisation (Colocalisation): Colocalisation dataset
+ colocalisation_method (str): Colocalisation method to extract the max from
+
+ Returns:
+ L2GFeature: Stores the features with the max coloc probabilities for each pair of study-locus
+
+ Raises:
+ ValueError: If the colocalisation method is not supported
+ """
+ if colocalisation_method not in ["COLOC", "eCAVIAR"]:
+ raise ValueError(
+ f"Colocalisation method {colocalisation_method} not supported"
+ )
+ if colocalisation_method == "COLOC":
+ coloc_score_col_name = "log2h4h3"
+ coloc_feature_col_template = "max_coloc_llr"
+
+ elif colocalisation_method == "eCAVIAR":
+ coloc_score_col_name = "clpp"
+ coloc_feature_col_template = "max_coloc_clpp"
+
+ colocalising_study_locus = (
+ study_locus.df.select("studyLocusId", "studyId")
+ # annotate studyLoci with overlapping IDs on the left - to just keep GWAS associations
+ .join(
+ colocalisation._df.selectExpr(
+ "leftStudyLocusId as studyLocusId",
+ "rightStudyLocusId",
+ "colocalisationMethod",
+ f"{coloc_score_col_name} as coloc_score",
+ ),
+ on="studyLocusId",
+ how="inner",
+ )
+ # bring study metadata to just keep QTL studies on the right
+ .join(
+ study_locus.df.selectExpr(
+ "studyLocusId as rightStudyLocusId", "studyId as right_studyId"
+ ),
+ on="rightStudyLocusId",
+ how="inner",
+ )
+ .join(
+ f.broadcast(
+ studies._df.selectExpr(
+ "studyId as right_studyId",
+ "studyType as right_studyType",
+ "geneId",
+ )
+ ),
+ on="right_studyId",
+ how="inner",
+ )
+ .filter(
+ (f.col("colocalisationMethod") == colocalisation_method)
+ & (f.col("right_studyType") != "gwas")
+ )
+ .select("studyLocusId", "right_studyType", "geneId", "coloc_score")
+ )
+
+ # Max LLR calculation per studyLocus AND type of QTL
+ local_max = get_record_with_maximum_value(
+ colocalising_study_locus,
+ ["studyLocusId", "right_studyType", "geneId"],
+ "coloc_score",
+ )
+ neighbourhood_max = (
+ get_record_with_maximum_value(
+ colocalising_study_locus,
+ ["studyLocusId", "right_studyType"],
+ "coloc_score",
+ )
+ .join(
+ local_max.selectExpr("studyLocusId", "coloc_score as coloc_local_max"),
+ on="studyLocusId",
+ how="inner",
+ )
+ .withColumn(
+ f"{coloc_feature_col_template}_nbh",
+ f.col("coloc_local_max") - f.col("coloc_score"),
+ )
+ )
+
+ # Split feature per molQTL
+ local_dfs = []
+ nbh_dfs = []
+ for qtl_type in ["eqtl", "sqtl", "pqtl"]:
+ local_max = local_max.filter(
+ f.col("right_studyType") == qtl_type
+ ).withColumnRenamed(
+ "coloc_score", f"{qtl_type}_{coloc_feature_col_template}_local"
+ )
+ local_dfs.append(local_max)
+
+ neighbourhood_max = neighbourhood_max.filter(
+ f.col("right_studyType") == qtl_type
+ ).withColumnRenamed(
+ f"{coloc_feature_col_template}_nbh",
+ f"{qtl_type}_{coloc_feature_col_template}_nbh",
+ )
+ nbh_dfs.append(neighbourhood_max)
+
+ wide_dfs = reduce(
+ lambda x, y: x.unionByName(y, allowMissingColumns=True),
+ local_dfs + nbh_dfs,
+ colocalising_study_locus.limit(0),
+ )
+
+ return L2GFeature(
+ _df=convert_from_wide_to_long(
+ wide_dfs,
+ id_vars=("studyLocusId", "geneId"),
+ var_name="featureName",
+ value_name="featureValue",
+ ),
+ _schema=L2GFeature.get_schema(),
+ )
+
+ @staticmethod
+ def _get_coloc_features(
+ study_locus: StudyLocus, studies: StudyIndex, colocalisation: Colocalisation
+ ) -> L2GFeature:
+ """Calls _get_max_coloc_per_study_locus for both methods and concatenates the results.
+
+ Args:
+ study_locus (StudyLocus): Study locus dataset
+ studies (StudyIndex): Study index dataset
+ colocalisation (Colocalisation): Colocalisation dataset
+
+ Returns:
+ L2GFeature: Stores the features with the max coloc probabilities for each pair of study-locus
+ """
+ coloc_llr = ColocalisationFactory._get_max_coloc_per_study_locus(
+ study_locus,
+ studies,
+ colocalisation,
+ "COLOC",
+ )
+ coloc_clpp = ColocalisationFactory._get_max_coloc_per_study_locus(
+ study_locus,
+ studies,
+ colocalisation,
+ "eCAVIAR",
+ )
+
+ return L2GFeature(
+ _df=coloc_llr.df.unionByName(coloc_clpp.df, allowMissingColumns=True),
+ _schema=L2GFeature.get_schema(),
+ )
+
+
+class StudyLocusFactory(StudyLocus):
+ """Feature extraction in study locus."""
+
+ @staticmethod
+ def _get_tss_distance_features(
+ study_locus: StudyLocus, distances: V2G
+ ) -> L2GFeature:
+ """Joins StudyLocus with the V2G to extract the minimum distance to a gene TSS of all variants in a StudyLocus credible set.
+
+ Args:
+ study_locus (StudyLocus): Study locus dataset
+ distances (V2G): Dataframe containing the distances of all variants to all genes TSS within a region
+
+ Returns:
+ L2GFeature: Stores the features with the minimum distance among all variants in the credible set and a gene TSS.
+
+ """
+ wide_df = (
+ study_locus.filter_credible_set(CredibleInterval.IS95)
+ .df.select(
+ "studyLocusId",
+ "variantId",
+ f.explode("locus.variantId").alias("tagVariantId"),
+ )
+ .join(
+ distances.df.selectExpr(
+ "variantId as tagVariantId", "geneId", "distance"
+ ),
+ on="tagVariantId",
+ how="inner",
+ )
+ .groupBy("studyLocusId", "geneId")
+ .agg(
+ f.min("distance").alias("distanceTssMinimum"),
+ f.mean("distance").alias("distanceTssMean"),
+ )
+ )
+
+ return L2GFeature(
+ _df=convert_from_wide_to_long(
+ wide_df,
+ id_vars=("studyLocusId", "geneId"),
+ var_name="featureName",
+ value_name="featureValue",
+ ),
+ _schema=L2GFeature.get_schema(),
+ )
+
+ @staticmethod
+ def _get_vep_features(
+ credible_set: StudyLocus,
+ v2g: V2G,
+ ) -> L2GFeature:
+ """Get the maximum VEP score for all variants in a locus's 95% credible set.
+
+ This informs about functional impact of the variants in the locus. For more information on variant consequences, see: https://www.ensembl.org/info/genome/variation/prediction/predicted_data.html
+ Two metrics: max VEP score per study locus and gene, and max VEP score per study locus.
+
+
+ Args:
+ credible_set (StudyLocus): Study locus dataset with the associations to be annotated
+ v2g (V2G): V2G dataset with the variant/gene relationships and their consequences
+
+ Returns:
+ L2GFeature: Stores the features with the max VEP score.
+ """
+
+ def _aggregate_vep_feature(
+ df: DataFrame,
+ aggregation_expr: Column,
+ aggregation_cols: list[str],
+ feature_name: str,
+ ) -> DataFrame:
+ """Extracts the maximum or average VEP score after grouping by the given columns. Different aggregations return different predictive annotations.
+
+ If the group_cols include "geneId", the maximum/mean VEP score per gene is returned.
+ Otherwise, the maximum/mean VEP score for all genes in the neighborhood of the locus is returned.
+
+ Args:
+ df (DataFrame): DataFrame with the VEP scores for each variant in a studyLocus
+ aggregation_expr (Column): Aggregation expression to apply
+ aggregation_cols (list[str]): Columns to group by
+ feature_name (str): Name of the feature to be returned
+
+ Returns:
+ DataFrame: DataFrame with the maximum VEP score per locus or per locus/gene
+ """
+ if "geneId" in aggregation_cols:
+ return df.groupBy(aggregation_cols).agg(
+ aggregation_expr.alias(feature_name)
+ )
+ return (
+ df.groupBy(aggregation_cols)
+ .agg(
+ aggregation_expr.alias(feature_name),
+ f.collect_set("geneId").alias("geneId"),
+ )
+ .withColumn("geneId", f.explode("geneId"))
+ )
+
+ credible_set_w_variant_consequences = (
+ credible_set.filter_credible_set(CredibleInterval.IS95)
+ .df.withColumn("variantInLocusId", f.explode(f.col("locus.variantId")))
+ .withColumn(
+ "variantInLocusPosteriorProbability",
+ f.explode(f.col("locus.posteriorProbability")),
+ )
+ .join(
+ # Join with V2G to get variant consequences
+ v2g.df.filter(
+ f.col("datasourceId") == "variantConsequence"
+ ).withColumnRenamed("variantId", "variantInLocusId"),
+ on="variantInLocusId",
+ )
+ .withColumn(
+ "weightedScore",
+ f.col("score") * f.col("variantInLocusPosteriorProbability"),
+ )
+ .select(
+ "studyLocusId",
+ "variantId",
+ "studyId",
+ "geneId",
+ "score",
+ "weightedScore",
+ )
+ .distinct()
+ .persist()
+ )
+
+ return L2GFeature(
+ _df=convert_from_wide_to_long(
+ reduce(
+ lambda x, y: x.unionByName(y, allowMissingColumns=True),
+ [
+ # Calculate overall max VEP score for all genes in the vicinity
+ credible_set_w_variant_consequences.transform(
+ _aggregate_vep_feature,
+ f.max("score"),
+ ["studyLocusId"],
+ "vepMaximumNeighbourhood",
+ ),
+ # Calculate overall max VEP score per gene
+ credible_set_w_variant_consequences.transform(
+ _aggregate_vep_feature,
+ f.max("score"),
+ ["studyLocusId", "geneId"],
+ "vepMaximum",
+ ),
+ # Calculate mean VEP score for all genes in the vicinity
+ credible_set_w_variant_consequences.transform(
+ _aggregate_vep_feature,
+ f.mean("weightedScore"),
+ ["studyLocusId"],
+ "vepMeanNeighbourhood",
+ ),
+ # Calculate mean VEP score per gene
+ credible_set_w_variant_consequences.transform(
+ _aggregate_vep_feature,
+ f.mean("weightedScore"),
+ ["studyLocusId", "geneId"],
+ "vepMean",
+ ),
+ ],
+ ),
+ id_vars=("studyLocusId", "geneId"),
+ var_name="featureName",
+ value_name="featureValue",
+ ).filter(f.col("featureValue").isNotNull()),
+ _schema=L2GFeature.get_schema(),
+ )
diff --git a/src/otg/method/l2g/model.py b/src/otg/method/l2g/model.py
new file mode 100644
index 000000000..2eedfc1f3
--- /dev/null
+++ b/src/otg/method/l2g/model.py
@@ -0,0 +1,305 @@
+"""Locus to Gene classifier."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import TYPE_CHECKING, Any, Type
+
+from pyspark.ml import Pipeline, PipelineModel
+from pyspark.ml.evaluation import (
+ BinaryClassificationEvaluator,
+ MulticlassClassificationEvaluator,
+)
+from pyspark.ml.feature import StringIndexer, VectorAssembler
+from pyspark.ml.tuning import ParamGridBuilder
+from wandb.data_types import Table
+from wandb.sdk import init as wandb_init
+from wandb.wandb_run import Run
+from xgboost.spark.core import SparkXGBClassifierModel
+
+from otg.dataset.l2g_feature_matrix import L2GFeatureMatrix
+from otg.method.l2g.evaluator import WandbEvaluator
+
+if TYPE_CHECKING:
+ from pyspark.ml import Transformer
+ from pyspark.sql import DataFrame
+
+
+@dataclass
+class LocusToGeneModel:
+ """Wrapper for the Locus to Gene classifier."""
+
+ features_list: list[str]
+ estimator: Any = None
+ pipeline: Pipeline = Pipeline(stages=[])
+ model: PipelineModel | None = None
+ wandb_l2g_project_name: str = "otg_l2g"
+
+ def __post_init__(self: LocusToGeneModel) -> None:
+ """Post init that adds the model to the ML pipeline."""
+ label_indexer = StringIndexer(
+ inputCol="goldStandardSet", outputCol="label", handleInvalid="keep"
+ )
+ vector_assembler = LocusToGeneModel.features_vector_assembler(
+ self.features_list
+ )
+
+ self.pipeline = Pipeline(
+ stages=[
+ label_indexer,
+ vector_assembler,
+ ]
+ )
+
+ def save(self: LocusToGeneModel, path: str) -> None:
+ """Saves fitted pipeline model to disk.
+
+ Args:
+ path (str): Path to save the model to
+
+ Raises:
+ ValueError: If the model has not been fitted yet
+ """
+ if self.model is None:
+ raise ValueError("Model has not been fitted yet.")
+ self.model.write().overwrite().save(path)
+
+ @property
+ def classifier(self: LocusToGeneModel) -> Any:
+ """Return the model.
+
+ Returns:
+ Any: An estimator object from Spark ML
+ """
+ return self.estimator
+
+ @staticmethod
+ def features_vector_assembler(features_cols: list[str]) -> VectorAssembler:
+ """Spark transformer to assemble the feature columns into a vector.
+
+ Args:
+ features_cols (list[str]): List of feature columns to assemble
+
+ Returns:
+ VectorAssembler: Spark transformer to assemble the feature columns into a vector
+
+ Examples:
+ >>> from pyspark.ml.feature import VectorAssembler
+ >>> df = spark.createDataFrame([(5.2, 3.5)], schema="feature_1 FLOAT, feature_2 FLOAT")
+ >>> assembler = LocusToGeneModel.features_vector_assembler(["feature_1", "feature_2"])
+ >>> assembler.transform(df).show()
+ +---------+---------+--------------------+
+ |feature_1|feature_2| features|
+ +---------+---------+--------------------+
+ | 5.2| 3.5|[5.19999980926513...|
+ +---------+---------+--------------------+
+
+ """
+ return (
+ VectorAssembler(handleInvalid="error")
+ .setInputCols(features_cols)
+ .setOutputCol("features")
+ )
+
+ def log_to_wandb(
+ self: LocusToGeneModel,
+ results: DataFrame,
+ training_data: L2GFeatureMatrix,
+ evaluators: list[
+ BinaryClassificationEvaluator | MulticlassClassificationEvaluator
+ ],
+ wandb_run: Run,
+ ) -> None:
+ """Log evaluation results and feature importance to W&B.
+
+ Args:
+ results (DataFrame): Dataframe containing the predictions
+ training_data (L2GFeatureMatrix): Training data used for the model. If provided, the table and the number of positive and negative labels will be logged to W&B
+ evaluators (list[BinaryClassificationEvaluator | MulticlassClassificationEvaluator]): List of Spark ML evaluators to use for evaluation
+ wandb_run (Run): W&B run to log the results to
+ """
+ ## Track evaluation metrics
+ for evaluator in evaluators:
+ wandb_evaluator = WandbEvaluator(
+ spark_ml_evaluator=evaluator, wandb_run=wandb_run
+ )
+ wandb_evaluator.evaluate(results)
+ ## Track feature importance
+ wandb_run.log({"importances": self.get_feature_importance()})
+ ## Track training set
+ training_table = Table(dataframe=training_data.df.toPandas())
+ wandb_run.log({"trainingSet": training_table})
+ # Count number of positive and negative labels
+ gs_counts_dict = {
+ "goldStandard" + row["goldStandardSet"].capitalize(): row["count"]
+ for row in training_data.df.groupBy("goldStandardSet").count().collect()
+ }
+ wandb_run.log(gs_counts_dict)
+ # Missingness rates
+ wandb_run.log(
+ {"missingnessRates": training_data.calculate_feature_missingness_rate()}
+ )
+
+ @classmethod
+ def load_from_disk(
+ cls: Type[LocusToGeneModel], path: str, features_list: list[str]
+ ) -> LocusToGeneModel:
+ """Load a fitted pipeline model from disk.
+
+ Args:
+ path (str): Path to the model
+ features_list (list[str]): List of features used for the model
+
+ Returns:
+ LocusToGeneModel: L2G model loaded from disk
+ """
+ return cls(model=PipelineModel.load(path), features_list=features_list)
+
+ @classifier.setter # type: ignore
+ def classifier(self: LocusToGeneModel, new_estimator: Any) -> None:
+ """Set the model.
+
+ Args:
+ new_estimator (Any): An estimator object from Spark ML
+ """
+ self.estimator = new_estimator
+
+ def get_param_grid(self: LocusToGeneModel) -> list[Any]:
+ """Return the parameter grid for the model.
+
+ Returns:
+ list[Any]: List of parameter maps to use for cross validation
+ """
+ return (
+ ParamGridBuilder()
+ .addGrid(self.estimator.max_depth, [3, 5, 7])
+ .addGrid(self.estimator.learning_rate, [0.01, 0.1, 1.0])
+ .build()
+ )
+
+ def add_pipeline_stage(
+ self: LocusToGeneModel, transformer: Transformer
+ ) -> LocusToGeneModel:
+ """Adds a stage to the L2G pipeline.
+
+ Args:
+ transformer (Transformer): Spark transformer to add to the pipeline
+
+ Returns:
+ LocusToGeneModel: L2G model with the new transformer
+
+ Examples:
+ >>> from pyspark.ml.regression import LinearRegression
+ >>> estimator = LinearRegression()
+ >>> test_model = LocusToGeneModel(features_list=["a", "b"])
+ >>> print(len(test_model.pipeline.getStages()))
+ 2
+ >>> print(len(test_model.add_pipeline_stage(estimator).pipeline.getStages()))
+ 3
+ """
+ pipeline_stages = self.pipeline.getStages()
+ new_stages = pipeline_stages + [transformer]
+ self.pipeline = Pipeline(stages=new_stages)
+ return self
+
+ def evaluate(
+ self: LocusToGeneModel,
+ results: DataFrame,
+ hyperparameters: dict[str, Any],
+ wandb_run_name: str | None,
+ training_data: L2GFeatureMatrix | None = None,
+ ) -> None:
+ """Perform evaluation of the model predictions for the test set and track the results with W&B.
+
+ Args:
+ results (DataFrame): Dataframe containing the predictions
+ hyperparameters (dict[str, Any]): Hyperparameters used for the model
+ wandb_run_name (str | None): Descriptive name for the run to be tracked with W&B
+ training_data (L2GFeatureMatrix | None): Training data used for the model. If provided, the ratio of positive to negative labels will be logged to W&B
+ """
+ binary_evaluator = BinaryClassificationEvaluator(
+ rawPredictionCol="rawPrediction", labelCol="label"
+ )
+ multi_evaluator = MulticlassClassificationEvaluator(
+ labelCol="label", predictionCol="prediction"
+ )
+
+ if wandb_run_name and training_data:
+ run = wandb_init(
+ project=self.wandb_l2g_project_name,
+ config=hyperparameters,
+ name=wandb_run_name,
+ )
+ if isinstance(run, Run):
+ self.log_to_wandb(
+ results, training_data, [binary_evaluator, multi_evaluator], run
+ )
+ run.finish()
+
+ @property
+ def feature_name_map(self: LocusToGeneModel) -> dict[str, str]:
+ """Return a dictionary mapping encoded feature names to the original names.
+
+ Returns:
+ dict[str, str]: Feature name map of the model
+
+ Raises:
+ ValueError: If the model has not been fitted yet
+ """
+ if not self.model:
+ raise ValueError("Model not fitted yet. `fit()` has to be called first.")
+ elif isinstance(self.model.stages[1], VectorAssembler):
+ feature_names = self.model.stages[1].getInputCols()
+ return {f"f{i}": feature_name for i, feature_name in enumerate(feature_names)}
+
+ def get_feature_importance(self: LocusToGeneModel) -> dict[str, float]:
+ """Return dictionary with relative importances of every feature in the model. Feature names are encoded and have to be mapped back to their original names.
+
+ Returns:
+ dict[str, float]: Dictionary mapping feature names to their importance
+
+ Raises:
+ ValueError: If the model has not been fitted yet or is not an XGBoost model
+ """
+ if not self.model or not isinstance(
+ self.model.stages[-1], SparkXGBClassifierModel
+ ):
+ raise ValueError(
+ f"Model type {type(self.model)} not supported for feature importance."
+ )
+ importance_map = self.model.stages[-1].get_feature_importances()
+ return {self.feature_name_map[k]: v for k, v in importance_map.items()}
+
+ def fit(
+ self: LocusToGeneModel,
+ feature_matrix: L2GFeatureMatrix,
+ ) -> LocusToGeneModel:
+ """Fit the pipeline to the feature matrix dataframe.
+
+ Args:
+ feature_matrix (L2GFeatureMatrix): Feature matrix dataframe to fit the model to
+
+ Returns:
+ LocusToGeneModel: Fitted model
+ """
+ self.model = self.pipeline.fit(feature_matrix.df)
+ return self
+
+ def predict(
+ self: LocusToGeneModel,
+ feature_matrix: L2GFeatureMatrix,
+ ) -> DataFrame:
+ """Apply the model to a given feature matrix dataframe. The feature matrix needs to be preprocessed first.
+
+ Args:
+ feature_matrix (L2GFeatureMatrix): Feature matrix dataframe to apply the model to
+
+ Returns:
+ DataFrame: Dataframe with predictions
+
+ Raises:
+ ValueError: If the model has not been fitted yet
+ """
+ if not self.model:
+ raise ValueError("Model not fitted yet. `fit()` has to be called first.")
+ return self.model.transform(feature_matrix.df)
diff --git a/src/otg/method/l2g/trainer.py b/src/otg/method/l2g/trainer.py
new file mode 100644
index 000000000..95ac506f0
--- /dev/null
+++ b/src/otg/method/l2g/trainer.py
@@ -0,0 +1,112 @@
+"""Utilities to train and apply the Locus to Gene classifier."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import Any, Optional
+
+from pyspark.ml.evaluation import MulticlassClassificationEvaluator
+from pyspark.ml.tuning import CrossValidator
+
+from otg.dataset.l2g_feature_matrix import L2GFeatureMatrix
+from otg.method.l2g.model import LocusToGeneModel
+
+
+@dataclass
+class LocusToGeneTrainer:
+ """Modelling of what is the most likely causal gene associated with a given locus."""
+
+ _model: LocusToGeneModel
+ train_set: L2GFeatureMatrix
+
+ @classmethod
+ def train(
+ cls: type[LocusToGeneTrainer],
+ data: L2GFeatureMatrix,
+ l2g_model: LocusToGeneModel,
+ features_list: list[str],
+ evaluate: bool,
+ wandb_run_name: str | None = None,
+ model_path: str | None = None,
+ **hyperparams: dict[str, Any],
+ ) -> LocusToGeneModel:
+ """Train the Locus to Gene model.
+
+ Args:
+ data (L2GFeatureMatrix): Feature matrix containing the data
+ l2g_model (LocusToGeneModel): Model to fit to the data on
+ features_list (list[str]): List of features to use for the model
+ evaluate (bool): Whether to evaluate the model on a test set
+ wandb_run_name (str | None): Descriptive name for the run to be tracked with W&B
+ model_path (str | None): Path to save the model to
+ **hyperparams (dict[str, Any]): Hyperparameters to use for the model
+
+ Returns:
+ LocusToGeneModel: Trained model
+ """
+ train, test = data.select_features(features_list).train_test_split(fraction=0.8)
+
+ model = l2g_model.add_pipeline_stage(l2g_model.estimator).fit(train)
+
+ if evaluate:
+ l2g_model.evaluate(
+ results=model.predict(test),
+ hyperparameters=hyperparams,
+ wandb_run_name=wandb_run_name,
+ training_data=train,
+ )
+ if model_path:
+ l2g_model.save(model_path)
+ return l2g_model
+
+ @classmethod
+ def cross_validate(
+ cls: type[LocusToGeneTrainer],
+ l2g_model: LocusToGeneModel,
+ data: L2GFeatureMatrix,
+ num_folds: int,
+ param_grid: Optional[list] = None, # type: ignore
+ ) -> LocusToGeneModel:
+ """Perform k-fold cross validation on the model.
+
+ By providing a model with a parameter grid, this method will perform k-fold cross validation on the model for each
+ combination of parameters and return the best model.
+
+ Args:
+ l2g_model (LocusToGeneModel): Model to fit to the data on
+ data (L2GFeatureMatrix): Data to perform cross validation on
+ num_folds (int): Number of folds to use for cross validation
+ param_grid (Optional[list]): List of parameter maps to use for cross validation
+
+ Returns:
+ LocusToGeneModel: Trained model fitted with the best hyperparameters
+
+ Raises:
+ ValueError: Parameter grid is empty. Cannot perform cross-validation.
+ ValueError: Unable to retrieve the best model.
+ """
+ evaluator = MulticlassClassificationEvaluator()
+ params_grid = param_grid or l2g_model.get_param_grid()
+ if not param_grid:
+ raise ValueError(
+ "Parameter grid is empty. Cannot perform cross-validation."
+ )
+ cv = CrossValidator(
+ numFolds=num_folds,
+ estimator=l2g_model.estimator,
+ estimatorParamMaps=params_grid,
+ evaluator=evaluator,
+ parallelism=2,
+ collectSubModels=False,
+ seed=42,
+ )
+
+ l2g_model.add_pipeline_stage(cv) # type: ignore[assignment, unused-ignore]
+
+ # Integrate the best model from the last stage of the pipeline
+ if (full_pipeline_model := l2g_model.fit(data).model) is None or not hasattr(
+ full_pipeline_model, "stages"
+ ):
+ raise ValueError("Unable to retrieve the best model.")
+ l2g_model.model = full_pipeline_model.stages[-1].bestModel # type: ignore[assignment, unused-ignore]
+ return l2g_model
diff --git a/src/otg/method/ld.py b/src/otg/method/ld.py
index 09c42c4ba..c834efb85 100644
--- a/src/otg/method/ld.py
+++ b/src/otg/method/ld.py
@@ -19,7 +19,14 @@ class LDAnnotator:
@staticmethod
def _calculate_weighted_r_overall(ld_set: Column) -> Column:
- """Aggregation of weighted R information using ancestry proportions."""
+ """Aggregation of weighted R information using ancestry proportions.
+
+ Args:
+ ld_set (Column): LD set
+
+ Returns:
+ Column: LD set with added 'r2Overall' field
+ """
return f.transform(
ld_set,
lambda x: f.struct(
diff --git a/src/otg/method/pics.py b/src/otg/method/pics.py
index c7a259ee1..6d38f4643 100644
--- a/src/otg/method/pics.py
+++ b/src/otg/method/pics.py
@@ -2,13 +2,13 @@
from __future__ import annotations
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any
import pyspark.sql.functions as f
import pyspark.sql.types as t
from scipy.stats import norm
-from otg.dataset.study_locus import StudyLocus
+from otg.dataset.study_locus import StudyLocus, StudyLocusQualityCheck
if TYPE_CHECKING:
from pyspark.sql import Row
@@ -31,7 +31,7 @@ def _pics_relative_posterior_probability(
pics_snp_std (float): Standard deviation for the P value of the association between a SNP and a trait
Returns:
- Relative posterior probability of a SNP being causal in a locus
+ float: Posterior probability of the association between a SNP and a trait
Examples:
>>> rel_prob = PICS._pics_relative_posterior_probability(neglog_p=10.0, pics_snp_mu=1.0, pics_snp_std=10.0)
@@ -53,7 +53,7 @@ def _pics_standard_deviation(neglog_p: float, r2: float, k: float) -> float | No
k (float): Empiric constant that can be adjusted to fit the curve, 6.4 recommended.
Returns:
- Standard deviation for the P value of the association between a SNP and a trait
+ float | None: Standard deviation for the P value of the association between a SNP and a trait
Examples:
>>> PICS._pics_standard_deviation(neglog_p=1.0, r2=1.0, k=6.4)
@@ -81,7 +81,7 @@ def _pics_mu(neglog_p: float, r2: float) -> float | None:
r2 (float): LD score between a given SNP and the lead variant
Returns:
- Mean P value of the association between a SNP and a trait
+ float | None: Mean P value of the association between a SNP and a trait
Examples:
>>> PICS._pics_mu(neglog_p=1.0, r2=1.0)
@@ -94,7 +94,9 @@ def _pics_mu(neglog_p: float, r2: float) -> float | None:
return neglog_p * r2 if r2 >= 0.5 else None
@staticmethod
- def _finemap(ld_set: list[Row], lead_neglog_p: float, k: float) -> list | None:
+ def _finemap(
+ ld_set: list[Row], lead_neglog_p: float, k: float
+ ) -> list[dict[str, Any]] | None:
"""Calculates the probability of a variant being causal in a study-locus context by applying the PICS method.
It is intended to be applied as an UDF in `PICS.finemap`, where each row is a StudyLocus association.
@@ -102,12 +104,12 @@ def _finemap(ld_set: list[Row], lead_neglog_p: float, k: float) -> list | None:
its association signal and causality probability as of PICS.
Args:
- ld_set (list): list of tagging variants after expanding the locus
+ ld_set (list[Row]): list of tagging variants after expanding the locus
lead_neglog_p (float): P value of the association signal between the lead variant and the study in the form of -log10.
k (float): Empiric constant that can be adjusted to fit the curve, 6.4 recommended.
Returns:
- List of tagging variants with an estimation of the association signal and their posterior probability as of PICS.
+ list[dict[str, Any]] | None: List of tagging variants with an estimation of the association signal and their posterior probability as of PICS.
Examples:
>>> from pyspark.sql import Row
@@ -125,7 +127,7 @@ def _finemap(ld_set: list[Row], lead_neglog_p: float, k: float) -> list | None:
... Row(variantId="var2", r2Overall=None),
... ]
>>> PICS._finemap(ld_set_with_no_r2, lead_neglog_p=10.0, k=6.4)
- [{'variantId': 'var1', 'r2Overall': None}, {'variantId': 'var2', 'r2Overall': None}]
+ []
"""
if ld_set is None:
return None
@@ -143,8 +145,7 @@ def _finemap(ld_set: list[Row], lead_neglog_p: float, k: float) -> list | None:
or tag_dict["r2Overall"] < 0.5
or not lead_neglog_p
):
- # If PICS cannot be calculated, we'll return the original credible set
- new_credible_set.append(tag_dict)
+ # If PICS cannot be calculated, we drop the variant from the credible set
continue
pics_snp_mu = PICS._pics_mu(lead_neglog_p, tag_dict["r2Overall"])
@@ -220,6 +221,9 @@ def finemap(
lambda locus, neglog_p: PICS._finemap(locus, neglog_p, k),
picsed_ldset_schema,
)
+ non_picsable_expr = (
+ f.size(f.filter(f.col("ldSet"), lambda x: x.r2Overall >= 0.5)) == 0
+ )
return StudyLocus(
_df=(
associations.df
@@ -237,7 +241,18 @@ def finemap(
),
),
)
- # Rename tagVariantId to variantId
+ .withColumn(
+ "qualityControls",
+ StudyLocus.update_quality_flag(
+ f.col("qualityControls"),
+ non_picsable_expr,
+ StudyLocusQualityCheck.NOT_QUALIFYING_LD_BLOCK,
+ ),
+ )
+ .withColumn(
+ "finemappingMethod",
+ f.coalesce(f.col("finemappingMethod"), f.lit("pics")),
+ )
.drop("neglog_pvalue")
),
_schema=StudyLocus.get_schema(),
diff --git a/src/otg/method/window_based_clumping.py b/src/otg/method/window_based_clumping.py
index 890b54ca7..a0b8d23c9 100644
--- a/src/otg/method/window_based_clumping.py
+++ b/src/otg/method/window_based_clumping.py
@@ -14,7 +14,7 @@
from otg.dataset.study_locus import StudyLocus
if TYPE_CHECKING:
- from numpy import ndarray
+ from numpy.typing import NDArray
from pyspark.sql import Column
from otg.dataset.summary_statistics import SummaryStatistics
@@ -111,13 +111,13 @@ def _cluster_peaks(
).otherwise(cluster_id)
@staticmethod
- def _prune_peak(position: ndarray, window_size: int) -> DenseVector:
+ def _prune_peak(position: NDArray[np.float64], window_size: int) -> DenseVector:
"""Establish lead snps based on their positions listed by p-value.
The function `find_peak` assigns lead SNPs based on their positions listed by p-value within a specified window size.
Args:
- position (ndarray): positions of the SNPs sorted by p-value.
+ position (NDArray[np.float64]): positions of the SNPs sorted by p-value.
window_size (int): the distance in bp within which associations are clumped together around the lead snp.
Returns:
@@ -131,10 +131,10 @@ def _prune_peak(position: ndarray, window_size: int) -> DenseVector:
"""
# Initializing the lead list with zeroes:
- is_lead: ndarray = np.zeros(len(position))
+ is_lead = np.zeros(len(position))
# List containing indices of leads:
- lead_indices: list = []
+ lead_indices: list[int] = []
# Looping through all positions:
for index in range(len(position)):
@@ -234,7 +234,9 @@ def clump(
# Adding study-locus id:
.withColumn(
"studyLocusId",
- StudyLocus.assign_study_locus_id("studyId", "variantId"),
+ StudyLocus.assign_study_locus_id(
+ f.col("studyId"), f.col("variantId")
+ ),
)
# Initialize QC column as array of strings:
.withColumn(
@@ -258,9 +260,9 @@ def clump_with_locus(
Args:
summary_stats (SummaryStatistics): Input summary statistics dataset
window_length (int): Window size in bp, used for distance based clumping.
- p_value_significance (float, optional): GWAS significance threshold used to filter peaks. Defaults to 5e-8.
- p_value_baseline (float, optional): Least significant threshold. Below this, all snps are dropped. Defaults to 0.05.
- locus_window_length (int, optional): The distance for collecting locus around the semi indices.
+ p_value_significance (float): GWAS significance threshold used to filter peaks. Defaults to 5e-8.
+ p_value_baseline (float): Least significant threshold. Below this, all snps are dropped. Defaults to 0.05.
+ locus_window_length (int | None): The distance for collecting locus around the semi indices. Defaults to None.
Returns:
StudyLocus: StudyLocus after clumping with information about the `locus`
diff --git a/src/otg/overlaps.py b/src/otg/overlaps.py
index 7e46ff069..74a8c6d58 100644
--- a/src/otg/overlaps.py
+++ b/src/otg/overlaps.py
@@ -3,31 +3,44 @@
from dataclasses import dataclass
+from omegaconf import MISSING
+
from otg.common.session import Session
-from otg.config import StudyLocusOverlapStepConfig
from otg.dataset.study_index import StudyIndex
from otg.dataset.study_locus import StudyLocus
from otg.dataset.study_locus_overlap import StudyLocusOverlap
@dataclass
-class OverlapsIndexStep(StudyLocusOverlapStepConfig):
+class OverlapsIndexStep:
"""StudyLocus overlaps step.
+ !!! note
+ This dataset is defined to contain the overlapping signals between studyLocus associations once they have been clumped and fine-mapped.
+
This step generates a dataset of overlapping studyLocus associations.
- """
- session: Session = Session()
+ Attributes:
+ session (Session): Session object.
+ study_locus_path (str): Input study-locus path.
+ study_index_path (str): Input study index path to extract the type of study.
+ overlaps_index_out (str): Output overlaps index path.
+ """
- def run(self: OverlapsIndexStep) -> None:
- """Run Overlaps index step.
+ session: Session = MISSING
+ study_locus_path: str = MISSING
+ study_index_path: str = MISSING
+ overlaps_index_out: str = MISSING
- !!! note
- This dataset is defined to contain the overlapping signals between studyLocus associations once they have been clumped and fine-mapped.
- """
+ def __post_init__(self: OverlapsIndexStep) -> None:
+ """Run step."""
# Extract
- study_locus = StudyLocus.from_parquet(self.session, self.study_locus_path)
- study_index = StudyIndex.from_parquet(self.session, self.study_index_path)
+ study_locus = StudyLocus.from_parquet(
+ self.session, self.study_locus_path, recursiveFileLookup=True
+ )
+ study_index = StudyIndex.from_parquet(
+ self.session, self.study_index_path, recursiveFileLookup=True
+ )
# Transform
overlaps_index = StudyLocusOverlap.from_associations(study_locus, study_index)
# Load
diff --git a/src/otg/pics.py b/src/otg/pics.py
new file mode 100644
index 000000000..c326706cb
--- /dev/null
+++ b/src/otg/pics.py
@@ -0,0 +1,40 @@
+"""Step to apply PICS finemapping."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from omegaconf import MISSING
+
+from otg.common.session import Session
+from otg.dataset.study_locus import StudyLocus
+from otg.method.pics import PICS
+
+
+@dataclass
+class PICSStep:
+ """PICS finemapping of LD-annotated StudyLocus.
+
+ Attributes:
+ session (Session): Session object.
+
+ study_locus_ld_annotated_in (str): Path to Study Locus with the LD information annotated
+ picsed_study_locus_out (str): Path to Study Locus after running PICS
+ """
+
+ session: Session = MISSING
+ study_locus_ld_annotated_in: str = MISSING
+ picsed_study_locus_out: str = MISSING
+
+ def __post_init__(self: PICSStep) -> None:
+ """Run step."""
+ # Extract
+ study_locus_ld_annotated = StudyLocus.from_parquet(
+ self.session, self.study_locus_ld_annotated_in
+ )
+ # PICS
+ picsed_sl = PICS.finemap(study_locus_ld_annotated).annotate_credible_sets()
+ # Write
+ picsed_sl.df.write.mode(self.session.write_mode).parquet(
+ self.picsed_study_locus_out
+ )
diff --git a/src/otg/py.typed b/src/otg/py.typed
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/otg/ukbiobank.py b/src/otg/ukbiobank.py
index 6fe8a6ab2..3e1a25559 100644
--- a/src/otg/ukbiobank.py
+++ b/src/otg/ukbiobank.py
@@ -4,19 +4,28 @@
from dataclasses import dataclass
+from omegaconf import MISSING
+
from otg.common.session import Session
-from otg.config import UKBiobankStepConfig
from otg.datasource.ukbiobank.study_index import UKBiobankStudyIndex
@dataclass
-class UKBiobankStep(UKBiobankStepConfig):
- """UKBiobank study table ingestion step."""
+class UKBiobankStep:
+ """UKBiobank study table ingestion step.
+
+ Attributes:
+ session (Session): Session object.
+ ukbiobank_manifest (str): UKBiobank manifest of studies.
+ ukbiobank_study_index_out (str): Output path for the UKBiobank study index dataset.
+ """
- session: Session = Session()
+ session: Session = MISSING
+ ukbiobank_manifest: str = MISSING
+ ukbiobank_study_index_out: str = MISSING
- def run(self: UKBiobankStep) -> None:
- """Run UKBiobank study table ingestion step."""
+ def __post_init__(self: UKBiobankStep) -> None:
+ """Run step."""
# Read in the UKBiobank manifest tsv file.
df = self.session.spark.read.csv(
self.ukbiobank_manifest, sep="\t", header=True, inferSchema=True
diff --git a/src/otg/v2g.py b/src/otg/v2g.py
index ce0c1541b..61cf5fa79 100644
--- a/src/otg/v2g.py
+++ b/src/otg/v2g.py
@@ -1,24 +1,24 @@
"""Step to generate variant annotation dataset."""
from __future__ import annotations
-from dataclasses import dataclass
+from dataclasses import dataclass, field
from functools import reduce
+from typing import Dict, List
+
+import pyspark.sql.functions as f
+from omegaconf import MISSING
from otg.common.Liftover import LiftOverSpark
from otg.common.session import Session
-from otg.config import V2GStepConfig
from otg.dataset.gene_index import GeneIndex
+from otg.dataset.intervals import Intervals
from otg.dataset.v2g import V2G
from otg.dataset.variant_annotation import VariantAnnotation
from otg.dataset.variant_index import VariantIndex
-from otg.datasource.intervals.andersson import IntervalsAndersson
-from otg.datasource.intervals.javierre import IntervalsJavierre
-from otg.datasource.intervals.jung import IntervalsJung
-from otg.datasource.intervals.thurnman import IntervalsThurnman
@dataclass
-class V2GStep(V2GStepConfig):
+class V2GStep:
"""Variant-to-gene (V2G) step.
This step aims to generate a dataset that contains multiple pieces of evidence supporting the functional association of specific variants with genes. Some of the evidence types include:
@@ -27,70 +27,106 @@ class V2GStep(V2GStepConfig):
2. In silico functional predictions, e.g. Variant Effect Predictor (VEP) from Ensembl.
3. Distance between the variant and each gene's canonical transcription start site (TSS).
+ Attributes:
+ session (Session): Session object.
+ variant_index_path (str): Input variant index path.
+ variant_annotation_path (str): Input variant annotation path.
+ gene_index_path (str): Input gene index path.
+ vep_consequences_path (str): Input VEP consequences path.
+ liftover_chain_file_path (str): Path to GRCh37 to GRCh38 chain file.
+ liftover_max_length_difference: Maximum length difference for liftover.
+ max_distance (int): Maximum distance to consider.
+ approved_biotypes (list[str]): List of approved biotypes.
+ intervals (dict): Dictionary of interval sources.
+ v2g_path (str): Output V2G path.
"""
- session: Session = Session()
-
- def run(self: V2GStep) -> None:
- """Run V2G dataset generation."""
- # Filter gene index by approved biotypes to define V2G gene universe
- gene_index_filtered = GeneIndex.from_parquet(
- self.session, self.gene_index_path
- ).filter_by_biotypes(self.approved_biotypes)
+ session: Session = MISSING
+ variant_index_path: str = MISSING
+ variant_annotation_path: str = MISSING
+ gene_index_path: str = MISSING
+ vep_consequences_path: str = MISSING
+ liftover_chain_file_path: str = MISSING
+ liftover_max_length_difference: int = 100
+ max_distance: int = 500_000
+ approved_biotypes: List[str] = field(
+ default_factory=lambda: [
+ "protein_coding",
+ "3prime_overlapping_ncRNA",
+ "antisense",
+ "bidirectional_promoter_lncRNA",
+ "IG_C_gene",
+ "IG_D_gene",
+ "IG_J_gene",
+ "IG_V_gene",
+ "lincRNA",
+ "macro_lncRNA",
+ "non_coding",
+ "sense_intronic",
+ "sense_overlapping",
+ ]
+ )
+ intervals: Dict[str, str] = field(default_factory=dict)
+ v2g_path: str = MISSING
+ def __post_init__(self: V2GStep) -> None:
+ """Run step."""
+ # Read
+ gene_index = GeneIndex.from_parquet(self.session, self.gene_index_path)
vi = VariantIndex.from_parquet(self.session, self.variant_index_path).persist()
va = VariantAnnotation.from_parquet(self.session, self.variant_annotation_path)
vep_consequences = self.session.spark.read.csv(
self.vep_consequences_path, sep="\t", header=True
+ ).select(
+ f.element_at(f.split("Accession", r"/"), -1).alias(
+ "variantFunctionalConsequenceId"
+ ),
+ f.col("Term").alias("label"),
+ f.col("v2g_score").cast("double").alias("score"),
)
- # Variant annotation reduced to the variant index to define V2G variant universe
- va_slimmed = va.filter_by_variant_df(vi.df, ["id", "chromosome"]).persist()
-
- # lift over variants to hg38
+ # Transform
lift = LiftOverSpark(
- self.liftover_chain_file_path, self.liftover_max_length_difference
+ # lift over variants to hg38
+ self.liftover_chain_file_path,
+ self.liftover_max_length_difference,
+ )
+ gene_index_filtered = gene_index.filter_by_biotypes(
+ # Filter gene index by approved biotypes to define V2G gene universe
+ list(self.approved_biotypes)
+ )
+ va_slimmed = va.filter_by_variant_df(
+ # Variant annotation reduced to the variant index to define V2G variant universe
+ vi.df
+ ).persist()
+ intervals = Intervals(
+ _df=reduce(
+ lambda x, y: x.unionByName(y, allowMissingColumns=True),
+ # create interval instances by parsing each source
+ [
+ Intervals.from_source(
+ self.session.spark, source_name, source_path, gene_index, lift
+ ).df
+ for source_name, source_path in self.intervals.items()
+ ],
+ ),
+ _schema=Intervals.get_schema(),
)
-
- # Expected andersson et al. schema:
v2g_datasets = [
va_slimmed.get_distance_to_tss(gene_index_filtered, self.max_distance),
- # variant effects
va_slimmed.get_most_severe_vep_v2g(vep_consequences, gene_index_filtered),
- va_slimmed.get_polyphen_v2g(gene_index_filtered),
- va_slimmed.get_sift_v2g(gene_index_filtered),
va_slimmed.get_plof_v2g(gene_index_filtered),
- # intervals
- IntervalsAndersson.parse(
- IntervalsAndersson.read_andersson(self.session, self.anderson_path),
- gene_index_filtered,
- lift,
- ).v2g(vi),
- IntervalsJavierre.parse(
- IntervalsJavierre.read_javierre(self.session, self.javierre_path),
- gene_index_filtered,
- lift,
- ).v2g(vi),
- IntervalsJung.parse(
- IntervalsJung.read_jung(self.session, self.jung_path),
- gene_index_filtered,
- lift,
- ).v2g(vi),
- IntervalsThurnman.parse(
- IntervalsThurnman.read_thurnman(self.session, self.thurnman_path),
- gene_index_filtered,
- lift,
- ).v2g(vi),
+ intervals.v2g(vi),
]
-
- # merge all V2G datasets
v2g = V2G(
_df=reduce(
lambda x, y: x.unionByName(y, allowMissingColumns=True),
[dataset.df for dataset in v2g_datasets],
- ).repartition("chromosome")
+ ).repartition("chromosome"),
+ _schema=V2G.get_schema(),
)
- # write V2G dataset
+
+ # Load
(
v2g.df.write.partitionBy("chromosome")
.mode(self.session.write_mode)
diff --git a/src/otg/variant_annotation.py b/src/otg/variant_annotation.py
index ceb6ffe92..0573f8d50 100644
--- a/src/otg/variant_annotation.py
+++ b/src/otg/variant_annotation.py
@@ -4,37 +4,35 @@
from dataclasses import dataclass
import hail as hl
+from omegaconf import MISSING
from otg.common.session import Session
-from otg.config import VariantAnnotationStepConfig
from otg.datasource.gnomad.variants import GnomADVariants
@dataclass
-class VariantAnnotationStep(VariantAnnotationStepConfig):
+class VariantAnnotationStep:
"""Variant annotation step.
Variant annotation step produces a dataset of the type `VariantAnnotation` derived from gnomADs `gnomad.genomes.vX.X.X.sites.ht` Hail's table. This dataset is used to validate variants and as a source of annotation.
+
+ Attributes:
+ session (Session): Session object.
+ variant_annotation_path (str): Output variant annotation path.
"""
- session: Session = Session()
+ session: Session = MISSING
+ variant_annotation_path: str = MISSING
- def run(self: VariantAnnotationStep) -> None:
- """Run variant annotation step."""
- # init hail session
+ def __post_init__(self: VariantAnnotationStep) -> None:
+ """Run step."""
+ # Initialise hail session.
hl.init(sc=self.session.spark.sparkContext, log="/dev/null")
-
- """Run variant annotation step."""
- variant_annotation = GnomADVariants.as_variant_annotation(
- self.gnomad_genomes,
- self.chain_38_to_37,
- self.populations,
- )
- # Writing data partitioned by chromosome and position:
+ # Run variant annotation.
+ variant_annotation = GnomADVariants().as_variant_annotation()
+ # Write data partitioned by chromosome and position.
(
- variant_annotation.df.repartition(400, "chromosome")
- .sortWithinPartitions("chromosome", "position")
- .write.partitionBy("chromosome")
- .mode(self.session.write_mode)
- .parquet(self.variant_annotation_path)
+ variant_annotation.df.write.mode(self.session.write_mode).parquet(
+ self.variant_annotation_path
+ )
)
diff --git a/src/otg/variant_index.py b/src/otg/variant_index.py
index a75c91a71..9b7b73ded 100644
--- a/src/otg/variant_index.py
+++ b/src/otg/variant_index.py
@@ -3,47 +3,43 @@
from dataclasses import dataclass
+from omegaconf import MISSING
+
from otg.common.session import Session
-from otg.config import VariantIndexStepConfig
from otg.dataset.study_locus import StudyLocus
from otg.dataset.variant_annotation import VariantAnnotation
from otg.dataset.variant_index import VariantIndex
@dataclass
-class VariantIndexStep(VariantIndexStepConfig):
- """Variant index step.
+class VariantIndexStep:
+ """Run variant index step to only variants in study-locus sets.
Using a `VariantAnnotation` dataset as a reference, this step creates and writes a dataset of the type `VariantIndex` that includes only variants that have disease-association data with a reduced set of annotations.
+
+ Attributes:
+ session (Session): Session object.
+ variant_annotation_path (str): Input variant annotation path.
+ study_locus_path (str): Input study-locus path.
+ variant_index_path (str): Output variant index path.
"""
- session: Session = Session()
+ session: Session = MISSING
+ variant_annotation_path: str = MISSING
+ credible_set_path: str = MISSING
+ variant_index_path: str = MISSING
- def run(self: VariantIndexStep) -> None:
- """Run variant index step."""
- # Variant annotation dataset
+ def __post_init__(self: VariantIndexStep) -> None:
+ """Run step."""
+ # Extract
va = VariantAnnotation.from_parquet(self.session, self.variant_annotation_path)
-
- # Study-locus dataset
- study_locus = StudyLocus.from_parquet(self.session, self.study_locus_path)
-
- # Reduce scope of variant annotation dataset to only variants in study-locus sets:
- va_slimmed = va.filter_by_variant_df(
- study_locus.unique_lead_tag_variants(), ["id", "chromosome"]
+ credible_set = StudyLocus.from_parquet(
+ self.session, self.credible_set_path, recursiveFileLookup=True
)
- # Generate variant index ussing a subset of the variant annotation dataset
- vi = VariantIndex.from_variant_annotation(va_slimmed)
-
- # Write data:
- # self.etl.logger.info(
- # f"Writing invalid variants from the credible set to: {self.variant_invalid}"
- # )
- # vi.invalid_variants.write.mode(self.etl.write_mode).parquet(
- # self.variant_invalid
- # )
+ # Transform
+ vi = VariantIndex.from_variant_annotation(va, credible_set)
- self.session.logger.info(f"Writing variant index to: {self.variant_index_path}")
(
vi.df.write.partitionBy("chromosome")
.mode(self.session.write_mode)
diff --git a/src/utils/__init__.py b/src/utils/__init__.py
new file mode 100644
index 000000000..0c4858c7d
--- /dev/null
+++ b/src/utils/__init__.py
@@ -0,0 +1,3 @@
+"""Utils."""
+
+from __future__ import annotations
diff --git a/src/scripts/schemadocs.py b/src/utils/schemadocs.py
similarity index 73%
rename from src/scripts/schemadocs.py
rename to src/utils/schemadocs.py
index 5ecd737b2..ebf1ebfbb 100644
--- a/src/scripts/schemadocs.py
+++ b/src/utils/schemadocs.py
@@ -18,8 +18,7 @@ def spark_connect() -> SparkSession:
Returns:
SparkSession: SparkSession object.
"""
- spark = SparkSession.builder.master("local[1]").appName("schemas").getOrCreate()
- return spark
+ return SparkSession.builder.master("local[1]").appName("schemas").getOrCreate()
def generate_schema_assets(
@@ -28,9 +27,9 @@ def generate_schema_assets(
"""Generate schema assets for mkdocs documentation.
Args:
- spark: SparkSession object.
- assets_dir: Path to assets directory.
- schema_dir: Path to schema directory.
+ spark (SparkSession): SparkSession object.
+ assets_dir (Path): Path to assets directory.
+ schema_dir (str): Path to schema directory.
"""
for i in os.listdir(schema_dir):
if i.endswith(".json"):
@@ -40,17 +39,16 @@ def generate_schema_assets(
df = spark.createDataFrame([], input_schema)
outfilename = i.replace("json", "md")
with (assets_dir / outfilename).open("w") as out:
- tree = df._jdf.schema().treeString() # type: ignore
+ tree = df._jdf.schema().treeString()
out.write(f"```\n{tree}\n```")
@mkdocs.plugins.event_priority(50)
-def on_pre_build(config: MkdocsConfig, **kwargs) -> None:
+def on_pre_build(config: MkdocsConfig) -> None:
"""Main function.
Args:
- config: MkdocsConfig object.
- **kwargs: Arbitrary keyword arguments.
+ config (MkdocsConfig): MkdocsConfig object.
"""
# Create schema dir if not exist:
assets_dir = Path("docs/assets/schemas")
@@ -62,4 +60,3 @@ def on_pre_build(config: MkdocsConfig, **kwargs) -> None:
assets_dir=assets_dir,
schema_dir="src/otg/assets/schemas",
)
- print(f"Schema assests generated for {config['site_name']}")
diff --git a/src/utils/spark.py b/src/utils/spark.py
new file mode 100644
index 000000000..b5099bca7
--- /dev/null
+++ b/src/utils/spark.py
@@ -0,0 +1,39 @@
+"""Spark utilities."""
+from __future__ import annotations
+
+from pathlib import Path
+
+import hail as hl
+from pyspark.conf import SparkConf
+
+
+def get_spark_testing_conf() -> SparkConf:
+ """Get SparkConf for testing purposes.
+
+ Returns:
+ SparkConf: SparkConf with settings for testing.
+ """
+ hail_home = Path(hl.__file__).parent.as_posix()
+ return (
+ SparkConf()
+ .set("spark.driver.bindAddress", "127.0.0.1")
+ # No shuffling.
+ .set("spark.sql.shuffle.partitions", "1")
+ # UI settings.
+ .set("spark.ui.showConsoleProgress", "false")
+ .set("spark.ui.enabled", "false")
+ .set("spark.ui.dagGraph.retainedRootRDDs", "1")
+ .set("spark.ui.retainedJobs", "1")
+ .set("spark.ui.retainedStages", "1")
+ .set("spark.ui.retainedTasks", "1")
+ .set("spark.sql.ui.retainedExecutions", "1")
+ .set("spark.worker.ui.retainedExecutors", "1")
+ .set("spark.worker.ui.retainedDrivers", "1")
+ # Fixed memory.
+ .set("spark.driver.memory", "2g")
+ .set("spark.jars", f"{hail_home}/backend/hail-all-spark.jar")
+ .set("spark.driver.extraClassPath", f"{hail_home}/backend/hail-all-spark.jar")
+ .set("spark.executor.extraClassPath", "./hail-all-spark.jar")
+ .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
+ .set("spark.kryo.registrator", "is.hail.kryo.HailKryoRegistrator")
+ )
diff --git a/templates/.release_notes.md.j2 b/templates/.release_notes.md.j2
new file mode 100644
index 000000000..81af53590
--- /dev/null
+++ b/templates/.release_notes.md.j2
@@ -0,0 +1,11 @@
+{% macro add_emoji(commit_type) %}{% if commit_type == "feature" %}✨{% elif commit_type == "fix" %}🐛{% elif commit_type == "documentation" %}📖{% elif commit_type == "style" %}🎨{% elif commit_type == "refactor" %}♻️{% elif commit_type == "test" %}✅{% elif commit_type == "chore" %}🚀{% elif commit_type == "performance" %}⚡️{% elif commit_type == "ci" %}👷♂️{% elif commit_type == "build" %}🏗{% elif commit_type == "breaking" %}💥{% elif commit_type == "unknown" %}🤷♂️{% elif commit_type == "revert" %}⏪{% else %}🤷♂️{% endif %}{% endmacro %}
+
+{% macro commit_scope(commit_summary) %}{{ commit_summary.split(":")[0] }}{% endmacro %}
+{% macro commit_content(commit_summary) %}{{ commit_summary.split(":")[1] }}{% endmacro %}
+## What's Changed
+{% for type_, commits in release["elements"] | dictsort %}
+### {{ add_emoji(type_) }} {{ type_ | capitalize }}
+{%- if type_ != "unknown" %}
+{% for commit in commits %}
+- {{ commit_content(commit.commit.summary) }} - [`{{ commit.commit.hexsha[:7] }}`]({{ commit.commit.hexsha | commit_hash_url }}) ([{{ commit.commit.author.name }}](mailto:{{commit.commit.author.email}}))
+{%- endfor %}{% endif %}{% endfor %}
diff --git a/templates/CHANGELOG.md.j2 b/templates/CHANGELOG.md.j2
new file mode 100644
index 000000000..c61ea7c09
--- /dev/null
+++ b/templates/CHANGELOG.md.j2
@@ -0,0 +1,27 @@
+{% macro add_emoji(commit_type) %}{% if commit_type == "feature" %}✨{% elif commit_type == "fix" %}🐛{% elif commit_type == "documentation" %}📖{% elif commit_type == "style" %}🎨{% elif commit_type == "refactor" %}♻️{% elif commit_type == "test" %}✅{% elif commit_type == "chore" %}🚀{% elif commit_type == "performance" %}⚡️{% elif commit_type == "ci" %}👷♂️{% elif commit_type == "build" %}🏗{% elif commit_type == "breaking" %}💥{% elif commit_type == "unknown" %}🤷♂️{% elif commit_type == "revert" %}⏪{% else %}🤷♂️{% endif %}{% endmacro %}
+
+{% macro commit_scope(commit_summary) %}{{ commit_summary.split(":")[0] }}{% endmacro %}
+{% macro commit_content(commit_summary) %}{{ commit_summary.split(":")[1] }}{% endmacro %}
+# CHANGELOG
+{% if context.history.unreleased | length > 0 %}
+
+{# UNRELEASED #}
+## Unreleased
+{% for type_, commits in context.history.unreleased | dictsort %}
+### add_emoji({{type_}}) {{ type_ | capitalize }}
+{% for commit in commits %}{% if type_ != "unknown" %}
+- {{ commit_content(commit.commit.summary) }} - [`{{ commit.commit.hexsha[:7] }}`]({{ commit.commit.hexsha | commit_hash_url }}) ([{{ commit.commit.author.name }}](mailto:{{commit.commit.author.email}}))
+{% else %}
+- {{ commit_content(commit.commit.summary) }} - [`{{ commit.commit.hexsha[:7] }}`]({{ commit.commit.hexsha | commit_hash_url }}) ([{{ commit.commit.author.name }}](mailto:{{commit.commit.author.email}}))
+{% endif %}{% endfor %}{% endfor %}{% endif %}
+
+{# RELEASED #}
+{% for version, release in context.history.released.items() %}
+## {{ version.as_tag() }} ({{ release.tagged_date.strftime("%Y-%m-%d") }})
+{% for type_, commits in release["elements"] | dictsort %}
+### {{ add_emoji(type_) }} {{ type_ | capitalize }}
+{% for commit in commits %}{% if type_ != "unknown" %}
+- {{ commit_content(commit.commit.summary) }} - [`{{ commit.commit.hexsha[:7] }}`]({{ commit.commit.hexsha | commit_hash_url }}) ([{{ commit.commit.author.name }}](mailto:{{commit.commit.author.email}}))
+{% else %}
+- {{ commit_content(commit.commit.summary) }} - [`{{ commit.commit.hexsha[:7] }}`]({{ commit.commit.hexsha | commit_hash_url }}) ([{{ commit.commit.author.name }}](mailto:{{commit.commit.author.email}}))
+{% endif %}{% endfor %}{% endfor %}{% endfor %}
diff --git a/tests/airflow/test_dag.py b/tests/airflow/test_dag.py
index 0e0697531..8676d70f4 100644
--- a/tests/airflow/test_dag.py
+++ b/tests/airflow/test_dag.py
@@ -6,43 +6,44 @@
@pytest.fixture(params=["./src/airflow/dags"])
-def dag_bag(request):
+def dag_bag(request: pytest.FixtureRequest) -> DagBag:
"""Return a DAG bag for testing."""
return DagBag(dag_folder=request.param, include_examples=False)
-def test_no_import_errors(dag_bag):
+def test_no_import_errors(dag_bag: DagBag) -> None:
"""Test for import errors."""
assert (
not dag_bag.import_errors
), f"DAG import failures. Errors: {dag_bag.import_errors}"
-def test_requires_tags(dag_bag):
+def test_requires_tags(dag_bag: DagBag) -> None:
"""Tags should be defined for each DAG."""
for _, dag in dag_bag.dags.items():
assert dag.tags
-def test_owner_len_greater_than_five(dag_bag):
+def test_owner_len_greater_than_five(dag_bag: DagBag) -> None:
"""Owner should be defined for each DAG and be longer than 5 characters."""
for _, dag in dag_bag.dags.items():
assert len(dag.owner) > 5
-def test_desc_len_greater_than_fifteen(dag_bag):
+def test_desc_len_greater_than_fifteen(dag_bag: DagBag) -> None:
"""Description should be defined for each DAG and be longer than 30 characters."""
for _, dag in dag_bag.dags.items():
- assert len(dag.description) > 30
+ if isinstance(dag.description, str):
+ assert len(dag.description) > 30
-def test_owner_not_airflow(dag_bag):
+def test_owner_not_airflow(dag_bag: DagBag) -> None:
"""Owner should not be 'airflow'."""
for _, dag in dag_bag.dags.items():
assert str.lower(dag.owner) != "airflow"
-def test_three_or_less_retries(dag_bag):
+def test_three_or_less_retries(dag_bag: DagBag) -> None:
"""Retries should be 3 or less."""
for _, dag in dag_bag.dags.items():
assert dag.default_args["retries"] <= 3
diff --git a/tests/common/test_session.py b/tests/common/test_session.py
index 06fa23ee4..c87a8a86a 100644
--- a/tests/common/test_session.py
+++ b/tests/common/test_session.py
@@ -14,6 +14,24 @@ def test_session_creation() -> None:
assert isinstance(Session(spark_uri="local[1]"), Session)
+def test_hail_configuration(hail_home: str) -> None:
+ """Assert that Hail configuration is set when start_hail is True."""
+ session = Session(spark_uri="local[1]", hail_home=hail_home, start_hail=True)
+
+ expected_hail_conf = {
+ "spark.jars": f"{hail_home}/backend/hail-all-spark.jar",
+ "spark.driver.extraClassPath": f"{hail_home}/backend/hail-all-spark.jar",
+ "spark.executor.extraClassPath": "./hail-all-spark.jar",
+ "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
+ "spark.kryo.registrator": "is.hail.kryo.HailKryoRegistrator",
+ }
+
+ observed_conf = dict(session.spark.sparkContext.getConf().getAll())
+ # sourcery skip: no-loop-in-tests
+ for key, value in expected_hail_conf.items():
+ assert observed_conf.get(key) == value, f"Expected {key} to be set to {value}"
+
+
def test_log4j_creation(spark: SparkSession) -> None:
"""Test session log4j."""
assert isinstance(Log4j(spark=spark), Log4j)
diff --git a/tests/conftest.py b/tests/conftest.py
index b8206996e..f23a7949c 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,14 +1,19 @@
"""Unit test configuration."""
from __future__ import annotations
+from pathlib import Path
+
import dbldatagen as dg
+import hail as hl
import pytest
-from pyspark.sql import DataFrame, SparkSession
-
from otg.common.Liftover import LiftOverSpark
+from otg.common.session import Session
from otg.dataset.colocalisation import Colocalisation
from otg.dataset.gene_index import GeneIndex
from otg.dataset.intervals import Intervals
+from otg.dataset.l2g_feature_matrix import L2GFeatureMatrix
+from otg.dataset.l2g_gold_standard import L2GGoldStandard
+from otg.dataset.l2g_prediction import L2GPrediction
from otg.dataset.ld_index import LDIndex
from otg.dataset.study_index import StudyIndex
from otg.dataset.study_locus import StudyLocus
@@ -17,49 +22,43 @@
from otg.dataset.v2g import V2G
from otg.dataset.variant_annotation import VariantAnnotation
from otg.dataset.variant_index import VariantIndex
-from otg.datasource.finngen.study_index import FinnGenStudyIndex
-from otg.datasource.finngen.summary_stats import FinnGenSummaryStats
-from otg.datasource.gwas_catalog.associations import GWASCatalogAssociations
-from otg.datasource.gwas_catalog.study_index import GWASCatalogStudyIndex
-from otg.datasource.ukbiobank.study_index import UKBiobankStudyIndex
+from otg.datasource.gwas_catalog.associations import StudyLocusGWASCatalog
+from otg.datasource.gwas_catalog.study_index import StudyIndexGWASCatalog
+from pyspark.sql import DataFrame, SparkSession
+
+from utils.spark import get_spark_testing_conf
@pytest.fixture(scope="session", autouse=True)
-def spark(tmp_path_factory) -> SparkSession:
+def spark(tmp_path_factory: pytest.TempPathFactory) -> SparkSession:
"""Local spark session for testing purposes.
+ Args:
+ tmp_path_factory (pytest.TempPathFactory): pytest fixture
+
Returns:
SparkSession: local spark session
"""
return (
- SparkSession.builder.master("local[1]")
- .config("spark.driver.bindAddress", "127.0.0.1")
- .config("spark.executor.cores", "1")
- .config("spark.executor.instances", "1")
- # no shuffling
- .config("spark.sql.shuffle.partitions", "1")
- # ui settings
- .config("spark.ui.showConsoleProgress", "false")
- .config("spark.ui.enabled", "false")
- .config("spark.ui.dagGraph.retainedRootRDDs", "1")
- .config("spark.ui.retainedJobs", "1")
- .config("spark.ui.retainedStages", "1")
- .config("spark.ui.retainedTasks", "1")
- .config("spark.sql.ui.retainedExecutions", "1")
- .config("spark.worker.ui.retainedExecutors", "1")
- .config("spark.worker.ui.retainedDrivers", "1")
- # fixed memory
- .config("spark.driver.memory", "2g")
- .config("spark.sql.warehouse.dir", tmp_path_factory.mktemp("warehouse"))
- .config(
- "spark.driver.extraJavaOptions",
- "-Dderby.system.home={tmp_path_factory.mktemp('derby')}",
- )
+ SparkSession.builder.config(conf=get_spark_testing_conf())
+ .master("local[1]")
.appName("test")
.getOrCreate()
)
+@pytest.fixture()
+def session() -> Session:
+ """Return OTG Session object."""
+ return Session()
+
+
+@pytest.fixture()
+def hail_home() -> str:
+ """Return the path to the Hail home directory."""
+ return Path(hl.__file__).parent.as_posix()
+
+
@pytest.fixture()
def mock_colocalisation(spark: SparkSession) -> Colocalisation:
"""Mock colocalisation dataset."""
@@ -85,7 +84,7 @@ def mock_colocalisation(spark: SparkSession) -> Colocalisation:
def mock_study_index_data(spark: SparkSession) -> DataFrame:
- """Mock v2g dataset."""
+ """Mock study index dataset."""
si_schema = StudyIndex.get_schema()
data_spec = (
@@ -116,6 +115,7 @@ def mock_study_index_data(spark: SparkSession) -> DataFrame:
expr='array(named_struct("sampleSize", cast(rand() as string), "ancestry", cast(rand() as string)))',
percentNulls=0.1,
)
+ .withColumnSpec("geneId", percentNulls=0.1)
.withColumnSpec("pubmedId", percentNulls=0.1)
.withColumnSpec("publicationFirstAuthor", percentNulls=0.1)
.withColumnSpec("publicationDate", percentNulls=0.1)
@@ -126,6 +126,7 @@ def mock_study_index_data(spark: SparkSession) -> DataFrame:
.withColumnSpec("nControls", percentNulls=0.1)
.withColumnSpec("nSamples", percentNulls=0.1)
.withColumnSpec("summarystatsLocation", percentNulls=0.1)
+ .withColumnSpec("studyType", percentNulls=0.0, values=["eqtl", "pqtl", "sqtl"])
)
return data_spec.build()
@@ -140,38 +141,11 @@ def mock_study_index(spark: SparkSession) -> StudyIndex:
@pytest.fixture()
-def mock_study_index_gwas_catalog(spark: SparkSession) -> GWASCatalogStudyIndex:
+def mock_study_index_gwas_catalog(spark: SparkSession) -> StudyIndexGWASCatalog:
"""Mock GWASCatalogStudyIndex dataset."""
- return GWASCatalogStudyIndex(
- _df=mock_study_index_data(spark),
- _schema=StudyIndex.get_schema(),
- )
-
-
-@pytest.fixture()
-def mock_study_index_finngen(spark: SparkSession) -> FinnGenStudyIndex:
- """Mock FinnGenStudyIndex dataset."""
- return FinnGenStudyIndex(
+ return StudyIndexGWASCatalog(
_df=mock_study_index_data(spark),
- _schema=StudyIndex.get_schema(),
- )
-
-
-@pytest.fixture()
-def mock_summary_stats_finngen(spark: SparkSession) -> FinnGenSummaryStats:
- """Mock FinnGenSummaryStats dataset."""
- return FinnGenSummaryStats(
- _df=mock_summary_statistics(spark),
- _schema=SummaryStatistics.get_schema(),
- )
-
-
-@pytest.fixture()
-def mock_study_index_ukbiobank(spark: SparkSession) -> UKBiobankStudyIndex:
- """Mock StudyIndexUKBiobank dataset."""
- return UKBiobankStudyIndex(
- _df=mock_study_index_data(spark),
- _schema=UKBiobankStudyIndex.get_schema(),
+ _schema=StudyIndexGWASCatalog.get_schema(),
)
@@ -205,11 +179,6 @@ def mock_study_locus_data(spark: SparkSession) -> DataFrame:
.withColumnSpec("chromosome", percentNulls=0.1)
.withColumnSpec("position", percentNulls=0.1)
.withColumnSpec("beta", percentNulls=0.1)
- .withColumnSpec("oddsRatio", percentNulls=0.1)
- .withColumnSpec("oddsRatioConfidenceIntervalLower", percentNulls=0.1)
- .withColumnSpec("oddsRatioConfidenceIntervalUpper", percentNulls=0.1)
- .withColumnSpec("betaConfidenceIntervalLower", percentNulls=0.1)
- .withColumnSpec("betaConfidenceIntervalUpper", percentNulls=0.1)
.withColumnSpec("effectAlleleFrequencyFromSource", percentNulls=0.1)
.withColumnSpec("standardError", percentNulls=0.1)
.withColumnSpec("subStudyDescription", percentNulls=0.1)
@@ -240,11 +209,11 @@ def mock_study_locus(spark: SparkSession) -> StudyLocus:
@pytest.fixture()
-def mock_study_locus_gwas_catalog(spark: SparkSession) -> StudyLocus:
+def mock_study_locus_gwas_catalog(spark: SparkSession) -> StudyLocusGWASCatalog:
"""Mock study_locus dataset."""
- return GWASCatalogAssociations(
+ return StudyLocusGWASCatalog(
_df=mock_study_locus_data(spark),
- _schema=GWASCatalogAssociations.get_schema(),
+ _schema=StudyLocusGWASCatalog.get_schema(),
)
@@ -285,10 +254,9 @@ def mock_v2g(spark: SparkSession) -> V2G:
.withSchema(v2g_schema)
.withColumnSpec("distance", percentNulls=0.1)
.withColumnSpec("resourceScore", percentNulls=0.1)
+ .withColumnSpec("score", percentNulls=0.1)
.withColumnSpec("pmid", percentNulls=0.1)
.withColumnSpec("biofeature", percentNulls=0.1)
- .withColumnSpec("score", percentNulls=0.1)
- .withColumnSpec("label", percentNulls=0.1)
.withColumnSpec("variantFunctionalConsequenceId", percentNulls=0.1)
.withColumnSpec("isHighQualityPlof", percentNulls=0.1)
)
@@ -320,15 +288,15 @@ def mock_variant_annotation(spark: SparkSession) -> VariantAnnotation:
expr='array(named_struct("alleleFrequency", rand(), "populationName", cast(rand() as string)))',
percentNulls=0.1,
)
+ .withColumnSpec("rsIds", expr="array(cast(rand() AS string))", percentNulls=0.1)
.withColumnSpec(
- "cadd",
- expr='named_struct("phred", cast(rand() as float), "raw", cast(rand() as float))',
+ "vep",
+ expr='named_struct("mostSevereConsequence", cast(rand() as string), "transcriptConsequences", array(named_struct("aminoAcids", cast(rand() as string), "consequenceTerms", array(cast(rand() as string)), "geneId", cast(rand() as string), "lof", cast(rand() as string))))',
percentNulls=0.1,
)
- .withColumnSpec("rsIds", expr="array(cast(rand() AS string))", percentNulls=0.1)
.withColumnSpec(
- "vep",
- expr='named_struct("mostSevereConsequence", cast(rand() as string), "transcriptConsequences", array(named_struct("aminoAcids", cast(rand() as string), "consequenceTerms", array(cast(rand() as string)), "geneId", cast(rand() as string), "lof", cast(rand() as string), "polyphenPrediction", cast(rand() as string), "polyphenScore", cast(rand() as float), "siftPrediction", cast(rand() as string), "siftScore", cast(rand() as float))))',
+ "inSilicoPredictors",
+ expr='named_struct("cadd", named_struct("phred", cast(rand() as float), "raw_score", cast(rand() as float)), "revelMax", cast(rand() as double), "spliceaiDsMax", cast(rand() as float), "pangolinLargestDs", cast(rand() as double), "phylop", cast(rand() as double), "polyphenMax", cast(rand() as double), "siftMax", cast(rand() as double))',
percentNulls=0.1,
)
)
@@ -337,7 +305,7 @@ def mock_variant_annotation(spark: SparkSession) -> VariantAnnotation:
@pytest.fixture()
def mock_variant_index(spark: SparkSession) -> VariantIndex:
- """Mock gene index."""
+ """Mock variant index."""
vi_schema = VariantIndex.get_schema()
data_spec = (
@@ -360,8 +328,8 @@ def mock_variant_index(spark: SparkSession) -> VariantIndex:
percentNulls=0.1,
)
.withColumnSpec(
- "cadd",
- expr='named_struct("phred", cast(rand() AS float), "raw", cast(rand() AS float))',
+ "inSilicoPredictors",
+ expr='named_struct("cadd", named_struct("phred", cast(rand() as float), "raw_score", cast(rand() as float)), "revelMax", cast(rand() as double), "spliceaiDsMax", cast(rand() as float), "pangolinLargestDs", cast(rand() as double), "phylop", cast(rand() as double), "polyphenMax", cast(rand() as double), "siftMax", cast(rand() as double))',
percentNulls=0.1,
)
.withColumnSpec("rsIds", expr="array(cast(rand() AS string))", percentNulls=0.1)
@@ -371,8 +339,15 @@ def mock_variant_index(spark: SparkSession) -> VariantIndex:
@pytest.fixture()
-def mock_summary_statistics(spark: SparkSession) -> SummaryStatistics:
- """Generating a mock summary statistics dataset."""
+def mock_summary_statistics_data(spark: SparkSession) -> DataFrame:
+ """Generating mock summary statistics data.
+
+ Args:
+ spark (SparkSession): Spark session
+
+ Returns:
+ DataFrame: Mock summary statistics data
+ """
ss_schema = SummaryStatistics.get_schema()
data_spec = (
@@ -389,18 +364,21 @@ def mock_summary_statistics(spark: SparkSession) -> SummaryStatistics:
"effectAlleleFrequencyFromSource", percentNulls=0.1, maxValue=1.0
)
# Allowing missingness:
- .withColumnSpec("betaConfidenceIntervalLower", percentNulls=0.1)
- .withColumnSpec("betaConfidenceIntervalUpper", percentNulls=0.1)
.withColumnSpec("standardError", percentNulls=0.1)
# Making sure p-values are below 1:
).build()
- # Because some of the columns are not strictly speaking required, they are dropped now:
- data_spec = data_spec.drop(
- "betaConfidenceIntervalLower", "betaConfidenceIntervalUpper"
- )
+ return data_spec
+
- return SummaryStatistics(_df=data_spec, _schema=ss_schema)
+@pytest.fixture()
+def mock_summary_statistics(
+ mock_summary_statistics_data: DataFrame,
+) -> SummaryStatistics:
+ """Generating a mock summary statistics dataset."""
+ return SummaryStatistics(
+ _df=mock_summary_statistics_data, _schema=SummaryStatistics.get_schema()
+ )
@pytest.fixture()
@@ -445,16 +423,6 @@ def sample_gwas_catalog_ancestries_lut(spark: SparkSession) -> DataFrame:
)
-@pytest.fixture()
-def sample_gwas_catalog_harmonised_sumstats(spark: SparkSession) -> DataFrame:
- """Sample GWAS harmonised sumstats sample data."""
- return spark.read.csv(
- "tests/data_samples/gwas_summary_stats_sample.tsv.gz",
- sep="\t",
- header=True,
- )
-
-
@pytest.fixture()
def sample_gwas_catalog_harmonised_sumstats_list(spark: SparkSession) -> DataFrame:
"""Sample GWAS harmonised sumstats sample data."""
@@ -496,13 +464,26 @@ def sample_finngen_studies(spark: SparkSession) -> DataFrame:
@pytest.fixture()
-def sample_finngen_summary_stats(spark: SparkSession) -> DataFrame:
- """Sample FinnGen summary stats."""
+def sample_eqtl_catalogue_studies(spark: SparkSession) -> DataFrame:
+ """Sample eQTL Catalogue studies."""
# For reference, the sample file was generated with the following command:
- # gsutil cat gs://finngen-public-data-r9/summary_stats/finngen_R9_AB1_ACTINOMYCOSIS.gz | gzip -cd | head -n11 | gzip -c > tests/data_samples/finngen_R9_AB1_ACTINOMYCOSIS.gz
- # It's important for the test file to be named in exactly this way, because FinnGen study ID is populated based on input file name.
+ # curl https://raw.githubusercontent.com/eQTL-Catalogue/eQTL-Catalogue-resources/master/tabix/tabix_ftp_paths_imported.tsv | head -n11 > tests/data_samples/eqtl_catalogue_studies_sample.tsv
+ with open("tests/data_samples/eqtl_catalogue_studies_sample.tsv") as eqtl_catalogue:
+ tsv = eqtl_catalogue.read()
+ rdd = spark.sparkContext.parallelize([tsv])
+ return spark.read.csv(rdd, sep="\t", header=True)
+
+
+@pytest.fixture()
+def sample_eqtl_catalogue_summary_stats(spark: SparkSession) -> DataFrame:
+ """Sample eQTL Catalogue summary stats."""
+ # For reference, the sample file was generated with the following commands:
+ # mkdir -p tests/data_samples/imported/GTEx_V8/ge
+ # curl ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz | gzip -cd | head -n11 | gzip -c > tests/data_samples/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz
+ # It's important for the test file to be named in exactly this way, because eQTL Catalogue study ID is populated based on input file name.
return spark.read.option("delimiter", "\t").csv(
- "tests/data_samples/finngen_R9_AB1_ACTINOMYCOSIS.gz", header=True
+ "tests/data_samples/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz",
+ header=True,
)
@@ -552,6 +533,79 @@ def mock_gene_index(spark: SparkSession) -> GeneIndex:
@pytest.fixture()
-def liftover_chain_37_to_38(spark: SparkSession) -> DataFrame:
+def liftover_chain_37_to_38(spark: SparkSession) -> LiftOverSpark:
"""Sample liftover chain file."""
return LiftOverSpark("tests/data_samples/grch37_to_grch38.over.chain")
+
+
+@pytest.fixture()
+def sample_l2g_gold_standard(spark: SparkSession) -> DataFrame:
+ """Sample L2G gold standard curation."""
+ return spark.read.json(
+ "tests/data_samples/l2g_gold_standard_curation_sample.json.gz",
+ )
+
+
+@pytest.fixture()
+def sample_otp_interactions(spark: SparkSession) -> DataFrame:
+ """Sample OTP gene-gene interactions dataset."""
+ return spark.read.parquet(
+ "tests/data_samples/otp_interactions_sample.parquet",
+ )
+
+
+@pytest.fixture()
+def mock_l2g_feature_matrix(spark: SparkSession) -> L2GFeatureMatrix:
+ """Mock l2g feature matrix dataset."""
+ schema = L2GFeatureMatrix.get_schema()
+
+ data_spec = (
+ dg.DataGenerator(
+ spark,
+ rows=50,
+ partitions=4,
+ randomSeedMethod="hash_fieldname",
+ )
+ .withSchema(schema)
+ .withColumnSpec("distanceTssMean", percentNulls=0.1)
+ .withColumnSpec("distanceTssMinimum", percentNulls=0.1)
+ .withColumnSpec("eqtlColocClppLocalMaximum", percentNulls=0.1)
+ .withColumnSpec("eqtlColocClppNeighborhoodMaximum", percentNulls=0.1)
+ .withColumnSpec("eqtlColocLlrLocalMaximum", percentNulls=0.1)
+ .withColumnSpec("eqtlColocLlrNeighborhoodMaximum", percentNulls=0.1)
+ .withColumnSpec("pqtlColocClppLocalMaximum", percentNulls=0.1)
+ .withColumnSpec("pqtlColocClppNeighborhoodMaximum", percentNulls=0.1)
+ .withColumnSpec("pqtlColocLlrLocalMaximum", percentNulls=0.1)
+ .withColumnSpec("pqtlColocLlrNeighborhoodMaximum", percentNulls=0.1)
+ .withColumnSpec("sqtlColocClppLocalMaximum", percentNulls=0.1)
+ .withColumnSpec("sqtlColocClppNeighborhoodMaximum", percentNulls=0.1)
+ .withColumnSpec("sqtlColocLlrLocalMaximum", percentNulls=0.1)
+ .withColumnSpec("sqtlColocLlrNeighborhoodMaximum", percentNulls=0.1)
+ .withColumnSpec(
+ "goldStandardSet", percentNulls=0.0, values=["positive", "negative"]
+ )
+ )
+
+ return L2GFeatureMatrix(_df=data_spec.build(), _schema=schema)
+
+
+@pytest.fixture()
+def mock_l2g_gold_standard(spark: SparkSession) -> L2GGoldStandard:
+ """Mock l2g gold standard dataset."""
+ schema = L2GGoldStandard.get_schema()
+ data_spec = dg.DataGenerator(
+ spark, rows=400, partitions=4, randomSeedMethod="hash_fieldname"
+ ).withSchema(schema)
+
+ return L2GGoldStandard(_df=data_spec.build(), _schema=schema)
+
+
+@pytest.fixture()
+def mock_l2g_predictions(spark: SparkSession) -> L2GPrediction:
+ """Mock l2g predictions dataset."""
+ schema = L2GPrediction.get_schema()
+ data_spec = dg.DataGenerator(
+ spark, rows=400, partitions=4, randomSeedMethod="hash_fieldname"
+ ).withSchema(schema)
+
+ return L2GPrediction(_df=data_spec.build(), _schema=schema)
diff --git a/tests/data_samples/GCST005523_chr18.parquet b/tests/data_samples/GCST005523_chr18.parquet
index f8257c109..7d8cf9be6 100644
Binary files a/tests/data_samples/GCST005523_chr18.parquet and b/tests/data_samples/GCST005523_chr18.parquet differ
diff --git a/tests/data_samples/eqtl_catalogue_studies_sample.tsv b/tests/data_samples/eqtl_catalogue_studies_sample.tsv
new file mode 100644
index 000000000..f756ecd6e
--- /dev/null
+++ b/tests/data_samples/eqtl_catalogue_studies_sample.tsv
@@ -0,0 +1,11 @@
+study qtl_group tissue_ontology_id tissue_ontology_term tissue_label condition_label quant_method ftp_path
+GTEx_V8 Adipose_Subcutaneous UBER_0002190 subcutaneous adipose tissue Adipose - Subcutaneous naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz
+GTEx_V8 Adipose_Visceral_Omentum UBER_0010414 omental fat pad Adipose - Visceral (Omentum) naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Adipose_Visceral_Omentum.tsv.gz
+GTEx_V8 Adrenal_Gland UBER_0002369 adrenal gland Adrenal Gland naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Adrenal_Gland.tsv.gz
+GTEx_V8 Artery_Aorta UBER_0001496 ascending aorta Artery - Aorta naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Artery_Aorta.tsv.gz
+GTEx_V8 Artery_Coronary UBER_0001621 coronary artery Artery - Coronary naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Artery_Coronary.tsv.gz
+GTEx_V8 Artery_Tibial UBER_0007610 tibial artery Artery - Tibial naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Artery_Tibial.tsv.gz
+GTEx_V8 Brain_Amygdala UBER_0001876 amygdala Brain - Amygdala naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Brain_Amygdala.tsv.gz
+GTEx_V8 Brain_Anterior_cingulate_cortex_BA24 UBER_0009835 anterior cingulate cortex Brain - Anterior cingulate cortex (BA24) naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Brain_Anterior_cingulate_cortex_BA24.tsv.gz
+GTEx_V8 Brain_Caudate_basal_ganglia UBER_0001873 caudate nucleus Brain - Caudate (basal ganglia) naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Brain_Caudate_basal_ganglia.tsv.gz
+GTEx_V8 Brain_Cerebellar_Hemisphere UBER_0002037 cerebellum Brain - Cerebellar Hemisphere naive ge ftp://ftp.ebi.ac.uk/pub/databases/spot/eQTL/imported/GTEx_V8/ge/Brain_Cerebellar_Hemisphere.tsv.gz
diff --git a/tests/data_samples/example_test-pop.bm/_SUCCESS b/tests/data_samples/example_test-pop.bm/_SUCCESS
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/data_samples/example_test-pop.bm/metadata.json b/tests/data_samples/example_test-pop.bm/metadata.json
new file mode 100644
index 000000000..98c1d22bb
--- /dev/null
+++ b/tests/data_samples/example_test-pop.bm/metadata.json
@@ -0,0 +1,18 @@
+{
+ "blockSize": 2,
+ "nRows": 7,
+ "nCols": 7,
+ "maybeFiltered": [0, 4, 5, 8, 9, 10, 12, 13, 14, 15],
+ "partFiles": [
+ "part-00-36-0-0-9da891bc-b3f3-211c-ec5d-b4586236d3f6",
+ "part-01-36-1-0-0f48a14a-3dc0-261b-3b0e-e3549671ed4b",
+ "part-02-36-2-0-c23e0dd7-d912-f900-88fd-fae87408e0bd",
+ "part-03-36-3-0-596fbcf8-3832-3676-1b73-987b185558f9",
+ "part-04-36-4-0-556c0d84-977b-2faa-376b-e758c55e2f42",
+ "part-05-36-5-0-8ac23bab-8bc8-8b2e-b897-9d818f17a80e",
+ "part-06-36-6-0-821b84fa-ae1c-8e95-c967-485dc621bd09",
+ "part-07-36-7-0-35b03c95-f5f4-aa0a-c39a-3e0a201c7e60",
+ "part-08-36-8-0-b6d68819-fa17-6649-1400-4113d86b4b81",
+ "part-09-36-9-0-7e9bb167-9ee1-443f-de8d-dcebf8c9b5fa"
+ ]
+}
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-0-17-0-0-e3ab091a-11ed-50ee-431d-8f2be29e7fb0 b/tests/data_samples/example_test-pop.bm/parts/part-0-17-0-0-e3ab091a-11ed-50ee-431d-8f2be29e7fb0
new file mode 100644
index 000000000..e6ab71147
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-0-17-0-0-e3ab091a-11ed-50ee-431d-8f2be29e7fb0 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-00-36-0-0-9da891bc-b3f3-211c-ec5d-b4586236d3f6 b/tests/data_samples/example_test-pop.bm/parts/part-00-36-0-0-9da891bc-b3f3-211c-ec5d-b4586236d3f6
new file mode 100644
index 000000000..e6ab71147
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-00-36-0-0-9da891bc-b3f3-211c-ec5d-b4586236d3f6 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-01-36-1-0-0f48a14a-3dc0-261b-3b0e-e3549671ed4b b/tests/data_samples/example_test-pop.bm/parts/part-01-36-1-0-0f48a14a-3dc0-261b-3b0e-e3549671ed4b
new file mode 100644
index 000000000..ea231e776
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-01-36-1-0-0f48a14a-3dc0-261b-3b0e-e3549671ed4b differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-02-36-2-0-c23e0dd7-d912-f900-88fd-fae87408e0bd b/tests/data_samples/example_test-pop.bm/parts/part-02-36-2-0-c23e0dd7-d912-f900-88fd-fae87408e0bd
new file mode 100644
index 000000000..9af417024
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-02-36-2-0-c23e0dd7-d912-f900-88fd-fae87408e0bd differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-03-36-3-0-596fbcf8-3832-3676-1b73-987b185558f9 b/tests/data_samples/example_test-pop.bm/parts/part-03-36-3-0-596fbcf8-3832-3676-1b73-987b185558f9
new file mode 100644
index 000000000..84e34a7ce
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-03-36-3-0-596fbcf8-3832-3676-1b73-987b185558f9 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-04-36-4-0-556c0d84-977b-2faa-376b-e758c55e2f42 b/tests/data_samples/example_test-pop.bm/parts/part-04-36-4-0-556c0d84-977b-2faa-376b-e758c55e2f42
new file mode 100644
index 000000000..350020535
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-04-36-4-0-556c0d84-977b-2faa-376b-e758c55e2f42 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-05-36-5-0-8ac23bab-8bc8-8b2e-b897-9d818f17a80e b/tests/data_samples/example_test-pop.bm/parts/part-05-36-5-0-8ac23bab-8bc8-8b2e-b897-9d818f17a80e
new file mode 100644
index 000000000..412847da8
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-05-36-5-0-8ac23bab-8bc8-8b2e-b897-9d818f17a80e differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-06-36-6-0-821b84fa-ae1c-8e95-c967-485dc621bd09 b/tests/data_samples/example_test-pop.bm/parts/part-06-36-6-0-821b84fa-ae1c-8e95-c967-485dc621bd09
new file mode 100644
index 000000000..39266234a
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-06-36-6-0-821b84fa-ae1c-8e95-c967-485dc621bd09 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-07-36-7-0-35b03c95-f5f4-aa0a-c39a-3e0a201c7e60 b/tests/data_samples/example_test-pop.bm/parts/part-07-36-7-0-35b03c95-f5f4-aa0a-c39a-3e0a201c7e60
new file mode 100644
index 000000000..906ad10d5
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-07-36-7-0-35b03c95-f5f4-aa0a-c39a-3e0a201c7e60 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-08-36-8-0-b6d68819-fa17-6649-1400-4113d86b4b81 b/tests/data_samples/example_test-pop.bm/parts/part-08-36-8-0-b6d68819-fa17-6649-1400-4113d86b4b81
new file mode 100644
index 000000000..156abe2ba
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-08-36-8-0-b6d68819-fa17-6649-1400-4113d86b4b81 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-09-36-9-0-7e9bb167-9ee1-443f-de8d-dcebf8c9b5fa b/tests/data_samples/example_test-pop.bm/parts/part-09-36-9-0-7e9bb167-9ee1-443f-de8d-dcebf8c9b5fa
new file mode 100644
index 000000000..3985ba5dd
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-09-36-9-0-7e9bb167-9ee1-443f-de8d-dcebf8c9b5fa differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-1-17-1-0-50da5bf3-93d4-fb68-d8ad-4450d10b2c28 b/tests/data_samples/example_test-pop.bm/parts/part-1-17-1-0-50da5bf3-93d4-fb68-d8ad-4450d10b2c28
new file mode 100644
index 000000000..69c58be20
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-1-17-1-0-50da5bf3-93d4-fb68-d8ad-4450d10b2c28 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-2-17-2-0-94bda190-9389-91ab-30ad-9b3c9a3baf39 b/tests/data_samples/example_test-pop.bm/parts/part-2-17-2-0-94bda190-9389-91ab-30ad-9b3c9a3baf39
new file mode 100644
index 000000000..2d8675225
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-2-17-2-0-94bda190-9389-91ab-30ad-9b3c9a3baf39 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-3-17-3-0-819f71a1-a22c-8937-48e2-dc686b8ec9c5 b/tests/data_samples/example_test-pop.bm/parts/part-3-17-3-0-819f71a1-a22c-8937-48e2-dc686b8ec9c5
new file mode 100644
index 000000000..df5a43cb6
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-3-17-3-0-819f71a1-a22c-8937-48e2-dc686b8ec9c5 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-4-17-4-0-b9ac71e5-8432-3dac-e262-4eb17772eb45 b/tests/data_samples/example_test-pop.bm/parts/part-4-17-4-0-b9ac71e5-8432-3dac-e262-4eb17772eb45
new file mode 100644
index 000000000..1349250e9
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-4-17-4-0-b9ac71e5-8432-3dac-e262-4eb17772eb45 differ
diff --git a/tests/data_samples/example_test-pop.bm/parts/part-5-17-5-0-8d7756c7-f87c-eff0-3262-a16def109b7a b/tests/data_samples/example_test-pop.bm/parts/part-5-17-5-0-8d7756c7-f87c-eff0-3262-a16def109b7a
new file mode 100644
index 000000000..3985ba5dd
Binary files /dev/null and b/tests/data_samples/example_test-pop.bm/parts/part-5-17-5-0-8d7756c7-f87c-eff0-3262-a16def109b7a differ
diff --git a/tests/data_samples/example_test-pop.ht/README.txt b/tests/data_samples/example_test-pop.ht/README.txt
new file mode 100644
index 000000000..ace05ed2e
--- /dev/null
+++ b/tests/data_samples/example_test-pop.ht/README.txt
@@ -0,0 +1,3 @@
+This folder comprises a Hail (www.hail.is) native Table or MatrixTable.
+ Written with version 0.2.122-be9d88a80695
+ Created at 2023/11/09 13:01:06
diff --git a/tests/data_samples/example_test-pop.ht/_SUCCESS b/tests/data_samples/example_test-pop.ht/_SUCCESS
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/data_samples/example_test-pop.ht/globals/metadata.json.gz b/tests/data_samples/example_test-pop.ht/globals/metadata.json.gz
new file mode 100644
index 000000000..369b04d91
Binary files /dev/null and b/tests/data_samples/example_test-pop.ht/globals/metadata.json.gz differ
diff --git a/tests/data_samples/example_test-pop.ht/globals/parts/part-0 b/tests/data_samples/example_test-pop.ht/globals/parts/part-0
new file mode 100644
index 000000000..89e711531
Binary files /dev/null and b/tests/data_samples/example_test-pop.ht/globals/parts/part-0 differ
diff --git a/tests/data_samples/example_test-pop.ht/index/part-0-020df040-1af5-433e-944d-df08b484cf34.idx/index b/tests/data_samples/example_test-pop.ht/index/part-0-020df040-1af5-433e-944d-df08b484cf34.idx/index
new file mode 100644
index 000000000..a62f9cf60
Binary files /dev/null and b/tests/data_samples/example_test-pop.ht/index/part-0-020df040-1af5-433e-944d-df08b484cf34.idx/index differ
diff --git a/tests/data_samples/example_test-pop.ht/index/part-0-020df040-1af5-433e-944d-df08b484cf34.idx/metadata.json.gz b/tests/data_samples/example_test-pop.ht/index/part-0-020df040-1af5-433e-944d-df08b484cf34.idx/metadata.json.gz
new file mode 100644
index 000000000..e7a54cb4f
Binary files /dev/null and b/tests/data_samples/example_test-pop.ht/index/part-0-020df040-1af5-433e-944d-df08b484cf34.idx/metadata.json.gz differ
diff --git a/tests/data_samples/example_test-pop.ht/metadata.json.gz b/tests/data_samples/example_test-pop.ht/metadata.json.gz
new file mode 100644
index 000000000..1bdbc76e4
Binary files /dev/null and b/tests/data_samples/example_test-pop.ht/metadata.json.gz differ
diff --git a/tests/data_samples/example_test-pop.ht/rows/metadata.json.gz b/tests/data_samples/example_test-pop.ht/rows/metadata.json.gz
new file mode 100644
index 000000000..4ae750c7c
Binary files /dev/null and b/tests/data_samples/example_test-pop.ht/rows/metadata.json.gz differ
diff --git a/tests/data_samples/example_test-pop.ht/rows/parts/part-0-020df040-1af5-433e-944d-df08b484cf34 b/tests/data_samples/example_test-pop.ht/rows/parts/part-0-020df040-1af5-433e-944d-df08b484cf34
new file mode 100644
index 000000000..618c605e9
Binary files /dev/null and b/tests/data_samples/example_test-pop.ht/rows/parts/part-0-020df040-1af5-433e-944d-df08b484cf34 differ
diff --git a/tests/data_samples/gwas_summary_stats_sample.tsv.gz b/tests/data_samples/gwas_summary_stats_sample.tsv.gz
deleted file mode 100644
index 9a9c5f735..000000000
Binary files a/tests/data_samples/gwas_summary_stats_sample.tsv.gz and /dev/null differ
diff --git a/tests/data_samples/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz b/tests/data_samples/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz
new file mode 100644
index 000000000..74c0844a4
Binary files /dev/null and b/tests/data_samples/imported/GTEx_V8/ge/Adipose_Subcutaneous.tsv.gz differ
diff --git a/tests/data_samples/l2g_gold_standard_curation_sample.json.gz b/tests/data_samples/l2g_gold_standard_curation_sample.json.gz
new file mode 100644
index 000000000..3ffb365a4
Binary files /dev/null and b/tests/data_samples/l2g_gold_standard_curation_sample.json.gz differ
diff --git a/tests/data_samples/new_format_GCST90293086.h.tsv.gz b/tests/data_samples/new_format_GCST90293086.h.tsv.gz
new file mode 100644
index 000000000..a15d475df
Binary files /dev/null and b/tests/data_samples/new_format_GCST90293086.h.tsv.gz differ
diff --git a/tests/data_samples/old_format_GCST006090.h.tsv.gz b/tests/data_samples/old_format_GCST006090.h.tsv.gz
new file mode 100644
index 000000000..76a207ccf
Binary files /dev/null and b/tests/data_samples/old_format_GCST006090.h.tsv.gz differ
diff --git a/tests/data_samples/otp_interactions_sample.parquet b/tests/data_samples/otp_interactions_sample.parquet
new file mode 100644
index 000000000..44c0110be
Binary files /dev/null and b/tests/data_samples/otp_interactions_sample.parquet differ
diff --git a/tests/data_samples/thurnman_sample.bed8 b/tests/data_samples/thurman_sample.bed8
similarity index 100%
rename from tests/data_samples/thurnman_sample.bed8
rename to tests/data_samples/thurman_sample.bed8
diff --git a/tests/dataset/test_dataset.py b/tests/dataset/test_dataset.py
new file mode 100644
index 000000000..a491a68d3
--- /dev/null
+++ b/tests/dataset/test_dataset.py
@@ -0,0 +1,44 @@
+"""Test Dataset class."""
+from __future__ import annotations
+
+import pytest
+from otg.dataset.dataset import Dataset
+from pyspark.sql import SparkSession
+from pyspark.sql.types import IntegerType, StructField, StructType
+
+
+class MockDataset(Dataset):
+ """Concrete subclass of Dataset for testing. Necessary because Dataset is abstract."""
+
+ @classmethod
+ def get_schema(cls) -> StructType:
+ """Get schema."""
+ return StructType([StructField("value", IntegerType(), False)])
+
+
+class TestCoalesceAndRepartition:
+ """Test TestDataset.coalesce and TestDataset.repartition."""
+
+ def test_repartition(self: TestCoalesceAndRepartition) -> None:
+ """Test Dataset.repartition."""
+ initial_partitions = self.test_dataset._df.rdd.getNumPartitions()
+ new_partitions = initial_partitions + 1
+ self.test_dataset.repartition(new_partitions)
+ assert self.test_dataset._df.rdd.getNumPartitions() == new_partitions
+
+ def test_coalesce(self: TestCoalesceAndRepartition) -> None:
+ """Test Dataset.coalesce."""
+ initial_partitions = self.test_dataset._df.rdd.getNumPartitions()
+ new_partitions = initial_partitions - 1 if initial_partitions > 1 else 1
+ self.test_dataset.coalesce(new_partitions)
+ assert self.test_dataset._df.rdd.getNumPartitions() == new_partitions
+
+ @pytest.fixture(autouse=True)
+ def _setup(self: TestCoalesceAndRepartition, spark: SparkSession) -> None:
+ """Setup fixture."""
+ self.test_dataset = MockDataset(
+ _df=spark.createDataFrame(
+ [(1,), (2,), (3,)], schema=MockDataset.get_schema()
+ ),
+ _schema=MockDataset.get_schema(),
+ )
diff --git a/tests/dataset/test_gene_index.py b/tests/dataset/test_gene_index.py
index 467e41090..10cd576bc 100644
--- a/tests/dataset/test_gene_index.py
+++ b/tests/dataset/test_gene_index.py
@@ -1,9 +1,8 @@
"""Tests on LD index."""
from __future__ import annotations
-from pyspark.sql import DataFrame
-
from otg.dataset.gene_index import GeneIndex
+from pyspark.sql import DataFrame
def test_gene_index_creation(mock_gene_index: GeneIndex) -> None:
diff --git a/tests/dataset/test_l2g.py b/tests/dataset/test_l2g.py
new file mode 100644
index 000000000..c2aa21dcb
--- /dev/null
+++ b/tests/dataset/test_l2g.py
@@ -0,0 +1,175 @@
+"""Tests on L2G datasets."""
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+from otg.dataset.l2g_feature_matrix import L2GFeatureMatrix
+from otg.dataset.l2g_gold_standard import L2GGoldStandard
+from otg.dataset.l2g_prediction import L2GPrediction
+from otg.dataset.study_locus_overlap import StudyLocusOverlap
+
+if TYPE_CHECKING:
+ from pyspark.sql import DataFrame, SparkSession
+
+
+def test_feature_matrix(mock_l2g_feature_matrix: L2GFeatureMatrix) -> None:
+ """Test L2G Feature Matrix creation with mock data."""
+ assert isinstance(mock_l2g_feature_matrix, L2GFeatureMatrix)
+
+
+def test_gold_standard(mock_l2g_gold_standard: L2GFeatureMatrix) -> None:
+ """Test L2G gold standard creation with mock data."""
+ assert isinstance(mock_l2g_gold_standard, L2GGoldStandard)
+
+
+def test_process_gene_interactions(sample_otp_interactions: DataFrame) -> None:
+ """Tests processing of gene interactions from OTP."""
+ expected_cols = ["geneIdA", "geneIdB", "score"]
+ observed_df = L2GGoldStandard.process_gene_interactions(sample_otp_interactions)
+ assert (
+ observed_df.columns == expected_cols
+ ), "Gene interactions has a different schema."
+
+
+def test_predictions(mock_l2g_predictions: L2GFeatureMatrix) -> None:
+ """Test L2G predictions creation with mock data."""
+ assert isinstance(mock_l2g_predictions, L2GPrediction)
+
+
+def test_filter_unique_associations(spark: SparkSession) -> None:
+ """Test filter_unique_associations."""
+ mock_l2g_gs_df = spark.createDataFrame(
+ [
+ (1, "variant1", "study1", "gene1", "positive"),
+ (
+ 2,
+ "variant2",
+ "study1",
+ "gene1",
+ "negative",
+ ), # in the same locus as sl1 and pointing to same gene, has to be dropped
+ (
+ 3,
+ "variant3",
+ "study1",
+ "gene1",
+ "positive",
+ ), # in diff locus as sl1 and pointing to same gene, has to be kept
+ (
+ 4,
+ "variant4",
+ "study1",
+ "gene2",
+ "positive",
+ ), # in same locus as sl1 and pointing to diff gene, has to be kept
+ ],
+ "studyLocusId LONG, variantId STRING, studyId STRING, geneId STRING, goldStandardSet STRING",
+ )
+
+ mock_sl_overlap_df = spark.createDataFrame(
+ [(1, 2, "variant2"), (1, 4, "variant4")],
+ "leftStudyLocusId LONG, rightStudyLocusId LONG, tagVariantId STRING",
+ )
+
+ expected_df = spark.createDataFrame(
+ [
+ (1, "variant1", "study1", "gene1", "positive"),
+ (3, "variant3", "study1", "gene1", "positive"),
+ (4, "variant4", "study1", "gene2", "positive"),
+ ],
+ "studyLocusId LONG, variantId STRING, studyId STRING, geneId STRING, goldStandardSet STRING",
+ )
+
+ mock_l2g_gs = L2GGoldStandard(
+ _df=mock_l2g_gs_df, _schema=L2GGoldStandard.get_schema()
+ )
+ mock_sl_overlap = StudyLocusOverlap(
+ _df=mock_sl_overlap_df, _schema=StudyLocusOverlap.get_schema()
+ )._convert_to_square_matrix()
+
+ observed_df = mock_l2g_gs.filter_unique_associations(mock_sl_overlap).df
+
+ assert observed_df.collect() == expected_df.collect()
+
+
+def test_remove_false_negatives(spark: SparkSession) -> None:
+ """Test `remove_false_negatives`."""
+ mock_l2g_gs_df = spark.createDataFrame(
+ [
+ (1, "variant1", "study1", "gene1", "positive"),
+ (
+ 2,
+ "variant2",
+ "study1",
+ "gene2",
+ "negative",
+ ), # gene2 is a partner of gene1, has to be dropped
+ (
+ 3,
+ "variant3",
+ "study1",
+ "gene3",
+ "negative",
+ ), # gene 3 is not a partner of gene1, has to be kept
+ (
+ 4,
+ "variant4",
+ "study1",
+ "gene4",
+ "positive",
+ ), # gene 4 is a partner of gene1, has to be kept because it's positive
+ ],
+ "studyLocusId LONG, variantId STRING, studyId STRING, geneId STRING, goldStandardSet STRING",
+ )
+
+ mock_interactions_df = spark.createDataFrame(
+ [
+ ("gene1", "gene2", 0.8),
+ ("gene1", "gene3", 0.5),
+ ("gene1", "gene4", 0.8),
+ ],
+ "geneIdA STRING, geneIdB STRING, score DOUBLE",
+ )
+
+ expected_df = spark.createDataFrame(
+ [
+ (1, "variant1", "study1", "gene1", "positive"),
+ (3, "variant3", "study1", "gene3", "negative"),
+ (4, "variant4", "study1", "gene4", "positive"),
+ ],
+ "studyLocusId LONG, variantId STRING, studyId STRING, geneId STRING, goldStandardSet STRING",
+ )
+
+ mock_l2g_gs = L2GGoldStandard(
+ _df=mock_l2g_gs_df, _schema=L2GGoldStandard.get_schema()
+ )
+
+ observed_df = mock_l2g_gs.remove_false_negatives(mock_interactions_df).df.orderBy(
+ "studyLocusId"
+ )
+
+ assert observed_df.collect() == expected_df.collect()
+
+
+def test_calculate_feature_missingness_rate(spark: SparkSession) -> None:
+ """Test L2GFeatureMatrix.calculate_feature_missingness_rate."""
+ fm = L2GFeatureMatrix(
+ _df=spark.createDataFrame(
+ [
+ (1, "gene1", 100.0, None),
+ (2, "gene2", 1000.0, 0.0),
+ ],
+ "studyLocusId LONG, geneId STRING, distanceTssMean DOUBLE, distanceTssMinimum DOUBLE",
+ ),
+ _schema=L2GFeatureMatrix.get_schema(),
+ )
+
+ expected_missingness = {"distanceTssMean": 0.0, "distanceTssMinimum": 1.0}
+ observed_missingness = fm.calculate_feature_missingness_rate()
+ assert isinstance(observed_missingness, dict)
+ assert len(observed_missingness) == len(
+ fm.features_list # type: ignore
+ ), "Missing features in the missingness rate dictionary."
+ assert (
+ observed_missingness == expected_missingness
+ ), "Missingness rate is incorrect."
diff --git a/tests/dataset/test_study_index.py b/tests/dataset/test_study_index.py
index 49ef3c5f9..d1c93603a 100644
--- a/tests/dataset/test_study_index.py
+++ b/tests/dataset/test_study_index.py
@@ -1,11 +1,10 @@
"""Test study index dataset."""
from __future__ import annotations
+from otg.dataset.study_index import StudyIndex
from pyspark.sql import DataFrame, SparkSession
from pyspark.sql import functions as f
-from otg.dataset.study_index import StudyIndex
-
def test_study_index_creation(mock_study_index: StudyIndex) -> None:
"""Test study index creation with mock data."""
@@ -17,7 +16,7 @@ def test_study_index_type_lut(mock_study_index: StudyIndex) -> None:
assert isinstance(mock_study_index.study_type_lut(), DataFrame)
-def test_aggregate_and_map_ancestries__correctness(spark: SparkSession):
+def test_aggregate_and_map_ancestries__correctness(spark: SparkSession) -> None:
"""Test if population are mapped and relative sample sizes are calculated."""
data = [
(
@@ -62,12 +61,17 @@ def test_aggregate_and_map_ancestries__correctness(spark: SparkSession):
# Asserting that the relative count go to 1.0
assert (
- df.select(
- f.aggregate(
- "parsedPopulation", f.lit(0.0), lambda y, x: y + x.relativeSampleSize
- ).alias("sum")
- ).collect()[0]["sum"]
- ) == 1.0
+ (
+ df.select(
+ f.aggregate(
+ "parsedPopulation",
+ f.lit(0.0),
+ lambda y, x: y + x.relativeSampleSize,
+ ).alias("sum")
+ ).collect()[0]["sum"]
+ )
+ == 1.0
+ )
def test_aggregate_samples_by_ancestry__correctness(spark: SparkSession) -> None:
@@ -122,11 +126,14 @@ def test_aggregate_samples_by_ancestry__correctness(spark: SparkSession) -> None
# Asserting the number of aggregated sample size:
assert (
- df.filter(f.col("studyId") == "s1")
- .select(
- f.aggregate("test_output", f.lit(0.0), lambda y, x: x.sampleSize + y).alias(
- "totalSamples"
+ (
+ df.filter(f.col("studyId") == "s1")
+ .select(
+ f.aggregate(
+ "test_output", f.lit(0.0), lambda y, x: x.sampleSize + y
+ ).alias("totalSamples")
)
+ .collect()[0]["totalSamples"]
)
- .collect()[0]["totalSamples"]
- ) == 300.0
+ == 300.0
+ )
diff --git a/tests/dataset/test_study_locus.py b/tests/dataset/test_study_locus.py
index 2ca793937..ed680f63b 100644
--- a/tests/dataset/test_study_locus.py
+++ b/tests/dataset/test_study_locus.py
@@ -1,8 +1,15 @@
"""Test study locus dataset."""
from __future__ import annotations
+from typing import Any
+
+import pyspark.sql.functions as f
import pytest
-from pyspark.sql import Column, DataFrame, SparkSession
+from otg.dataset.ld_index import LDIndex
+from otg.dataset.study_index import StudyIndex
+from otg.dataset.study_locus import CredibleInterval, StudyLocus
+from otg.dataset.study_locus_overlap import StudyLocusOverlap
+from pyspark.sql import Column, SparkSession
from pyspark.sql.types import (
ArrayType,
BooleanType,
@@ -13,9 +20,6 @@
StructType,
)
-from otg.dataset.study_index import StudyIndex
-from otg.dataset.study_locus import CredibleInterval, StudyLocus, StudyLocusOverlap
-
def test_study_locus_creation(mock_study_locus: StudyLocus) -> None:
"""Test study locus creation with mock data."""
@@ -38,9 +42,91 @@ def test_filter_credible_set(mock_study_locus: StudyLocus) -> None:
)
-def test_unique_lead_tag_variants(mock_study_locus: StudyLocus) -> None:
- """Test unique lead tag variants."""
- assert isinstance(mock_study_locus.unique_lead_tag_variants(), DataFrame)
+def test_assign_study_locus_id__null_variant_id(spark: SparkSession) -> None:
+ """Test assign study locus id when variant id is null for the same study."""
+ df = spark.createDataFrame(
+ [("GCST000001", None), ("GCST000001", None)],
+ schema="studyId: string, variantId: string",
+ ).withColumn(
+ "studyLocusId",
+ StudyLocus.assign_study_locus_id(f.col("studyId"), f.col("variantId")),
+ )
+ assert (
+ df.select("studyLocusId").distinct().count() == 2
+ ), "studyLocusId is not unique when variantId is null"
+
+
+@pytest.mark.parametrize(
+ ("observed", "expected"),
+ [
+ (
+ # Locus is not null, should return union between variants in locus and lead variant
+ [
+ (
+ 1,
+ "traitA",
+ "22_varA",
+ [
+ {"variantId": "22_varA", "posteriorProbability": 0.44},
+ {"variantId": "22_varB", "posteriorProbability": 0.015},
+ ],
+ ),
+ ],
+ [
+ (
+ "22_varA",
+ "22",
+ ),
+ (
+ "22_varB",
+ "22",
+ ),
+ ],
+ ),
+ (
+ # locus is null, should return lead variant
+ [
+ (1, "traitA", "22_varA", None),
+ ],
+ [
+ (
+ "22_varA",
+ "22",
+ ),
+ ],
+ ),
+ ],
+)
+def test_unique_variants_in_locus(
+ spark: SparkSession, observed: list[Any], expected: list[Any]
+) -> None:
+ """Test unique variants in locus."""
+ # assert isinstance(mock_study_locus.test_unique_variants_in_locus(), DataFrame)
+ schema = StructType(
+ [
+ StructField("studyLocusId", LongType(), True),
+ StructField("studyId", StringType(), True),
+ StructField("variantId", StringType(), True),
+ StructField(
+ "locus",
+ ArrayType(
+ StructType(
+ [
+ StructField("variantId", StringType(), True),
+ ]
+ )
+ ),
+ True,
+ ),
+ ]
+ )
+ data_sl = StudyLocus(
+ _df=spark.createDataFrame(observed, schema), _schema=StudyLocus.get_schema()
+ )
+ expected_df = spark.createDataFrame(
+ expected, schema="variantId: string, chromosome: string"
+ )
+ assert data_sl.unique_variants_in_locus().collect() == expected_df.collect()
def test_neglog_pvalue(mock_study_locus: StudyLocus) -> None:
@@ -201,7 +287,7 @@ def test_clump(mock_study_locus: StudyLocus) -> None:
],
)
def test_annotate_credible_sets(
- spark: SparkSession, observed: list, expected: list
+ spark: SparkSession, observed: list[Any], expected: list[Any]
) -> None:
"""Test annotate_credible_sets."""
schema = StructType(
@@ -234,6 +320,24 @@ def test_annotate_credible_sets(
assert data_sl.annotate_credible_sets().df.collect() == expected_sl.df.collect()
+def test_annotate_ld(
+ mock_study_locus: StudyLocus, mock_study_index: StudyIndex, mock_ld_index: LDIndex
+) -> None:
+ """Test annotate_ld."""
+ assert isinstance(
+ mock_study_locus.annotate_ld(mock_study_index, mock_ld_index), StudyLocus
+ )
+
+
def test__qc_no_population(mock_study_locus: StudyLocus) -> None:
"""Test _qc_no_population."""
assert isinstance(mock_study_locus._qc_no_population(), StudyLocus)
+
+
+def test_ldannotate(
+ mock_study_locus: StudyLocus, mock_study_index: StudyIndex, mock_ld_index: LDIndex
+) -> None:
+ """Test ldannotate."""
+ assert isinstance(
+ mock_study_locus.annotate_ld(mock_study_index, mock_ld_index), StudyLocus
+ )
diff --git a/tests/dataset/test_study_locus_overlap.py b/tests/dataset/test_study_locus_overlap.py
new file mode 100644
index 000000000..f76d4ab4a
--- /dev/null
+++ b/tests/dataset/test_study_locus_overlap.py
@@ -0,0 +1,36 @@
+"""Test study locus overlap dataset."""
+from __future__ import annotations
+
+from otg.dataset.study_locus_overlap import StudyLocusOverlap
+from pyspark.sql import SparkSession
+
+
+def test_study_locus_overlap_creation(
+ mock_study_locus_overlap: StudyLocusOverlap,
+) -> None:
+ """Test study locus overlap creation with mock data."""
+ assert isinstance(mock_study_locus_overlap, StudyLocusOverlap)
+
+
+def test_convert_to_square_matrix(spark: SparkSession) -> None:
+ """Test _convert_to_square_matrix."""
+ mock_sl_overlap = StudyLocusOverlap(
+ _df=spark.createDataFrame(
+ [
+ (1, 2, "variant2"),
+ ],
+ "leftStudyLocusId LONG, rightStudyLocusId LONG, tagVariantId STRING",
+ ),
+ _schema=StudyLocusOverlap.get_schema(),
+ )
+
+ expected_df = spark.createDataFrame(
+ [
+ (1, 2, "variant2"),
+ (2, 1, "variant2"),
+ ],
+ "leftStudyLocusId LONG, rightStudyLocusId LONG, tagVariantId STRING",
+ )
+ observed_df = mock_sl_overlap._convert_to_square_matrix().df
+
+ assert observed_df.collect() == expected_df.collect()
diff --git a/tests/dataset/test_study_locus_overlaps.py b/tests/dataset/test_study_locus_overlaps.py
index 6d0f0b434..c417fc6c2 100644
--- a/tests/dataset/test_study_locus_overlaps.py
+++ b/tests/dataset/test_study_locus_overlaps.py
@@ -1,18 +1,16 @@
"""Test colocalisation dataset."""
from __future__ import annotations
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any
import pyspark.sql.types as t
import pytest
-
from otg.dataset.study_locus import StudyLocus
from otg.dataset.study_locus_overlap import StudyLocusOverlap
if TYPE_CHECKING:
- from pyspark.sql import SparkSession
-
from otg.dataset.study_index import StudyIndex
+ from pyspark.sql import SparkSession
def test_study_locus_overlap_creation(
@@ -62,7 +60,9 @@ def test_study_locus_overlap_from_associations(
),
],
)
-def test_overlapping_peaks(spark: SparkSession, observed: list, expected: list) -> None:
+def test_overlapping_peaks(
+ spark: SparkSession, observed: list[dict[str, Any]], expected: list[dict[str, Any]]
+) -> None:
"""Test overlapping signals between GWAS-GWAS and GWAS-Molecular trait to make sure that mQTLs are always on the right."""
mock_schema = t.StructType(
[
@@ -82,6 +82,4 @@ def test_overlapping_peaks(spark: SparkSession, observed: list, expected: list)
observed_df = spark.createDataFrame(observed, mock_schema)
result_df = StudyLocus._overlapping_peaks(observed_df)
expected_df = spark.createDataFrame(expected, expected_schema)
- print("RESULT", result_df.show())
- print("EXPECTED", expected_df.show())
assert result_df.collect() == expected_df.collect()
diff --git a/tests/dataset/test_summary_statistics.py b/tests/dataset/test_summary_statistics.py
index 7225dad1f..99bc9ef00 100644
--- a/tests/dataset/test_summary_statistics.py
+++ b/tests/dataset/test_summary_statistics.py
@@ -3,10 +3,9 @@
from typing import TYPE_CHECKING
-from pyspark.sql import types as t
-
from otg.dataset.study_locus import StudyLocus
from otg.dataset.summary_statistics import SummaryStatistics
+from pyspark.sql import types as t
if TYPE_CHECKING:
from pyspark.sql import SparkSession
@@ -81,9 +80,9 @@ def test_summary_statistics__exclude_region__correctness(
]
)
# Create dataframe and apply region based filter:
- data = spark.createDataFrame(data, schema=schema)
+ df = spark.createDataFrame(data, schema=schema)
filtered_sumstas = SummaryStatistics(
- _df=data, _schema=SummaryStatistics.get_schema()
+ _df=df, _schema=SummaryStatistics.get_schema()
).exclude_region("c1:9-16")
# Test for the correct number of rows returned:
diff --git a/tests/dataset/test_v2g.py b/tests/dataset/test_v2g.py
index 4a6fed10a..e6982fa98 100644
--- a/tests/dataset/test_v2g.py
+++ b/tests/dataset/test_v2g.py
@@ -1,4 +1,4 @@
-"""Tests on effect harmonisation."""
+"""Tests V2G dataset."""
from __future__ import annotations
from typing import TYPE_CHECKING
diff --git a/tests/dataset/test_variant_annotation.py b/tests/dataset/test_variant_annotation.py
index b79f0d5ed..004485ef0 100644
--- a/tests/dataset/test_variant_annotation.py
+++ b/tests/dataset/test_variant_annotation.py
@@ -15,20 +15,6 @@ def test_variant_index_creation(mock_variant_annotation: VariantAnnotation) -> N
assert isinstance(mock_variant_annotation, VariantAnnotation)
-def test_get_polyphen_v2g(
- mock_variant_annotation: VariantAnnotation, mock_gene_index: GeneIndex
-) -> None:
- """Test get_polyphen_v2g with mock variant annotation."""
- assert isinstance(mock_variant_annotation.get_polyphen_v2g(mock_gene_index), V2G)
-
-
-def test_get_sift_v2g(
- mock_variant_annotation: VariantAnnotation, mock_gene_index: GeneIndex
-) -> None:
- """Test get_sift_v2g with mock variant annotation."""
- assert isinstance(mock_variant_annotation.get_sift_v2g(mock_gene_index), V2G)
-
-
def test_get_plof_v2g(
mock_variant_annotation: VariantAnnotation, mock_gene_index: GeneIndex
) -> None:
diff --git a/tests/dataset/test_variant_index.py b/tests/dataset/test_variant_index.py
index a43ab6f3b..3ecc41c02 100644
--- a/tests/dataset/test_variant_index.py
+++ b/tests/dataset/test_variant_index.py
@@ -1,4 +1,4 @@
-"""Tests on effect harmonisation."""
+"""Tests on variant index generation."""
from __future__ import annotations
from typing import TYPE_CHECKING
@@ -6,6 +6,7 @@
from otg.dataset.variant_index import VariantIndex
if TYPE_CHECKING:
+ from otg.dataset.study_locus import StudyLocus
from otg.dataset.variant_annotation import VariantAnnotation
@@ -14,7 +15,11 @@ def test_variant_index_creation(mock_variant_index: VariantIndex) -> None:
assert isinstance(mock_variant_index, VariantIndex)
-def test_from_variant_annotation(mock_variant_annotation: VariantAnnotation) -> None:
+def test_from_variant_annotation(
+ mock_variant_annotation: VariantAnnotation, mock_study_locus: StudyLocus
+) -> None:
"""Test variant index creation from variant annotation."""
- variant_index = VariantIndex.from_variant_annotation(mock_variant_annotation)
+ variant_index = VariantIndex.from_variant_annotation(
+ mock_variant_annotation, mock_study_locus
+ )
assert isinstance(variant_index, VariantIndex)
diff --git a/tests/datasource/eqtl_catalogue/test_eqtl_catalogue_study_index.py b/tests/datasource/eqtl_catalogue/test_eqtl_catalogue_study_index.py
new file mode 100644
index 000000000..99ed46f07
--- /dev/null
+++ b/tests/datasource/eqtl_catalogue/test_eqtl_catalogue_study_index.py
@@ -0,0 +1,19 @@
+"""Tests for study index dataset from eQTL Catalogue."""
+
+from __future__ import annotations
+
+from otg.dataset.study_index import StudyIndex
+from otg.datasource.eqtl_catalogue.study_index import EqtlCatalogueStudyIndex
+from pyspark.sql import DataFrame
+
+
+def test_eqtl_catalogue_study_index_from_source(
+ sample_eqtl_catalogue_studies: DataFrame,
+) -> None:
+ """Test study index from source."""
+ assert isinstance(
+ EqtlCatalogueStudyIndex.from_source(
+ sample_eqtl_catalogue_studies,
+ ),
+ StudyIndex,
+ )
diff --git a/tests/datasource/eqtl_catalogue/test_eqtl_catalogue_summary_stats.py b/tests/datasource/eqtl_catalogue/test_eqtl_catalogue_summary_stats.py
new file mode 100644
index 000000000..5f486ca89
--- /dev/null
+++ b/tests/datasource/eqtl_catalogue/test_eqtl_catalogue_summary_stats.py
@@ -0,0 +1,17 @@
+"""Tests for study index dataset from eQTL Catalogue."""
+
+from __future__ import annotations
+
+from otg.dataset.summary_statistics import SummaryStatistics
+from otg.datasource.eqtl_catalogue.summary_stats import EqtlCatalogueSummaryStats
+from pyspark.sql import DataFrame
+
+
+def test_eqtl_catalogue_summary_stats_from_source(
+ sample_eqtl_catalogue_summary_stats: DataFrame,
+) -> None:
+ """Test summary statistics from source."""
+ assert isinstance(
+ EqtlCatalogueSummaryStats.from_source(sample_eqtl_catalogue_summary_stats),
+ SummaryStatistics,
+ )
diff --git a/tests/datasource/finngen/test_finngen_study_index.py b/tests/datasource/finngen/test_finngen_study_index.py
index 4e936ea55..2f9b7ab13 100644
--- a/tests/datasource/finngen/test_finngen_study_index.py
+++ b/tests/datasource/finngen/test_finngen_study_index.py
@@ -2,22 +2,11 @@
from __future__ import annotations
-from pyspark.sql import DataFrame
-
from otg.dataset.study_index import StudyIndex
from otg.datasource.finngen.study_index import FinnGenStudyIndex
+from pyspark.sql import SparkSession
-def test_finngen_study_index_from_source(
- sample_finngen_studies: DataFrame,
-) -> None:
+def test_finngen_study_index_from_source(spark: SparkSession) -> None:
"""Test study index from source."""
- assert isinstance(
- FinnGenStudyIndex.from_source(
- sample_finngen_studies,
- "FINNGEN_R9_",
- "https://storage.googleapis.com/finngen-public-data-r9/summary_stats/finngen_R9_",
- ".gz",
- ),
- StudyIndex,
- )
+ assert isinstance(FinnGenStudyIndex.from_source(spark), StudyIndex)
diff --git a/tests/datasource/finngen/test_finngen_summary_stats.py b/tests/datasource/finngen/test_finngen_summary_stats.py
index d9cbbccf8..315d8cd64 100644
--- a/tests/datasource/finngen/test_finngen_summary_stats.py
+++ b/tests/datasource/finngen/test_finngen_summary_stats.py
@@ -2,19 +2,17 @@
from __future__ import annotations
-from pyspark.sql import DataFrame
-
from otg.dataset.summary_statistics import SummaryStatistics
from otg.datasource.finngen.summary_stats import FinnGenSummaryStats
+from pyspark.sql import SparkSession
-def test_finngen_summary_stats_from_source(
- sample_finngen_summary_stats: DataFrame,
-) -> None:
+def test_finngen_summary_stats_from_source(spark: SparkSession) -> None:
"""Test summary statistics from source."""
assert isinstance(
- FinnGenSummaryStats.from_finngen_harmonized_summary_stats(
- sample_finngen_summary_stats
+ FinnGenSummaryStats.from_source(
+ spark=spark,
+ raw_file="tests/data_samples/finngen_R9_AB1_ACTINOMYCOSIS.gz",
),
SummaryStatistics,
)
diff --git a/tests/datasource/gnomad/test_gnomad_ld.py b/tests/datasource/gnomad/test_gnomad_ld.py
index d64ca2568..6fbecc51a 100644
--- a/tests/datasource/gnomad/test_gnomad_ld.py
+++ b/tests/datasource/gnomad/test_gnomad_ld.py
@@ -2,10 +2,14 @@
from __future__ import annotations
-import pytest
-from pyspark.sql import SparkSession
+from math import sqrt
+from typing import Any
+import hail as hl
+import pytest
from otg.datasource.gnomad.ld import GnomADLDMatrix
+from pyspark.sql import DataFrame, SparkSession
+from pyspark.sql import functions as f
@pytest.mark.parametrize(
@@ -42,7 +46,7 @@
],
)
def test_resolve_variant_indices(
- spark: SparkSession, observed: list, expected: list
+ spark: SparkSession, observed: list[Any], expected: list[Any]
) -> None:
"""Test _resolve_variant_indices."""
ld_matrix = spark.createDataFrame(
@@ -65,3 +69,118 @@ def test_resolve_variant_indices(
assert (
observed_df.orderBy(observed_df["r"].desc()).collect() == expected_df.collect()
)
+
+
+class TestGnomADLDMatrixVariants:
+ """Test the resolved LD variant sets."""
+
+ def test_get_ld_slice_type(self: TestGnomADLDMatrixVariants) -> None:
+ """Testing if ld_slice has the right type."""
+ assert isinstance(self.ld_slice, DataFrame)
+
+ def test_get_ld_empty_slice_type(self: TestGnomADLDMatrixVariants) -> None:
+ """Testing if ld_empty_slice is None."""
+ assert self.ld_empty_slice is None
+
+ def test_get_ld_variants__square(
+ self: TestGnomADLDMatrixVariants,
+ ) -> None:
+ """Testing if the function returns a square matrix."""
+ if self.ld_slice is not None:
+ assert sqrt(self.ld_slice.count()) == int(sqrt(self.ld_slice.count()))
+
+ @pytest.fixture(autouse=True)
+ def _setup(self: TestGnomADLDMatrixVariants, spark: SparkSession) -> None:
+ """Prepares fixtures for the test."""
+ hl.init(sc=spark.sparkContext, log="/dev/null", idempotent=True)
+
+ ld_test_population = "test-pop"
+
+ gnomad_ld_matrix = GnomADLDMatrix(
+ ld_matrix_template="tests/data_samples/example_{POP}.bm",
+ ld_index_raw_template="tests/data_samples/example_{POP}.ht",
+ grch37_to_grch38_chain_path="tests/data_samples/grch37_to_grch38.over.chain",
+ )
+ self.ld_slice = gnomad_ld_matrix.get_ld_variants(
+ gnomad_ancestry=ld_test_population,
+ chromosome="1",
+ start=10025,
+ end=10075,
+ )
+ self.ld_empty_slice = gnomad_ld_matrix.get_ld_variants(
+ gnomad_ancestry=ld_test_population,
+ chromosome="1",
+ start=0,
+ end=1,
+ )
+
+
+class TestGnomADLDMatrixSlice:
+ """Test GnomAD LD methods."""
+
+ def test_get_ld_matrix_slice__diagonal(self: TestGnomADLDMatrixSlice) -> None:
+ """Test LD matrix slice."""
+ assert (
+ self.matrix_slice.filter(f.col("idx_i") == f.col("idx_j"))
+ .select("r")
+ .distinct()
+ .collect()[0]["r"]
+ == 1.0
+ ), "The matrix does not have ones in the diagonal."
+
+ def test_get_ld_matrix_slice__count(self: TestGnomADLDMatrixSlice) -> None:
+ """Test LD matrix slice."""
+ # As the slicing of the matrix is inclusive, the total number of rows are calculated as follows:
+ included_indices = self.slice_end_index - self.slice_start_index + 1
+ expected_pariwise_count = included_indices**2
+
+ assert (
+ self.matrix_slice.count() == expected_pariwise_count
+ ), "The matrix is not complete."
+
+ def test_get_ld_matrix_slice__type(self: TestGnomADLDMatrixSlice) -> None:
+ """Test LD matrix slice."""
+ assert isinstance(
+ self.matrix_slice, DataFrame
+ ), "The returned data is not a dataframe."
+
+ def test_get_ld_matrix_slice__symmetry(
+ self: TestGnomADLDMatrixSlice,
+ ) -> None:
+ """Test LD matrix slice."""
+ # Testing square matrix completeness and symmetry:
+ compared = self.matrix_slice.join(
+ (
+ self.matrix_slice.select(
+ f.col("idx_i").alias("idx_j"),
+ f.col("idx_j").alias("idx_i"),
+ f.col("r").alias("r_sym"),
+ )
+ ),
+ on=["idx_i", "idx_j"],
+ how="inner",
+ )
+
+ assert (
+ compared.count() == self.matrix_slice.count()
+ ), "The matrix is not complete."
+ assert (
+ compared.filter(f.col("r") == f.col("r_sym")).count() == compared.count()
+ ), "The matrix is not symmetric."
+
+ @pytest.fixture(autouse=True)
+ def _setup(self: TestGnomADLDMatrixSlice, spark: SparkSession) -> None:
+ """Prepares fixtures for the test."""
+ hl.init(sc=spark.sparkContext, log="/dev/null", idempotent=True)
+ gnomad_ld_matrix = GnomADLDMatrix(
+ ld_matrix_template="tests/data_samples/example_{POP}.bm"
+ )
+ test_ld_population: str = "test-pop"
+ self.slice_start_index: int = 1
+ self.slice_end_index: int = 2
+
+ self.matrix_slice = gnomad_ld_matrix.get_ld_matrix_slice(
+ gnomad_ancestry=test_ld_population,
+ start_index=self.slice_start_index,
+ end_index=self.slice_end_index,
+ )
diff --git a/tests/datasource/gwas_catalog/test_gwas_catalog_associations.py b/tests/datasource/gwas_catalog/test_gwas_catalog_associations.py
index ec4575d51..187519ed1 100644
--- a/tests/datasource/gwas_catalog/test_gwas_catalog_associations.py
+++ b/tests/datasource/gwas_catalog/test_gwas_catalog_associations.py
@@ -2,19 +2,21 @@
from __future__ import annotations
+from otg.dataset.variant_annotation import VariantAnnotation
+from otg.datasource.gwas_catalog.associations import (
+ GWASCatalogCuratedAssociationsParser,
+ StudyLocusGWASCatalog,
+)
from pyspark.sql import DataFrame
from pyspark.sql import functions as f
from pyspark.sql.types import LongType
-from otg.dataset.variant_annotation import VariantAnnotation
-from otg.datasource.gwas_catalog.associations import GWASCatalogAssociations
-
def test_study_locus_gwas_catalog_creation(
- mock_study_locus_gwas_catalog: GWASCatalogAssociations,
+ mock_study_locus_gwas_catalog: StudyLocusGWASCatalog,
) -> None:
"""Test study locus creation with mock data."""
- assert isinstance(mock_study_locus_gwas_catalog, GWASCatalogAssociations)
+ assert isinstance(mock_study_locus_gwas_catalog, StudyLocusGWASCatalog)
def test_qc_all(sample_gwas_catalog_associations: DataFrame) -> None:
@@ -23,14 +25,14 @@ def test_qc_all(sample_gwas_catalog_associations: DataFrame) -> None:
sample_gwas_catalog_associations.withColumn(
# Perform all quality control checks:
"qualityControls",
- GWASCatalogAssociations._qc_all(
+ GWASCatalogCuratedAssociationsParser._qc_all(
f.array().alias("qualityControls"),
f.col("CHR_ID"),
f.col("CHR_POS"),
f.lit("A").alias("referenceAllele"),
f.lit("T").alias("referenceAllele"),
f.col("STRONGEST SNP-RISK ALLELE"),
- *GWASCatalogAssociations._parse_pvalue(f.col("P-VALUE")),
+ *GWASCatalogCuratedAssociationsParser._parse_pvalue(f.col("P-VALUE")),
5e-8,
),
),
@@ -39,16 +41,16 @@ def test_qc_all(sample_gwas_catalog_associations: DataFrame) -> None:
def test_qc_ambiguous_study(
- mock_study_locus_gwas_catalog: GWASCatalogAssociations,
+ mock_study_locus_gwas_catalog: StudyLocusGWASCatalog,
) -> None:
"""Test qc ambiguous."""
assert isinstance(
- mock_study_locus_gwas_catalog._qc_ambiguous_study(), GWASCatalogAssociations
+ mock_study_locus_gwas_catalog.qc_ambiguous_study(), StudyLocusGWASCatalog
)
def test_qc_unresolved_ld(
- mock_study_locus_gwas_catalog: GWASCatalogAssociations,
+ mock_study_locus_gwas_catalog: StudyLocusGWASCatalog,
) -> None:
"""Test qc unresolved LD by making sure the flag is added when ldSet is null."""
mock_study_locus_gwas_catalog.df = mock_study_locus_gwas_catalog.df.filter(
@@ -73,10 +75,10 @@ def test_study_locus_gwas_catalog_from_source(
) -> None:
"""Test study locus from gwas catalog mock data."""
assert isinstance(
- GWASCatalogAssociations.from_source(
+ GWASCatalogCuratedAssociationsParser.from_source(
sample_gwas_catalog_associations, mock_variant_annotation
),
- GWASCatalogAssociations,
+ StudyLocusGWASCatalog,
)
@@ -86,7 +88,7 @@ def test__map_to_variant_annotation_variants(
) -> None:
"""Test mapping to variant annotation variants."""
assert isinstance(
- GWASCatalogAssociations._map_to_variant_annotation_variants(
+ GWASCatalogCuratedAssociationsParser._map_to_variant_annotation_variants(
sample_gwas_catalog_associations.withColumn(
"studyLocusId", f.monotonically_increasing_id().cast(LongType())
),
diff --git a/tests/datasource/gwas_catalog/test_gwas_catalog_study_index.py b/tests/datasource/gwas_catalog/test_gwas_catalog_study_index.py
index 17195b0d7..66c614403 100644
--- a/tests/datasource/gwas_catalog/test_gwas_catalog_study_index.py
+++ b/tests/datasource/gwas_catalog/test_gwas_catalog_study_index.py
@@ -1,35 +1,37 @@
-"""Test StudyIndexGWASCatalog."""
+"""Test GWASCatalogStudyIndex."""
from __future__ import annotations
+from otg.datasource.gwas_catalog.study_index import (
+ StudyIndexGWASCatalog,
+ StudyIndexGWASCatalogParser,
+)
from pyspark.sql import DataFrame
-from otg.datasource.gwas_catalog.study_index import GWASCatalogStudyIndex
-
def test_annotate_discovery_sample_sizes(
- mock_study_index_gwas_catalog: GWASCatalogStudyIndex,
+ mock_study_index_gwas_catalog: StudyIndexGWASCatalog,
) -> None:
"""Test annotate discovery sample sizes."""
mock_study_index_gwas_catalog.df = mock_study_index_gwas_catalog.df.drop(
"nCases", "nControls", "nSamples"
)
assert isinstance(
- mock_study_index_gwas_catalog._annotate_discovery_sample_sizes(),
- GWASCatalogStudyIndex,
+ mock_study_index_gwas_catalog.annotate_discovery_sample_sizes(),
+ StudyIndexGWASCatalog,
)
def test_parse_study_table(sample_gwas_catalog_studies: DataFrame) -> None:
"""Test parse study table."""
assert isinstance(
- GWASCatalogStudyIndex._parse_study_table(sample_gwas_catalog_studies),
- GWASCatalogStudyIndex,
+ StudyIndexGWASCatalogParser._parse_study_table(sample_gwas_catalog_studies),
+ StudyIndexGWASCatalog,
)
def test_annotate_sumstats(
- mock_study_index_gwas_catalog: GWASCatalogStudyIndex,
+ mock_study_index_gwas_catalog: StudyIndexGWASCatalog,
sample_gwas_catalog_harmonised_sumstats_list: DataFrame,
) -> None:
"""Test annotate sumstats of GWASCatalogStudyIndex."""
@@ -37,10 +39,10 @@ def test_annotate_sumstats(
"summarystatsLocation"
)
assert isinstance(
- mock_study_index_gwas_catalog._annotate_sumstats_info(
+ mock_study_index_gwas_catalog.annotate_sumstats_info(
sample_gwas_catalog_harmonised_sumstats_list
),
- GWASCatalogStudyIndex,
+ StudyIndexGWASCatalog,
)
@@ -51,10 +53,10 @@ def test_study_index_from_source(
) -> None:
"""Test study index from source."""
assert isinstance(
- GWASCatalogStudyIndex.from_source(
+ StudyIndexGWASCatalogParser.from_source(
sample_gwas_catalog_studies,
sample_gwas_catalog_ancestries_lut,
sample_gwas_catalog_harmonised_sumstats_list,
),
- GWASCatalogStudyIndex,
+ StudyIndexGWASCatalog,
)
diff --git a/tests/datasource/gwas_catalog/test_gwas_catalog_study_splitter.py b/tests/datasource/gwas_catalog/test_gwas_catalog_study_splitter.py
index a79f9eb4c..eb77c1ab8 100644
--- a/tests/datasource/gwas_catalog/test_gwas_catalog_study_splitter.py
+++ b/tests/datasource/gwas_catalog/test_gwas_catalog_study_splitter.py
@@ -1,19 +1,88 @@
"""Tests GWAS Catalog study splitter."""
from __future__ import annotations
-from otg.datasource.gwas_catalog.associations import GWASCatalogAssociations
-from otg.datasource.gwas_catalog.study_index import GWASCatalogStudyIndex
+from typing import TYPE_CHECKING, Any
+
+import pyspark.sql.functions as f
+import pytest
+from otg.datasource.gwas_catalog.associations import StudyLocusGWASCatalog
+from otg.datasource.gwas_catalog.study_index import StudyIndexGWASCatalog
from otg.datasource.gwas_catalog.study_splitter import GWASCatalogStudySplitter
+if TYPE_CHECKING:
+ from pyspark.sql import SparkSession
+
def test_gwas_catalog_splitter_split(
- mock_study_index_gwas_catalog: GWASCatalogStudyIndex,
- mock_study_locus_gwas_catalog: GWASCatalogAssociations,
+ mock_study_index_gwas_catalog: StudyIndexGWASCatalog,
+ mock_study_locus_gwas_catalog: StudyLocusGWASCatalog,
) -> None:
"""Test GWASCatalogStudyIndex, GWASCatalogAssociations creation with mock data."""
d1, d2 = GWASCatalogStudySplitter.split(
mock_study_index_gwas_catalog, mock_study_locus_gwas_catalog
)
- assert isinstance(d1, GWASCatalogStudyIndex)
- assert isinstance(d2, GWASCatalogAssociations)
+ assert isinstance(d1, StudyIndexGWASCatalog)
+ assert isinstance(d2, StudyLocusGWASCatalog)
+
+
+@pytest.mark.parametrize(
+ "observed, expected",
+ [
+ # Test 1 - it shouldn't split
+ (
+ # observed - 2 associations with the same subStudy annotation
+ [
+ (
+ "varA",
+ "GCST003436",
+ "Endometrial cancer|no_pvalue_text|EFO_1001512",
+ ),
+ (
+ "varB",
+ "GCST003436",
+ "Endometrial cancer|no_pvalue_text|EFO_1001512",
+ ),
+ ],
+ # expected - 2 associations with the same unsplit updatedStudyId
+ [
+ ("GCST003436",),
+ ("GCST003436",),
+ ],
+ ),
+ # Test 2 - it should split
+ (
+ # observed - 2 associations with the different subStudy annotation
+ [
+ (
+ "varA",
+ "GCST003436",
+ "Endometrial cancer|no_pvalue_text|EFO_1001512",
+ ),
+ (
+ "varB",
+ "GCST003436",
+ "Uterine carcinoma|no_pvalue_text|EFO_0002919",
+ ),
+ ],
+ # expected - 2 associations with the same unsplit updatedStudyId
+ [
+ ("GCST003436",),
+ ("GCST003436_2",),
+ ],
+ ),
+ ],
+)
+def test__resolve_study_id(
+ spark: SparkSession, observed: list[Any], expected: list[Any]
+) -> None:
+ """Test _resolve_study_id."""
+ observed_df = spark.createDataFrame(
+ observed, schema=["variantId", "studyId", "subStudyDescription"]
+ ).select(
+ GWASCatalogStudySplitter._resolve_study_id(
+ f.col("studyId"), f.col("subStudyDescription").alias("updatedStudyId")
+ )
+ )
+ expected_df = spark.createDataFrame(expected, schema=["updatedStudyId"])
+ assert observed_df.collect() == expected_df.collect()
diff --git a/tests/datasource/gwas_catalog/test_gwas_catalog_summary_statistics.py b/tests/datasource/gwas_catalog/test_gwas_catalog_summary_statistics.py
index 0fc3ad5bf..6cace5b70 100644
--- a/tests/datasource/gwas_catalog/test_gwas_catalog_summary_statistics.py
+++ b/tests/datasource/gwas_catalog/test_gwas_catalog_summary_statistics.py
@@ -2,16 +2,110 @@
from __future__ import annotations
+from typing import TYPE_CHECKING
+
+import pyspark.sql.functions as f
+import pytest
+from otg.dataset.summary_statistics import SummaryStatistics
from otg.datasource.gwas_catalog.summary_statistics import GWASCatalogSummaryStatistics
+if TYPE_CHECKING:
+ from pyspark.sql import SparkSession
+ from pytest import FixtureRequest
+
+
+class TestGWASCatalogSummaryStatistics:
+ """Test suite for GWAS Catalog summary stats ingestion."""
+
+ @pytest.fixture(scope="class")
+ def gwas_catalog_summary_statistics__new_format(
+ self: TestGWASCatalogSummaryStatistics,
+ spark: SparkSession,
+ ) -> GWASCatalogSummaryStatistics:
+ """Test GWASCatalogSummaryStatistics creation with mock data."""
+ return GWASCatalogSummaryStatistics.from_gwas_harmonized_summary_stats(
+ spark, "tests/data_samples/new_format_GCST90293086.h.tsv.gz"
+ )
+
+ @pytest.fixture(scope="class")
+ def gwas_catalog_summary_statistics__old_format(
+ self: TestGWASCatalogSummaryStatistics,
+ spark: SparkSession,
+ ) -> GWASCatalogSummaryStatistics:
+ """Test GWASCatalogSummaryStatistics creation with mock data."""
+ return GWASCatalogSummaryStatistics.from_gwas_harmonized_summary_stats(
+ spark, "tests/data_samples/old_format_GCST006090.h.tsv.gz"
+ )
+
+ @pytest.fixture(scope="class")
+ def test_dataset_instance(
+ self: TestGWASCatalogSummaryStatistics, request: FixtureRequest
+ ) -> GWASCatalogSummaryStatistics:
+ """Meta fixture to return the value of any requested fixture."""
+ return request.getfixturevalue(request.param)
+
+ @pytest.mark.parametrize(
+ "test_dataset_instance",
+ [
+ "gwas_catalog_summary_statistics__old_format",
+ "gwas_catalog_summary_statistics__new_format",
+ ],
+ indirect=True,
+ )
+ def test_return_type(
+ self: TestGWASCatalogSummaryStatistics,
+ test_dataset_instance: SummaryStatistics,
+ ) -> None:
+ """Testing return type."""
+ assert isinstance(test_dataset_instance, SummaryStatistics)
+
+ @pytest.mark.parametrize(
+ "test_dataset_instance",
+ [
+ "gwas_catalog_summary_statistics__old_format",
+ "gwas_catalog_summary_statistics__new_format",
+ ],
+ indirect=True,
+ )
+ def test_p_value_parsed_correctly(
+ self: TestGWASCatalogSummaryStatistics,
+ test_dataset_instance: SummaryStatistics,
+ ) -> None:
+ """Testing parsed p-value."""
+ assert (
+ test_dataset_instance.df.filter(f.col("pValueMantissa").isNotNull()).count()
+ > 1
+ )
+
+ @pytest.mark.parametrize(
+ "test_dataset_instance",
+ [
+ "gwas_catalog_summary_statistics__old_format",
+ "gwas_catalog_summary_statistics__new_format",
+ ],
+ indirect=True,
+ )
+ def test_effect_parsed_correctly(
+ self: TestGWASCatalogSummaryStatistics,
+ test_dataset_instance: SummaryStatistics,
+ ) -> None:
+ """Testing properly parsed effect."""
+ assert test_dataset_instance.df.filter(f.col("beta").isNotNull()).count() > 1
-def test_gwas_catalog_summary_statistics_from_gwas_harmonized_summary_stats(
- sample_gwas_catalog_harmonised_sumstats: GWASCatalogSummaryStatistics,
-) -> None:
- """Test GWASCatalogSummaryStatistics creation with mock data."""
- assert isinstance(
- GWASCatalogSummaryStatistics.from_gwas_harmonized_summary_stats(
- sample_gwas_catalog_harmonised_sumstats, "GCST000000"
- ),
- GWASCatalogSummaryStatistics,
+ @pytest.mark.parametrize(
+ "test_dataset_instance",
+ [
+ "gwas_catalog_summary_statistics__old_format",
+ "gwas_catalog_summary_statistics__new_format",
+ ],
+ indirect=True,
)
+ def test_study_id(
+ self: TestGWASCatalogSummaryStatistics,
+ test_dataset_instance: SummaryStatistics,
+ ) -> None:
+ """Testing properly parsed effect."""
+ assert (
+ test_dataset_instance.df.filter(f.col("studyId").startswith("GCST")).count()
+ == test_dataset_instance.df.count()
+ )
diff --git a/tests/datasource/intervals/test_andersson.py b/tests/datasource/intervals/test_andersson.py
index e269d74e4..cbb0265c9 100644
--- a/tests/datasource/intervals/test_andersson.py
+++ b/tests/datasource/intervals/test_andersson.py
@@ -2,23 +2,21 @@
from __future__ import annotations
import pytest
-from pyspark.sql import DataFrame, SparkSession
-
from otg.common.Liftover import LiftOverSpark
from otg.dataset.gene_index import GeneIndex
+from otg.dataset.intervals import Intervals
from otg.datasource.intervals.andersson import IntervalsAndersson
+from pyspark.sql import DataFrame, SparkSession
@pytest.fixture(scope="module")
def sample_intervals_andersson(spark: SparkSession) -> DataFrame:
"""Sample Andersson intervals."""
- return IntervalsAndersson.read_andersson(
- spark, "tests/data_samples/andersson_sample.bed"
- )
+ return IntervalsAndersson.read(spark, "tests/data_samples/andersson_sample.bed")
def test_read_andersson(sample_intervals_andersson: DataFrame) -> None:
- """Test read_andersson."""
+ """Test read Andersson data."""
assert isinstance(sample_intervals_andersson, DataFrame)
@@ -27,10 +25,10 @@ def test_andersson_intervals_from_source(
mock_gene_index: GeneIndex,
liftover_chain_37_to_38: LiftOverSpark,
) -> None:
- """Test JavierreIntervals creation with mock data."""
+ """Test AnderssonIntervals creation with mock data."""
assert isinstance(
IntervalsAndersson.parse(
sample_intervals_andersson, mock_gene_index, liftover_chain_37_to_38
),
- IntervalsAndersson,
+ Intervals,
)
diff --git a/tests/datasource/intervals/test_javierre.py b/tests/datasource/intervals/test_javierre.py
index f2be1e5bb..90dd34a69 100644
--- a/tests/datasource/intervals/test_javierre.py
+++ b/tests/datasource/intervals/test_javierre.py
@@ -2,23 +2,21 @@
from __future__ import annotations
import pytest
-from pyspark.sql import DataFrame, SparkSession
-
from otg.common.Liftover import LiftOverSpark
from otg.dataset.gene_index import GeneIndex
+from otg.dataset.intervals import Intervals
from otg.datasource.intervals.javierre import IntervalsJavierre
+from pyspark.sql import DataFrame, SparkSession
@pytest.fixture(scope="module")
def sample_intervals_javierre(spark: SparkSession) -> DataFrame:
"""Sample Javierre intervals."""
- return IntervalsJavierre.read_javierre(
- spark, "tests/data_samples/javierre_sample.parquet"
- )
+ return IntervalsJavierre.read(spark, "tests/data_samples/javierre_sample.parquet")
def test_read_javierre(sample_intervals_javierre: DataFrame) -> None:
- """Test read_jung."""
+ """Test read javierre data."""
assert isinstance(sample_intervals_javierre, DataFrame)
@@ -32,5 +30,5 @@ def test_javierre_intervals_from_source(
IntervalsJavierre.parse(
sample_intervals_javierre, mock_gene_index, liftover_chain_37_to_38
),
- IntervalsJavierre,
+ Intervals,
)
diff --git a/tests/datasource/intervals/test_jung.py b/tests/datasource/intervals/test_jung.py
index 3fe50a7f8..5dd6ef2f0 100644
--- a/tests/datasource/intervals/test_jung.py
+++ b/tests/datasource/intervals/test_jung.py
@@ -2,21 +2,21 @@
from __future__ import annotations
import pytest
-from pyspark.sql import DataFrame, SparkSession
-
from otg.common.Liftover import LiftOverSpark
from otg.dataset.gene_index import GeneIndex
+from otg.dataset.intervals import Intervals
from otg.datasource.intervals.jung import IntervalsJung
+from pyspark.sql import DataFrame, SparkSession
@pytest.fixture(scope="module")
def sample_intervals_jung(spark: SparkSession) -> DataFrame:
- """Sample Andersson intervals."""
- return IntervalsJung.read_jung(spark, "tests/data_samples/jung_sample.bed")
+ """Sample Jung intervals."""
+ return IntervalsJung.read(spark, "tests/data_samples/jung_sample.bed")
def test_read_jung(sample_intervals_jung: DataFrame) -> None:
- """Test read_jung."""
+ """Test read Jung data."""
assert isinstance(sample_intervals_jung, DataFrame)
@@ -30,5 +30,5 @@ def test_jung_intervals_from_source(
IntervalsJung.parse(
sample_intervals_jung, mock_gene_index, liftover_chain_37_to_38
),
- IntervalsJung,
+ Intervals,
)
diff --git a/tests/datasource/intervals/test_thurman.py b/tests/datasource/intervals/test_thurman.py
new file mode 100644
index 000000000..245516e47
--- /dev/null
+++ b/tests/datasource/intervals/test_thurman.py
@@ -0,0 +1,34 @@
+"""Test Thurman."""
+from __future__ import annotations
+
+import pytest
+from otg.common.Liftover import LiftOverSpark
+from otg.dataset.gene_index import GeneIndex
+from otg.dataset.intervals import Intervals
+from otg.datasource.intervals.thurman import IntervalsThurman
+from pyspark.sql import DataFrame, SparkSession
+
+
+@pytest.fixture(scope="module")
+def sample_intervals_thurman(spark: SparkSession) -> DataFrame:
+ """Sample Thurman intervals."""
+ return IntervalsThurman.read(spark, "tests/data_samples/thurman_sample.bed8")
+
+
+def test_read_thurman(sample_intervals_thurman: DataFrame) -> None:
+ """Test read Thurman data."""
+ assert isinstance(sample_intervals_thurman, DataFrame)
+
+
+def test_thurman_intervals_from_source(
+ sample_intervals_thurman: DataFrame,
+ mock_gene_index: GeneIndex,
+ liftover_chain_37_to_38: LiftOverSpark,
+) -> None:
+ """Test IntervalsThurman creation with mock data."""
+ assert isinstance(
+ IntervalsThurman.parse(
+ sample_intervals_thurman, mock_gene_index, liftover_chain_37_to_38
+ ),
+ Intervals,
+ )
diff --git a/tests/datasource/intervals/test_thurnman.py b/tests/datasource/intervals/test_thurnman.py
deleted file mode 100644
index 7b4f03995..000000000
--- a/tests/datasource/intervals/test_thurnman.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""Test Thurman."""
-from __future__ import annotations
-
-import pytest
-from pyspark.sql import DataFrame, SparkSession
-
-from otg.common.Liftover import LiftOverSpark
-from otg.dataset.gene_index import GeneIndex
-from otg.datasource.intervals.thurnman import IntervalsThurnman
-
-
-@pytest.fixture(scope="module")
-def sample_intervals_thurnman(spark: SparkSession) -> DataFrame:
- """Sample Andersson intervals."""
- return IntervalsThurnman.read_thurnman(
- spark, "tests/data_samples/thurnman_sample.bed8"
- )
-
-
-def test_read_thurnman(sample_intervals_thurnman: DataFrame) -> None:
- """Test read_jung."""
- assert isinstance(sample_intervals_thurnman, DataFrame)
-
-
-def test_thurnman_intervals_from_source(
- sample_intervals_thurnman: DataFrame,
- mock_gene_index: GeneIndex,
- liftover_chain_37_to_38: LiftOverSpark,
-) -> None:
- """Test IntervalsThurnman creation with mock data."""
- assert isinstance(
- IntervalsThurnman.parse(
- sample_intervals_thurnman, mock_gene_index, liftover_chain_37_to_38
- ),
- IntervalsThurnman,
- )
diff --git a/tests/datasource/open_targets/test_l2g_gold_standard.py b/tests/datasource/open_targets/test_l2g_gold_standard.py
new file mode 100644
index 000000000..8b89fc21a
--- /dev/null
+++ b/tests/datasource/open_targets/test_l2g_gold_standard.py
@@ -0,0 +1,102 @@
+"""Test Open Targets L2G gold standards data source."""
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+import pytest
+from otg.dataset.l2g_gold_standard import L2GGoldStandard
+from otg.dataset.v2g import V2G
+from otg.datasource.open_targets.l2g_gold_standard import OpenTargetsL2GGoldStandard
+from pyspark.sql import DataFrame
+
+if TYPE_CHECKING:
+ from pyspark.sql.session import SparkSession
+
+
+def test_open_targets_as_l2g_gold_standard(
+ sample_l2g_gold_standard: DataFrame,
+ mock_v2g: V2G,
+) -> None:
+ """Test L2G gold standard from OTG curation."""
+ assert isinstance(
+ OpenTargetsL2GGoldStandard.as_l2g_gold_standard(
+ sample_l2g_gold_standard,
+ mock_v2g,
+ ),
+ L2GGoldStandard,
+ )
+
+
+def test_parse_positive_curation(
+ sample_l2g_gold_standard: DataFrame,
+) -> None:
+ """Test parsing curation as the positive set."""
+ expected_cols = ["studyLocusId", "studyId", "variantId", "geneId", "sources"]
+ df = OpenTargetsL2GGoldStandard.parse_positive_curation(sample_l2g_gold_standard)
+ assert df.columns == expected_cols, "GS parsing has a different schema."
+
+
+class TestExpandGoldStandardWithNegatives:
+ """Test expanding positive set with negative set."""
+
+ observed_df: DataFrame
+ expected_expanded_gs: DataFrame
+ sample_positive_set: DataFrame
+
+ def test_expand_gold_standard_with_negatives_logic(
+ self: TestExpandGoldStandardWithNegatives, spark: SparkSession
+ ) -> None:
+ """Test expanding positive set with negative set coincides with expected results."""
+ assert (
+ self.observed_df.collect() == self.expected_expanded_gs.collect()
+ ), "GS expansion is not as expected."
+
+ def test_expand_gold_standard_with_negatives_same_positives(
+ self: TestExpandGoldStandardWithNegatives, spark: SparkSession
+ ) -> None:
+ """Test expanding positive set with negative set doesn't remove any positives."""
+ assert (
+ self.observed_df.filter("goldStandardSet == 'positive'").count()
+ == self.sample_positive_set.count()
+ ), "GS expansion has removed positives."
+
+ @pytest.fixture(autouse=True)
+ def _setup(self: TestExpandGoldStandardWithNegatives, spark: SparkSession) -> None:
+ """Prepare fixtures for TestExpandGoldStandardWithNegatives."""
+ self.sample_positive_set = spark.createDataFrame(
+ [
+ ("variant1", "gene1", "study1"),
+ ("variant2", "gene2", "study1"),
+ ],
+ ["variantId", "geneId", "studyId"],
+ )
+
+ sample_v2g_df = spark.createDataFrame(
+ [
+ ("variant1", "gene1", 5, "X", "X", "X"),
+ ("variant1", "gene3", 10, "X", "X", "X"),
+ ],
+ [
+ "variantId",
+ "geneId",
+ "distance",
+ "chromosome",
+ "datatypeId",
+ "datasourceId",
+ ],
+ )
+
+ self.expected_expanded_gs = spark.createDataFrame(
+ [
+ ("variant1", "study1", "negative", "gene3"),
+ ("variant1", "study1", "positive", "gene1"),
+ ("variant2", "study1", "positive", "gene2"),
+ ],
+ ["variantId", "geneId", "goldStandardSet", "studyId"],
+ )
+ self.observed_df = (
+ OpenTargetsL2GGoldStandard.expand_gold_standard_with_negatives(
+ self.sample_positive_set,
+ V2G(_df=sample_v2g_df, _schema=V2G.get_schema()),
+ )
+ )
diff --git a/tests/datasource/open_targets/test_target.py b/tests/datasource/open_targets/test_target.py
index a7035e26a..7029973bc 100644
--- a/tests/datasource/open_targets/test_target.py
+++ b/tests/datasource/open_targets/test_target.py
@@ -1,10 +1,9 @@
"""Test Open Targets target data source."""
from __future__ import annotations
-from pyspark.sql import DataFrame
-
from otg.dataset.gene_index import GeneIndex
from otg.datasource.open_targets.target import OpenTargetsTarget
+from pyspark.sql import DataFrame
def test_open_targets_as_gene_index(sample_target_index: DataFrame) -> None:
diff --git a/tests/datasource/ukbiobank/test_ukbiobank_study_index.py b/tests/datasource/ukbiobank/test_ukbiobank_study_index.py
index 2637563fa..a3c7d08b1 100644
--- a/tests/datasource/ukbiobank/test_ukbiobank_study_index.py
+++ b/tests/datasource/ukbiobank/test_ukbiobank_study_index.py
@@ -2,10 +2,9 @@
from __future__ import annotations
-from pyspark.sql import DataFrame
-
from otg.dataset.study_index import StudyIndex
from otg.datasource.ukbiobank.study_index import UKBiobankStudyIndex
+from pyspark.sql import DataFrame
def test_ukbiobank_study_index_from_source(
diff --git a/tests/method/test_clump.py b/tests/method/test_clump.py
index ef9e560a8..3e4556a54 100644
--- a/tests/method/test_clump.py
+++ b/tests/method/test_clump.py
@@ -2,12 +2,11 @@
from __future__ import annotations
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any
import pyspark.sql.functions as f
import pyspark.sql.types as t
import pytest
-
from otg.dataset.study_locus import StudyLocus
from otg.method.clump import LDclumping
@@ -148,7 +147,7 @@ def test_clump(mock_study_locus: StudyLocus) -> None:
],
)
def test_is_lead_linked(
- spark: SparkSession, observed_data: list, expected_data: list
+ spark: SparkSession, observed_data: list[Any], expected_data: list[Any]
) -> None:
"""Test function that annotates whether a studyLocusId is linked to a more statistically significant studyLocusId."""
schema = t.StructType(
diff --git a/tests/method/test_ld.py b/tests/method/test_ld.py
index 7dc18f863..5886faac9 100644
--- a/tests/method/test_ld.py
+++ b/tests/method/test_ld.py
@@ -7,16 +7,14 @@
import pyspark.sql.functions as f
import pyspark.sql.types as t
import pytest
-from pyspark.sql import Row
-
from otg.dataset.study_locus import StudyLocus
from otg.method.ld import LDAnnotator
+from pyspark.sql import Row
if TYPE_CHECKING:
- from pyspark.sql import SparkSession
-
from otg.dataset.ld_index import LDIndex
from otg.dataset.study_index import StudyIndex
+ from pyspark.sql import SparkSession
class TestLDAnnotator:
diff --git a/tests/method/test_locus_to_gene.py b/tests/method/test_locus_to_gene.py
new file mode 100644
index 000000000..ff7a7b8a7
--- /dev/null
+++ b/tests/method/test_locus_to_gene.py
@@ -0,0 +1,144 @@
+"""Test locus-to-gene model training."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+import pytest
+from otg.dataset.l2g_feature import L2GFeature
+from otg.dataset.l2g_feature_matrix import L2GFeatureMatrix
+from otg.method.l2g.feature_factory import ColocalisationFactory, StudyLocusFactory
+from otg.method.l2g.model import LocusToGeneModel
+from otg.method.l2g.trainer import LocusToGeneTrainer
+from pyspark.ml import PipelineModel
+from pyspark.ml.tuning import ParamGridBuilder
+from xgboost.spark import SparkXGBClassifier
+
+if TYPE_CHECKING:
+ from otg.dataset.colocalisation import Colocalisation
+ from otg.dataset.study_index import StudyIndex
+ from otg.dataset.study_locus import StudyLocus
+ from otg.dataset.v2g import V2G
+
+
+@pytest.fixture(scope="module")
+def model() -> LocusToGeneModel:
+ """Creates an instance of the LocusToGene class."""
+ estimator = SparkXGBClassifier(
+ eval_metric="logloss",
+ features_col="features",
+ label_col="label",
+ max_depth=5,
+ )
+ return LocusToGeneModel(estimator=estimator, features_list=["distanceTssMean"])
+
+
+class TestLocusToGeneTrainer:
+ """Test the L2GTrainer methods using a logistic regression model as estimation algorithm."""
+
+ def test_cross_validate(
+ self: TestLocusToGeneTrainer,
+ mock_l2g_feature_matrix: L2GFeatureMatrix,
+ model: LocusToGeneModel,
+ ) -> None:
+ """Test the k-fold cross-validation function."""
+ param_grid = (
+ ParamGridBuilder()
+ .addGrid(model.estimator.learning_rate, [0.1, 0.01])
+ .build()
+ )
+ best_model = LocusToGeneTrainer.cross_validate(
+ model, mock_l2g_feature_matrix.fill_na(), num_folds=2, param_grid=param_grid
+ )
+ assert isinstance(
+ best_model, LocusToGeneModel
+ ), "Unexpected model type returned from cross_validate"
+ # Check that the best model's hyperparameters are among those in the param_grid
+ assert best_model.model.getOrDefault("learning_rate") in [ # type: ignore
+ 0.1,
+ 0.01,
+ ], "Unexpected learning rate in the best model"
+
+ def test_train(
+ self: TestLocusToGeneTrainer,
+ mock_l2g_feature_matrix: L2GFeatureMatrix,
+ model: LocusToGeneModel,
+ ) -> None:
+ """Test the training function."""
+ trained_model = LocusToGeneTrainer.train(
+ mock_l2g_feature_matrix.fill_na(),
+ model,
+ features_list=["distanceTssMean"],
+ evaluate=False,
+ )
+ # Check that `model` is a PipelineModel object and not None
+ assert isinstance(
+ trained_model.model, PipelineModel
+ ), "Model is not a PipelineModel object."
+
+
+class TestColocalisationFactory:
+ """Test the ColocalisationFactory methods."""
+
+ @pytest.mark.parametrize(
+ "colocalisation_method",
+ [
+ "COLOC",
+ "eCAVIAR",
+ ],
+ )
+ def test_get_max_coloc_per_study_locus(
+ self: TestColocalisationFactory,
+ mock_study_locus: StudyLocus,
+ mock_study_index: StudyIndex,
+ mock_colocalisation: Colocalisation,
+ colocalisation_method: str,
+ ) -> None:
+ """Test the function that extracts the maximum log likelihood ratio for each pair of overlapping study-locus."""
+ coloc_llr = ColocalisationFactory._get_max_coloc_per_study_locus(
+ mock_study_locus,
+ mock_study_index,
+ mock_colocalisation,
+ colocalisation_method,
+ )
+ assert isinstance(
+ coloc_llr, L2GFeature
+ ), "Unexpected model type returned from _get_max_coloc_per_study_locus"
+
+ def test_get_coloc_features(
+ self: TestColocalisationFactory,
+ mock_study_locus: StudyLocus,
+ mock_study_index: StudyIndex,
+ mock_colocalisation: Colocalisation,
+ ) -> None:
+ """Test the function that calls all the methods to produce colocalisation features."""
+ coloc_features = ColocalisationFactory._get_coloc_features(
+ mock_study_locus, mock_study_index, mock_colocalisation
+ )
+ assert isinstance(
+ coloc_features, L2GFeature
+ ), "Unexpected model type returned from _get_coloc_features"
+
+
+class TestStudyLocusFactory:
+ """Test the StudyLocusFactory methods."""
+
+ def test_get_tss_distance_features(
+ self: TestStudyLocusFactory, mock_study_locus: StudyLocus, mock_v2g: V2G
+ ) -> None:
+ """Test the function that extracts the distance to the TSS."""
+ tss_distance = StudyLocusFactory._get_tss_distance_features(
+ mock_study_locus, mock_v2g
+ )
+ assert isinstance(
+ tss_distance, L2GFeature
+ ), "Unexpected model type returned from _get_tss_distance_features"
+
+ def test_get_vep_features(
+ self: TestStudyLocusFactory, mock_study_locus: StudyLocus, mock_v2g: V2G
+ ) -> None:
+ """Test the function that extracts the VEP features."""
+ vep_features = StudyLocusFactory._get_vep_features(mock_study_locus, mock_v2g)
+ assert isinstance(
+ vep_features, L2GFeature
+ ), "Unexpected model type returned from _get_vep_features"
diff --git a/tests/method/test_pics.py b/tests/method/test_pics.py
index 1bef39750..41c9c5c20 100644
--- a/tests/method/test_pics.py
+++ b/tests/method/test_pics.py
@@ -3,10 +3,9 @@
from __future__ import annotations
import pyspark.sql.functions as f
-from pyspark.sql import Row
-
from otg.dataset.study_locus import StudyLocus
from otg.method.pics import PICS
+from pyspark.sql import Row
class TestFinemap:
@@ -26,18 +25,31 @@ def test_finemap_empty_array(
f.when(f.col("ldSet").isNull(), f.array()).otherwise(f.col("ldSet")),
).filter(f.size("ldSet") == 0)
observed_df = PICS.finemap(mock_study_locus).df.limit(1)
- print("TEST_FINEMAP_EMPTY_ARRAY", observed_df.show(truncate=False))
assert observed_df.collect()[0]["locus"] == []
def test_finemap_null_ld_set(
self: TestFinemap, mock_study_locus: StudyLocus
) -> None:
- """Test how we apply `finemap` when `locus` is null by returning a null field."""
+ """Test how we apply `finemap` when `ldSet` is null by returning a null field."""
mock_study_locus.df = mock_study_locus.df.filter(f.col("ldSet").isNull())
observed_df = PICS.finemap(mock_study_locus).df.limit(1)
- print("TEST_FINEMAP_NULL", observed_df.show(truncate=False))
assert observed_df.collect()[0]["locus"] is None
+ def test_finemap_quality_control(
+ self: TestFinemap, mock_study_locus: StudyLocus
+ ) -> None:
+ """Test that we add a `empty locus` flag when any variant in the locus meets PICS criteria."""
+ mock_study_locus.df = mock_study_locus.df.withColumn(
+ # Association with an empty ldSet
+ "ldSet",
+ f.when(f.col("ldSet").isNull(), f.array()).otherwise(f.col("ldSet")),
+ ).filter(f.size("ldSet") == 0)
+ observed_df = PICS.finemap(mock_study_locus).df.limit(1)
+ qc_flag = "LD block does not contain variants at the required R^2 threshold"
+ assert (
+ qc_flag in observed_df.collect()[0]["qualityControls"]
+ ), "Empty locus QC flag is missing."
+
def test__finemap_udf() -> None:
"""Test the _finemap UDF with a simple case."""
diff --git a/tests/method/test_window_based_clumping.py b/tests/method/test_window_based_clumping.py
index 0a5ad5208..cd31fc65b 100644
--- a/tests/method/test_window_based_clumping.py
+++ b/tests/method/test_window_based_clumping.py
@@ -3,18 +3,16 @@
from typing import TYPE_CHECKING
+from otg.dataset.study_locus import StudyLocus
+from otg.method.window_based_clumping import WindowBasedClumping
from pyspark.ml import functions as fml
from pyspark.ml.linalg import VectorUDT
from pyspark.sql import functions as f
from pyspark.sql.window import Window
-from otg.dataset.study_locus import StudyLocus
-from otg.method.window_based_clumping import WindowBasedClumping
-
if TYPE_CHECKING:
- from pyspark.sql import SparkSession
-
from otg.dataset.summary_statistics import SummaryStatistics
+ from pyspark.sql import SparkSession
def test_window_based_clump__return_type(
@@ -44,7 +42,9 @@ def test_window_based_clump_with_locus__correctness(
sample_summary_satistics: SummaryStatistics,
) -> None:
"""Test window-based clumping."""
- clumped = sample_summary_satistics.window_based_clumping(250_000, with_locus=True)
+ clumped = sample_summary_satistics.window_based_clumping(
+ distance=250_000, locus_collect_distance=250_000
+ )
# Asserting the presence of locus key:
assert "locus" in clumped.df.columns
@@ -59,8 +59,12 @@ def test_window_based_clump_with_locus__correctness(
assert (clumped.df.select(f.explode_outer("locus").alias("loci")).count()) == 132
-def test_prune_peak(spark: SparkSession):
- """Test the pruning of peaks."""
+def test_prune_peak(spark: SparkSession) -> None:
+ """Test the pruning of peaks.
+
+ Args:
+ spark (SparkSession): Spark session
+ """
data = [
("c", 3, 4.0),
("c", 4, 2.0),
diff --git a/tests/step/test_clump_step.py b/tests/step/test_clump_step.py
new file mode 100644
index 000000000..d5f706f9c
--- /dev/null
+++ b/tests/step/test_clump_step.py
@@ -0,0 +1,26 @@
+"""Test clump step."""
+from __future__ import annotations
+
+import tempfile
+from pathlib import Path
+from typing import TYPE_CHECKING
+
+from otg.clump import ClumpStep
+
+if TYPE_CHECKING:
+ from otg.common.session import Session
+
+
+class TestClumpStep:
+ """Test clump step."""
+
+ def test_clumpstep_summary_stats(self, session: Session) -> None:
+ """Test clump step on summary statistics writes results to a temporary directory."""
+ with tempfile.TemporaryDirectory() as temp_dir:
+ clumped_study_locus_path = Path(temp_dir, "GCST005523_chr18_clumped")
+ ClumpStep(
+ session=session,
+ input_path="tests/data_samples/GCST005523_chr18.parquet",
+ clumped_study_locus_path=str(clumped_study_locus_path),
+ )
+ assert Path(clumped_study_locus_path).exists(), "Output directory exists."
diff --git a/tests/test_docs.py b/tests/test_docs.py
index fd0d0b5d0..ec9c4fb36 100644
--- a/tests/test_docs.py
+++ b/tests/test_docs.py
@@ -10,7 +10,7 @@
# Pytest fixture to build the MkDocs documentation before running tests.
@pytest.fixture(scope="module")
-def mkdocs_build():
+def mkdocs_build() -> None:
"""Fixture to build documentation."""
try:
cfg = load_config("mkdocs.yml", strict=False)
@@ -22,13 +22,12 @@ def mkdocs_build():
raise AssertionError(f"MkDocs build failed: {e}") from e
-# Test
-def test_mkdocs_build(mkdocs_build):
+def test_mkdocs_build() -> None:
"""Function to check if MkDocs build succeeded."""
pass
-def test_check_missing_files(mkdocs_build):
+def test_check_missing_files(mkdocs_build: None) -> None:
"""Test function to check for missing files in the documentation build."""
import os
diff --git a/tests/test_schemas.py b/tests/test_schemas.py
index 19d85cf1b..8cc4b4334 100644
--- a/tests/test_schemas.py
+++ b/tests/test_schemas.py
@@ -1,5 +1,4 @@
"""Tests on spark schemas."""
-# type: ignore
from __future__ import annotations
import json
@@ -14,7 +13,6 @@
if TYPE_CHECKING:
from _pytest.fixtures import FixtureRequest
-
from otg.dataset.gene_index import GeneIndex
from otg.dataset.v2g import V2G
@@ -27,7 +25,7 @@ def pytest_generate_tests(metafunc: pytest.Metafunc) -> None:
Pytest hook to parametrise testing
Args:
- metafunc (Metafunc): _description_
+ metafunc (pytest.Metafunc): pytest metafunc
"""
if "schema_json" in metafunc.fixturenames:
schemas = [f for f in os.listdir(SCHEMA_DIR) if f.endswith(".json")]
diff --git a/tests/test_spark_helpers.py b/tests/test_spark_helpers.py
index a38e8d5bf..22c39e49f 100644
--- a/tests/test_spark_helpers.py
+++ b/tests/test_spark_helpers.py
@@ -1,17 +1,16 @@
"""Tests on helper spark functions."""
from __future__ import annotations
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Any
import pyspark.sql.functions as f
import pytest
-from pyspark.sql.types import ArrayType, DoubleType, StructField, StructType
-
from otg.common.spark_helpers import (
get_record_with_maximum_value,
get_record_with_minimum_value,
order_array_of_structs_by_field,
)
+from pyspark.sql.types import ArrayType, DoubleType, StructField, StructType
if TYPE_CHECKING:
from pyspark.sql import DataFrame, SparkSession
@@ -72,7 +71,7 @@ def test_get_record_with_maximum_value_group_two_cols(
],
)
def test_order_array_of_structs_by_field(
- spark: SparkSession, observed: list, expected: list
+ spark: SparkSession, observed: list[Any], expected: list[Any]
) -> None:
"""Test the util that returns an array of structs ordered by a field."""
mock_schema = StructType(
diff --git a/utils/configure.py b/utils/configure.py
deleted file mode 100644
index 7fbaf5461..000000000
--- a/utils/configure.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""Configuration helper."""
-from __future__ import annotations
-
-import hydra
-from omegaconf import DictConfig, OmegaConf
-
-
-@hydra.main(version_base=None, config_path="../configs/", config_name="config")
-def configure(cfg: DictConfig) -> None:
- """Prints the configuration.
-
- Args:
- cfg (DictConfig): configuration object
- """
- print(OmegaConf.to_yaml(cfg))
-
-
-if __name__ == "__main__":
- configure()
diff --git a/utils/install_dependencies_on_cluster.sh b/utils/install_dependencies_on_cluster.sh
index 39a61e5a6..26cd835e5 100644
--- a/utils/install_dependencies_on_cluster.sh
+++ b/utils/install_dependencies_on_cluster.sh
@@ -39,6 +39,15 @@ function install_pip() {
}
function main() {
+ # Define a specific directory to download the files
+ local work_dir="/"
+ cd "${work_dir}" || err "Failed to change to working directory"
+ echo "Working directory: $(pwd)"
+
+ # more meaningful errors from hydra
+ echo "export HYDRA_FULL_ERROR=1" | tee --append /etc/profile
+ source /etc/profile
+
if [[ -z "${PACKAGE}" ]]; then
echo "ERROR: Must specify PACKAGE metadata key"
exit 1
@@ -46,7 +55,7 @@ function main() {
install_pip
echo "Downloading package..."
- gsutil cp ${PACKAGE} .
+ gsutil cp ${PACKAGE} . || err "Failed to download PACKAGE"
PACKAGENAME=$(basename ${PACKAGE})
echo "Uninstalling previous version if it exists"
@@ -55,8 +64,8 @@ function main() {
run_with_retry pip install --upgrade ${PACKAGENAME}
echo "Downloading and uncompressing config..."
- gsutil cp ${CONFIGTAR} .
- tar -xvf $(basename ${CONFIGTAR})
+ gsutil cp ${CONFIGTAR} . || err "Failed to download CONFIGTAR"
+ tar -xvf $(basename ${CONFIGTAR}) || err "Failed to extract CONFIGTAR"
}
main
diff --git a/utils/update_GWAS_Catalog_data.sh b/utils/update_GWAS_Catalog_data.sh
index 667e995c4..98ac4cc36 100755
--- a/utils/update_GWAS_Catalog_data.sh
+++ b/utils/update_GWAS_Catalog_data.sh
@@ -55,17 +55,28 @@ wget -q ${RELEASE_URL}/gwas-catalog-download-studies-v1.0.3.txt \
-O gwas-catalog-v1.0.3-studies-r${YEAR}-${MONTH}-${DAY}.tsv
logging "File gwas-catalog-v1.0.3-studies-r${YEAR}-${MONTH}-${DAY}.tsv saved."
+wget -q ${RELEASE_URL}/gwas-catalog-unpublished-studies-v1.0.3.tsv \
+ -O gwas-catalog-v1.0.3-unpublished-studies-r${YEAR}-${MONTH}-${DAY}.tsv
+logging "File gwas-catalog-v1.0.3-unpublished-studies-r${YEAR}-${MONTH}-${DAY}.tsv saved."
+
wget -q ${RELEASE_URL}/gwas-catalog-download-ancestries-v1.0.3.txt \
-O gwas-catalog-v1.0.3-ancestries-r${YEAR}-${MONTH}-${DAY}.tsv
logging "File gwas-catalog-v1.0.3-ancestries-r${YEAR}-${MONTH}-${DAY}.tsv saved."
+wget -q ${RELEASE_URL}/gwas-catalog-unpublished-ancestries-v1.0.3.tsv \
+ -O gwas-catalog-v1.0.3-unpublished-ancestries-r${YEAR}-${MONTH}-${DAY}.tsv
+logging "File gwas-catalog-v1.0.3-unpublished-ancestries-r${YEAR}-${MONTH}-${DAY}.tsv saved."
+
+
wget -q ${BASE_URL}/summary_statistics/harmonised_list.txt -O harmonised_list-r${YEAR}-${MONTH}-${DAY}.txt
logging "File harmonised_list-r${YEAR}-${MONTH}-${DAY}.txt saved."
logging "Copying files to GCP..."
-gsutil -q cp file://$(pwd)/gwas_catalog_v1.0.2-associations_e${ENSEMBL}_r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
-gsutil -q cp file://$(pwd)/gwas-catalog-v1.0.3-studies-r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
-gsutil -q cp file://$(pwd)/gwas-catalog-v1.0.3-ancestries-r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
-gsutil -q cp file://$(pwd)/harmonised_list-r${YEAR}-${MONTH}-${DAY}.txt ${GCP_TARGET}/
+gsutil -mq cp file://$(pwd)/gwas_catalog_v1.0.2-associations_e${ENSEMBL}_r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
+gsutil -mq cp file://$(pwd)/gwas-catalog-v1.0.3-studies-r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
+gsutil -mq cp file://$(pwd)/gwas-catalog-v1.0.3-ancestries-r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
+gsutil -mq cp file://$(pwd)/harmonised_list-r${YEAR}-${MONTH}-${DAY}.txt ${GCP_TARGET}/
+gsutil -mq cp file://$(pwd)/gwas-catalog-v1.0.3-unpublished-studies-r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
+gsutil -mq cp file://$(pwd)/gwas-catalog-v1.0.3-unpublished-ancestries-r${YEAR}-${MONTH}-${DAY}.tsv ${GCP_TARGET}/
logging "Done."
diff --git a/workflow/__init__.py b/workflow/__init__.py
deleted file mode 100644
index 0205aa8e7..000000000
--- a/workflow/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-"""Google Cloud Dataproc Workflow."""
-
-from __future__ import annotations
diff --git a/workflow/dag.yaml b/workflow/dag.yaml
deleted file mode 100644
index a9416b774..000000000
--- a/workflow/dag.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-- id: "my_gene_index"
-- id: "my_variant_annotation"
-- id: "my_ld_index"
-- id: "my_gwas_catalog"
- prerequisites:
- - "my_variant_annotation"
- - "my_ld_index"
-- id: "my_variant_index"
- prerequisites:
- - "my_variant_annotation"
- - "my_gwas_catalog"
-- id: "my_v2g"
- prerequisites:
- - "my_variant_index"
- - "my_variant_annotation"
- - "my_gene_index"
-- id: "my_finngen"
-- id: "my_ukbiobank"
diff --git a/workflow/workflow_template.py b/workflow/workflow_template.py
deleted file mode 100644
index 043733119..000000000
--- a/workflow/workflow_template.py
+++ /dev/null
@@ -1,260 +0,0 @@
-"""Generate jinja2 template for workflow."""
-from __future__ import annotations
-
-import argparse
-import subprocess
-
-import yaml
-from google.cloud import dataproc_v1 as dataproc
-from google.cloud.dataproc_v1.types import (
- NodeInitializationAction,
- OrderedJob,
- WorkflowTemplate,
- WorkflowTemplatePlacement,
-)
-from google.protobuf.duration_pb2 import Duration
-
-# Command line arguments
-parser = argparse.ArgumentParser(description="Submit the workflow to Dataproc.")
-parser.add_argument(
- "cluster_prefix",
- metavar="cluster_prefix",
- type=str,
- help="A prefix to use for cluster and template name construction. It's a good idea to use your initials.",
-)
-parser.add_argument(
- "--machine-type",
- metavar="machine_type",
- type=str,
- default="n1-highmem-8",
- help="Google Dataproc machine type, default: %(default)s.",
-)
-parser.add_argument(
- "--num-ssds",
- metavar="num_local_ssds",
- type=int,
- default=1,
- help="Number of local SSDs that supplement the boot disk, default: %(default)s.",
-)
-parser.add_argument(
- "--boot-disk-size",
- metavar="boot_disk_size",
- type=int,
- default=500,
- help="Size in GB of the primary disk attached to each node, default: %(default)s.",
-)
-
-
-# Google Cloud configuration
-project_id = "open-targets-genetics-dev"
-region = "europe-west1"
-zone = "europe-west1-d"
-
-# Managed cluster
-code_version = (
- subprocess.check_output(["poetry", "version", "--short"]).decode("utf-8").strip()
-)
-assert (
- code_version
-), "Could not fetch code version from the current Poetry configuration"
-initialisation_base_path = (
- f"gs://genetics_etl_python_playground/initialisation/{code_version}"
-)
-python_cli = f"{initialisation_base_path}/cli.py"
-config_name = "my_config"
-config_tar = f"{initialisation_base_path}/config.tar.gz"
-package_wheel = f"{initialisation_base_path}/otgenetics-{code_version}-py3-none-any.whl"
-initialisation_executable_file = (
- f"{initialisation_base_path}/install_dependencies_on_cluster.sh"
-)
-image_version = "2.1"
-
-# Available cluster
-cluster_uuid = "eba42738-2ea3-4b0a-ba1d-38428427e838"
-
-# job
-python_cli = "gs://genetics_etl_python_playground/initialisation/cli.py"
-cluster_config_dir = "/config"
-
-# template
-dag_yaml = "workflow/dag.yaml"
-
-
-def generate_available_placement_template(
- cluster_uuid: str,
-) -> WorkflowTemplatePlacement:
- """Generates placement using available clusters.
-
- Args:
- cluster_uuid (str): Cluster UUID to use for placement.
-
- Returns:
- WorkflowTemplatePlacement: Placement template.
- """
- placement = dataproc.WorkflowTemplatePlacement()
- placement.cluster_selector.cluster_labels = {
- "goog-dataproc-cluster-uuid": cluster_uuid
- }
- return placement
-
-
-def generate_managed_placement_template(
- cluster_name: str,
- config_tar: str,
- package_wheel: str,
- zone: str,
- machine_type: str,
- initialisation_executable_file: str,
- image_version: str,
- num_local_ssds: int = 0,
- boot_disk_size_gb: int = 500,
- initialisation_execution_timeout: str = "600s",
-) -> WorkflowTemplatePlacement:
- """Generates placement using managed clusters.
-
- Args:
- cluster_name (str): Cluster name to use for placement.
- config_tar (str): Path to GS location with config tarball to use for cluster creation.
- package_wheel (str): Path to GS location with package wheel to use for cluster creation.
- zone (str): Zone to use for cluster creation.
- machine_type (str): Machine type to use for cluster creation.
- initialisation_executable_file (str): Path to GS location with initialisation script.
- image_version (str): Dataproc image version to use for cluster creation.
- num_local_ssds (int): Number of local SSDs to use for cluster creation. Defaults to 0.
- boot_disk_size_gb (int): Size in GB of the primary disk attached to each node. Defaults to 500.
- initialisation_execution_timeout (str): Initialisation script execution timeout. Defaults to "600s".
-
- Returns:
- WorkflowTemplatePlacement: Placement template.
- """
- placement = dataproc.WorkflowTemplatePlacement()
- placement.managed_cluster.cluster_name = cluster_name
- placement.managed_cluster.config.endpoint_config.enable_http_port_access = True
- placement.managed_cluster.config.gce_cluster_config.zone_uri = zone
- placement.managed_cluster.config.gce_cluster_config.metadata = {
- "CONFIGTAR": config_tar,
- "PACKAGE": package_wheel,
- }
- if num_local_ssds > 0:
- placement.managed_cluster.config.master_config.disk_config.num_local_ssds = (
- num_local_ssds
- )
- initialisation_node = NodeInitializationAction()
- initialisation_node.executable_file = initialisation_executable_file
- duration = Duration()
- duration.FromJsonString(initialisation_execution_timeout)
- initialisation_node.execution_timeout = duration
- placement.managed_cluster.config.initialization_actions = [initialisation_node]
-
- placement.managed_cluster.config.master_config.machine_type_uri = machine_type
- placement.managed_cluster.config.master_config.disk_config.boot_disk_type = (
- "pd-ssd" if num_local_ssds > 0 else "pd-standard"
- )
- placement.managed_cluster.config.master_config.disk_config.boot_disk_size_gb = (
- boot_disk_size_gb
- )
- placement.managed_cluster.config.software_config.image_version = image_version
- placement.managed_cluster.config.software_config.properties = {
- "dataproc:dataproc.allow.zero.workers": "true",
- "yarn:yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage": "98",
- }
- return placement
-
-
-def pyspark_job_template(
- step: dict,
- cluster_config_dir: str,
- config_name: str,
-) -> OrderedJob:
- """Generates a pyspark job template.
-
- Args:
- step (dict): Step to generate job for.
- cluster_config_dir (str): Local path in the cluster where the config tarball is extracted.
- config_name (str): Name of the config file to use.
-
- Returns:
- OrderedJob: Pyspark job template.
- """
- job = OrderedJob()
- job.step_id = step["id"]
- job.pyspark_job.main_python_file_uri = python_cli
- job.pyspark_job.args = [
- f"step={ step['id'] }",
- f"--config-dir={ cluster_config_dir }",
- f"--config-name={ config_name }",
- ]
- # to provide hail support
- job.pyspark_job.properties = {
- "spark.jars": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
- "spark.driver.extraClassPath": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar",
- "spark.executor.extraClassPath": "./hail-all-spark.jar",
- "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
- "spark.kryo.registrator": "is.hail.kryo.HailKryoRegistrator",
- }
- # dependency steps
- if "prerequisites" in step:
- job.prerequisite_step_ids = step["prerequisites"]
- return job
-
-
-def instantiate_inline_workflow_template(
- project_id: str, region: str, template: WorkflowTemplate
-) -> None:
- """Submits a workflow for a Cloud Dataproc using the Python client library.
-
- Args:
- project_id (str): Project to use for running the workflow.
- region (str): Region where the workflow resources should live.
- template (WorkflowTemplate): Workflow template to submit.
- """
- # Create a client with the endpoint set to the desired region.
- workflow_template_client = dataproc.WorkflowTemplateServiceClient(
- client_options={"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
- )
- # Submit the request to instantiate the workflow from an inline template.
- operation = workflow_template_client.instantiate_inline_workflow_template(
- request={
- "parent": f"projects/{project_id}/regions/{region}",
- "template": template,
- }
- )
- operation.result()
-
- # Output a success message.
- print("Workflow ran successfully.")
-
-
-def main(args: argparse.Namespace) -> None:
- """Submit dataproc workflow."""
- template = dataproc.WorkflowTemplate()
-
- # Initialize request argument(s)
- template.id = f"{args.cluster_prefix}-ot-genetics-workflow"
- cluster_name = f"{args.cluster_prefix}-otg-cluster"
- # template.placement = generate_available_placement_template(cluster_uuid)
- template.placement = generate_managed_placement_template(
- cluster_name,
- config_tar,
- package_wheel,
- zone,
- args.machine_type,
- initialisation_executable_file,
- image_version,
- num_local_ssds=args.num_ssds,
- boot_disk_size_gb=args.boot_disk_size,
- )
-
- # Load steps from yaml file
- with open(dag_yaml, "r") as file:
- steps = yaml.safe_load(file)
-
- template.jobs = [
- pyspark_job_template(step, cluster_config_dir, config_name) for step in steps
- ]
-
- instantiate_inline_workflow_template(project_id, region, template)
-
-
-if __name__ == "__main__":
- main(parser.parse_args())