From 89883c214271b83a3b547c3ce0d60add6737f5d6 Mon Sep 17 00:00:00 2001 From: Conor Heine <1045603+cahna@users.noreply.github.com> Date: Mon, 25 Dec 2023 12:37:16 -0800 Subject: [PATCH] v1.0.1 * add sanitized pcsl match reports as test cases * update dependencies * establish auto-discovery and auto-testing of match report files in tests/mocks_data/match_reports * update tox and github actions configs to handle multi-os test matrix --- .github/actions/setup-poetry-env/action.yaml | 21 +- .github/workflows/main.yaml | 75 +- .github/workflows/release-pypi.yaml | 24 + .pre-commit-config.yaml | 2 +- .vscode/extensions.json | 10 + .vscode/settings.json | 8 +- hitfactorpy/parsers/match_report/models.py | 2 + .../parsers/match_report/pandas/stage.py | 9 +- .../parsers/match_report/strict/stage.py | 7 +- poetry.lock | 1143 +++++++++-------- pyproject.toml | 2 +- tests/conftest.py | 24 + tests/mock_data/__init__.py | 0 tests/mock_data/match_reports/README.md | 12 + tests/mock_data/match_reports/__init__.py | 16 + .../match_reports/pcsl_1gun_20231129.py | 91 ++ .../match_reports/pcsl_1gun_20231129.txt | 40 + .../match_reports/pcsl_2gun_20231129.py | 86 ++ .../match_reports/pcsl_2gun_20231129.txt | 33 + .../mock_data/match_reports/uspsa_20230108.py | 105 ++ .../match_reports/uspsa_20230108.txt | 592 +++++++++ tests/test_cli/test_parse_match.py | 37 +- tests/test_parsers_match_report/shared.py | 9 +- .../test_pandas_parser.py | 42 - .../test_parsers_match_report/test_parsers.py | 51 + .../test_strict_parser.py | 34 - tox.ini | 42 +- 27 files changed, 1795 insertions(+), 722 deletions(-) create mode 100644 .github/workflows/release-pypi.yaml create mode 100644 .vscode/extensions.json create mode 100644 tests/mock_data/__init__.py create mode 100644 tests/mock_data/match_reports/README.md create mode 100644 tests/mock_data/match_reports/__init__.py create mode 100644 tests/mock_data/match_reports/pcsl_1gun_20231129.py create mode 100644 tests/mock_data/match_reports/pcsl_1gun_20231129.txt create mode 100644 tests/mock_data/match_reports/pcsl_2gun_20231129.py create mode 100644 tests/mock_data/match_reports/pcsl_2gun_20231129.txt create mode 100644 tests/mock_data/match_reports/uspsa_20230108.py create mode 100644 tests/mock_data/match_reports/uspsa_20230108.txt delete mode 100644 tests/test_parsers_match_report/test_pandas_parser.py create mode 100644 tests/test_parsers_match_report/test_parsers.py delete mode 100644 tests/test_parsers_match_report/test_strict_parser.py diff --git a/.github/actions/setup-poetry-env/action.yaml b/.github/actions/setup-poetry-env/action.yaml index 6a58ca7..6cbbdde 100644 --- a/.github/actions/setup-poetry-env/action.yaml +++ b/.github/actions/setup-poetry-env/action.yaml @@ -2,15 +2,19 @@ name: "setup-poetry-env" description: "Composite action to setup the Python and poetry environment." inputs: - python-version: - required: false - description: "The python version to use" - default: "3.10" + python-version: + required: false + description: "The python version to use" + default: "3.10" + cached-venv: + required: false + description: "Whether to use a cached venv or not" + default: true runs: using: "composite" steps: - - name: Set up python + - name: Set up python ${{ inputs.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ inputs.python-version }} @@ -18,20 +22,21 @@ runs: - name: Install Poetry uses: snok/install-poetry@v1 with: - virtualenvs-in-project: true + virtualenvs-in-project: ${{ inputs.cached-venv }} - - name: get repository name + - name: "Set env vars" run: echo "REPOSITORY_NAME=${GITHUB_REPOSITORY#*/}" >> $GITHUB_ENV shell: bash - name: Load cached venv id: cached-poetry-dependencies uses: actions/cache@v3 + if: ${{ inputs.cached-venv }} with: path: .venv key: venv-$${{ env.REPOSITORY_NAME }}-${{ runner.os }}-${{ inputs.python-version }}-${{ hashFiles('poetry.lock') }} - name: Install dependencies - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + if: ${{ inputs.cached-venv && steps.cached-poetry-dependencies.outputs.cache-hit != 'true' }} run: poetry install --no-interaction shell: bash diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index cb5a5b6..fb0067b 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -12,18 +12,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out - uses: actions/checkout@v3 - - - name: get repository name - run: echo "REPOSITORY_NAME=${GITHUB_REPOSITORY#*/}" >> $GITHUB_ENV - shell: bash + uses: actions/checkout@v4 - uses: actions/cache@v3 with: path: ~/.cache/pre-commit key: pre-commit-${{ env.REPOSITORY_NAME }}-${{ hashFiles('.pre-commit-config.yaml') }} - - name: Set up the environment + - name: Init python/poetry environment uses: ./.github/actions/setup-poetry-env - name: Run pre-commit @@ -34,35 +30,54 @@ jobs: - name: Check Poetry lock file consistency run: poetry lock --check + + - name: black + run: poetry run black --check ./hitfactorpy ./tests + + - name: flake8 + run: poetry run flake8 ./hitfactorpy ./tests + + - name: isort + run: poetry run isort --check ./hitfactorpy ./tests + + typecheck: + runs-on: ubuntu-latest + steps: + - name: Check out + uses: actions/checkout@v4 + + - uses: actions/cache@v3 + with: + path: ~/.mypy_cache + key: mypy-cache-${{ env.REPOSITORY_NAME }}-${{ hashFiles('pyproject.toml') }} + + - name: Init python/poetry environment + uses: ./.github/actions/setup-poetry-env + + - run: poetry run mypy ./hitfactorpy ./tests tox: - runs-on: ubuntu-latest + needs: + - quality + - typecheck strategy: matrix: + platform: + - ubuntu-latest + - macos-latest + # - windows-latest python-version: ['3.10', '3.11'] - fail-fast: false + fail-fast: true + runs-on: ${{ matrix.platform }} steps: - name: Check out - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Set up python - uses: actions/setup-python@v4 + - name: Set up the environment + uses: ./.github/actions/setup-poetry-env with: python-version: ${{ matrix.python-version }} - - name: Install Poetry - uses: snok/install-poetry@v1 - - - name: get repository name - run: echo "REPOSITORY_NAME=${GITHUB_REPOSITORY#*/}" >> $GITHUB_ENV - shell: bash - - - name: Load cached venv - uses: actions/cache@v3 - with: - path: .tox - key: venv-${{ env.REPOSITORY_NAME }}-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('poetry.lock') }} - - name: Install tox run: | python -m pip install --upgrade pip @@ -70,12 +85,22 @@ jobs: - name: Test with tox run: tox + env: + PLATFORM: ${{ matrix.platform }} + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} check-docs: + needs: + - quality + - typecheck runs-on: ubuntu-latest steps: - name: Check out - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up the environment uses: ./.github/actions/setup-poetry-env diff --git a/.github/workflows/release-pypi.yaml b/.github/workflows/release-pypi.yaml new file mode 100644 index 0000000..b634924 --- /dev/null +++ b/.github/workflows/release-pypi.yaml @@ -0,0 +1,24 @@ +name: Publish to PyPI +on: + release: + types: [published] + +jobs: + pypi_release: + name: Poetry Build & Publish (PyPI) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Init python/poetry environment + uses: ./.github/actions/setup-poetry-env + with: + cached-venv: false + + - run: poetry run pytest + + - run: poetry config pypi-token.pypi "${{ secrets.PYPI_API_KEY }}" + + - name: "TODO: Publish to PyPI" + run: echo TODO && exit 1 + shell: bash diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2fb1c0f..b0021f0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,7 @@ repos: - id: mypy files: ^(hitfactorpy/|tests/) additional_dependencies: - - "pydantic>=1.10.4" + - "pydantic>=1.10.4,<2" - repo: https://github.com/PyCQA/autoflake rev: v2.0.1 hooks: diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..c515a40 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "ms-python.python", + "ms-python.black-formatter", + "ms-python.isort", + "ms-python.mypy-type-checker", + "ms-python.vscode-pylance", + "ms-python.flake8" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 66a213d..18d8073 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,11 +1,9 @@ { - "python.linting.pylintEnabled": false, - "python.linting.mypyEnabled": true, - "python.linting.enabled": true, - "python.formatting.provider": "black", "[python]": { "editor.insertSpaces": true, - "editor.tabSize": 4 + "editor.tabSize": 4, + "editor.defaultFormatter": "ms-python.black-formatter", + "editor.formatOnSave": true }, "python.testing.pytestArgs": [ "tests" diff --git a/hitfactorpy/parsers/match_report/models.py b/hitfactorpy/parsers/match_report/models.py index df25c56..cef7fd4 100644 --- a/hitfactorpy/parsers/match_report/models.py +++ b/hitfactorpy/parsers/match_report/models.py @@ -27,11 +27,13 @@ class ParsedStage: internal_id: int name: Optional[str] = None + number: Optional[int | str] = None min_rounds: Optional[int] = 0 max_points: Optional[int] = 0 classifier: bool = False classifier_number: Optional[str] = None scoring_type: Scoring = Scoring.COMSTOCK + gun_type: Optional[str] = None @dataclass(frozen=True) diff --git a/hitfactorpy/parsers/match_report/pandas/stage.py b/hitfactorpy/parsers/match_report/pandas/stage.py index 7d487c8..145f133 100644 --- a/hitfactorpy/parsers/match_report/pandas/stage.py +++ b/hitfactorpy/parsers/match_report/pandas/stage.py @@ -1,5 +1,5 @@ import logging -from enum import Enum, unique +from enum import Enum from io import StringIO from typing import Any, Callable, List, Mapping @@ -13,7 +13,6 @@ _logger = logging.getLogger(__name__) -@unique class StageColumnName(str, Enum): """Known competitor column names. May also include dataframe references and custom columns added to the dataframe after parsing.""" @@ -24,6 +23,7 @@ class StageColumnName(str, Enum): CLASSIFIER_NUM = "Classifier_No" STAGE_NAME = "Stage_name" SCORING = "ScoringType" + GUN_TYPE = "Guntype" CSV_CONVERTERS: Mapping[str, Callable[[str], Any]] = { @@ -54,13 +54,15 @@ def parse_stages(stage_csv_text: str) -> List[ParsedStage]: ParsedStage( internal_id=internal_id, name=stage_name, + number=internal_id, scoring_type=scoring, min_rounds=min_rounds, max_points=max_points, classifier=classifier, classifier_number=classifier_number, + gun_type=gun_type, ) - for internal_id, stage_name, scoring, min_rounds, max_points, classifier, classifier_number in zip( + for internal_id, stage_name, scoring, min_rounds, max_points, classifier, classifier_number, gun_type in zip( df.index, df[StageColumnName.STAGE_NAME], df[StageColumnName.SCORING], @@ -68,6 +70,7 @@ def parse_stages(stage_csv_text: str) -> List[ParsedStage]: df[StageColumnName.MAX_POINTS], df[StageColumnName.CLASSIFIER], df[StageColumnName.CLASSIFIER_NUM], + df[StageColumnName.GUN_TYPE], ) ] # TODO: how to handle this edge case? diff --git a/hitfactorpy/parsers/match_report/strict/stage.py b/hitfactorpy/parsers/match_report/strict/stage.py index 3fac315..bcb1671 100644 --- a/hitfactorpy/parsers/match_report/strict/stage.py +++ b/hitfactorpy/parsers/match_report/strict/stage.py @@ -14,6 +14,7 @@ @unique class StageColumn(int, Enum): ID = 0 + GUN_TYPE = 1 MIN_ROUNDS = 2 MAX_POINTS = 3 CLASSIFIER = 4 @@ -53,9 +54,12 @@ def parse_match_report_stage_lines( stages: List[ParsedStage] = [] for line in stage_lines: row = parse_csv_row(line) + stage_number_text = row[StageColumn.ID].strip() + stage_number = int(re.sub(r"[^0-9]", "", stage_number_text)) stage = ParsedStage( - internal_id=int(re.sub(r"[^0-9]", "", row[StageColumn.ID].strip())), + internal_id=stage_number, name=row[StageColumn.STAGE_NAME].strip(), + number=stage_number, min_rounds=parse_int_value(row[StageColumn.MIN_ROUNDS]), max_points=parse_int_value(row[StageColumn.MAX_POINTS]), classifier=row[StageColumn.CLASSIFIER].strip().lower() == "yes", @@ -63,6 +67,7 @@ def parse_match_report_stage_lines( scoring_type=parse_scoring(row[StageColumn.SCORING]) if len(row) > StageColumn.SCORING else Scoring.COMSTOCK, + gun_type=row[StageColumn.GUN_TYPE].strip(), ) stages.append(stage) return stages diff --git a/poetry.lock b/poetry.lock index 1d2bd2a..44e8760 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,54 +2,37 @@ [[package]] name = "anyio" -version = "3.6.2" +version = "4.2.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" category = "main" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.8" files = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, ] [package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] - -[[package]] -name = "attrs" -version = "22.2.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "autoflake" -version = "2.0.1" +version = "2.2.1" description = "Removes unused imports and unused variables" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "autoflake-2.0.1-py3-none-any.whl", hash = "sha256:143b0843667734af53532c443e950c787316b9b1155b2273558260b44836e8e4"}, - {file = "autoflake-2.0.1.tar.gz", hash = "sha256:1ce520131b7f396915242fe91e57221f4d42408529bbe3ae93adafed286591e0"}, + {file = "autoflake-2.2.1-py3-none-any.whl", hash = "sha256:265cde0a43c1f44ecfb4f30d95b0437796759d07be7706a2f70e4719234c0f79"}, + {file = "autoflake-2.2.1.tar.gz", hash = "sha256:62b7b6449a692c3c9b0c916919bbc21648da7281e8506bcf8d3f8280e431ebc1"}, ] [package.dependencies] @@ -93,160 +76,162 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "cachetools" -version = "5.3.0" +version = "5.3.2" description = "Extensible memoizing collections and decorators" category = "dev" 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]] name = "certifi" -version = "2022.12.7" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." category = "main" 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.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] name = "cfgv" -version = "3.3.1" +version = "3.4.0" description = "Validate configuration and produce human readable error messages." category = "dev" 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.1.0" +version = "5.2.0" description = "Universal encoding detector for Python 3" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, - {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, ] [[package]] name = "charset-normalizer" -version = "3.0.1" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "dev" optional = false -python-versions = "*" -files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" category = "main" 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] @@ -254,14 +239,14 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "codecov" -version = "2.1.12" +version = "2.1.13" description = "Hosted coverage reports for GitHub, Bitbucket and Gitlab" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "codecov-2.1.12-py2.py3-none-any.whl", hash = "sha256:585dc217dc3d8185198ceb402f85d5cb5dbfa0c5f350a5abcdf9e347776a5b47"}, - {file = "codecov-2.1.12.tar.gz", hash = "sha256:a0da46bb5025426da895af90938def8ee12d37fcbcbbbc15b6dc64cf7ebc51c1"}, + {file = "codecov-2.1.13-py2.py3-none-any.whl", hash = "sha256:c2ca5e51bba9ebb43644c43d0690148a55086f7f5e6fd36170858fa4206744d5"}, + {file = "codecov-2.1.13.tar.gz", hash = "sha256:2362b685633caeaf45b9951a9b76ce359cd3581dd515b430c6c3f5dfb4d92a8c"}, ] [package.dependencies] @@ -297,63 +282,64 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "coverage" -version = "7.1.0" +version = "7.3.4" description = "Code coverage measurement for Python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "coverage-7.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf"}, - {file = "coverage-7.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c"}, - {file = "coverage-7.1.0-cp310-cp310-win32.whl", hash = "sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352"}, - {file = "coverage-7.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e"}, - {file = "coverage-7.1.0-cp311-cp311-win32.whl", hash = "sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7"}, - {file = "coverage-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c"}, - {file = "coverage-7.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3"}, - {file = "coverage-7.1.0-cp37-cp37m-win32.whl", hash = "sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73"}, - {file = "coverage-7.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0"}, - {file = "coverage-7.1.0-cp38-cp38-win32.whl", hash = "sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab"}, - {file = "coverage-7.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c"}, - {file = "coverage-7.1.0-cp39-cp39-win32.whl", hash = "sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4"}, - {file = "coverage-7.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3"}, - {file = "coverage-7.1.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda"}, - {file = "coverage-7.1.0.tar.gz", hash = "sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265"}, + {file = "coverage-7.3.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aff2bd3d585969cc4486bfc69655e862028b689404563e6b549e6a8244f226df"}, + {file = "coverage-7.3.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4353923f38d752ecfbd3f1f20bf7a3546993ae5ecd7c07fd2f25d40b4e54571"}, + {file = "coverage-7.3.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea473c37872f0159294f7073f3fa72f68b03a129799f3533b2bb44d5e9fa4f82"}, + {file = "coverage-7.3.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5214362abf26e254d749fc0c18af4c57b532a4bfde1a057565616dd3b8d7cc94"}, + {file = "coverage-7.3.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f99b7d3f7a7adfa3d11e3a48d1a91bb65739555dd6a0d3fa68aa5852d962e5b1"}, + {file = "coverage-7.3.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:74397a1263275bea9d736572d4cf338efaade2de9ff759f9c26bcdceb383bb49"}, + {file = "coverage-7.3.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f154bd866318185ef5865ace5be3ac047b6d1cc0aeecf53bf83fe846f4384d5d"}, + {file = "coverage-7.3.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e0d84099ea7cba9ff467f9c6f747e3fc3906e2aadac1ce7b41add72e8d0a3712"}, + {file = "coverage-7.3.4-cp310-cp310-win32.whl", hash = "sha256:3f477fb8a56e0c603587b8278d9dbd32e54bcc2922d62405f65574bd76eba78a"}, + {file = "coverage-7.3.4-cp310-cp310-win_amd64.whl", hash = "sha256:c75738ce13d257efbb6633a049fb2ed8e87e2e6c2e906c52d1093a4d08d67c6b"}, + {file = "coverage-7.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:997aa14b3e014339d8101b9886063c5d06238848905d9ad6c6eabe533440a9a7"}, + {file = "coverage-7.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8a9c5bc5db3eb4cd55ecb8397d8e9b70247904f8eca718cc53c12dcc98e59fc8"}, + {file = "coverage-7.3.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27ee94f088397d1feea3cb524e4313ff0410ead7d968029ecc4bc5a7e1d34fbf"}, + {file = "coverage-7.3.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ce03e25e18dd9bf44723e83bc202114817f3367789052dc9e5b5c79f40cf59d"}, + {file = "coverage-7.3.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85072e99474d894e5df582faec04abe137b28972d5e466999bc64fc37f564a03"}, + {file = "coverage-7.3.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a877810ef918d0d345b783fc569608804f3ed2507bf32f14f652e4eaf5d8f8d0"}, + {file = "coverage-7.3.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9ac17b94ab4ca66cf803f2b22d47e392f0977f9da838bf71d1f0db6c32893cb9"}, + {file = "coverage-7.3.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:36d75ef2acab74dc948d0b537ef021306796da551e8ac8b467810911000af66a"}, + {file = "coverage-7.3.4-cp311-cp311-win32.whl", hash = "sha256:47ee56c2cd445ea35a8cc3ad5c8134cb9bece3a5cb50bb8265514208d0a65928"}, + {file = "coverage-7.3.4-cp311-cp311-win_amd64.whl", hash = "sha256:11ab62d0ce5d9324915726f611f511a761efcca970bd49d876cf831b4de65be5"}, + {file = "coverage-7.3.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:33e63c578f4acce1b6cd292a66bc30164495010f1091d4b7529d014845cd9bee"}, + {file = "coverage-7.3.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:782693b817218169bfeb9b9ba7f4a9f242764e180ac9589b45112571f32a0ba6"}, + {file = "coverage-7.3.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c4277ddaad9293454da19121c59f2d850f16bcb27f71f89a5c4836906eb35ef"}, + {file = "coverage-7.3.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d892a19ae24b9801771a5a989fb3e850bd1ad2e2b6e83e949c65e8f37bc67a1"}, + {file = "coverage-7.3.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3024ec1b3a221bd10b5d87337d0373c2bcaf7afd86d42081afe39b3e1820323b"}, + {file = "coverage-7.3.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1c3e9d2bbd6f3f79cfecd6f20854f4dc0c6e0ec317df2b265266d0dc06535f1"}, + {file = "coverage-7.3.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e91029d7f151d8bf5ab7d8bfe2c3dbefd239759d642b211a677bc0709c9fdb96"}, + {file = "coverage-7.3.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6879fe41c60080aa4bb59703a526c54e0412b77e649a0d06a61782ecf0853ee1"}, + {file = "coverage-7.3.4-cp312-cp312-win32.whl", hash = "sha256:fd2f8a641f8f193968afdc8fd1697e602e199931012b574194052d132a79be13"}, + {file = "coverage-7.3.4-cp312-cp312-win_amd64.whl", hash = "sha256:d1d0ce6c6947a3a4aa5479bebceff2c807b9f3b529b637e2b33dea4468d75fc7"}, + {file = "coverage-7.3.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:36797b3625d1da885b369bdaaa3b0d9fb8865caed3c2b8230afaa6005434aa2f"}, + {file = "coverage-7.3.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfed0ec4b419fbc807dec417c401499ea869436910e1ca524cfb4f81cf3f60e7"}, + {file = "coverage-7.3.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f97ff5a9fc2ca47f3383482858dd2cb8ddbf7514427eecf5aa5f7992d0571429"}, + {file = "coverage-7.3.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:607b6c6b35aa49defaebf4526729bd5238bc36fe3ef1a417d9839e1d96ee1e4c"}, + {file = "coverage-7.3.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8e258dcc335055ab59fe79f1dec217d9fb0cdace103d6b5c6df6b75915e7959"}, + {file = "coverage-7.3.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a02ac7c51819702b384fea5ee033a7c202f732a2a2f1fe6c41e3d4019828c8d3"}, + {file = "coverage-7.3.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b710869a15b8caf02e31d16487a931dbe78335462a122c8603bb9bd401ff6fb2"}, + {file = "coverage-7.3.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c6a23ae9348a7a92e7f750f9b7e828448e428e99c24616dec93a0720342f241d"}, + {file = "coverage-7.3.4-cp38-cp38-win32.whl", hash = "sha256:758ebaf74578b73f727acc4e8ab4b16ab6f22a5ffd7dd254e5946aba42a4ce76"}, + {file = "coverage-7.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:309ed6a559bc942b7cc721f2976326efbfe81fc2b8f601c722bff927328507dc"}, + {file = "coverage-7.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aefbb29dc56317a4fcb2f3857d5bce9b881038ed7e5aa5d3bcab25bd23f57328"}, + {file = "coverage-7.3.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:183c16173a70caf92e2dfcfe7c7a576de6fa9edc4119b8e13f91db7ca33a7923"}, + {file = "coverage-7.3.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a4184dcbe4f98d86470273e758f1d24191ca095412e4335ff27b417291f5964"}, + {file = "coverage-7.3.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93698ac0995516ccdca55342599a1463ed2e2d8942316da31686d4d614597ef9"}, + {file = "coverage-7.3.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb220b3596358a86361139edce40d97da7458412d412e1e10c8e1970ee8c09ab"}, + {file = "coverage-7.3.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5b14abde6f8d969e6b9dd8c7a013d9a2b52af1235fe7bebef25ad5c8f47fa18"}, + {file = "coverage-7.3.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:610afaf929dc0e09a5eef6981edb6a57a46b7eceff151947b836d869d6d567c1"}, + {file = "coverage-7.3.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d6ed790728fb71e6b8247bd28e77e99d0c276dff952389b5388169b8ca7b1c28"}, + {file = "coverage-7.3.4-cp39-cp39-win32.whl", hash = "sha256:c15fdfb141fcf6a900e68bfa35689e1256a670db32b96e7a931cab4a0e1600e5"}, + {file = "coverage-7.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:38d0b307c4d99a7aca4e00cad4311b7c51b7ac38fb7dea2abe0d182dd4008e05"}, + {file = "coverage-7.3.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b1e0f25ae99cf247abfb3f0fac7ae25739e4cd96bf1afa3537827c576b4847e5"}, + {file = "coverage-7.3.4.tar.gz", hash = "sha256:020d56d2da5bc22a0e00a5b0d54597ee91ad72446fa4cf1b97c35022f6b6dbf0"}, ] [package.dependencies] @@ -394,32 +380,31 @@ tomli = {version = ">=2.0.1,<3.0.0", markers = "python_version < \"3.11\""} [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.8" description = "Distribution utilities" category = "dev" 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.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] [[package]] name = "dnspython" -version = "2.3.0" +version = "2.4.2" description = "DNS toolkit" category = "main" optional = false -python-versions = ">=3.7,<4.0" +python-versions = ">=3.8,<4.0" files = [ - {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"}, - {file = "dnspython-2.3.0.tar.gz", hash = "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9"}, + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, ] [package.extras] -curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] -dnssec = ["cryptography (>=2.6,<40.0)"] -doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.11.0)"] +dnssec = ["cryptography (>=2.6,<42.0)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] doq = ["aioquic (>=0.9.20)"] idna = ["idna (>=2.1,<4.0)"] trio = ["trio (>=0.14,<0.23)"] @@ -427,30 +412,30 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"] [[package]] name = "email-validator" -version = "1.3.1" +version = "2.1.0.post1" description = "A robust email address syntax and deliverability validation library." category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "email_validator-1.3.1-py2.py3-none-any.whl", hash = "sha256:49a72f5fa6ed26be1c964f0567d931d10bf3fdeeacdf97bc26ef1cd2a44e0bda"}, - {file = "email_validator-1.3.1.tar.gz", hash = "sha256:d178c5c6fa6c6824e9b04f199cf23e79ac15756786573c190d2ad13089411ad2"}, + {file = "email_validator-2.1.0.post1-py3-none-any.whl", hash = "sha256:c973053efbeddfef924dc0bd93f6e77a1ea7ee0fce935aea7103c7a3d6d2d637"}, + {file = "email_validator-2.1.0.post1.tar.gz", hash = "sha256:a4b0bd1cf55f073b924258d19321b1f3aa74b4b5a71a42c305575dba920e1a44"}, ] [package.dependencies] -dnspython = ">=1.15.0" +dnspython = ">=2.0.0" idna = ">=2.0.0" [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] @@ -458,36 +443,37 @@ test = ["pytest (>=6)"] [[package]] name = "filelock" -version = "3.9.0" +version = "3.13.1" description = "A platform independent file lock." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, - {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, + {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 (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "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 = "6.0.0" +version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" category = "dev" optional = false python-versions = ">=3.8.1" files = [ - {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, - {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, + {file = "flake8-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.10.0,<2.11.0" -pyflakes = ">=3.0.0,<3.1.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" [[package]] name = "ghp-import" @@ -509,22 +495,19 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "griffe" -version = "0.25.5" +version = "0.38.1" 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." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "griffe-0.25.5-py3-none-any.whl", hash = "sha256:1fb9edff48e66d4873014a2ebf21aca5f271d0006a4c937826e3cf592ffb3706"}, - {file = "griffe-0.25.5.tar.gz", hash = "sha256:11ea3403ef0560a1cbcf7f302eb5d21cf4c1d8ed3f8a16a75aa9f6f458caf3f1"}, + {file = "griffe-0.38.1-py3-none-any.whl", hash = "sha256:334c79d3b5964ade65c05dfcaf53518c576dedd387aaba5c9fd71212f34f1483"}, + {file = "griffe-0.38.1.tar.gz", hash = "sha256:bd68d7da7f3d87bc57eb9962b250db123efd9bbcc06c11c1a91b6e583b2a9361"}, ] [package.dependencies] colorama = ">=0.4" -[package.extras] -async = ["aiofiles (>=0.7,<1.0)"] - [[package]] name = "h11" version = "0.14.0" @@ -626,14 +609,14 @@ files = [ [[package]] name = "identify" -version = "2.5.18" +version = "2.5.33" description = "File identification library for Python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"}, - {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"}, + {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, + {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, ] [package.extras] @@ -641,14 +624,14 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] @@ -665,21 +648,18 @@ files = [ [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." category = "dev" 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 = "jinja2" @@ -701,17 +681,18 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.3.7" -description = "Python implementation of Markdown." +version = "3.5.1" +description = "Python implementation of John Gruber's Markdown." category = "dev" 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]] @@ -734,62 +715,72 @@ tests = ["pytest"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "dev" 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]] @@ -835,14 +826,14 @@ files = [ [[package]] name = "mkdocs" -version = "1.4.2" +version = "1.5.3" description = "Project documentation with Markdown." category = "dev" 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] @@ -850,27 +841,30 @@ 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-autorefs" -version = "0.4.1" +version = "0.5.0" description = "Automatically link across pages in MkDocs." category = "dev" 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] @@ -900,14 +894,14 @@ requests = ">=2.26" [[package]] name = "mkdocs-material-extensions" -version = "1.1.1" +version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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"}, + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] [[package]] @@ -1017,14 +1011,14 @@ files = [ [[package]] name = "nodeenv" -version = "1.7.0" +version = "1.8.0" description = "Node.js virtual environment builder" category = "dev" 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] @@ -1032,52 +1026,60 @@ setuptools = "*" [[package]] name = "numpy" -version = "1.24.2" +version = "1.26.2" description = "Fundamental package for array computing in Python" category = "main" 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]] name = "packaging" -version = "23.0" +version = "23.2" description = "Core utilities for Python packages" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -1130,14 +1132,14 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] [[package]] name = "pandas-stubs" -version = "1.5.3.230214" +version = "1.5.3.230321" description = "Type annotations for pandas" category = "dev" optional = false python-versions = ">=3.8,<3.12" files = [ - {file = "pandas_stubs-1.5.3.230214-py3-none-any.whl", hash = "sha256:be0f3056fef543c37248951a9868cba77e17ace3b815b0a23c72ed2ec13fbd9e"}, - {file = "pandas_stubs-1.5.3.230214.tar.gz", hash = "sha256:5fc1fc9c470d5332f9025a53ecab4c36cb80b2c52a596d597d6c5e33b4078153"}, + {file = "pandas_stubs-1.5.3.230321-py3-none-any.whl", hash = "sha256:4bf36b3071dd55f0e558ac8efe07676a120f2ed89e7a3df0fb78ddf2733bf247"}, + {file = "pandas_stubs-1.5.3.230321.tar.gz", hash = "sha256:2fa860df9e6058e9f0d2c09bc711c09abb8f0516eee7f0b9f9950d29b835fc6f"}, ] [package.dependencies] @@ -1145,42 +1147,42 @@ types-pytz = ">=2022.1.1" [[package]] name = "pathspec" -version = "0.11.0" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "platformdirs" -version = "3.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, - {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [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.2.2)", "pytest (>=7.2.1)", "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 = "pluggy" -version = "1.0.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" category = "dev" 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] @@ -1208,60 +1210,60 @@ virtualenv = ">=20.10.0" [[package]] name = "pycodestyle" -version = "2.10.0" +version = "2.11.1" description = "Python style guide checker" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, - {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, ] [[package]] name = "pydantic" -version = "1.10.5" +version = "1.10.13" description = "Data validation and settings management using python type hints" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb"}, - {file = "pydantic-1.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a"}, - {file = "pydantic-1.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a"}, - {file = "pydantic-1.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449"}, - {file = "pydantic-1.10.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15"}, - {file = "pydantic-1.10.5-cp37-cp37m-win_amd64.whl", hash = "sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718"}, - {file = "pydantic-1.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e"}, - {file = "pydantic-1.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594"}, - {file = "pydantic-1.10.5-py3-none-any.whl", hash = "sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28"}, - {file = "pydantic-1.10.5.tar.gz", hash = "sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, ] [package.dependencies] @@ -1274,80 +1276,84 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pyflakes" -version = "3.0.1" +version = "3.1.0" description = "passive checker of Python programs" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, - {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, + {file = "pyflakes-3.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.14.0" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "9.9.2" +version = "10.5" description = "Extension pack for Python Markdown." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-9.9.2-py3-none-any.whl", hash = "sha256:c3d804eb4a42b85bafb5f36436342a5ad38df03878bb24db8855a4aa8b08b765"}, - {file = "pymdown_extensions-9.9.2.tar.gz", hash = "sha256:ebb33069bafcb64d5f5988043331d4ea4929325dc678a6bcf247ddfcf96499f8"}, + {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 = "pyproject-api" -version = "1.5.0" +version = "1.6.1" description = "API to interact with the python pyproject.toml based projects" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyproject_api-1.5.0-py3-none-any.whl", hash = "sha256:4c111277dfb96bcd562c6245428f27250b794bfe3e210b8714c4f893952f2c17"}, - {file = "pyproject_api-1.5.0.tar.gz", hash = "sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe"}, + {file = "pyproject_api-1.6.1-py3-none-any.whl", hash = "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675"}, + {file = "pyproject_api-1.6.1.tar.gz", hash = "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538"}, ] [package.dependencies] -packaging = ">=21.3" +packaging = ">=23.1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2022.9.29)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "importlib-metadata (>=5.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "virtualenv (>=20.17)", "wheel (>=0.38.4)"] +docs = ["furo (>=2023.8.19)", "sphinx (<7.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "setuptools (>=68.1.2)", "wheel (>=0.41.2)"] [[package]] name = "pytest" -version = "7.2.1" +version = "7.4.3" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, - {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" @@ -1356,18 +1362,18 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "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." category = "dev" 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] @@ -1394,64 +1400,74 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2022.7.1" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" category = "dev" 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"}, + {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]] @@ -1483,21 +1499,21 @@ files = [ [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." category = "dev" 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)"] @@ -1542,31 +1558,31 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "setuptools" -version = "67.3.2" +version = "69.0.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-67.3.2-py3-none-any.whl", hash = "sha256:bb6d8e508de562768f2027902929f8523932fcd1fb784e6d573d2cafac995a48"}, - {file = "setuptools-67.3.2.tar.gz", hash = "sha256:95f00380ef2ffa41d9bba85d95b27689d923c93dfbafed4aecd7cf988a25e012"}, + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, ] [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 (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "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 = "shellingham" -version = "1.5.0.post1" +version = "1.5.4" description = "Tool to Detect Surrounding Shell" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "shellingham-1.5.0.post1-py2.py3-none-any.whl", hash = "sha256:368bf8c00754fd4f55afb7bbb86e272df77e4dc76ac29dbcbb81a59e9fc15744"}, - {file = "shellingham-1.5.0.post1.tar.gz", hash = "sha256:823bc5fb5c34d60f285b624e7264f4dda254bc803a3774a147bf99c0e3004a28"}, + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, ] [[package]] @@ -1607,31 +1623,31 @@ files = [ [[package]] name = "tox" -version = "4.4.5" +version = "4.11.4" description = "tox is a generic virtualenv management and test command line tool" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tox-4.4.5-py3-none-any.whl", hash = "sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425"}, - {file = "tox-4.4.5.tar.gz", hash = "sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90"}, + {file = "tox-4.11.4-py3-none-any.whl", hash = "sha256:2adb83d68f27116812b69aa36676a8d6a52249cb0d173649de0e7d0c2e3e7229"}, + {file = "tox-4.11.4.tar.gz", hash = "sha256:73a7240778fabf305aeb05ab8ea26e575e042ab5a18d71d0ed13e343a51d6ce1"}, ] [package.dependencies] -cachetools = ">=5.3" -chardet = ">=5.1" +cachetools = ">=5.3.1" +chardet = ">=5.2" colorama = ">=0.4.6" -filelock = ">=3.9" -packaging = ">=23" -platformdirs = ">=2.6.2" -pluggy = ">=1" -pyproject-api = ">=1.5" +filelock = ">=3.12.3" +packaging = ">=23.1" +platformdirs = ">=3.10" +pluggy = ">=1.3" +pyproject-api = ">=1.6.1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} -virtualenv = ">=20.17.1" +virtualenv = ">=20.24.3" [package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=6.1.3)", "sphinx-argparse-cli (>=1.11)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)", "sphinx-copybutton (>=0.5.1)", "sphinx-inline-tabs (>=2022.1.2b11)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -testing = ["build[virtualenv] (>=0.10)", "covdefaults (>=2.2.2)", "devpi-process (>=0.3)", "diff-cover (>=7.4)", "distlib (>=0.3.6)", "flaky (>=3.7)", "hatch-vcs (>=0.3)", "hatchling (>=1.12.2)", "psutil (>=5.9.4)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-xdist (>=3.1)", "re-assert (>=1.1)", "time-machine (>=2.9)", "wheel (>=0.38.4)"] +docs = ["furo (>=2023.8.19)", "sphinx (>=7.2.4)", "sphinx-argparse-cli (>=1.11.1)", "sphinx-autodoc-typehints (>=1.24)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +testing = ["build[virtualenv] (>=0.10)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.1.1)", "devpi-process (>=1)", "diff-cover (>=7.7)", "distlib (>=0.3.7)", "flaky (>=3.7)", "hatch-vcs (>=0.3)", "hatchling (>=1.18)", "psutil (>=5.9.5)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-xdist (>=3.3.1)", "re-assert (>=1.1)", "time-machine (>=2.12)", "wheel (>=0.41.2)"] [[package]] name = "typer" @@ -1659,102 +1675,101 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6. [[package]] name = "types-pytz" -version = "2022.7.1.0" +version = "2023.3.1.1" description = "Typing stubs for pytz" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-pytz-2022.7.1.0.tar.gz", hash = "sha256:918f9c3e7a950ba7e7d6f84b18a7cacabc8886cb7125fb1927ff1c752b4b59de"}, - {file = "types_pytz-2022.7.1.0-py3-none-any.whl", hash = "sha256:10ec7d009a02340f1cecd654ac03f0c29b6088a03b63d164401fc52df45936b2"}, + {file = "types-pytz-2023.3.1.1.tar.gz", hash = "sha256:cc23d0192cd49c8f6bba44ee0c81e4586a8f30204970fc0894d209a6b08dab9a"}, + {file = "types_pytz-2023.3.1.1-py3-none-any.whl", hash = "sha256:1999a123a3dc0e39a2ef6d19f3f8584211de9e6a77fe7a0259f04a524e90a5cf"}, ] [[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+" category = "main" 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 = "urllib3" -version = "1.26.14" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.8" files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [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)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.19.0" +version = "20.25.0" description = "Virtual Python Environment builder" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.19.0-py3-none-any.whl", hash = "sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1"}, - {file = "virtualenv-20.19.0.tar.gz", hash = "sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590"}, + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, ] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" [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)"] +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 = "watchdog" -version = "2.2.1" +version = "3.0.0" description = "Filesystem events monitoring" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a09483249d25cbdb4c268e020cb861c51baab2d1affd9a6affc68ffe6a231260"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5100eae58133355d3ca6c1083a33b81355c4f452afa474c2633bd2fbbba398b3"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e618a4863726bc7a3c64f95c218437f3349fb9d909eb9ea3a1ed3b567417c661"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:102a60093090fc3ff76c983367b19849b7cc24ec414a43c0333680106e62aae1"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:748ca797ff59962e83cc8e4b233f87113f3cf247c23e6be58b8a2885c7337aa3"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ccd8d84b9490a82b51b230740468116b8205822ea5fdc700a553d92661253a3"}, - {file = "watchdog-2.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e01d699cd260d59b84da6bda019dce0a3353e3fcc774408ae767fe88ee096b7"}, - {file = "watchdog-2.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8586d98c494690482c963ffb24c49bf9c8c2fe0589cec4dc2f753b78d1ec301d"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:adaf2ece15f3afa33a6b45f76b333a7da9256e1360003032524d61bdb4c422ae"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83a7cead445008e880dbde833cb9e5cc7b9a0958edb697a96b936621975f15b9"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8ac23ff2c2df4471a61af6490f847633024e5aa120567e08d07af5718c9d092"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d0f29fd9f3f149a5277929de33b4f121a04cf84bb494634707cfa8ea8ae106a8"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:967636031fa4c4955f0f3f22da3c5c418aa65d50908d31b73b3b3ffd66d60640"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96cbeb494e6cbe3ae6aacc430e678ce4b4dd3ae5125035f72b6eb4e5e9eb4f4e"}, - {file = "watchdog-2.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61fdb8e9c57baf625e27e1420e7ca17f7d2023929cd0065eb79c83da1dfbeacd"}, - {file = "watchdog-2.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb5ecc332112017fbdb19ede78d92e29a8165c46b68a0b8ccbd0a154f196d5e"}, - {file = "watchdog-2.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a480d122740debf0afac4ddd583c6c0bb519c24f817b42ed6f850e2f6f9d64a8"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:978a1aed55de0b807913b7482d09943b23a2d634040b112bdf31811a422f6344"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:8c28c23972ec9c524967895ccb1954bc6f6d4a557d36e681a36e84368660c4ce"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_i686.whl", hash = "sha256:c27d8c1535fd4474e40a4b5e01f4ba6720bac58e6751c667895cbc5c8a7af33c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d6b87477752bd86ac5392ecb9eeed92b416898c30bd40c7e2dd03c3146105646"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cece1aa596027ff56369f0b50a9de209920e1df9ac6d02c7f9e5d8162eb4f02b"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:8b5cde14e5c72b2df5d074774bdff69e9b55da77e102a91f36ef26ca35f9819c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e038be858425c4f621900b8ff1a3a1330d9edcfeaa1c0468aeb7e330fb87693e"}, - {file = "watchdog-2.2.1-py3-none-win32.whl", hash = "sha256:bc43c1b24d2f86b6e1cc15f68635a959388219426109233e606517ff7d0a5a73"}, - {file = "watchdog-2.2.1-py3-none-win_amd64.whl", hash = "sha256:17f1708f7410af92ddf591e94ae71a27a13974559e72f7e9fde3ec174b26ba2e"}, - {file = "watchdog-2.2.1-py3-none-win_ia64.whl", hash = "sha256:195ab1d9d611a4c1e5311cbf42273bc541e18ea8c32712f2fb703cfc6ff006f9"}, - {file = "watchdog-2.2.1.tar.gz", hash = "sha256:cdcc23c9528601a8a293eb4369cbd14f6b4f34f07ae8769421252e9c22718b6f"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, ] [package.extras] diff --git a/pyproject.toml b/pyproject.toml index bc1b0c5..3713f71 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "hitfactorpy" -version = "1.0.0" +version = "1.0.1" description = "Python tools for parsing and analyzing practical match reports" repository = "https://github.com/cahna/hitfactorpy" documentation = "https://cahna.github.io/hitfactorpy/" diff --git a/tests/conftest.py b/tests/conftest.py index e69de29..82c27e5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -0,0 +1,24 @@ +from pathlib import Path +from typing import Callable, Union + +import pytest + + +@pytest.fixture +def mock_data_dir(request: pytest.FixtureRequest) -> Path: + """Path to root of mock data directory.""" + data_dir = Path(request.config.rootpath) / "tests" / "mock_data" + assert data_dir.is_dir() + return data_dir + + +@pytest.fixture +def mock_data_file(mock_data_dir: Path) -> Callable[[Union[str, Path]], Path]: + """Provides a function to get the Path to a file in the tests data directory.""" + + def get_data_file(filename: str | Path) -> Path: + fpath = mock_data_dir / filename + assert fpath.is_file() + return fpath + + return get_data_file diff --git a/tests/mock_data/__init__.py b/tests/mock_data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/mock_data/match_reports/README.md b/tests/mock_data/match_reports/README.md new file mode 100644 index 0000000..1c3a26e --- /dev/null +++ b/tests/mock_data/match_reports/README.md @@ -0,0 +1,12 @@ +# Mock match reports for tests + +The following pattern(s) *must* be followed for automatic discovery and testing. See `./__init__.py` for details. + +## Add a match report for testing + +1. Add the report text file to `tests/mock_data/match_reports` (ex: `report_foo.txt`) + - The stem of the filename must conform to python source file naming requirements (rule of thumb: `^[a-z][_a-z0-9]*\.txt$`) + - Sanitize competitor names +2. Add a corresponding python source file of the same name (ex: `report_foo.py`) that exports a function named `assert_match_report` + - the exported function just be of type `Callable[[ParsedMatchReport], None]` + - it should assert the expected state of the corresponding match report diff --git a/tests/mock_data/match_reports/__init__.py b/tests/mock_data/match_reports/__init__.py new file mode 100644 index 0000000..2063238 --- /dev/null +++ b/tests/mock_data/match_reports/__init__.py @@ -0,0 +1,16 @@ +import importlib +from pathlib import Path +from typing import Callable, Dict + +from hitfactorpy.parsers.match_report.models import ParsedMatchReport + +AssertMatchReportCallable = Callable[[ParsedMatchReport], None] + +DIRECTORY = Path(__file__).resolve().parent +REPORT_FILES = list(DIRECTORY.glob("*.txt")) +BY_FILENAME = {str(f).split("tests/mock_data/")[-1]: f.read_text() for f in REPORT_FILES} +VALIDATORS: Dict[str, AssertMatchReportCallable] = { + fname: importlib.import_module(f".{Path(fname).stem}", package="tests.mock_data.match_reports").assert_match_report + # fname: __import__(f".{Path(fname).stem}", globals(), locals(), [], 1).assert_match_report + for fname in BY_FILENAME.keys() +} diff --git a/tests/mock_data/match_reports/pcsl_1gun_20231129.py b/tests/mock_data/match_reports/pcsl_1gun_20231129.py new file mode 100644 index 0000000..7f152ff --- /dev/null +++ b/tests/mock_data/match_reports/pcsl_1gun_20231129.py @@ -0,0 +1,91 @@ +import datetime + +from pytest import approx + +from hitfactorpy.enums import Classification, Division, PowerFactor, Scoring +from hitfactorpy.parsers.match_report.models import ParsedMatchReport + + +def assert_pcsl_match_report_1gun_20231129(report: ParsedMatchReport): + """Assert the expected state of the 1-gun 20231129 report""" + assert report + assert report.name == "matchName" + assert report.match_level == 1 + assert report.platform == "IOS" + assert report.ps_product == "PractiScore (iOS)" + assert report.ps_version == "1.682" + assert report.club_name == "clubName" + assert report.club_code == "clubCode" + assert report.region == "USPSA" + assert report.raw_date == "11/29/2023" + assert report.date == datetime.datetime(2023, 11, 29, 0, 0) + assert report.stages + assert len(report.stages) == 3 + assert report.competitors + assert len(report.competitors) == 5 + assert report.stage_scores + assert len(report.stage_scores) == 13 + + # Verify a stage + assert report.stages[0].name == "Surefire" + assert report.stages[0].min_rounds == 30 + assert report.stages[0].max_points == 150 + assert report.stages[0].classifier is False + assert report.stages[0].classifier_number in ["nan", "", None] + assert report.stages[0].internal_id == 1 + assert report.stages[0].scoring_type == Scoring.COMSTOCK + assert report.stages[0].number == 1 + assert report.stages[0].gun_type == "Pistol" + + # Verify a competitor + assert report.competitors[0].internal_id == 1 + assert report.competitors[0].first_name == "Person" + assert report.competitors[0].last_name == "A" + assert report.competitors[0].classification == Classification.UNKNOWN + assert report.competitors[0].division == Division.UNKNOWN + assert report.competitors[0].member_number == "NUMBER1" + assert report.competitors[0].power_factor == PowerFactor.MINOR + assert report.competitors[0].dq is False + assert report.competitors[0].reentry is False + + # Verify DQ'ed competitor + assert report.competitors[4].dq is True + + # Verify a stage score with a DQ + assert report.stage_scores[-1].stage_id == 3 + assert report.stage_scores[-1].competitor_id == 4 + assert report.stage_scores[-1].a == 9 + assert report.stage_scores[-1].b == 0 + assert report.stage_scores[-1].c == 5 + assert report.stage_scores[-1].d == 0 + assert report.stage_scores[-1].m == 0 + assert report.stage_scores[-1].ns == 0 + assert report.stage_scores[-1].npm == 0 + assert report.stage_scores[-1].procedural == 0 + assert report.stage_scores[-1].late_shot == 0 + assert report.stage_scores[-1].extra_shot == 0 + assert report.stage_scores[-1].extra_hit == 0 + assert report.stage_scores[-1].other_penalty == 0 + assert report.stage_scores[-1].t1 == approx(9.43) + assert report.stage_scores[-1].t2 == approx(0) + assert report.stage_scores[-1].t3 == approx(0) + assert report.stage_scores[-1].t4 == approx(0) + assert report.stage_scores[-1].t5 == approx(0) + assert report.stage_scores[-1].time == approx(9.43) + assert report.stage_scores[-1].raw_points == approx(60) + assert report.stage_scores[-1].penalty_points == approx(0) + assert report.stage_scores[-1].total_points == approx(60) + assert report.stage_scores[-1].hit_factor == approx(0) + assert report.stage_scores[-1].stage_points == approx(0) + assert report.stage_scores[-1].stage_place == 4 + assert report.stage_scores[-1].dq is True + assert report.stage_scores[-1].dnf is False + assert report.stage_scores[-1].stage_power_factor is None + + # Verify DQ'ed competitor exists in competitors list, and was DQ'ed + dqed_competitor = next((c for c in report.competitors if c.internal_id == 4), None) + assert dqed_competitor + assert dqed_competitor.dq is True + + +assert_match_report = assert_pcsl_match_report_1gun_20231129 diff --git a/tests/mock_data/match_reports/pcsl_1gun_20231129.txt b/tests/mock_data/match_reports/pcsl_1gun_20231129.txt new file mode 100644 index 0000000..e895525 --- /dev/null +++ b/tests/mock_data/match_reports/pcsl_1gun_20231129.txt @@ -0,0 +1,40 @@ +$PRACTISCORE 1.682 RESULTS +$INFO Region:USPSA +$INFO PLATFORM IOS +$INFO PractiScore_Product: PractiScore (iOS) +$INFO PractiScore_Version:1.682 +$INFO Match name:matchName +$INFO Match date:11/29/2023 +$INFO Club Name:clubName +$INFO Club Code:clubCode +$INFO Multigun:0 +$INFO Scoring:0 +$INFO Classifiers:2 +$INFO Match Level: Level I +Z 3.0 +A matchName,asdf,11/29/2023 +D Comp,USPSA,FirstName,LastName,DQPistol,DQRifle,DQShotgun,Reentry,Class,Division,Match Points,Place Overall,Power Factor,Shotgun Division,Shotgun Power Factor,Shotgun Place Overall,Shotgun Entered,Shotgun Match Points,Rifle Division,Rifle Power Factor,Rifle Place Overall,Rifle Entered,Rifle Match Points,Aggregate,Aggregate Division,Aggregate Pistol Percent,Aggregate Pistol Points,Aggregate Place,Aggregate Rifle Percent,Aggregate Rifle Points,Aggregate Shotgun Percent,Aggregate Shotgun Points,Aggregate Total,Female,Age,Law,Military +E 1,number1,Person,A,No,No,No,No,Standard Competitor,1-Gun Competition,1178.1635,1,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +E 2,number1,Person,B,No,No,No,No,Standard Competitor,1-Gun PCC,1201.9397,1,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,Yes +E 3,number1,Person,C,No,No,No,No,Standard Competitor,1-Gun Practical Optics,1178.4027,1,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 4,number1,Person,D,Yes,No,No,No,Standard Competitor,1-Gun Practical Irons,1169.5491,2,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 5,number1,Person,E,Yes,No,No,No,Standard Competitor,1-Gun ACP,1169.5491,2,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +F Number,Guntype,Minimum Rounds,Maximum Points,Classifier,Classifier_No,Stage_name,ScoringType,TimesRun +G 1,Pistol,30,150,No,,Surefire,Comstock,1 +G 2,Pistol,28,140,Yes,24-F1,24-F1 Maxcellerator,Comstock,2 +G 3,Pistol,14,70,Yes,24-D1,24-D1 Momentum,Comstock,1 +H Gun,Stage,Comp,DQ,DNF,A,B,C,D,Miss,No Shoot,Procedural,Double Poppers,Double Popper Miss,Late Shot,Extra Shot,Extra Hit,No Penalty Miss,Additional Penalty,Total Penalty,T1,T2,T3,T4,T5,Time,Raw Points,Total Points,Hit Factor,Stage Points,Stage Place,Stage Power Factor +I Pistol,1,1,No,No,26,0,2,1,1,0,0,6,0,0,0,0,0,0,10,36.67,0,0,0,0,36.67,137,127,3.4633,129.8283,3, +I Pistol,1,2,No,No,18,0,9,2,1,0,0,6,0,0,0,0,0,0,10,29.19,0,0,0,0,29.19,119,109,3.7342,139.9835,2, +I Pistol,1,3,No,No,24,0,3,1,2,1,0,6,0,0,0,0,0,0,30,31.09,0,0,0,0,31.09,130,100,3.2165,120.5765,4, +I Pistol,1,4,No,No,24,0,3,1,2,1,0,6,0,0,0,0,0,0,30,31.09,0,0,0,0,31.09,130,100,3.2165,120.5765,4, +I Pistol,1,5,Yes,No,24,0,3,1,2,1,0,6,0,0,0,0,0,0,30,31.09,0,0,0,0,31.09,130,100,0.0000,0.0000,4, +I Pistol,2,1,No,No,22,0,1,0,0,0,0,0,0,0,0,0,5,0,0,10.03,9.62,0,0,0,19.65,113,113,5.7506,140.0000,1, +I Pistol,2,2,No,No,8,0,11,0,0,0,0,0,0,0,0,0,9,0,0,7.75,8.55,0,0,0,16.30,73,73,4.4785,109.0304,2, +I Pistol,2,3,No,No,8,0,11,0,0,0,0,0,0,0,0,0,9,0,0,7.75,8.55,0,0,0,16.30,73,73,4.4785,109.0304,2, +I Pistol,2,5,No,No,8,0,11,0,0,0,0,0,0,0,0,0,9,0,0,7.75,8.55,0,0,0,16.30,73,73,4.4785,109.0304,2, +I Pistol,3,1,No,No,13,0,1,0,0,0,0,0,0,0,0,0,0,0,0,9.26,0,0,0,0,9.26,68,68,7.3434,60.7301,3, +I Pistol,3,2,No,No,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8.27,0,0,0,0,8.27,70,70,8.4643,70.0000,1, +I Pistol,3,3,No,No,9,0,5,0,0,0,0,0,0,0,0,0,0,0,0,9.43,0,0,0,0,9.43,60,60,6.3627,52.6197,4, +I Pistol,3,4,Yes,No,9,0,5,0,0,0,0,0,0,0,0,0,0,0,0,9.43,0,0,0,0,9.43,60,60,0.0000,0.0000,4, +$END \ No newline at end of file diff --git a/tests/mock_data/match_reports/pcsl_2gun_20231129.py b/tests/mock_data/match_reports/pcsl_2gun_20231129.py new file mode 100644 index 0000000..060b0f3 --- /dev/null +++ b/tests/mock_data/match_reports/pcsl_2gun_20231129.py @@ -0,0 +1,86 @@ +import datetime + +from pytest import approx + +from hitfactorpy.enums import Classification, Division, PowerFactor, Scoring +from hitfactorpy.parsers.match_report.models import ParsedMatchReport + + +def assert_pcsl_match_report_2gun_20231129(report: ParsedMatchReport): + """Assert the expected state of the 2-gun 20231129 report""" + assert report + assert report.name == "matchName" + assert report.match_level == 1 + assert report.platform == "IOS" + assert report.ps_product == "PractiScore (iOS)" + assert report.ps_version == "1.682" + assert report.club_name == "clubName" + assert report.club_code == "clubCode" + assert report.region == "USPSA" + assert report.raw_date == "11/29/2023" + assert report.date == datetime.datetime(2023, 11, 29, 0, 0) + assert report.stages + assert len(report.stages) == 3 + assert report.competitors + assert len(report.competitors) == 3 + assert report.stage_scores + assert len(report.stage_scores) == 8 + + # Verify a stage + assert report.stages[0].name == "Surefire" + assert report.stages[0].min_rounds == 54 + assert report.stages[0].max_points == 270 + assert report.stages[0].classifier is False + assert report.stages[0].classifier_number in ["nan", "", None] + assert report.stages[0].internal_id == 1 + assert report.stages[0].scoring_type == Scoring.COMSTOCK + assert report.stages[0].number == 1 + assert report.stages[0].gun_type == "Pistol" + + # Verify a competitor + assert report.competitors[1].internal_id == 2 + assert report.competitors[1].first_name == "Person" + assert report.competitors[1].last_name == "B" + assert report.competitors[1].classification == Classification.UNKNOWN + assert report.competitors[1].division == Division.UNKNOWN + assert report.competitors[1].member_number == "NUMBER2" + assert report.competitors[1].power_factor == PowerFactor.MINOR + assert report.competitors[1].dq is False + assert report.competitors[1].reentry is False + + # Verify no DQ'ed competitors exist in this report + assert report.competitors[-1].dq is True + + # Verify a stage score + assert report.stage_scores[1].stage_id == 1 + assert report.stage_scores[1].competitor_id == 2 + assert report.stage_scores[1].a == 45 + assert report.stage_scores[1].b == 0 + assert report.stage_scores[1].c == 9 + assert report.stage_scores[1].d == 0 + assert report.stage_scores[1].m == 0 + assert report.stage_scores[1].ns == 0 + assert report.stage_scores[1].npm == 0 + assert report.stage_scores[1].procedural == 0 + assert report.stage_scores[1].late_shot == 0 + assert report.stage_scores[1].extra_shot == 0 + assert report.stage_scores[1].extra_hit == 0 + assert report.stage_scores[1].other_penalty == 0 + assert report.stage_scores[1].t1 == approx(49.21) + assert report.stage_scores[1].t2 == approx(0) + assert report.stage_scores[1].t3 == approx(0) + assert report.stage_scores[1].t4 == approx(0) + assert report.stage_scores[1].t5 == approx(0) + assert report.stage_scores[1].time == approx(49.21) + assert report.stage_scores[1].raw_points == approx(252) + assert report.stage_scores[1].penalty_points == approx(0) + assert report.stage_scores[1].total_points == approx(252) + assert report.stage_scores[1].hit_factor == approx(5.1209) + assert report.stage_scores[1].stage_points == approx(248.82) + assert report.stage_scores[1].stage_place == 2 + assert report.stage_scores[1].dq is False + assert report.stage_scores[1].dnf is False + assert report.stage_scores[1].stage_power_factor is None + + +assert_match_report = assert_pcsl_match_report_2gun_20231129 diff --git a/tests/mock_data/match_reports/pcsl_2gun_20231129.txt b/tests/mock_data/match_reports/pcsl_2gun_20231129.txt new file mode 100644 index 0000000..75ed193 --- /dev/null +++ b/tests/mock_data/match_reports/pcsl_2gun_20231129.txt @@ -0,0 +1,33 @@ +$PRACTISCORE 1.682 RESULTS +$INFO Region:USPSA +$INFO PLATFORM IOS +$INFO PractiScore_Product: PractiScore (iOS) +$INFO PractiScore_Version:1.682 +$INFO Match name:matchName +$INFO Match date:11/29/2023 +$INFO Club Name:clubName +$INFO Club Code:clubCode +$INFO Multigun:0 +$INFO Scoring:0 +$INFO Classifiers:2 +$INFO Match Level: Level I +Z 3.0 +A matchName,asdf,11/29/2023 +D Comp,USPSA,FirstName,LastName,DQPistol,DQRifle,DQShotgun,Reentry,Class,Division,Match Points,Place Overall,Power Factor,Shotgun Division,Shotgun Power Factor,Shotgun Place Overall,Shotgun Entered,Shotgun Match Points,Rifle Division,Rifle Power Factor,Rifle Place Overall,Rifle Entered,Rifle Match Points,Aggregate,Aggregate Division,Aggregate Pistol Percent,Aggregate Pistol Points,Aggregate Place,Aggregate Rifle Percent,Aggregate Rifle Points,Aggregate Shotgun Percent,Aggregate Shotgun Points,Aggregate Total,Female,Age,Law,Military +E 1,number1,Person,A,No,No,No,No,Standard Competitor,2-Gun Competition,2213.6811,1,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 2,number2,Person,B,No,No,No,No,Standard Competitor,2-Gun Practical,1627.4923,8,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 3,number3,Person,C,Yes,No,No,No,Standard Competitor,2-Gun Practical,0.0000,70,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +F Number,Guntype,Minimum Rounds,Maximum Points,Classifier,Classifier_No,Stage_name,ScoringType,TimesRun +G 1,Pistol,54,270,No,,Surefire,Comstock,1 +G 2,Pistol,48,240,Yes,24-F1,24-F1 Maxcellerator,Comstock,3 +G 3,Pistol,28,140,Yes,24-D1,24-D1 Momentum,Comstock,1 +H Gun,Stage,Comp,DQ,DNF,A,B,C,D,Miss,No Shoot,Procedural,Double Poppers,Double Popper Miss,Late Shot,Extra Shot,Extra Hit,No Penalty Miss,Additional Penalty,Total Penalty,T1,T2,T3,T4,T5,Time,Raw Points,Total Points,Hit Factor,Stage Points,Stage Place,Stage Power Factor +I Pistol,1,1,No,No,43,0,8,3,0,0,0,12,0,0,0,0,0,0,0,43.55,0,0,0,0,43.55,242,242,5.5568,270.0000,1, +I Pistol,1,2,No,No,45,0,9,0,0,0,0,12,0,0,0,0,0,0,0,49.21,0,0,0,0,49.21,252,252,5.1209,248.8200,2, +I Pistol,1,3,Yes,No,39,0,11,1,3,0,0,12,0,0,0,0,0,0,30,60.59,0,0,0,0,60.59,229,199,0.0000,0.0000,3, +I Pistol,2,1,No,No,40,0,3,0,0,0,0,0,0,0,0,0,5,0,0,5.64,11.35,6.12,0,0,23.11,209,209,9.0437,240.0000,1, +I Pistol,2,2,No,No,44,0,2,0,0,0,0,0,0,0,0,0,2,0,0,8.37,16.47,7.32,0,0,32.16,226,226,7.0274,186.4918,2, +I Pistol,3,1,No,No,26,0,2,0,0,0,0,0,0,0,0,0,0,0,0,18.94,0,0,0,0,18.94,136,136,7.1806,129.0348,4, +I Pistol,3,2,No,No,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17.97,0,0,0,0,17.97,140,140,7.7908,140.0000,1, +I Pistol,3,3,No,No,27,0,1,0,0,0,0,0,0,0,0,0,0,0,0,18.95,0,0,0,0,18.95,138,138,7.2823,130.8623,3, +$END \ No newline at end of file diff --git a/tests/mock_data/match_reports/uspsa_20230108.py b/tests/mock_data/match_reports/uspsa_20230108.py new file mode 100644 index 0000000..2a36425 --- /dev/null +++ b/tests/mock_data/match_reports/uspsa_20230108.py @@ -0,0 +1,105 @@ +from pytest import approx + +from hitfactorpy.enums import Classification, Division, PowerFactor, Scoring +from hitfactorpy.parsers.match_report.models import ParsedMatchReport + + +def assert_uspsa_report_20230108(report: ParsedMatchReport): + """Assert the expected state of the report after sucessful parsing""" + assert report + assert report.name == "Paul Bunyan USPSA - January 2023 NW01" + assert report.stages + assert len(report.stages) == 7 + assert report.competitors + assert len(report.competitors) == 72 + assert report.stage_scores + assert len(report.stage_scores) == 494 + assert report.platform == "IOS" + assert report.ps_product + assert report.ps_version == "1.682" + assert report.club_name == "PaulBunyan" + assert report.club_code == "PB" + + # Verify a stage + assert report.stages[0].name == "A New Dawn" + assert report.stages[0].min_rounds == 32 + assert report.stages[0].max_points == 160 + assert report.stages[0].classifier is False + assert report.stages[0].internal_id == 1 + assert report.stages[0].scoring_type == Scoring.COMSTOCK + assert report.stages[0].number == 1 + assert report.stages[0].gun_type == "Pistol" + + assert report.stages[2].name == "CM 22-06 Blue's Don't Care" + + # Verify a classifier stage + assert report.stages[2].classifier is True + assert report.stages[2].classifier_number == "22-06" + assert report.stages[2].internal_id == 3 + + # Verify a competitor + assert report.competitors[0].internal_id == 1 + assert report.competitors[0].first_name == "Emily" + assert report.competitors[0].last_name == "Smith" + assert report.competitors[0].classification == Classification.M + assert report.competitors[0].division == Division.CARRY_OPTICS + assert report.competitors[0].member_number == "L4898" + assert report.competitors[0].power_factor == PowerFactor.MINOR + assert report.competitors[0].dq is False + assert report.competitors[0].reentry is False + + # Verify DQ'ed competitor + assert report.competitors[37].dq is True + assert report.competitors[70].dq is True + + # Verify weird/missing member numbers + assert report.competitors[1].member_number == "TY104096" + assert report.competitors[17].member_number == "L1770NO" + assert report.competitors[26].member_number == "" + assert report.competitors[60].member_number == "B49" + + # Verify a stage score + assert report.stage_scores[0].stage_id == 1 + assert report.stage_scores[0].competitor_id == 1 + assert report.stage_scores[0].a == 27 + assert report.stage_scores[0].b == 0 + assert report.stage_scores[0].c == 5 + assert report.stage_scores[0].d == 0 + assert report.stage_scores[0].m == 0 + assert report.stage_scores[0].ns == 0 + assert report.stage_scores[0].npm == 0 + assert report.stage_scores[0].procedural == 0 + assert report.stage_scores[0].late_shot == 0 + assert report.stage_scores[0].extra_shot == 0 + assert report.stage_scores[0].extra_hit == 0 + assert report.stage_scores[0].other_penalty == 0 + assert report.stage_scores[0].t1 == approx(17.34) + assert report.stage_scores[0].t2 == approx(0) + assert report.stage_scores[0].t3 == approx(0) + assert report.stage_scores[0].t4 == approx(0) + assert report.stage_scores[0].t5 == approx(0) + assert report.stage_scores[0].time == approx(17.34) + assert report.stage_scores[0].raw_points == approx(150.0) + assert report.stage_scores[0].penalty_points == approx(0) + assert report.stage_scores[0].total_points == approx(150.0) + assert report.stage_scores[0].hit_factor == approx(8.6505) + assert report.stage_scores[0].stage_points == approx(160.0) + assert report.stage_scores[0].stage_place == 1 + assert report.stage_scores[0].dq is False + assert report.stage_scores[0].dnf is False + assert report.stage_scores[0].stage_power_factor is None + + # Verify a stage score with a DQ + assert report.stage_scores[37].dq is True + assert report.stage_scores[37].dnf is False + assert next( + (c for c in report.competitors if c.internal_id == report.stage_scores[37].competitor_id), None + ), "DQ'ed competitor not found in competitors list" + + # Verify a stage score with a DNF + assert report.stage_scores[69].dnf is True + assert report.stage_scores[69].dq is False + assert report.stage_scores[69].competitor_id == 70 + + +assert_match_report = assert_uspsa_report_20230108 diff --git a/tests/mock_data/match_reports/uspsa_20230108.txt b/tests/mock_data/match_reports/uspsa_20230108.txt new file mode 100644 index 0000000..ede936b --- /dev/null +++ b/tests/mock_data/match_reports/uspsa_20230108.txt @@ -0,0 +1,592 @@ +$PRACTISCORE 1.682 RESULTS +$INFO Region:USPSA +$INFO PLATFORM IOS +$INFO PractiScore_Product: PractiScore (iOS) +$INFO PractiScore_Version:1.682 +$INFO Match name:Paul Bunyan USPSA - January 2023 NW01 +$INFO Match date:01/08/2023 +$INFO Club Name:PaulBunyan +$INFO Club Code:PB +$INFO Multigun:0 +$INFO Scoring:0 +$INFO Classifiers:1 +$INFO Match Level: Level I +Z 3.0 +A Paul Bunyan USPSA - January 2023 NW01,PaulBunyan,01/08/2023 +D Comp,USPSA,FirstName,LastName,DQPistol,DQRifle,DQShotgun,Reentry,Class,Division,Match Points,Place Overall,Power Factor,Shotgun Division,Shotgun Power Factor,Shotgun Place Overall,Shotgun Entered,Shotgun Match Points,Rifle Division,Rifle Power Factor,Rifle Place Overall,Rifle Entered,Rifle Match Points,Aggregate,Aggregate Division,Aggregate Pistol Percent,Aggregate Pistol Points,Aggregate Place,Aggregate Rifle Percent,Aggregate Rifle Points,Aggregate Shotgun Percent,Aggregate Shotgun Points,Aggregate Total,Female,Age,Law,Military +E 1,L4898,Emily,Smith,No,No,No,No,M,Carry Optics,656.7177,1,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 2,TY-104096,Michael,Johnson,No,No,No,No,A,Carry Optics,638.7699,2,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,Yes,No +E 3,A116865,Jessica,Williams,No,No,No,No,M,Carry Optics,607.7342,3,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 4,A124172,Jacob,Jones,No,No,No,No,M,Carry Optics,599.2016,4,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 5,Fy108653,Ashley,Brown,No,No,No,No,A,Carry Optics,553.3078,5,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 6,A86531,Matthew,Garcia,No,No,No,No,A,Carry Optics,549.6910,6,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 7,L5043,Nicholas,Miller,No,No,No,No,A,Carry Optics,528.8537,7,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,Yes,,No,No +E 8,TY133394,Amanda,Davis,No,No,No,No,B,Carry Optics,512.9131,8,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 9,FY108575,Andrew,Rodriguez,No,No,No,No,M,Carry Optics,508.4578,9,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 10,TY139743,Danielle,Martinez,No,No,No,No,B,Carry Optics,506.1839,10,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,Yes,,No,No +E 11,L5277,Joshua,Parker,No,No,No,No,B,Carry Optics,491.8851,11,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 12,A136496,Brian,Anderson,No,No,No,No,B,Carry Optics,489.3483,12,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +E 13,A137603,Brittany,Thomas,No,No,No,No,A,Carry Optics,484.3380,13,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 14,A145428,David,Jackson,No,No,No,No,C,Carry Optics,471.5630,14,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,Yes,,No,No +E 15,A133424,Jacob,White,No,No,No,No,B,Carry Optics,471.5245,15,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 16,A141795,Megan,Harris,No,No,No,No,U,Carry Optics,469.9240,16,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 17,A71578,Emily,Martin,No,No,No,No,B,Carry Optics,460.9123,17,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +E 18,L1770no,Michael,Thompson,No,No,No,No,B,Carry Optics,460.2262,18,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Super Senior,No,No +E 19,L5382,Jessica,Garcia,No,No,No,No,C,Carry Optics,459.7037,19,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 20,A140832,Jacob,Martinez,No,No,No,No,U,Carry Optics,439.5640,20,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,Yes,No +E 21,A111302,Ashley,Robinson,No,No,No,No,B,Carry Optics,435.8859,21,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,Yes +E 22,A143399,Matthew,Clarke,No,No,No,No,U,Carry Optics,435.1908,22,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 23,TY131345,Nicholas,Rodriguez,No,No,No,No,B,Carry Optics,420.8433,23,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 24,A145513,Amanda,Lewis,No,No,No,No,U,Carry Optics,415.9877,24,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 25,A143360,Andrew,Lee,No,No,No,No,U,Carry Optics,391.9478,25,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 26,A146875,Danielle,Walker,No,No,No,No,U,Carry Optics,378.6182,26,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 27,,Joshua,Hall,No,No,No,No,U,Carry Optics,373.9448,27,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 28,A139784,Brian,Allen,No,No,No,No,C,Carry Optics,348.6664,28,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 29,,Brittany,Young,No,No,No,No,U,Carry Optics,335.1241,29,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 30,TY122981,David,Hernandez,No,No,No,No,C,Carry Optics,328.9221,30,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 31,TY136343,Jacob,King,No,No,No,No,C,Carry Optics,323.6132,31,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,Yes,,No,No +E 32,A147071,Megan,Wright,No,No,No,No,U,Carry Optics,291.9865,32,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 33,Ty127333,Emily,Lopez,No,No,No,No,C,Carry Optics,288.3209,33,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 34,B0275,Michael,Hill,No,No,No,No,U,Carry Optics,282.0709,34,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,Yes +E 35,A125553,jessica,scott,No,No,No,No,C,Carry Optics,244.6242,35,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +E 36,A147079,Jacob,Green,No,No,No,No,U,Carry Optics,243.3942,36,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 37,A124035,Ashley,Adams,No,No,No,No,D,Carry Optics,232.0552,37,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 38,A141076,Matthew,Baker,Yes,No,No,No,U,Carry Optics,0.0000,38,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,Yes +E 39,TY92488,Nicholas,Nelson,No,No,No,No,M,Limited,593.5016,1,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 40,A41272,JAMES,SMITH,No,No,No,No,A,Limited,578.8899,2,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 41,FY71217,Amanda,Carter,No,No,No,No,B,Limited,525.6566,3,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 42,A141663,Andrew,Mitchell,No,No,No,No,C,Limited,498.1864,4,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 43,TY96391,Danielle,Perez,No,No,No,No,C,Limited,494.8368,5,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 44,A54938,Joshua,Roberts,No,No,No,No,B,Limited,488.0992,6,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 45,L4494,Brian,Turner,No,No,No,No,M,Limited,466.9928,7,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 46,,Brittany,Phillips,No,No,No,No,,Limited,431.5420,8,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 47,A146926,David,Campbell,No,No,No,No,U,Limited,427.4760,9,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 48,A137463,Jacob,Parker,Yes,No,No,No,D,Limited,0.0000,10,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 49,Ty66256,Megan,Evans,No,No,No,No,GM,Open,673.2965,1,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 50,A110099,Michael,Collins,No,No,No,No,A,Open,626.9994,2,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 51,a85786,Emily,Edwards,No,No,No,No,M,Open,623.2005,3,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 52,TY118972,Jessica,Stewart,No,No,No,No,B,Open,579.9318,4,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 53,L4865,Jacob,Sanchez,No,No,No,No,B,Open,531.8897,5,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 54,Ty86951,Ashley,Morris,No,No,No,No,A,Open,529.6605,6,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +E 55,A86966,Matthew,Rogers,No,No,No,No,C,Open,522.2251,7,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 56,A86506,Nicholas,Reed,No,No,No,No,U,Open,480.3150,8,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 57,Ty92223,Amanda,Cook,No,No,No,No,A,Open,471.8315,9,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 58,A125348,Andrew,Morgan,No,No,No,No,C,Open,449.3286,10,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 59,A102707,Danielle,Bell,No,No,No,No,B,Open,412.1993,11,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 60,fy122523,Joshua,Cooper,No,No,No,No,C,Open,403.6556,12,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 61,b49,Brian,Richardson,No,No,No,No,C,Open,312.0206,13,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 62,FY103459,Brittany,Cox,No,No,No,No,C,Open,226.8951,14,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,Yes,,No,No +E 63,,David,Howard,No,No,No,No,,Open,224.4845,15,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 64,TY137732,Jacob,Ward,No,No,No,No,B,PCC,665.7978,1,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 65,Fy89148,Megan,Torres,No,No,No,No,B,PCC,479.3922,2,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +E 66,fy105750,Emily,Peterson,No,No,No,No,C,PCC,426.0774,3,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Senior,No,No +E 67,A146968,Michael,Gray,No,No,No,No,U,PCC,250.4235,4,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Junior,No,No +E 68,A142134,Jessica,Ramirez,No,No,No,No,,Production,625.4475,1,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,Yes +E 69,TY114139,Jacob,James,No,No,No,No,C,Production,617.5964,2,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,Super Senior,No,No +E 70,A79746,Ashley,Watson,No,No,No,No,A,Production,0.0000,3,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,Yes,,No,No +E 71,A135574,Matthew,Brooks,Yes,No,No,No,D,Production,0.0000,4,Minor,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +E 72,TY78052,Nicholas,Kelly,No,No,No,No,U,Single Stack,687.0000,1,Major,Open,Major,,No,,Open,Minor,,No,,No,,,,,,,,,,No,,No,No +F Number,Guntype,Minimum Rounds,Maximum Points,Classifier,Classifier_No,Stage_name,ScoringType,TimesRun +G 1,Pistol,32,160,No,,A New Dawn,Comstock,1 +G 2,Pistol,22,110,No,,Hallelujah,Comstock,1 +G 3,Pistol,7,35,Yes,22-06,CM 22-06 Blue's Don't Care,Comstock,1 +G 4,Pistol,20,100,No,,And Just Like That,Fixed,2 +G 5,Pistol,27,135,No,,No Backup,Comstock,1 +G 6,Pistol,20,100,No,,Need Disco Ball,Comstock,1 +G 7,Pistol,19,95,No,,The Legend,Comstock,1 +H Gun,Stage,Comp,DQ,DNF,A,B,C,D,Miss,No Shoot,Procedural,Double Poppers,Double Popper Miss,Late Shot,Extra Shot,Extra Hit,No Penalty Miss,Additional Penalty,Total Penalty,T1,T2,T3,T4,T5,Time,Raw Points,Total Points,Hit Factor,Stage Points,Stage Place,Stage Power Factor +I Pistol,1,1,No,No,27,0,5,0,0,0,0,0,0,0,0,0,0,0,0,17.34,0,0,0,0,17.34,150,150,8.6505,160.0000,1, +I Pistol,1,2,No,No,30,0,1,1,0,0,0,0,0,0,0,0,0,0,0,18.7,0,0,0,0,18.70,154,154,8.2353,152.3204,2, +I Pistol,1,3,No,No,26,0,5,0,1,0,0,0,0,0,0,0,0,0,10,18.75,0,0,0,0,18.75,145,135,7.2000,133.1715,5, +I Pistol,1,4,No,No,25,0,6,0,1,0,0,0,0,0,0,0,0,0,10,18.37,0,0,0,0,18.37,143,133,7.2401,133.9132,4, +I Pistol,1,5,No,No,30,0,2,0,0,0,0,0,0,0,0,0,0,0,0,21.08,0,0,0,0,21.08,156,156,7.4004,136.8781,3, +I Pistol,1,6,No,No,25,0,6,1,0,0,0,0,0,0,0,0,0,0,0,20.44,0,0,0,0,20.44,144,144,7.0450,130.3046,7, +I Pistol,1,7,No,No,26,0,5,1,0,0,0,0,0,0,0,0,0,0,0,21.55,0,0,0,0,21.55,146,146,6.7749,125.3088,8, +I Pistol,1,8,No,No,28,0,4,0,0,0,0,0,0,0,0,0,0,0,0,21.48,0,0,0,0,21.48,152,152,7.0764,130.8854,6, +I Pistol,1,9,No,No,27,0,3,0,2,0,1,0,0,0,0,0,0,0,30,22.14,0,0,0,0,22.14,144,114,5.1491,95.2380,21, +I Pistol,1,10,No,No,18,0,13,1,0,0,0,0,0,0,0,0,0,0,0,20.75,0,0,0,0,20.75,130,130,6.2651,115.8795,10, +I Pistol,1,11,No,No,25,0,6,0,1,0,0,0,0,0,0,0,0,0,10,20.27,0,0,0,0,20.27,143,133,6.5614,121.3599,9, +I Pistol,1,12,No,No,26,0,4,1,1,0,0,0,0,0,0,0,0,0,10,23.31,0,0,0,0,23.31,143,133,5.7057,105.5329,15, +I Pistol,1,13,No,No,21,0,9,2,0,0,0,0,0,0,0,0,0,0,0,21.69,0,0,0,0,21.69,134,134,6.1780,114.2685,11, +I Pistol,1,14,No,No,30,0,0,0,2,0,1,0,0,0,0,0,0,0,30,22.97,0,0,0,0,22.97,150,120,5.2242,96.6270,20, +I Pistol,1,15,No,No,26,0,4,0,2,0,1,0,0,0,0,0,0,0,30,26.52,0,0,0,0,26.52,142,112,4.2232,78.1125,26, +I Pistol,1,16,No,No,22,0,10,0,0,0,0,0,0,0,0,0,0,0,0,23.51,0,0,0,0,23.51,140,140,5.9549,110.1421,12, +I Pistol,1,17,No,No,29,0,3,0,0,0,0,0,0,0,0,0,0,0,0,27.42,0,0,0,0,27.42,154,154,5.6163,103.8793,16, +I Pistol,1,18,No,No,18,0,13,0,1,0,0,0,0,0,0,0,0,0,10,25.17,0,0,0,0,25.17,129,119,4.7279,87.4474,24, +I Pistol,1,19,No,No,26,0,5,1,0,0,0,0,0,0,0,0,0,0,0,24.68,0,0,0,0,24.68,146,146,5.9157,109.4170,13, +I Pistol,1,20,No,No,23,0,9,0,0,0,0,0,0,0,0,0,0,0,0,29.54,0,0,0,0,29.54,142,142,4.8070,88.9105,22, +I Pistol,1,21,No,No,27,0,5,0,0,0,0,0,0,0,0,0,0,0,0,28.25,0,0,0,0,28.25,150,150,5.3097,98.2084,19, +I Pistol,1,22,No,No,30,0,2,0,0,0,0,0,0,0,0,0,0,0,0,27.01,0,0,0,0,27.01,156,156,5.7756,106.8257,14, +I Pistol,1,23,No,No,21,0,11,0,0,0,0,0,0,0,0,0,0,0,0,29.14,0,0,0,0,29.14,138,138,4.7358,87.5935,23, +I Pistol,1,24,No,No,24,0,5,0,3,0,1,0,0,0,0,0,0,0,40,26.13,0,0,0,0,26.13,135,95,3.6357,67.2461,30, +I Pistol,1,25,No,No,24,0,8,0,0,0,0,0,0,0,0,0,0,0,0,26.98,0,0,0,0,26.98,144,144,5.3373,98.7189,18, +I Pistol,1,26,No,No,27,0,4,1,0,0,0,0,0,0,0,0,0,0,0,27.29,0,0,0,0,27.29,148,148,5.4232,100.3077,17, +I Pistol,1,27,No,No,29,0,1,0,2,0,1,0,0,0,0,0,0,0,30,32.18,0,0,0,0,32.18,148,118,3.6669,67.8231,29, +I Pistol,1,28,No,No,28,0,4,0,0,0,0,0,0,0,0,0,0,0,0,41.38,0,0,0,0,41.38,152,152,3.6733,67.9415,28, +I Pistol,1,29,No,No,27,0,3,0,2,0,1,0,0,0,0,0,0,0,30,33.46,0,0,0,0,33.46,144,114,3.4071,63.0179,32, +I Pistol,1,30,No,No,23,0,7,0,2,0,0,0,0,0,0,0,0,0,20,33.43,0,0,0,0,33.43,136,116,3.4699,64.1794,31, +I Pistol,1,31,No,No,24,0,7,0,1,0,0,0,0,0,0,0,0,0,10,35.39,0,0,0,0,35.39,141,131,3.7016,68.4649,27, +I Pistol,1,32,No,No,28,0,2,0,2,0,0,0,0,0,0,0,0,0,20,50.14,0,0,0,0,50.14,146,126,2.5130,46.4806,36, +I Pistol,1,33,No,No,16,0,10,5,1,0,0,0,0,0,0,0,0,0,10,23.69,0,0,0,0,23.69,115,105,4.4322,81.9782,25, +I Pistol,1,34,No,No,22,0,6,0,4,0,2,0,0,0,0,0,0,0,60,31.94,0,0,0,0,31.94,128,68,2.1290,39.3781,37, +I Pistol,1,35,No,No,27,0,3,1,1,0,0,0,0,0,0,0,0,0,10,46.17,0,0,0,0,46.17,145,135,2.9240,54.0824,34, +I Pistol,1,36,No,No,30,0,2,0,0,0,0,0,0,0,0,0,0,0,0,50.9,0,0,0,0,50.90,156,156,3.0648,56.6867,33, +I Pistol,1,37,No,No,21,0,7,2,2,0,1,0,0,0,0,0,0,0,30,38.33,0,0,0,0,38.33,128,98,2.5567,47.2888,35, +I Pistol,1,38,Yes,No,19,0,7,4,2,0,0,0,0,0,0,0,0,0,20,26.47,0,0,0,0,26.47,120,0,0.0000,0.0000,38, +I Pistol,1,39,No,No,18,0,9,3,2,0,0,0,0,0,0,0,0,0,20,20.15,0,0,0,0,20.15,132,112,5.5583,110.5731,3, +I Pistol,1,40,No,No,24,0,7,1,0,0,0,0,0,0,0,0,0,0,0,18.65,0,0,0,0,18.65,150,150,8.0429,160.0000,1, +I Pistol,1,41,No,No,17,0,11,1,3,0,1,0,0,0,0,0,0,0,40,24.42,0,0,0,0,24.42,131,91,3.7265,74.1325,7, +I Pistol,1,42,No,No,18,0,9,2,3,0,1,0,0,0,0,0,0,0,40,18.26,0,0,0,0,18.26,119,79,4.3264,86.0665,4, +I Pistol,1,43,No,No,25,0,6,1,0,0,0,0,0,0,0,0,0,0,0,26.96,0,0,0,0,26.96,151,151,5.6009,111.4205,2, +I Pistol,1,44,No,No,23,0,6,0,3,0,1,0,0,0,0,0,0,0,40,21.91,0,0,0,0,21.91,133,93,4.2446,84.4392,5, +I Pistol,1,45,No,No,20,0,12,0,0,0,0,0,0,0,0,0,0,0,0,35.43,0,0,0,0,35.43,136,136,3.8386,76.3625,6, +I Pistol,1,46,No,No,24,0,4,0,4,0,4,0,0,0,0,0,0,0,80,27.48,0,0,0,0,27.48,132,52,1.8923,37.6441,9, +I Pistol,1,47,No,No,17,0,13,0,2,0,1,0,0,0,0,0,0,0,30,30.33,0,0,0,0,30.33,124,94,3.0992,61.6534,8, +I Pistol,1,48,Yes,No,26,0,4,0,2,0,1,0,0,0,0,0,0,0,30,44.09,0,0,0,0,44.09,146,0,0.0000,0.0000,10, +I Pistol,1,49,No,No,22,0,10,0,0,0,0,0,0,0,0,0,0,0,0,18.82,0,0,0,0,18.82,150,150,7.9702,151.0903,3, +I Pistol,1,50,No,No,30,0,2,0,0,0,0,0,0,0,0,0,0,0,0,18.72,0,0,0,0,18.72,158,158,8.4402,160.0000,1, +I Pistol,1,51,No,No,27,0,5,0,0,0,0,0,0,0,0,0,0,0,0,18.7,0,0,0,0,18.70,155,155,8.2888,157.1299,2, +I Pistol,1,52,No,No,27,0,4,1,0,0,0,0,0,0,0,0,0,0,0,22.43,0,0,0,0,22.43,153,153,6.8212,129.3088,6, +I Pistol,1,53,No,No,28,0,4,0,0,0,0,0,0,0,0,0,0,0,0,26.15,0,0,0,0,26.15,156,156,5.9656,113.0893,9, +I Pistol,1,54,No,No,25,0,6,0,1,0,0,0,0,0,0,0,0,0,10,19,0,0,0,0,19.00,149,139,7.3158,138.6849,4, +I Pistol,1,55,No,No,26,0,4,2,0,0,0,0,0,0,0,0,0,0,0,20.71,0,0,0,0,20.71,150,150,7.2429,137.3029,5, +I Pistol,1,56,No,No,26,0,6,0,0,0,0,0,0,0,0,0,0,0,0,25.42,0,0,0,0,25.42,154,154,6.0582,114.8447,8, +I Pistol,1,57,No,No,13,0,10,7,2,0,0,0,0,0,0,0,0,0,20,17.92,0,0,0,0,17.92,102,82,4.5759,86.7449,11, +I Pistol,1,58,No,No,23,0,9,0,0,0,0,0,0,0,0,0,0,0,0,23.71,0,0,0,0,23.71,151,151,6.3686,120.7289,7, +I Pistol,1,59,No,No,25,0,6,1,0,0,0,0,0,0,0,0,0,0,0,26.05,0,0,0,0,26.05,151,151,5.7965,109.8837,10, +I Pistol,1,60,No,No,22,0,8,0,2,0,1,0,0,0,0,0,0,0,30,30.76,0,0,0,0,30.76,142,112,3.6411,69.0240,13, +I Pistol,1,61,No,No,22,0,7,1,2,0,0,0,0,0,0,0,0,0,20,31.72,0,0,0,0,31.72,132,112,3.5309,66.9349,14, +I Pistol,1,62,No,No,18,0,13,1,0,0,0,0,0,0,0,0,0,0,0,32.5,0,0,0,0,32.50,144,144,4.4308,83.9942,12, +I Pistol,1,63,No,No,14,0,8,4,6,0,1,0,0,0,0,0,0,0,70,40.29,0,0,0,0,40.29,110,40,0.9928,18.8204,15, +I Pistol,1,64,No,No,28,0,4,0,0,0,1,0,0,0,0,0,0,0,10,25.05,0,0,0,0,25.05,152,142,5.6687,151.7978,2, +I Pistol,1,65,No,No,26,0,6,0,0,0,0,0,0,0,0,0,0,0,0,24.77,0,0,0,0,24.77,148,148,5.9750,160.0000,1, +I Pistol,1,66,No,No,19,0,12,0,1,0,0,0,0,0,0,0,0,0,10,61.01,0,0,0,0,61.01,131,121,1.9833,53.1093,3, +I Pistol,1,67,No,No,10,0,9,5,8,0,2,0,0,0,0,0,0,0,100,41.77,0,0,0,0,41.77,82,0,0.0000,0.0000,4, +I Pistol,1,68,No,No,31,0,1,0,0,0,1,0,0,0,0,0,0,0,10,39.63,0,0,0,0,39.63,158,148,3.7345,160.0000,1, +I Pistol,1,69,No,No,28,0,3,1,0,0,0,0,0,0,0,0,0,0,0,41.73,0,0,0,0,41.73,150,150,3.5945,154.0019,2, +I Pistol,1,70,No,Yes,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,3, +I Pistol,1,72,No,No,27,0,4,1,0,0,0,0,0,0,0,0,0,0,0,26.88,0,0,0,0,26.88,153,153,5.6920,160.0000,1, +I Pistol,2,1,No,No,15,0,6,0,1,0,0,0,0,0,0,0,0,0,10,14.49,0,0,0,0,14.49,93,83,5.7281,88.1530,6, +I Pistol,2,2,No,No,18,0,4,0,0,0,0,0,0,0,0,0,0,0,0,15.05,0,0,0,0,15.05,102,102,6.7774,104.3012,2, +I Pistol,2,3,No,No,20,0,2,0,0,0,0,0,0,0,0,0,0,0,0,14.83,0,0,0,0,14.83,106,106,7.1477,110.0000,1, +I Pistol,2,4,No,No,17,0,5,0,0,0,0,0,0,0,0,0,0,0,0,15.74,0,0,0,0,15.74,100,100,6.3532,97.7730,4, +I Pistol,2,5,No,No,17,0,3,2,0,0,0,0,0,0,0,0,0,0,0,18.72,0,0,0,0,18.72,96,96,5.1282,78.9208,12, +I Pistol,2,6,No,No,19,0,2,1,0,0,0,0,0,0,0,0,0,0,0,15.72,0,0,0,0,15.72,102,102,6.4885,99.8552,3, +I Pistol,2,7,No,No,18,0,3,1,0,0,0,0,0,0,0,0,0,0,0,18.23,0,0,0,0,18.23,100,100,5.4855,84.4195,9, +I Pistol,2,8,No,No,21,0,1,0,0,0,0,0,0,0,0,0,0,0,0,19.85,0,0,0,0,19.85,108,108,5.4408,83.7316,10, +I Pistol,2,9,No,No,15,0,6,0,1,0,0,0,0,0,0,0,0,0,10,18.59,0,0,0,0,18.59,93,83,4.4648,68.7113,23, +I Pistol,2,10,No,No,13,0,8,1,0,0,0,0,0,0,0,0,0,0,0,17.65,0,0,0,0,17.65,90,90,5.0992,78.4745,13, +I Pistol,2,11,No,No,13,0,8,1,0,0,0,0,0,0,0,0,0,0,0,15.83,0,0,0,0,15.83,90,90,5.6854,87.4958,7, +I Pistol,2,12,No,No,12,0,8,1,1,0,0,0,0,0,0,0,0,0,10,19.91,0,0,0,0,19.91,85,75,3.7670,57.9725,29, +I Pistol,2,13,No,No,17,0,5,0,0,0,0,0,0,0,0,0,0,0,0,20.05,0,0,0,0,20.05,100,100,4.9875,76.7555,17, +I Pistol,2,14,No,No,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19.63,0,0,0,0,19.63,110,110,5.6037,86.2385,8, +I Pistol,2,15,No,No,20,0,2,0,0,0,0,0,0,0,0,0,0,0,0,18.31,0,0,0,0,18.31,106,106,5.7892,89.0933,5, +I Pistol,2,16,No,No,17,0,5,0,0,0,0,0,0,0,0,0,0,0,0,18.76,0,0,0,0,18.76,100,100,5.3305,82.0341,11, +I Pistol,2,17,No,No,15,0,7,0,0,0,0,0,0,0,0,0,0,0,0,19.64,0,0,0,0,19.64,96,96,4.8880,75.2242,18, +I Pistol,2,18,No,No,18,0,3,0,1,0,0,0,0,0,0,0,0,0,10,19.91,0,0,0,0,19.91,99,89,4.4701,68.7929,22, +I Pistol,2,19,No,No,18,0,3,1,0,0,0,0,0,0,0,0,0,0,0,19.64,0,0,0,0,19.64,100,100,5.0916,78.3575,14, +I Pistol,2,20,No,No,14,0,6,1,1,0,0,0,0,0,0,0,0,0,10,18.04,0,0,0,0,18.04,89,79,4.3792,67.3940,25, +I Pistol,2,21,No,No,17,0,5,0,0,0,0,0,0,0,0,0,0,0,0,19.71,0,0,0,0,19.71,100,100,5.0736,78.0805,15, +I Pistol,2,22,No,No,17,0,4,0,1,0,0,0,0,0,0,0,0,0,10,19.19,0,0,0,0,19.19,97,87,4.5336,69.7701,19, +I Pistol,2,23,No,No,16,0,6,0,0,0,0,0,0,0,0,0,0,0,0,29.14,0,0,0,0,29.14,98,98,3.3631,51.7566,32, +I Pistol,2,24,No,No,17,0,5,0,0,0,0,0,0,0,0,0,0,0,0,22.06,0,0,0,0,22.06,100,100,4.5331,69.7624,20, +I Pistol,2,25,No,No,17,0,4,1,0,0,0,0,0,0,0,0,0,0,0,19.44,0,0,0,0,19.44,98,98,5.0412,77.5819,16, +I Pistol,2,26,No,No,12,0,10,0,0,0,0,0,0,0,0,0,0,0,0,21.53,0,0,0,0,21.53,90,90,4.1802,64.3315,27, +I Pistol,2,27,No,No,20,0,2,0,0,0,0,0,0,0,0,0,0,0,0,23.45,0,0,0,0,23.45,106,106,4.5203,69.5655,21, +I Pistol,2,28,No,No,15,0,7,0,0,0,0,0,0,0,0,0,0,0,0,26.56,0,0,0,0,26.56,96,96,3.6145,55.6256,30, +I Pistol,2,29,No,No,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28.15,0,0,0,0,28.15,110,110,3.9076,60.1363,28, +I Pistol,2,30,No,No,21,0,1,0,0,0,0,0,0,0,0,0,0,0,0,25.57,0,0,0,0,25.57,108,108,4.2237,65.0009,26, +I Pistol,2,31,No,No,17,0,4,0,1,0,0,0,0,0,0,0,0,0,10,26.96,0,0,0,0,26.96,97,87,3.2270,49.6621,34, +I Pistol,2,32,No,No,19,0,2,1,0,0,0,0,0,0,0,0,0,0,0,30.58,0,0,0,0,30.58,102,102,3.3355,51.3319,33, +I Pistol,2,33,No,No,16,0,5,1,0,0,0,0,0,0,0,0,0,0,0,27.27,0,0,0,0,27.27,96,96,3.5204,54.1774,31, +I Pistol,2,34,No,No,17,0,5,0,0,0,0,0,0,0,0,0,0,0,0,22.55,0,0,0,0,22.55,100,100,4.4346,68.2466,24, +I Pistol,2,35,No,No,18,0,3,0,1,0,0,0,0,0,0,0,0,0,10,55.19,0,0,0,0,55.19,99,89,1.6126,24.8172,37, +I Pistol,2,36,No,No,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36.23,0,0,0,0,36.23,110,110,3.0362,46.7258,35, +I Pistol,2,37,No,No,16,0,4,1,1,0,0,0,0,0,0,0,0,0,10,43.93,0,0,0,0,43.93,93,83,1.8894,29.0770,36, +I Pistol,2,38,Yes,No,17,0,5,0,0,0,0,0,0,0,0,0,0,0,0,20.39,0,0,0,0,20.39,100,0,0.0000,0.0000,38, +I Pistol,2,39,No,No,17,0,2,2,1,0,0,0,0,0,0,0,0,0,10,17.82,0,0,0,0,17.82,97,87,4.8822,96.5070,6, +I Pistol,2,40,No,No,14,0,7,1,0,0,0,0,0,0,0,0,0,0,0,17.97,0,0,0,0,17.97,100,100,5.5648,110.0000,1, +I Pistol,2,41,No,No,15,0,6,1,0,0,0,0,0,0,0,0,0,0,0,20.26,0,0,0,0,20.26,101,101,4.9852,98.5430,3, +I Pistol,2,42,No,No,20,0,1,0,1,0,0,0,0,0,0,0,0,0,10,18.96,0,0,0,0,18.96,103,93,4.9051,96.9596,5, +I Pistol,2,43,No,No,13,0,5,3,1,0,0,0,0,0,0,0,0,0,10,23.48,0,0,0,0,23.48,91,81,3.4497,68.1906,9, +I Pistol,2,44,No,No,18,0,4,0,0,0,0,0,0,0,0,0,0,0,0,19.05,0,0,0,0,19.05,102,102,5.3543,105.8390,2, +I Pistol,2,45,No,No,19,0,3,0,0,0,0,0,0,0,0,0,0,0,0,20.97,0,0,0,0,20.97,104,104,4.9595,98.0350,4, +I Pistol,2,46,No,No,20,0,2,0,0,0,0,0,0,0,0,0,0,0,0,22.05,0,0,0,0,22.05,106,106,4.8073,95.0264,7, +I Pistol,2,47,No,No,20,0,2,0,0,0,0,0,0,0,0,0,0,0,0,23.31,0,0,0,0,23.31,106,106,4.5474,89.8889,8, +I Pistol,2,48,Yes,No,18,0,4,0,0,0,0,0,0,0,0,0,0,0,0,31.36,0,0,0,0,31.36,106,0,0.0000,0.0000,10, +I Pistol,2,49,No,No,20,0,1,1,0,0,0,0,0,0,0,0,0,0,0,15.27,0,0,0,0,15.27,106,106,6.9417,104.3565,2, +I Pistol,2,50,No,No,20,0,2,0,0,0,0,0,0,0,0,0,0,0,0,14.76,0,0,0,0,14.76,108,108,7.3171,110.0000,1, +I Pistol,2,51,No,No,19,0,3,0,0,0,0,0,0,0,0,0,0,0,0,17.32,0,0,0,0,17.32,107,107,6.1778,92.8726,4, +I Pistol,2,52,No,No,18,0,4,0,0,0,0,0,0,0,0,0,0,0,0,16.22,0,0,0,0,16.22,106,106,6.5351,98.2440,3, +I Pistol,2,53,No,No,18,0,4,0,0,0,0,0,0,0,0,0,0,0,0,18.4,0,0,0,0,18.40,106,106,5.7609,86.6052,6, +I Pistol,2,54,No,No,18,0,4,0,0,0,0,0,0,0,0,0,0,0,0,23.38,0,0,0,0,23.38,106,106,4.5338,68.1579,11, +I Pistol,2,55,No,No,18,0,4,0,0,0,0,0,0,0,0,0,0,0,0,17.93,0,0,0,0,17.93,106,106,5.9119,88.8752,5, +I Pistol,2,56,No,No,19,0,3,0,0,0,0,0,0,0,0,0,0,0,0,20.51,0,0,0,0,20.51,107,107,5.2170,78.4286,8, +I Pistol,2,57,No,No,11,0,9,1,1,0,0,0,0,0,0,0,0,0,10,14.82,0,0,0,0,14.82,83,73,4.9258,74.0509,9, +I Pistol,2,58,No,No,10,0,9,2,1,0,0,0,0,0,0,0,0,0,10,15.16,0,0,0,0,15.16,90,80,5.2770,79.3306,7, +I Pistol,2,59,No,No,18,0,3,1,0,0,0,0,0,0,0,0,0,0,0,24.01,0,0,0,0,24.01,104,104,4.3315,65.1166,12, +I Pistol,2,60,No,No,16,0,6,0,0,0,0,0,0,0,0,0,0,0,0,22.1,0,0,0,0,22.10,104,104,4.7059,70.7451,10, +I Pistol,2,61,No,No,16,0,6,0,0,0,0,0,0,0,0,0,0,0,0,24.58,0,0,0,0,24.58,98,98,3.9870,59.9377,13, +I Pistol,2,62,No,No,14,0,5,3,0,0,0,0,0,0,0,0,0,0,0,27.36,0,0,0,0,27.36,96,96,3.5088,52.7488,14, +I Pistol,2,63,No,No,12,0,9,1,0,0,0,0,0,0,0,0,0,0,0,28.6,0,0,0,0,28.60,98,98,3.4266,51.5130,15, +I Pistol,2,64,No,No,20,0,1,0,1,0,0,0,0,0,0,0,0,0,10,16.49,0,0,0,0,16.49,103,93,5.6398,110.0000,1, +I Pistol,2,65,No,No,17,0,4,1,0,0,0,0,0,0,0,0,0,0,0,40.45,0,0,0,0,40.45,98,98,2.4227,47.2529,4, +I Pistol,2,66,No,No,15,0,6,0,1,0,0,0,0,0,0,0,0,0,10,25.38,0,0,0,0,25.38,93,83,3.2703,63.7847,2, +I Pistol,2,67,No,No,11,0,10,1,0,0,4,0,0,0,0,0,0,0,40,17.89,0,0,0,0,17.89,86,46,2.5713,50.1512,3, +I Pistol,2,68,No,No,18,0,3,1,0,0,0,0,0,0,0,0,0,0,0,25.05,0,0,0,0,25.05,100,100,3.9920,110.0000,1, +I Pistol,2,69,No,No,19,0,3,0,0,0,0,0,0,0,0,0,0,0,0,30.58,0,0,0,0,30.58,104,104,3.4009,93.7122,2, +I Pistol,2,70,No,Yes,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,3, +I Pistol,2,72,No,No,19,0,3,0,0,0,0,0,0,0,0,0,0,0,0,19.83,0,0,0,0,19.83,107,107,5.3959,110.0000,1, +I Pistol,3,1,No,No,2,0,4,1,0,0,0,1,0,0,0,0,0,0,0,3,0,0,0,0,3.00,23,23,7.6667,26.6604,10, +I Pistol,3,2,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,3.08,0,0,0,0,3.08,31,31,10.0649,35.0000,1, +I Pistol,3,3,No,No,3,0,3,0,1,1,0,1,0,0,0,0,0,0,20,3.25,0,0,0,0,3.25,24,4,1.2308,4.2800,34, +I Pistol,3,4,No,No,4,0,3,0,0,0,0,1,0,0,0,0,0,0,0,3.38,0,0,0,0,3.38,29,29,8.5799,29.8360,3, +I Pistol,3,5,No,No,4,0,2,1,0,0,0,1,0,0,0,0,0,0,0,3.36,0,0,0,0,3.36,27,27,8.0357,27.9436,5, +I Pistol,3,6,No,No,6,0,0,0,1,1,0,1,0,0,0,0,0,0,20,3.66,0,0,0,0,3.66,30,10,2.7322,9.5010,31, +I Pistol,3,7,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,4.16,0,0,0,0,4.16,31,31,7.4519,25.9135,12, +I Pistol,3,8,No,No,5,0,2,0,0,1,0,1,0,0,0,0,0,0,10,4.29,0,0,0,0,4.29,31,21,4.8951,17.0224,27, +I Pistol,3,9,No,No,5,0,1,1,0,0,0,1,0,0,0,0,0,0,0,3.61,0,0,0,0,3.61,29,29,8.0332,27.9349,6, +I Pistol,3,10,No,No,5,0,1,1,0,0,0,1,0,0,0,0,0,0,0,3.7,0,0,0,0,3.70,29,29,7.8378,27.2554,7, +I Pistol,3,11,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.58,0,0,0,0,4.58,33,33,7.2052,25.0556,14, +I Pistol,3,12,No,No,7,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4.04,0,0,0,0,4.04,35,35,8.6634,30.1264,2, +I Pistol,3,13,No,No,2,0,3,1,1,1,0,1,0,0,0,0,0,0,20,3.65,0,0,0,0,3.65,20,0,0.0000,0.0000,37, +I Pistol,3,14,No,No,4,0,3,0,0,0,0,1,0,0,0,0,0,0,0,4.32,0,0,0,0,4.32,29,29,6.7130,23.3440,20, +I Pistol,3,15,No,No,7,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4.11,0,0,0,0,4.11,35,35,8.5158,29.6131,4, +I Pistol,3,16,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,4.06,0,0,0,0,4.06,31,31,7.6355,26.5519,11, +I Pistol,3,17,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,5.48,0,0,0,0,5.48,33,33,6.0219,20.9407,22, +I Pistol,3,18,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.73,0,0,0,0,4.73,33,33,6.9767,24.2610,18, +I Pistol,3,19,No,No,6,0,0,1,0,0,0,1,0,0,0,0,0,0,0,3.99,0,0,0,0,3.99,31,31,7.7694,27.0176,9, +I Pistol,3,20,No,No,5,0,1,0,1,1,0,1,0,0,0,0,0,0,20,8.87,0,0,0,0,8.87,28,8,0.9019,3.1363,36, +I Pistol,3,21,No,No,7,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4.87,0,0,0,0,4.87,35,35,7.1869,24.9920,15, +I Pistol,3,22,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,4.33,0,0,0,0,4.33,31,31,7.1594,24.8963,16, +I Pistol,3,23,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.24,0,0,0,0,4.24,33,33,7.7830,27.0648,8, +I Pistol,3,24,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.65,0,0,0,0,4.65,33,33,7.0968,24.6786,17, +I Pistol,3,25,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,4.18,0,0,0,0,4.18,31,31,7.4163,25.7897,13, +I Pistol,3,26,No,No,4,0,2,1,0,0,0,1,0,0,0,0,0,0,0,4.26,0,0,0,0,4.26,27,27,6.3380,22.0400,21, +I Pistol,3,27,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.86,0,0,0,0,4.86,33,33,6.7901,23.6121,19, +I Pistol,3,28,No,No,5,0,2,0,0,1,0,1,0,0,0,0,0,0,10,5.25,0,0,0,0,5.25,31,21,4.0000,13.9097,28, +I Pistol,3,29,No,No,5,0,1,1,0,0,0,1,0,0,0,0,0,0,0,5.57,0,0,0,0,5.57,29,29,5.2065,18.1052,25, +I Pistol,3,30,No,No,6,0,0,0,1,1,0,1,0,0,0,0,0,0,20,4.57,0,0,0,0,4.57,30,10,2.1882,7.6093,33, +I Pistol,3,31,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0,0,6.00,31,31,5.1667,17.9668,26, +I Pistol,3,32,No,No,7,0,0,0,0,1,0,1,0,0,0,0,0,0,10,9.76,0,0,0,0,9.76,35,25,2.5615,8.9074,32, +I Pistol,3,33,No,No,5,0,1,1,0,0,0,1,0,0,0,0,0,0,0,5,0,0,0,0,5.00,29,29,5.8000,20.1691,23, +I Pistol,3,34,No,No,7,0,0,0,0,0,0,1,0,0,0,0,0,0,0,6.38,0,0,0,0,6.38,35,35,5.4859,19.0768,24, +I Pistol,3,35,No,No,4,0,1,1,1,0,0,1,0,0,0,0,0,0,10,4.82,0,0,0,0,4.82,24,14,2.9046,10.1005,30, +I Pistol,3,36,No,No,4,0,2,0,1,1,0,1,0,0,0,0,0,0,20,4.89,0,0,0,0,4.89,26,6,1.2270,4.2668,35, +I Pistol,3,37,No,No,5,0,1,1,0,0,0,1,0,0,0,0,0,0,0,8.09,0,0,0,0,8.09,29,29,3.5847,12.4655,29, +I Pistol,3,38,Yes,No,3,0,2,2,0,4,0,1,0,0,0,0,0,0,40,8.35,0,0,0,0,8.35,23,0,0.0000,0.0000,38, +I Pistol,3,39,No,No,3,0,4,0,0,0,0,1,0,0,0,0,0,0,0,3.9,0,0,0,0,3.90,31,31,7.9487,25.1228,3, +I Pistol,3,40,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,2.98,0,0,0,0,2.98,33,33,11.0738,35.0000,1, +I Pistol,3,41,No,No,2,0,3,1,1,0,0,1,0,0,0,0,0,0,10,3.97,0,0,0,0,3.97,24,14,3.5264,11.1456,7, +I Pistol,3,42,No,No,7,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3.8,0,0,0,0,3.80,35,35,9.2105,29.1108,2, +I Pistol,3,43,No,No,2,0,3,1,1,0,0,1,0,0,0,0,0,0,10,6.1,0,0,0,0,6.10,24,14,2.2951,7.2539,9, +I Pistol,3,44,No,No,3,0,4,0,0,0,0,1,0,0,0,0,0,0,0,4.3,0,0,0,0,4.30,27,27,6.2791,19.8458,5, +I Pistol,3,45,No,No,3,0,4,0,0,1,0,1,0,0,0,0,0,0,10,6.37,0,0,0,0,6.37,27,17,2.6688,8.4350,8, +I Pistol,3,46,No,No,7,0,0,0,0,0,0,1,0,0,0,0,0,0,0,5.01,0,0,0,0,5.01,35,35,6.9860,22.0800,4, +I Pistol,3,47,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,6.28,0,0,0,0,6.28,33,33,5.2548,16.6084,6, +I Pistol,3,48,Yes,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,5.45,0,0,0,0,5.45,33,0,0.0000,0.0000,10, +I Pistol,3,49,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,4.8,0,0,0,0,4.80,33,33,6.8750,25.1563,6, +I Pistol,3,50,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,3.45,0,0,0,0,3.45,33,33,9.5652,35.0000,1, +I Pistol,3,51,No,No,3,0,4,0,0,0,0,1,0,0,0,0,0,0,0,4.05,0,0,0,0,4.05,31,31,7.6543,28.0078,2, +I Pistol,3,52,No,No,5,0,2,0,0,1,0,1,0,0,0,0,0,0,10,3.67,0,0,0,0,3.67,33,23,6.2670,22.9316,8, +I Pistol,3,53,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.48,0,0,0,0,4.48,34,34,7.5893,27.7700,3, +I Pistol,3,54,No,No,3,0,3,0,1,0,0,1,0,0,0,0,0,0,10,3.51,0,0,0,0,3.51,27,17,4.8433,17.7221,10, +I Pistol,3,55,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.6,0,0,0,0,4.60,34,34,7.3913,27.0455,5, +I Pistol,3,56,No,No,3,0,2,1,1,0,0,1,0,0,0,0,0,0,10,3.71,0,0,0,0,3.71,25,15,4.0431,14.7941,11, +I Pistol,3,57,No,No,2,0,3,2,0,0,0,1,0,0,0,0,0,0,0,3.7,0,0,0,0,3.70,21,21,5.6757,20.7679,9, +I Pistol,3,58,No,No,2,0,0,3,2,1,0,1,0,0,0,0,0,0,30,3.71,0,0,0,0,3.71,16,0,0.0000,0.0000,15, +I Pistol,3,59,No,No,5,0,1,1,0,0,0,1,0,0,0,0,0,0,0,4.55,0,0,0,0,4.55,31,31,6.8132,24.9302,7, +I Pistol,3,60,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,4.4,0,0,0,0,4.40,33,33,7.5000,27.4432,4, +I Pistol,3,61,No,No,3,0,3,0,1,1,0,1,0,0,0,0,0,0,20,5.72,0,0,0,0,5.72,24,4,0.6993,2.5588,13, +I Pistol,3,62,No,No,4,0,1,0,2,0,0,1,0,0,0,0,0,0,20,5.91,0,0,0,0,5.91,24,4,0.6768,2.4765,14, +I Pistol,3,63,No,No,3,0,2,2,0,0,0,1,0,0,0,0,0,0,0,6.89,0,0,0,0,6.89,27,27,3.9187,14.3389,12, +I Pistol,3,64,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,3.33,0,0,0,0,3.33,33,33,9.9099,35.0000,1, +I Pistol,3,65,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,4.13,0,0,0,0,4.13,33,33,7.9903,28.2203,2, +I Pistol,3,66,No,No,5,0,1,0,1,0,0,1,0,0,0,0,0,0,10,3.45,0,0,0,0,3.45,28,18,5.2174,18.4269,3, +I Pistol,3,67,No,No,2,0,1,1,3,2,0,1,0,0,0,0,0,0,50,2.77,0,0,0,0,2.77,14,0,0.0000,0.0000,4, +I Pistol,3,68,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,6.13,0,0,0,0,6.13,33,33,5.3834,29.0622,2, +I Pistol,3,69,No,No,6,0,1,0,0,0,0,1,0,0,0,0,0,0,0,5.09,0,0,0,0,5.09,33,33,6.4833,35.0000,1, +I Pistol,3,70,No,Yes,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0.00,5,0,0.0000,0.0000,3, +I Pistol,3,72,No,No,5,0,2,0,0,0,0,1,0,0,0,0,0,0,0,3.95,0,0,0,0,3.95,33,33,8.3544,35.0000,1, +I Pistol,4,1,No,No,9,0,5,1,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0.00,61,61,61.0000,61.0000,3, +I Pistol,4,2,No,No,6,0,8,2,0,0,0,0,0,1,0,0,4,0,5,0,0,0,0,0,0.00,56,51,51.0000,51.0000,7, +I Pistol,4,3,No,No,7,0,7,3,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0.00,59,59,59.0000,59.0000,4, +I Pistol,4,4,No,No,9,0,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0.00,57,57,57.0000,57.0000,5, +I Pistol,4,5,No,No,10,0,5,2,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0.00,67,67,67.0000,67.0000,1, +I Pistol,4,6,No,No,9,0,2,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,51,51,51.0000,51.0000,8, +I Pistol,4,7,No,No,10,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,50,50,50.0000,50.0000,9, +I Pistol,4,8,No,No,6,0,5,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,45,45,45.0000,45.0000,17, +I Pistol,4,9,No,No,9,0,6,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0.00,66,66,66.0000,66.0000,2, +I Pistol,4,10,No,No,2,0,6,3,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,31,31,31.0000,31.0000,31, +I Pistol,4,11,No,No,8,0,4,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0.00,52,52,52.0000,52.0000,6, +I Pistol,4,12,No,No,5,0,7,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0.00,46,46,46.0000,46.0000,14, +I Pistol,4,13,No,No,3,0,6,3,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0.00,36,36,36.0000,36.0000,23, +I Pistol,4,14,No,No,7,0,6,2,0,0,0,0,0,2,0,0,5,0,10,0,0,0,0,0,0.00,55,45,45.0000,45.0000,16, +I Pistol,4,15,No,No,6,0,6,0,0,0,1,0,0,1,0,0,8,0,15,0,0,0,0,0,0.00,48,33,33.0000,33.0000,29, +I Pistol,4,16,No,No,4,0,4,3,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,35,35,35.0000,35.0000,26, +I Pistol,4,17,No,No,7,0,5,1,0,0,0,0,0,1,0,0,7,0,5,0,0,0,0,0,0.00,51,46,46.0000,46.0000,15, +I Pistol,4,18,No,No,10,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,50,50,50.0000,50.0000,10, +I Pistol,4,19,No,No,5,0,8,2,0,0,0,0,0,1,0,0,5,0,5,0,0,0,0,0,0.00,51,46,46.0000,46.0000,13, +I Pistol,4,20,No,No,7,0,3,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,44,44,44.0000,44.0000,19, +I Pistol,4,21,No,No,1,0,10,1,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0.00,36,36,36.0000,36.0000,25, +I Pistol,4,22,No,No,3,0,5,3,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,33,33,33.0000,33.0000,28, +I Pistol,4,23,No,No,7,0,3,1,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,45,45,45.0000,45.0000,18, +I Pistol,4,24,No,No,9,0,1,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,48,48,48.0000,48.0000,11, +I Pistol,4,25,No,No,0,0,1,8,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0.00,11,11,11.0000,11.0000,37, +I Pistol,4,26,No,No,3,0,4,1,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0.00,28,28,28.0000,28.0000,34, +I Pistol,4,27,No,No,5,0,5,0,0,0,0,0,0,2,0,0,10,0,10,0,0,0,0,0,0.00,40,30,30.0000,30.0000,32, +I Pistol,4,28,No,No,4,0,6,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,38,38,38.0000,38.0000,22, +I Pistol,4,29,No,No,7,0,4,0,0,0,0,0,0,1,0,0,9,0,5,0,0,0,0,0,0.00,47,42,42.0000,42.0000,21, +I Pistol,4,30,No,No,3,0,5,2,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,32,32,32.0000,32.0000,30, +I Pistol,4,31,No,No,7,0,3,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,44,44,44.0000,44.0000,20, +I Pistol,4,32,No,No,6,0,6,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0.00,48,48,48.0000,48.0000,12, +I Pistol,4,33,No,No,2,0,6,1,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0.00,29,29,29.0000,29.0000,33, +I Pistol,4,34,No,No,3,0,0,6,0,0,0,0,0,2,0,0,11,0,10,0,0,0,0,0,0.00,21,11,11.0000,11.0000,36, +I Pistol,4,35,No,No,6,0,1,3,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,36,36,36.0000,36.0000,24, +I Pistol,4,36,No,No,1,0,2,2,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0.00,13,13,13.0000,13.0000,35, +I Pistol,4,37,No,No,4,0,4,1,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0.00,33,33,33.0000,33.0000,27, +I Pistol,4,38,Yes,No,2,0,2,4,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0.00,20,0,0.0000,0.0000,38, +I Pistol,4,39,No,No,7,0,3,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,47,47,47.0000,47.0000,1, +I Pistol,4,40,No,No,9,0,4,2,0,0,5,0,0,0,0,0,5,0,50,0,0,0,0,0,0.00,65,15,15.0000,15.0000,9, +I Pistol,4,41,No,No,1,0,7,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0.00,33,33,33.0000,33.0000,6, +I Pistol,4,42,No,No,3,0,7,3,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0.00,39,39,39.0000,39.0000,4, +I Pistol,4,43,No,No,6,0,4,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,46,46,46.0000,46.0000,2, +I Pistol,4,44,No,No,2,0,6,1,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0.00,29,29,29.0000,29.0000,7, +I Pistol,4,45,No,No,6,0,3,1,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,40,40,40.0000,40.0000,3, +I Pistol,4,46,No,No,5,0,2,2,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0.00,33,33,33.0000,33.0000,5, +I Pistol,4,47,No,No,2,0,6,1,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0.00,29,29,29.0000,29.0000,8, +I Pistol,4,48,Yes,No,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,10, +I Pistol,4,49,No,No,10,0,7,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0.00,82,82,82.0000,82.0000,1, +I Pistol,4,50,No,No,12,0,1,2,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0.00,68,68,68.0000,68.0000,2, +I Pistol,4,51,No,No,7,0,6,1,0,0,0,0,0,1,0,0,6,0,5,0,0,0,0,0,0.00,61,56,56.0000,56.0000,4, +I Pistol,4,52,No,No,5,0,3,3,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,43,43,43.0000,43.0000,6, +I Pistol,4,53,No,No,7,0,5,1,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0.00,57,57,57.0000,57.0000,3, +I Pistol,4,54,No,No,5,0,2,3,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,39,39,39.0000,39.0000,9, +I Pistol,4,55,No,No,10,0,4,1,0,0,5,0,0,0,0,0,5,0,50,0,0,0,0,0,0.00,68,18,18.0000,18.0000,14, +I Pistol,4,56,No,No,6,0,2,2,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,42,42,42.0000,42.0000,7, +I Pistol,4,57,No,No,4,0,9,2,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0.00,49,49,49.0000,49.0000,5, +I Pistol,4,58,No,No,3,0,4,3,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,37,37,37.0000,37.0000,10, +I Pistol,4,59,No,No,2,0,2,4,0,0,0,0,0,1,0,0,12,0,5,0,0,0,0,0,0.00,26,21,21.0000,21.0000,13, +I Pistol,4,60,No,No,3,0,2,5,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,33,33,33.0000,33.0000,11, +I Pistol,4,61,No,No,5,0,5,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,40,40,40.0000,40.0000,8, +I Pistol,4,62,No,No,3,0,4,1,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0.00,33,33,33.0000,33.0000,12, +I Pistol,4,63,No,No,2,0,0,3,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0.00,16,16,16.0000,16.0000,15, +I Pistol,4,64,No,No,7,0,1,1,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0.00,39,39,39.0000,39.0000,1, +I Pistol,4,65,No,No,4,0,4,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0.00,32,32,32.0000,32.0000,3, +I Pistol,4,66,No,No,3,0,6,1,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0.00,34,34,34.0000,34.0000,2, +I Pistol,4,67,No,No,2,0,5,5,0,0,0,0,0,1,0,0,8,0,5,0,0,0,0,0,0.00,30,25,25.0000,25.0000,4, +I Pistol,4,68,No,No,5,0,2,0,0,0,3,0,0,0,0,0,13,0,30,0,0,0,0,0,0.00,31,1,1.0000,1.0000,2, +I Pistol,4,69,No,No,3,0,3,1,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0.00,25,25,25.0000,25.0000,1, +I Pistol,4,70,No,Yes,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,3, +I Pistol,4,72,No,No,8,0,3,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0.00,52,52,52.0000,52.0000,1, +I Pistol,5,1,No,No,23,0,3,1,0,0,0,0,0,0,0,0,0,0,0,8.39,0,0,0,0,8.39,125,125,14.8987,135.0000,1, +I Pistol,5,2,No,No,15,0,10,1,1,0,0,0,0,0,0,0,0,0,10,8.6,0,0,0,0,8.60,106,96,11.1628,101.1483,8, +I Pistol,5,3,No,No,17,0,10,0,0,0,0,0,0,0,0,0,0,0,0,8.45,0,0,0,0,8.45,115,115,13.6095,123.3183,3, +I Pistol,5,4,No,No,22,0,5,0,0,0,0,0,0,0,0,0,0,0,0,9.03,0,0,0,0,9.03,125,125,13.8427,125.4314,2, +I Pistol,5,5,No,No,20,0,6,0,1,0,0,0,0,0,0,0,0,0,10,9.87,0,0,0,0,9.87,118,108,10.9422,99.1494,10, +I Pistol,5,6,No,No,20,0,7,0,0,0,0,0,0,0,0,0,0,0,0,12.22,0,0,0,0,12.22,121,121,9.9018,89.7221,17, +I Pistol,5,7,No,No,21,0,4,2,0,0,0,0,0,0,0,0,0,0,0,11.44,0,0,0,0,11.44,119,119,10.4021,94.2554,14, +I Pistol,5,8,No,No,20,0,7,0,0,0,0,0,0,0,0,0,0,0,0,11.12,0,0,0,0,11.12,121,121,10.8813,98.5976,11, +I Pistol,5,9,No,No,21,0,5,1,0,0,0,0,0,0,0,0,0,0,0,10.93,0,0,0,0,10.93,121,121,11.0704,100.3110,9, +I Pistol,5,10,No,No,18,0,9,0,0,0,0,0,0,0,0,0,0,0,0,9.58,0,0,0,0,9.58,117,117,12.2129,110.6634,5, +I Pistol,5,11,No,No,20,0,5,2,0,0,0,0,0,0,0,0,0,0,0,12.87,0,0,0,0,12.87,117,117,9.0909,82.3744,21, +I Pistol,5,12,No,No,22,0,3,2,0,0,0,0,0,0,0,0,0,0,0,11.51,0,0,0,0,11.51,121,121,10.5126,95.2567,12, +I Pistol,5,13,No,No,19,0,7,1,0,0,0,0,0,0,0,0,0,0,0,8.77,0,0,0,0,8.77,117,117,13.3409,120.8845,4, +I Pistol,5,14,No,No,22,0,5,0,0,0,0,0,0,0,0,0,0,0,0,10.6,0,0,0,0,10.60,125,125,11.7925,106.8541,7, +I Pistol,5,15,No,No,23,0,4,0,0,0,0,0,0,0,0,0,0,0,0,12.17,0,0,0,0,12.17,127,127,10.4355,94.5581,13, +I Pistol,5,16,No,No,17,0,9,0,1,0,0,0,0,0,0,0,0,0,10,12.65,0,0,0,0,12.65,112,102,8.0632,73.0622,25, +I Pistol,5,17,No,No,24,0,3,0,0,0,0,0,0,0,0,0,0,0,0,13.36,0,0,0,0,13.36,129,129,9.6557,87.4922,19, +I Pistol,5,18,No,No,23,0,4,0,0,0,0,0,0,0,0,0,0,0,0,12.35,0,0,0,0,12.35,127,127,10.2834,93.1799,15, +I Pistol,5,19,No,No,16,0,5,4,2,0,0,0,0,0,0,0,0,0,20,10.57,0,0,0,0,10.57,99,79,7.4740,67.7234,29, +I Pistol,5,20,No,No,19,0,8,0,0,0,0,0,0,0,0,0,0,0,0,9.75,0,0,0,0,9.75,119,119,12.2051,110.5928,6, +I Pistol,5,21,No,No,18,0,9,0,0,0,0,0,0,0,0,0,0,0,0,11.62,0,0,0,0,11.62,117,117,10.0688,91.2353,16, +I Pistol,5,22,No,No,23,0,3,0,1,0,0,0,0,0,0,0,0,0,10,13.59,0,0,0,0,13.59,124,114,8.3885,76.0098,22, +I Pistol,5,23,No,No,21,0,5,1,0,0,0,0,0,0,0,0,0,0,0,13.01,0,0,0,0,13.01,121,121,9.3005,84.2736,20, +I Pistol,5,24,No,No,23,0,4,0,0,0,0,0,0,0,0,0,0,0,0,13.09,0,0,0,0,13.09,127,127,9.7021,87.9126,18, +I Pistol,5,25,No,No,12,0,9,6,0,0,0,0,0,0,0,0,0,0,0,12.38,0,0,0,0,12.38,93,93,7.5121,68.0686,28, +I Pistol,5,26,No,No,21,0,4,2,0,0,0,0,0,0,0,0,0,0,0,14.55,0,0,0,0,14.55,119,119,8.1787,74.1088,24, +I Pistol,5,27,No,No,17,0,10,0,0,0,0,0,0,0,0,0,0,0,0,13.71,0,0,0,0,13.71,115,115,8.3880,76.0053,23, +I Pistol,5,28,No,No,17,0,9,1,0,0,0,0,0,0,0,0,0,0,0,14.67,0,0,0,0,14.67,113,113,7.7028,69.7966,26, +I Pistol,5,29,No,No,20,0,5,0,2,0,0,0,0,0,0,0,0,0,20,18.39,0,0,0,0,18.39,115,95,5.1659,46.8092,35, +I Pistol,5,30,No,No,15,0,9,1,2,0,0,0,0,0,0,0,0,0,20,11.72,0,0,0,0,11.72,103,83,7.0819,64.1705,30, +I Pistol,5,31,No,No,21,0,6,0,0,0,0,0,0,0,0,0,0,0,0,19.68,0,0,0,0,19.68,123,123,6.2500,56.6325,32, +I Pistol,5,32,No,No,25,0,2,0,0,0,0,0,0,0,0,0,0,0,0,18.98,0,0,0,0,18.98,131,131,6.9020,62.5404,31, +I Pistol,5,33,No,No,20,0,6,0,1,0,0,0,0,0,0,0,0,0,10,14.18,0,0,0,0,14.18,118,108,7.6164,69.0137,27, +I Pistol,5,34,No,No,16,0,8,1,2,0,0,0,0,0,0,0,0,0,20,14.48,0,0,0,0,14.48,105,85,5.8702,53.1910,33, +I Pistol,5,35,No,No,19,0,4,1,3,0,0,0,0,0,0,0,0,0,30,15.45,0,0,0,0,15.45,108,78,5.0485,45.7454,36, +I Pistol,5,36,No,No,26,0,1,0,0,0,0,0,0,0,0,0,0,0,0,23.76,0,0,0,0,23.76,133,133,5.5976,50.7209,34, +I Pistol,5,37,No,No,18,0,8,0,1,0,0,0,0,0,0,0,0,0,10,27.27,0,0,0,0,27.27,114,104,3.8137,34.5567,37, +I Pistol,5,38,Yes,No,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,38, +I Pistol,5,39,No,No,20,0,5,1,1,0,0,0,0,0,0,0,0,0,10,9.4,0,0,0,0,9.40,122,112,11.9149,135.0000,1, +I Pistol,5,40,No,No,17,0,9,1,0,0,0,0,0,0,0,0,0,0,0,13.87,0,0,0,0,13.87,123,123,8.8681,100.4787,3, +I Pistol,5,41,No,No,16,0,11,0,0,0,0,0,0,0,0,0,0,0,0,11.75,0,0,0,0,11.75,124,124,10.5532,119.5715,2, +I Pistol,5,42,No,No,15,0,8,2,2,0,0,0,0,0,0,0,0,0,20,9.47,0,0,0,0,9.47,101,81,8.5533,96.9119,6, +I Pistol,5,43,No,No,12,0,12,2,1,0,0,0,0,0,0,0,0,0,10,11.76,0,0,0,0,11.76,112,102,8.6735,98.2738,4, +I Pistol,5,44,No,No,20,0,5,1,1,0,0,0,0,0,0,0,0,0,10,14.67,0,0,0,0,14.67,116,106,7.2256,81.8686,8, +I Pistol,5,45,No,No,26,0,1,0,0,0,0,0,0,0,0,0,0,0,0,20.83,0,0,0,0,20.83,133,133,6.3850,72.3443,9, +I Pistol,5,46,No,No,21,0,6,0,0,0,0,0,0,0,0,0,0,0,0,14.19,0,0,0,0,14.19,123,123,8.6681,98.2126,5, +I Pistol,5,47,No,No,15,0,9,3,0,0,0,0,0,0,0,0,0,0,0,13.82,0,0,0,0,13.82,105,105,7.5977,86.0846,7, +I Pistol,5,49,No,No,13,0,9,4,1,0,0,0,0,0,0,0,0,0,10,7.18,0,0,0,0,7.18,109,99,13.7883,120.3222,3, +I Pistol,5,50,No,No,17,0,6,2,2,0,0,0,0,0,0,0,0,0,20,10.76,0,0,0,0,10.76,113,93,8.6431,75.4231,11, +I Pistol,5,51,No,No,18,0,8,1,0,0,0,0,0,0,0,0,0,0,0,8.08,0,0,0,0,8.08,124,124,15.3465,133.9197,2, +I Pistol,5,52,No,No,19,0,7,1,0,0,0,0,0,0,0,0,0,0,0,8.08,0,0,0,0,8.08,125,125,15.4703,135.0000,1, +I Pistol,5,53,No,No,18,0,5,4,0,0,0,0,0,0,0,0,0,0,0,10.71,0,0,0,0,10.71,118,118,11.0177,96.1448,9, +I Pistol,5,54,No,No,23,0,4,0,0,0,0,0,0,0,0,0,0,0,0,11.34,0,0,0,0,11.34,131,131,11.5520,100.8074,7, +I Pistol,5,55,No,No,23,0,4,0,0,0,0,0,0,0,0,0,0,0,0,11.27,0,0,0,0,11.27,131,131,11.6238,101.4339,6, +I Pistol,5,56,No,No,18,0,8,1,0,0,0,0,0,0,0,0,0,0,0,10.62,0,0,0,0,10.62,124,124,11.6761,101.8903,5, +I Pistol,5,57,No,No,11,0,14,1,1,0,0,0,0,0,0,0,0,0,10,6.86,0,0,0,0,6.86,98,88,12.8280,111.9422,4, +I Pistol,5,58,No,No,10,0,12,2,3,0,0,0,0,0,0,0,0,0,30,7.17,0,0,0,0,7.17,102,72,10.0418,87.6287,10, +I Pistol,5,59,No,No,19,0,7,0,1,0,0,0,0,0,0,0,0,0,10,14.05,0,0,0,0,14.05,123,113,8.0427,70.1838,12, +I Pistol,5,60,No,No,17,0,8,2,0,0,0,0,0,0,0,0,0,0,0,10.78,0,0,0,0,10.78,121,121,11.2245,97.9495,8, +I Pistol,5,61,No,No,20,0,6,1,0,0,0,0,0,0,0,0,0,0,0,16.2,0,0,0,0,16.20,119,119,7.3457,64.1015,13, +I Pistol,5,62,No,Yes,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,15, +I Pistol,5,63,No,No,14,0,11,1,1,0,0,0,0,0,0,0,0,0,10,14.77,0,0,0,0,14.77,116,106,7.1767,62.6267,14, +I Pistol,5,64,No,No,18,0,9,0,0,0,0,0,0,0,0,0,0,0,0,7.48,0,0,0,0,7.48,117,117,15.6417,135.0000,1, +I Pistol,5,65,No,No,13,0,6,5,3,0,0,0,0,0,0,0,0,0,30,9.64,0,0,0,0,9.64,88,58,6.0166,51.9279,4, +I Pistol,5,66,No,No,22,0,4,1,0,0,0,0,0,0,0,0,0,0,0,9.21,0,0,0,0,9.21,123,123,13.3550,115.2640,2, +I Pistol,5,67,No,No,9,0,15,2,1,0,0,0,0,0,0,0,0,0,10,12.31,0,0,0,0,12.31,92,82,6.6613,57.4922,3, +I Pistol,5,68,No,No,20,0,7,0,0,0,0,0,0,0,0,0,0,0,0,15.92,0,0,0,0,15.92,121,121,7.6005,130.3853,2, +I Pistol,5,69,No,No,21,0,6,0,0,0,0,0,0,0,0,0,0,0,0,15.63,0,0,0,0,15.63,123,123,7.8695,135.0000,1, +I Pistol,5,70,No,Yes,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,3, +I Pistol,5,72,No,No,25,0,2,0,0,0,0,0,0,0,0,0,0,0,0,14.01,0,0,0,0,14.01,133,133,9.4932,135.0000,1, +I Pistol,6,1,No,No,18,0,2,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10.00,96,96,9.6000,98.1003,3, +I Pistol,6,2,No,No,18,0,2,0,0,0,0,0,0,0,0,0,0,0,0,9.81,0,0,0,0,9.81,96,96,9.7859,100.0000,1, +I Pistol,6,3,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,9.61,0,0,0,0,9.61,94,94,9.7815,99.9550,2, +I Pistol,6,4,No,No,18,0,2,0,0,0,0,0,0,0,0,0,0,0,0,10.94,0,0,0,0,10.94,96,96,8.7751,89.6709,4, +I Pistol,6,5,No,No,17,0,2,1,0,0,0,0,0,0,0,0,0,0,0,11.73,0,0,0,0,11.73,92,92,7.8431,80.1469,7, +I Pistol,6,6,No,No,15,0,2,3,0,0,0,0,0,0,0,0,0,0,0,10.09,0,0,0,0,10.09,84,84,8.3251,85.0724,5, +I Pistol,6,7,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,12.03,0,0,0,0,12.03,94,94,7.8138,79.8475,8, +I Pistol,6,8,No,No,18,0,2,0,0,0,0,0,0,0,0,0,0,0,0,15.95,0,0,0,0,15.95,96,96,6.0188,61.5048,22, +I Pistol,6,9,No,No,12,0,8,0,0,0,0,0,0,0,0,0,0,0,0,11.08,0,0,0,0,11.08,84,84,7.5812,77.4706,9, +I Pistol,6,10,No,No,16,0,3,1,0,0,0,0,0,0,0,0,0,0,0,12.64,0,0,0,0,12.64,90,90,7.1203,72.7608,12, +I Pistol,6,11,No,No,13,0,5,2,0,0,0,0,0,0,0,0,0,0,0,11.63,0,0,0,0,11.63,82,82,7.0507,72.0496,13, +I Pistol,6,12,No,No,16,0,3,1,0,0,0,0,0,0,0,0,0,0,0,13.56,0,0,0,0,13.56,90,90,6.6372,67.8241,16, +I Pistol,6,13,No,No,16,0,4,0,0,0,0,0,0,0,0,0,0,0,0,11.47,0,0,0,0,11.47,92,92,8.0209,81.9638,6, +I Pistol,6,14,No,No,19,0,1,0,0,0,0,0,0,0,0,0,0,0,0,14.98,0,0,0,0,14.98,98,98,6.5421,66.8523,18, +I Pistol,6,15,No,No,18,0,2,0,0,0,0,0,0,0,0,0,0,0,0,13.19,0,0,0,0,13.19,96,96,7.2782,74.3744,11, +I Pistol,6,16,No,No,16,0,4,0,0,0,0,0,0,0,0,0,0,0,0,12.61,0,0,0,0,12.61,92,92,7.2958,74.5542,10, +I Pistol,6,17,No,No,16,0,4,0,0,0,0,0,0,0,0,0,0,0,0,13.05,0,0,0,0,13.05,92,92,7.0498,72.0404,14, +I Pistol,6,18,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,14.15,0,0,0,0,14.15,94,94,6.6431,67.8844,15, +I Pistol,6,19,No,No,10,0,7,3,0,0,0,0,0,0,0,0,0,0,0,11.39,0,0,0,0,11.39,74,74,6.4969,66.3904,19, +I Pistol,6,20,No,No,12,0,6,0,2,0,0,0,0,0,0,0,0,0,20,10.79,0,0,0,0,10.79,78,58,5.3753,54.9290,25, +I Pistol,6,21,No,No,15,0,4,1,0,0,0,0,0,0,0,0,0,0,0,16.54,0,0,0,0,16.54,88,88,5.3204,54.3680,26, +I Pistol,6,22,No,No,11,0,8,1,0,0,0,0,0,0,0,0,0,0,0,12.1,0,0,0,0,12.10,80,80,6.6116,67.5625,17, +I Pistol,6,23,No,No,13,0,7,0,0,0,0,0,0,0,0,0,0,0,0,13.85,0,0,0,0,13.85,86,86,6.2094,63.4525,20, +I Pistol,6,24,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,17.01,0,0,0,0,17.01,94,94,5.5262,56.4710,24, +I Pistol,6,25,No,No,13,0,6,1,0,0,0,0,0,0,0,0,0,0,0,15.79,0,0,0,0,15.79,84,84,5.3198,54.3619,27, +I Pistol,6,26,No,No,12,0,6,2,0,0,0,0,0,0,0,0,0,0,0,24.98,0,0,0,0,24.98,80,80,3.2026,32.7267,35, +I Pistol,6,27,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,15.43,0,0,0,0,15.43,94,94,6.0920,62.2528,21, +I Pistol,6,28,No,No,13,0,7,0,0,0,0,0,0,0,0,0,0,0,0,14.84,0,0,0,0,14.84,86,86,5.7951,59.2189,23, +I Pistol,6,29,No,No,19,0,1,0,0,0,0,0,0,0,0,0,0,0,0,19.47,0,0,0,0,19.47,98,98,5.0334,51.4352,28, +I Pistol,6,30,No,No,15,0,5,0,0,0,0,0,0,0,0,0,0,0,0,21.93,0,0,0,0,21.93,90,90,4.1040,41.9379,32, +I Pistol,6,31,No,No,12,0,5,3,0,0,0,0,0,0,0,0,0,0,0,16.89,0,0,0,0,16.89,78,78,4.6181,47.1914,30, +I Pistol,6,32,No,No,14,0,6,0,0,0,0,0,0,0,0,0,0,0,0,21.88,0,0,0,0,21.88,88,88,4.0219,41.0989,33, +I Pistol,6,33,No,No,9,0,2,1,8,0,4,0,0,0,0,0,0,0,120,9.65,0,0,0,0,9.65,52,0,0.0000,0.0000,37, +I Pistol,6,34,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,19.51,0,0,0,0,19.51,94,94,4.8180,49.2341,29, +I Pistol,6,35,No,No,19,0,1,0,0,0,0,0,0,0,0,0,0,0,0,40.22,0,0,0,0,40.22,98,98,2.4366,24.8991,36, +I Pistol,6,36,No,No,17,0,1,0,2,0,1,0,0,0,0,0,0,0,30,17.18,0,0,0,0,17.18,88,58,3.3760,34.4986,34, +I Pistol,6,37,No,No,14,0,6,0,0,0,0,0,0,0,0,0,0,0,0,19.24,0,0,0,0,19.24,88,88,4.5738,46.7387,31, +I Pistol,6,39,No,No,13,0,6,1,0,0,0,0,0,0,0,0,0,0,0,12.08,0,0,0,0,12.08,91,91,7.5331,100.0000,1, +I Pistol,6,40,No,No,12,0,6,0,2,0,0,0,0,0,0,0,0,0,20,10.96,0,0,0,0,10.96,84,64,5.8394,77.5166,7, +I Pistol,6,41,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,13.66,0,0,0,0,13.66,97,97,7.1010,94.2640,2, +I Pistol,6,42,No,No,11,0,7,2,0,0,0,0,0,0,0,0,0,0,0,14.32,0,0,0,0,14.32,78,78,5.4469,72.3062,8, +I Pistol,6,43,No,No,11,0,6,3,0,0,0,0,0,0,0,0,0,0,0,12.63,0,0,0,0,12.63,85,85,6.7300,89.3391,3, +I Pistol,6,44,No,No,13,0,7,0,0,0,0,0,0,0,0,0,0,0,0,12.82,0,0,0,0,12.82,86,86,6.7083,89.0510,5, +I Pistol,6,45,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,13.98,0,0,0,0,13.98,94,94,6.7239,89.2581,4, +I Pistol,6,46,No,No,18,0,2,0,0,0,0,0,0,0,0,0,0,0,0,20.04,0,0,0,0,20.04,96,96,4.7904,63.5914,9, +I Pistol,6,47,No,No,16,0,2,2,0,0,0,0,0,0,0,0,0,0,0,14.77,0,0,0,0,14.77,88,88,5.9580,79.0909,6, +I Pistol,6,49,No,No,15,0,5,0,0,0,0,0,0,0,0,0,0,0,0,9.92,0,0,0,0,9.92,95,95,9.5766,95.3712,3, +I Pistol,6,50,No,No,15,0,5,0,0,0,0,0,0,0,0,0,0,0,0,9.75,0,0,0,0,9.75,95,95,9.7436,97.0343,2, +I Pistol,6,51,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,9.66,0,0,0,0,9.66,97,97,10.0414,100.0000,1, +I Pistol,6,52,No,No,13,0,7,0,0,0,0,0,0,0,0,0,0,0,0,11.51,0,0,0,0,11.51,93,93,8.0799,80.4659,5, +I Pistol,6,53,No,No,19,0,1,0,0,0,0,0,0,0,0,0,0,0,0,12.61,0,0,0,0,12.61,99,99,7.8509,78.1853,6, +I Pistol,6,54,No,No,15,0,5,0,0,0,0,0,0,0,0,0,0,0,0,10.32,0,0,0,0,10.32,95,95,9.2054,91.6745,4, +I Pistol,6,55,No,No,14,0,5,1,0,0,0,0,0,0,0,0,0,0,0,12.04,0,0,0,0,12.04,92,92,7.6412,76.0970,9, +I Pistol,6,56,No,No,18,0,1,1,0,0,0,0,0,0,0,0,0,0,0,12.5,0,0,0,0,12.50,96,96,7.6800,76.4834,8, +I Pistol,6,57,No,No,10,0,6,4,0,0,0,0,0,0,0,0,0,0,0,11.28,0,0,0,0,11.28,72,72,6.3830,63.5668,11, +I Pistol,6,58,No,No,13,0,7,0,0,0,0,0,0,0,0,0,0,0,0,12.09,0,0,0,0,12.09,93,93,7.6923,76.6059,7, +I Pistol,6,59,No,No,14,0,5,0,1,0,0,0,0,0,0,0,0,0,10,13.08,0,0,0,0,13.08,90,80,6.1162,60.9098,12, +I Pistol,6,60,No,No,15,0,4,1,0,0,0,0,0,0,0,0,0,0,0,14.07,0,0,0,0,14.07,93,93,6.6098,65.8255,10, +I Pistol,6,61,No,No,15,0,5,0,0,0,0,0,0,0,0,0,0,0,0,18.11,0,0,0,0,18.11,90,90,4.9696,49.4911,14, +I Pistol,6,62,No,No,10,0,7,3,0,0,0,0,0,0,0,0,0,0,0,15.3,0,0,0,0,15.30,84,84,5.4902,54.6756,13, +I Pistol,6,63,No,No,14,0,5,0,1,0,0,0,0,0,0,0,0,0,10,19.47,0,0,0,0,19.47,90,80,4.1089,40.9196,15, +I Pistol,6,64,No,No,15,0,5,0,0,0,0,0,0,0,0,0,0,0,0,12.15,0,0,0,0,12.15,90,90,7.4074,100.0000,1, +I Pistol,6,65,No,No,16,0,4,0,0,0,0,0,0,0,0,0,0,0,0,13.17,0,0,0,0,13.17,92,92,6.9856,94.3057,2, +I Pistol,6,66,No,No,16,0,4,0,0,0,0,0,0,0,0,0,0,0,0,14.53,0,0,0,0,14.53,92,92,6.3317,85.4780,3, +I Pistol,6,67,No,No,11,0,9,0,0,0,0,0,0,0,0,0,0,0,0,13.6,0,0,0,0,13.60,82,82,6.0294,81.3970,4, +I Pistol,6,68,No,No,14,0,6,0,0,0,0,0,0,0,0,0,0,0,0,17.71,0,0,0,0,17.71,88,88,4.9689,100.0000,1, +I Pistol,6,69,No,No,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22.14,0,0,0,0,22.14,100,100,4.5167,90.8994,2, +I Pistol,6,70,No,Yes,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00,0,0,0.0000,0.0000,3, +I Pistol,6,72,No,No,17,0,3,0,0,0,0,0,0,0,0,0,0,0,0,13.51,0,0,0,0,13.51,97,97,7.1799,100.0000,1, +I Pistol,7,1,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,13.69,0,0,0,0,13.69,89,89,6.5011,87.8040,2, +I Pistol,7,2,No,No,15,0,2,2,0,0,0,3,0,0,0,0,0,0,0,11.8,0,0,0,0,11.80,83,83,7.0339,95.0000,1, +I Pistol,7,3,No,No,14,0,4,1,0,0,0,3,0,0,0,0,0,0,0,14.37,0,0,0,0,14.37,83,83,5.7759,78.0094,5, +I Pistol,7,4,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,18.33,0,0,0,0,18.33,89,89,4.8554,65.5771,14, +I Pistol,7,5,No,No,14,0,4,0,1,0,0,2,1,0,0,0,0,0,10,15.37,0,0,0,0,15.37,82,72,4.6845,63.2690,16, +I Pistol,7,6,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,14.27,0,0,0,0,14.27,89,89,6.2369,84.2357,4, +I Pistol,7,7,No,No,12,0,7,0,0,0,0,3,0,0,0,0,0,0,0,15.83,0,0,0,0,15.83,81,81,5.1169,69.1090,11, +I Pistol,7,8,No,No,18,0,1,0,0,0,0,3,0,0,0,0,0,0,0,16.49,0,0,0,0,16.49,93,93,5.6398,76.1713,6, +I Pistol,7,9,No,No,13,0,6,0,0,0,0,3,0,0,0,0,0,0,0,15.4,0,0,0,0,15.40,83,83,5.3896,72.7920,7, +I Pistol,7,10,No,No,11,0,8,0,0,0,0,3,0,0,0,0,0,0,0,15.21,0,0,0,0,15.21,79,79,5.1940,70.1503,10, +I Pistol,7,11,No,No,11,0,6,2,0,0,0,3,0,0,0,0,0,0,0,19.65,0,0,0,0,19.65,75,75,3.8168,51.5498,27, +I Pistol,7,12,No,No,19,0,0,0,0,0,0,3,0,0,0,0,0,0,0,14.81,0,0,0,0,14.81,95,95,6.4146,86.6357,3, +I Pistol,7,13,No,No,12,0,6,1,0,0,0,3,0,0,0,0,0,0,0,19.59,0,0,0,0,19.59,79,79,4.0327,54.4657,23, +I Pistol,7,14,No,No,16,0,2,1,0,0,0,3,0,0,0,0,0,0,0,25.19,0,0,0,0,25.19,87,87,3.4538,46.6471,29, +I Pistol,7,15,No,No,18,0,1,0,0,0,0,3,0,0,0,0,0,0,0,17.26,0,0,0,0,17.26,93,93,5.3882,72.7731,8, +I Pistol,7,16,No,No,14,0,5,0,0,0,0,3,0,0,0,0,0,0,0,16.74,0,0,0,0,16.74,85,85,5.0777,68.5795,13, +I Pistol,7,17,No,No,13,0,5,1,0,0,0,3,0,0,0,0,0,0,0,19.77,0,0,0,0,19.77,81,81,4.0971,55.3355,22, +I Pistol,7,18,No,No,14,0,5,0,0,0,0,3,0,0,0,0,0,0,0,16.72,0,0,0,0,16.72,85,85,5.0837,68.6606,12, +I Pistol,7,19,No,No,13,0,6,0,0,0,0,3,0,0,0,0,0,0,0,17.3,0,0,0,0,17.30,83,83,4.7977,64.7978,15, +I Pistol,7,20,No,No,10,0,9,0,0,0,0,3,0,0,0,0,0,0,0,14.73,0,0,0,0,14.73,77,77,5.2274,70.6014,9, +I Pistol,7,21,No,No,14,0,5,0,0,0,0,3,0,0,0,0,0,0,0,21.66,0,0,0,0,21.66,85,85,3.9243,53.0017,26, +I Pistol,7,22,No,No,19,0,0,0,0,0,0,3,0,0,0,0,0,0,0,22.46,0,0,0,0,22.46,95,95,4.2297,57.1264,19, +I Pistol,7,23,No,No,12,0,7,0,0,0,0,3,0,0,0,0,0,0,0,17.73,0,0,0,0,17.73,81,81,4.5685,61.7023,18, +I Pistol,7,24,No,No,17,0,2,0,0,0,0,3,0,0,0,0,0,0,0,19.85,0,0,0,0,19.85,91,91,4.5844,61.9170,17, +I Pistol,7,25,No,No,18,0,1,0,0,0,0,3,0,0,0,0,0,0,0,22.26,0,0,0,0,22.26,93,93,4.1779,56.4268,21, +I Pistol,7,26,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,21.05,0,0,0,0,21.05,89,89,4.2280,57.1035,20, +I Pistol,7,27,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,26.9,0,0,0,0,26.90,89,89,3.3086,44.6860,30, +I Pistol,7,28,No,No,16,0,2,1,0,0,0,3,0,0,0,0,0,0,0,26.6,0,0,0,0,26.60,87,87,3.2707,44.1741,31, +I Pistol,7,29,No,No,14,0,5,0,0,0,0,3,0,0,0,0,0,0,0,21.41,0,0,0,0,21.41,85,85,3.9701,53.6203,25, +I Pistol,7,30,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,22.25,0,0,0,0,22.25,89,89,4.0000,54.0241,24, +I Pistol,7,31,No,No,13,0,6,0,0,0,0,3,0,0,0,0,0,0,0,28.24,0,0,0,0,28.24,83,83,2.9391,39.6955,33, +I Pistol,7,32,No,No,12,0,6,1,0,0,0,3,0,0,0,0,0,0,0,31.73,0,0,0,0,31.73,79,79,2.4898,33.6273,36, +I Pistol,7,33,No,No,12,0,4,1,2,0,1,3,0,0,0,0,0,0,30,17.09,0,0,0,0,17.09,73,43,2.5161,33.9825,35, +I Pistol,7,34,No,No,11,0,6,2,0,0,0,3,0,0,0,0,0,0,0,24.15,0,0,0,0,24.15,75,75,3.1056,41.9443,32, +I Pistol,7,35,No,No,15,0,4,0,0,0,0,3,0,0,0,0,0,0,0,23.99,0,0,0,0,23.99,87,87,3.6265,48.9796,28, +I Pistol,7,36,No,No,19,0,0,0,0,0,0,3,0,0,0,0,0,0,0,34.22,0,0,0,0,34.22,95,95,2.7762,37.4954,34, +I Pistol,7,37,No,No,14,0,4,1,0,0,0,3,0,0,0,0,0,0,0,38.75,0,0,0,0,38.75,83,83,2.1419,28.9285,37, +I Pistol,7,39,No,No,10,0,5,3,1,0,0,3,0,0,0,0,0,0,10,18.12,0,0,0,0,18.12,76,66,3.6424,79.2987,5, +I Pistol,7,40,No,No,13,0,2,3,1,0,0,3,0,0,0,0,0,0,10,18.57,0,0,0,0,18.57,79,69,3.7157,80.8946,4, +I Pistol,7,41,No,No,10,0,8,1,0,0,0,3,0,0,0,0,0,0,0,19.25,0,0,0,0,19.25,84,84,4.3636,95.0000,1, +I Pistol,7,42,No,No,10,0,6,3,0,0,0,3,0,0,0,0,0,0,0,19.86,0,0,0,0,19.86,71,71,3.5750,77.8314,7, +I Pistol,7,43,No,No,11,0,4,4,0,0,0,3,0,0,0,0,0,0,0,23.13,0,0,0,0,23.13,79,79,3.4155,74.3589,8, +I Pistol,7,44,No,No,16,0,1,1,1,0,0,3,0,0,0,0,0,0,10,20.64,0,0,0,0,20.64,84,74,3.5853,78.0556,6, +I Pistol,7,45,No,No,12,0,7,0,0,0,0,3,0,0,0,0,0,0,0,21.36,0,0,0,0,21.36,81,81,3.7921,82.5579,2, +I Pistol,7,46,No,No,15,0,2,2,0,0,0,3,0,0,0,0,0,0,0,22.04,0,0,0,0,22.04,83,83,3.7659,81.9875,3, +I Pistol,7,47,No,No,9,0,8,1,1,0,0,3,0,0,0,0,0,0,10,20.05,0,0,0,0,20.05,70,60,2.9925,65.1498,9, +I Pistol,7,48,Yes,No,17,0,1,1,0,0,0,3,0,0,0,0,0,0,0,29.39,0,0,0,0,29.39,91,0,0.0000,0.0000,10, +I Pistol,7,49,No,No,12,0,7,0,0,0,0,3,0,0,0,0,0,0,0,11.33,0,0,0,0,11.33,88,88,7.7670,95.0000,1, +I Pistol,7,50,No,No,13,0,5,1,0,0,0,3,0,0,0,0,0,0,0,13.05,0,0,0,0,13.05,87,87,6.6667,81.5420,2, +I Pistol,7,51,No,No,15,0,3,0,1,0,0,3,0,0,0,0,0,0,10,17.04,0,0,0,0,17.04,87,77,4.5188,55.2705,9, +I Pistol,7,52,No,No,19,0,0,0,0,0,0,3,0,0,0,0,0,0,0,16.37,0,0,0,0,16.37,95,95,5.8033,70.9815,6, +I Pistol,7,53,No,No,14,0,5,0,0,0,0,3,0,0,0,0,0,0,0,15.06,0,0,0,0,15.06,90,90,5.9761,73.0951,5, +I Pistol,7,54,No,No,15,0,4,0,0,0,0,3,0,0,0,0,0,0,0,15.12,0,0,0,0,15.12,91,91,6.0185,73.6137,3, +I Pistol,7,55,No,No,12,0,7,0,0,0,0,3,0,0,0,0,0,0,0,14.65,0,0,0,0,14.65,88,88,6.0068,73.4706,4, +I Pistol,7,56,No,No,14,0,4,0,1,0,0,3,0,0,0,0,0,0,10,17.92,0,0,0,0,17.92,86,76,4.2411,51.8739,10, +I Pistol,7,57,No,No,11,0,6,2,0,0,0,3,0,0,0,0,0,0,0,13.95,0,0,0,0,13.95,75,75,5.3763,65.7588,7, +I Pistol,7,58,No,No,12,0,4,3,0,0,0,3,0,0,0,0,0,0,0,20.88,0,0,0,0,20.88,82,82,3.9272,48.0345,11, +I Pistol,7,59,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,18.7,0,0,0,0,18.70,92,92,4.9198,60.1752,8, +I Pistol,7,60,No,No,10,0,5,2,2,0,0,2,1,0,0,0,0,0,20,16.65,0,0,0,0,16.65,74,54,3.2432,39.6683,12, +I Pistol,7,61,No,No,13,0,3,2,1,0,0,3,0,0,0,0,0,0,10,27.84,0,0,0,0,27.84,76,66,2.3707,28.9966,13, +I Pistol,7,62,No,Yes,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0.00,15,0,0.0000,0.0000,15, +I Pistol,7,63,No,No,12,0,2,3,2,0,0,3,0,0,0,0,0,0,20,32.59,0,0,0,0,32.59,74,54,1.6569,20.2659,14, +I Pistol,7,64,No,No,16,0,3,0,0,0,0,3,0,0,0,0,0,0,0,16.44,0,0,0,0,16.44,89,89,5.4136,95.0000,1, +I Pistol,7,65,No,No,12,0,7,0,0,0,0,3,0,0,0,0,0,0,0,21.64,0,0,0,0,21.64,81,81,3.7431,65.6854,2, +I Pistol,7,66,No,No,12,0,4,2,1,0,0,3,0,0,0,0,0,0,10,20.05,0,0,0,0,20.05,74,64,3.1920,56.0145,3, +I Pistol,7,67,No,No,10,0,6,2,1,0,0,3,0,0,0,0,0,0,10,28.94,0,0,0,0,28.94,70,60,2.0733,36.3831,4, +I Pistol,7,68,No,No,11,0,7,1,0,0,0,3,0,0,0,0,0,0,0,20.49,0,0,0,0,20.49,77,77,3.7579,95.0000,1, +I Pistol,7,69,No,No,17,0,1,1,0,0,0,3,0,0,0,0,0,0,0,26.79,0,0,0,0,26.79,89,89,3.3221,83.9829,2, +I Pistol,7,70,No,Yes,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0.00,15,0,0.0000,0.0000,3, +I Pistol,7,71,Yes,No,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0.00,15,0,0.0000,0.0000,4, +I Pistol,7,72,No,No,17,0,2,0,0,0,0,3,0,0,0,0,0,0,0,17.32,0,0,0,0,17.32,93,93,5.3695,95.0000,1, +$END \ No newline at end of file diff --git a/tests/test_cli/test_parse_match.py b/tests/test_cli/test_parse_match.py index aaacbcb..6f2b318 100644 --- a/tests/test_cli/test_parse_match.py +++ b/tests/test_cli/test_parse_match.py @@ -1,28 +1,21 @@ -from ..test_parsers_match_report.mock_data import EXAMPLE_REPORT +import pytest - -def test_parse_match_default(cli_invoke, tmp_path): - match_file = tmp_path / "test-match.txt" - match_file.write_text(EXAMPLE_REPORT) - result = cli_invoke(["parse-match", str(match_file)]) - assert result.exit_code == 0 - assert result.stdout.lstrip().startswith("{") - assert result.stdout.rstrip().endswith("}") +from ..mock_data import match_reports -def test_parse_match_pandas(cli_invoke, tmp_path): - match_file = tmp_path / "test-match1.txt" - match_file.write_text(EXAMPLE_REPORT) - result = cli_invoke(["parse-match", str(match_file), "--parser=pandas"]) - assert result.exit_code == 0 - assert result.stdout.lstrip().startswith("{") - assert result.stdout.rstrip().endswith("}") - - -def test_parse_match_strict(cli_invoke, tmp_path): - match_file = tmp_path / "test-match2.txt" - match_file.write_text(EXAMPLE_REPORT) - result = cli_invoke(["parse-match", str(match_file), "--parser=strict"]) +@pytest.mark.parametrize("match_report_file", [*match_reports.BY_FILENAME.keys()]) +@pytest.mark.parametrize( + "cmd_args", + [ + pytest.param([], id="default"), + pytest.param(["--parser=pandas"], id="opt-parser-pandas"), + pytest.param(["--parser=strict"], id="opt-parser-strict"), + ], +) +def test_cli_parse_match(match_report_file, cmd_args, cli_invoke, tmp_path): + match_file = tmp_path / "test-match.txt" + match_file.write_text(match_reports.BY_FILENAME[match_report_file]) + result = cli_invoke(["parse-match", str(match_file), *cmd_args]) assert result.exit_code == 0 assert result.stdout.lstrip().startswith("{") assert result.stdout.rstrip().endswith("}") diff --git a/tests/test_parsers_match_report/shared.py b/tests/test_parsers_match_report/shared.py index 6b791a6..1c9b25f 100644 --- a/tests/test_parsers_match_report/shared.py +++ b/tests/test_parsers_match_report/shared.py @@ -4,7 +4,7 @@ from hitfactorpy.parsers.match_report.models import ParsedMatchReport -def assert_example_match_report(report: ParsedMatchReport): +def assert_example_uspsa_match_report(report: ParsedMatchReport): """Assert the expected state of the report after sucessful parsing""" assert report assert report.name == "Paul Bunyan USPSA - January 2023 NW01" @@ -27,6 +27,9 @@ def assert_example_match_report(report: ParsedMatchReport): assert report.stages[0].classifier is False assert report.stages[0].internal_id == 1 assert report.stages[0].scoring_type == Scoring.COMSTOCK + assert report.stages[0].number == 1 + assert report.stages[0].gun_type == "Pistol" + assert report.stages[2].name == "CM 22-06 Blue's Don't Care" # Verify a classifier stage @@ -89,7 +92,9 @@ def assert_example_match_report(report: ParsedMatchReport): # Verify a stage score with a DQ assert report.stage_scores[37].dq is True assert report.stage_scores[37].dnf is False - assert report.stage_scores[37].competitor_id == 38 + assert next( + (c for c in report.competitors if c.internal_id == report.stage_scores[37].competitor_id), None + ), "DQ'ed competitor not found in competitors list" # Verify a stage score with a DNF assert report.stage_scores[69].dnf is True diff --git a/tests/test_parsers_match_report/test_pandas_parser.py b/tests/test_parsers_match_report/test_pandas_parser.py deleted file mode 100644 index edf7d52..0000000 --- a/tests/test_parsers_match_report/test_pandas_parser.py +++ /dev/null @@ -1,42 +0,0 @@ -import pytest - -from hitfactorpy.parsers.match_report.pandas import parse_match_report -from hitfactorpy.parsers.match_report.pandas.dataframe import load_match_report_dataframes - -from .mock_data import EXAMPLE_REPORT -from .shared import assert_example_match_report - - -def test_parse_match_report(): - assert (report := parse_match_report(EXAMPLE_REPORT)) - assert_example_match_report(report) - - -@pytest.mark.parametrize( - "test_input", - [ - "", - "$PRACTISCORE", - "$INFO", - "$END", - "$\nD", - "$PRACTISCORE \n$INFO \nZ \nA \nD \nE \nF \nG \nH \nI \n$END" "", - ], -) -def test_parse_match_report_nothing_parsed(test_input): - report = parse_match_report(test_input) - assert report - assert report.name is None - assert report.raw_date is None - assert report.date is None - assert report.match_level is None - assert len(report.stages) == 0 - assert len(report.competitors) == 0 - assert len(report.stage_scores) == 0 - - -def test_load_match_report_dataframes(): - dataframes = load_match_report_dataframes(EXAMPLE_REPORT) - assert not dataframes.competitors.empty - assert not dataframes.stages.empty - assert not dataframes.stage_scores.empty diff --git a/tests/test_parsers_match_report/test_parsers.py b/tests/test_parsers_match_report/test_parsers.py new file mode 100644 index 0000000..beb7083 --- /dev/null +++ b/tests/test_parsers_match_report/test_parsers.py @@ -0,0 +1,51 @@ +import pytest + +from hitfactorpy.parsers.match_report.pandas import parse_match_report as parse_match_report_pandas +from hitfactorpy.parsers.match_report.pandas.dataframe import load_match_report_dataframes +from hitfactorpy.parsers.match_report.strict import parse_match_report as parse_match_report_strict + +from ..mock_data import match_reports + + +@pytest.mark.parametrize( + "match_report_file,validate_report_fn", + [*match_reports.VALIDATORS.items()], +) +@pytest.mark.parametrize("parser_fn", [parse_match_report_pandas, parse_match_report_strict]) +def test_parse_match_report(match_report_file, validate_report_fn, parser_fn): + file_contents = match_reports.BY_FILENAME[match_report_file] + report = parser_fn(file_contents) + assert report + validate_report_fn(report) + + +@pytest.mark.parametrize( + "test_input", + [ + pytest.param("", id="empty-string"), + "$PRACTISCORE", + "$INFO", + "$END", + "$\nD", + pytest.param("$PRACTISCORE \n$INFO \nZ \nA \nD \nE \nF \nG \nH \nI \n$END", id="empty-report-with-markers"), + ], +) +@pytest.mark.parametrize("parser_fn", [parse_match_report_pandas, parse_match_report_strict]) +def test_parse_match_report_nothing_parsed(test_input, parser_fn): + report = parser_fn(test_input) + assert report + assert report.name is None + assert report.raw_date is None + assert report.date is None + assert report.match_level is None + assert len(report.stages) == 0 + assert len(report.competitors) == 0 + assert len(report.stage_scores) == 0 + + +@pytest.mark.parametrize("match_report_file", [*match_reports.BY_FILENAME.keys()]) +def test_load_match_report_dataframes(match_report_file): + dataframes = load_match_report_dataframes(match_reports.BY_FILENAME[match_report_file]) + assert not dataframes.competitors.empty + assert not dataframes.stages.empty + assert not dataframes.stage_scores.empty diff --git a/tests/test_parsers_match_report/test_strict_parser.py b/tests/test_parsers_match_report/test_strict_parser.py deleted file mode 100644 index 7909b4a..0000000 --- a/tests/test_parsers_match_report/test_strict_parser.py +++ /dev/null @@ -1,34 +0,0 @@ -import pytest - -from hitfactorpy.parsers.match_report.strict import parse_match_report - -from .mock_data import EXAMPLE_REPORT -from .shared import assert_example_match_report - - -def test_parse_match_report(): - assert (report := parse_match_report(EXAMPLE_REPORT)) - assert_example_match_report(report) - - -@pytest.mark.parametrize( - "test_input", - [ - "", - "$PRACTISCORE", - "$INFO", - "$END", - "$\nD", - "$PRACTISCORE \n$INFO \nZ \nA \nD \nE \nF \nG \nH \nI \n$END" "", - ], -) -def test_parse_match_report_nothing_parsed(test_input): - report = parse_match_report(test_input) - assert report - assert report.name is None - assert report.raw_date is None - assert report.date is None - assert report.match_level is None - assert len(report.stages) == 0 - assert len(report.competitors) == 0 - assert len(report.stage_scores) == 0 diff --git a/tox.ini b/tox.ini index 5371255..f297fdd 100644 --- a/tox.ini +++ b/tox.ini @@ -1,25 +1,39 @@ [tox] +min_version = 2.0 isolated_build = true -envlist = py310, py311, lint +envlist = py{310,311}-{linux,darwin,win32} +skip_missing_interpreters = true [gh-actions] +description = Github actions config python = 3.10: py310 3.11: py311 +[gh-actions:env] +PLATFORM = + ubuntu-latest: linux + macos-latest: darwin + windows-latest: win32 + [testenv] +description = Run tests and generate coverage report passenv = PYTHON_VERSION -allowlist_externals = poetry, mypy -commands = - poetry install -v - poetry run pytest tests --cov --cov-config=pyproject.toml --cov-report=xml - poetry run coverage report -m - poetry run mypy hitfactorpy - -[testenv:lint] -allowlist_externals = black, flake8 +allowlist_externals = + poetry + python + linux,darwin,win32: echo +; deps = +; linux: +; darwin: +; win32: +commands_pre = + python -c 'import sys; print("Setup tests for " + sys.platform)' + linux: echo "Linux test setup" + darwin: echo "MacOS test setup" + win32: echo "Windows test setup" commands = - black hitfactorpy tests - flake8 hitfactorpy tests -extras = - lint + linux,darwin,win32: + poetry install -v + poetry run pytest tests --cov --cov-config=pyproject.toml --cov-report=xml + poetry run coverage report -m