From 9f7350b706513829c94e161f38f4f0496f691a37 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 12:54:53 -0700 Subject: [PATCH 01/13] py: fix from_http always raising TypeError The downloaded bytes were wrapped in a list before being handed to loads(), which only accepts str, list[str], or bytes. Pass the response body through directly. Co-Authored-By: Claude Fable 5.1 --- crates/fec-py/src/fecfile.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/crates/fec-py/src/fecfile.rs b/crates/fec-py/src/fecfile.rs index 5e73afa..445a46c 100644 --- a/crates/fec-py/src/fecfile.rs +++ b/crates/fec-py/src/fecfile.rs @@ -298,9 +298,7 @@ pub fn from_http<'py>( match urlopen.call1((primary_url,)) { Ok(response) => { let data = response.call_method0("read")?; - let bytes: Vec = data.extract()?; - let input = PyList::new_bound(py, [bytes]); - let result = loads(py, input.as_any(), options)?; + let result = loads(py, &data, options)?; Ok(Some(result)) } Err(_) => { @@ -310,9 +308,7 @@ pub fn from_http<'py>( match urlopen.call1((fallback_url,)) { Ok(response) => { let data = response.call_method0("read")?; - let bytes: Vec = data.extract()?; - let input = PyList::new_bound(py, [bytes]); - let result = loads(py, input.as_any(), options)?; + let result = loads(py, &data, options)?; Ok(Some(result)) } Err(_) => Ok(None), // 404 - return None From e51af51ab5d17d1aec0ff90171086fe1ecefb1c8 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 12:54:53 -0700 Subject: [PATCH 02/13] py: user-facing README, quickstart notebook Rewrite the README around usage instead of build notes, add examples/quickstart.ipynb with a `make notebook` target, and pass --no-cache in test-pytest so uv doesn't reuse a stale wheel. Co-Authored-By: Claude Fable 5.1 --- crates/fec-py/Makefile | 12 +- crates/fec-py/README.md | 323 +++---- crates/fec-py/examples/quickstart.ipynb | 1153 +++++++++++++++++++++++ 3 files changed, 1300 insertions(+), 188 deletions(-) create mode 100644 crates/fec-py/examples/quickstart.ipynb diff --git a/crates/fec-py/Makefile b/crates/fec-py/Makefile index 2f9000f..dad9ebc 100644 --- a/crates/fec-py/Makefile +++ b/crates/fec-py/Makefile @@ -1,4 +1,4 @@ -.PHONY: build build-release demo demo-fecfile clean +.PHONY: build build-release demo demo-fecfile notebook test-pytest clean # Build development wheel build: @@ -20,8 +20,16 @@ demo-fecfile: build --with 'libfec_parser @ file://dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' \ demo-fecfile.py ../../cache2/*.fec +# Open examples/quickstart.ipynb in JupyterLab with the freshly built wheel installed +notebook: build + uv run --no-cache --no-project --isolated \ + --with "$$(ls $(CURDIR)/dist/libfec_parser-*.whl | head -1)" \ + --with pandas \ + --with jupyterlab \ + jupyter lab examples/quickstart.ipynb + test-pytest: - uv run --no-project --isolated \ + uv run --no-cache --no-project --isolated \ --with pytest \ --with 'libfec_parser @ file://dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' \ pytest tests/ \ No newline at end of file diff --git a/crates/fec-py/README.md b/crates/fec-py/README.md index 9602164..94ec746 100644 --- a/crates/fec-py/README.md +++ b/crates/fec-py/README.md @@ -1,258 +1,209 @@ # libfec_parser -Python bindings for the FEC parser library. +Python bindings for [libfec](https://github.com/asg017/libfec)'s `.fec` parser. Parse FEC electronic filings from a path, from bytes, or straight from the FEC's website, with the parsing done in Rust. -## Installation - -```bash -# Install from wheel (after building) -pip install dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl -``` - -## Building - -**Note:** Don't use `cargo build` directly - use `maturin` to build PyO3 extension modules. - -### Quick Start with Makefile - -The easiest way to build is using the Makefile: - -```bash -cd /Users/alex/projects/libfec/crates/fec-py +```python +from libfec_parser import fecfile -# Build development wheel -make build +filing = fecfile.from_file("1721696.fec") -# Build release (optimized) wheel -make build-release +filing["filing"]["committee_name"] # 'PFIZER INC. PAC' +filing["filing"]["col_a_total_receipts"] # '83741.93' -# Run demo scripts -make demo -make demo-fecfile +for row in filing["itemizations"]["Schedule A"]: + print(row["contributor_last_name"], row["contribution_amount"]) ``` -### Development Build +Two APIs are included: -For local development and testing, use `maturin develop` to build and install in-place: +- [`libfec_parser.fecfile`](#fecfile-api): rows as dicts keyed by column name, modeled on the [`fecfile`](https://pypi.org/project/fecfile/) package. +- [`libfec_parser.parser`](#native-api): a lower-level `Filing` class with positional fields. -```bash -cd /Users/alex/projects/libfec -maturin develop -m crates/fec-py/Cargo.toml -``` +For a guided tour, including loading a filing into pandas, see [`examples/quickstart.ipynb`](examples/quickstart.ipynb). -This installs the package in editable mode in your current Python environment. +> **Status:** early and unpublished. The package is not on PyPI yet, and the API may change. -### Manual Build +## Installation -To build a distributable wheel package manually: +`libfec_parser` has to be built from source for now. You'll need a [Rust toolchain](https://rustup.rs/) and [uv](https://docs.astral.sh/uv/) (or `pip install maturin`). ```bash -cd /Users/alex/projects/libfec -maturin build -m crates/fec-py/Cargo.toml --out dist -``` +git clone https://github.com/asg017/libfec +cd libfec/crates/fec-py -For a release (optimized) build: +# Install into the active virtualenv +uvx maturin develop --release -```bash -cd /Users/alex/projects/libfec -maturin build -m crates/fec-py/Cargo.toml --release --out dist +# ...or build a wheel into dist/ and install it wherever you like +uvx maturin build --release --out dist +pip install dist/libfec_parser-*.whl ``` -## Usage - -### fecfile Compatibility API +Wheels use the stable ABI (`abi3`), so one build works on Python 3.9 and up. -The `libfec_parser.fecfile` module provides a compatibility layer that mimics the API of the [fecfile](https://pypi.org/project/fecfile/) PyPI package: +## `fecfile` API ```python -from libfec_parser.fecfile import loads, from_file, parse_header, parse_line, print_example - -# Load and parse a filing from a file -parsed = from_file("./path/to/filing.fec") +from libfec_parser import fecfile +``` -# Access parsed data -print(parsed['header']['fec_version']) -print(parsed['filing']['form_type']) -print(parsed['itemizations']['Schedule A'][0]) +### Loading a filing -# Parse from string/bytes -content = open("filing.fec", "rb").read() -parsed = loads(content) +| Function | Input | +| --- | --- | +| `from_file(path, options=None)` | Path to a `.fec` file, as a `str` | +| `loads(content, options=None)` | `bytes`, a `str`, or a list of lines | +| `from_http(filing_id, options=None)` | A filing ID (`int` or `str`), downloaded from `docquery.fec.gov`. Returns `None` if the filing doesn't exist | -# Filter specific schedules -parsed = loads(content, options={'filter_itemizations': ['SA', 'SB']}) +All three return a dict with the same shape: -# Parse just the header -header, version, lines_consumed = parse_header(header_line) +```python +{ + "header": {"record_type": "HDR", "fec_version": "8.4", "software_name": "FECFile", ...}, + "filing": {"form_type": "F3XN", "filer_committee_id_number": "C00016683", "committee_name": ..., ...}, + "itemizations": { + "Schedule A": [{"form_type": "SA11AI", "contributor_last_name": ..., ...}, ...], + "Schedule B": [...], + }, + "text": [...], +} +``` -# Parse a single line -line_dict = parse_line(line, version) +- `header` is the `HDR` record. `report_id`, `report_number` and `comment` are only present when the filing sets them. +- `filing` is the cover page, with one key for every column on the form. +- `itemizations` groups rows by schedule. Row types starting with `S` are keyed `"Schedule A"`, `"Schedule B"`, and so on. Anything else is keyed by its row type, such as `"F1S"`. Each row's exact line number is in its `form_type`. +- `text` holds free-form `TEXT` records. -# Print example (first item of each type) -print_example(parsed) -``` +Column names come from libfec's mappings for the filing's FEC format version. Rows with no known mapping fall back to `field_0`, `field_1`, …. -See [demo-fecfile.py](demo-fecfile.py) for a complete demonstration. +### Options -### Native Python API +`filter_itemizations` takes a list of row-type prefixes. Rows that don't match are skipped, which saves most of the memory on large filings: ```python -from libfec_parser.parser import Filing +# Only Schedule A and Schedule B rows +fecfile.from_file(path, options={"filter_itemizations": ["SA", "SB"]}) -# Create a Filing from a file path -f = Filing("./path/to/filing.fec") - -# Access header information -print(f.header.fec_version) # FEC file version -print(f.header.software_name) # Software used to create filing -print(f.header.software_version) # Software version - -# Access cover page information -print(f.cover.form_type) # Form type (e.g., "F3P") -print(f.cover.filer_id) # Committee/filer ID -print(f.cover.filer_name) # Committee/filer name -print(f.cover.report_code) # Report code (e.g., "Q1", "M10") -print(f.cover.coverage_from_date) # Coverage period start -print(f.cover.coverage_through_date) # Coverage period end - -# Iterate through itemizations (schedules) -for itemization in f.itemizations: - print(itemization.row_type) # Row type (e.g., "SA11AI", "SB21B") - print(itemization.fields()) # All fields as a list - print(itemization[0]) # Access specific field by index - -# Alternative: Create from bytes -with open("./path/to/filing.fec", "rb") as file: - f = Filing(file.read()) - -# Alternative: Create from file-like object -import urllib.request -with urllib.request.urlopen("https://example.com/filing.fec") as response: - f = Filing(response) -``` +# Only line 11(a)(i) of Schedule A +fecfile.from_file(path, options={"filter_itemizations": ["SA11AI"]}) -### Legacy Function +# Header and cover page only +fecfile.from_file(path, options={"filter_itemizations": []}) +``` -The `fec_header` function is also available for quick header parsing: +### Parsing single records ```python -from libfec_parser.parser import fec_header -from pathlib import Path - -contents = Path("./filing.fec").read_bytes() -version = fec_header(contents) # Returns FEC version string -print(version) # e.g., "8.4" +header, version, lines_consumed = fecfile.parse_header(first_line) +row = fecfile.parse_line(line, version) ``` -## Running the Demo - -The easiest way to run the demos is using the Makefile: +`.fec` fields are separated by the ASCII 28 "file separator" character, which `str.splitlines()` treats as a line break. Split on `"\n"` when breaking a filing into lines yourself. -```bash -cd /Users/alex/projects/libfec/crates/fec-py +`fecfile.print_example(parsed)` prints the header, cover page, and the first row of each schedule as JSON. -# Run demo.py (will build if needed) -make demo +### Differences from `fecfile` -# Run demo-fecfile.py -make demo-fecfile -``` +- **Every value is a string.** Amounts are not converted to `float`, and dates stay as `YYYYMMDD`. The `as_strings` option is accepted and ignored. +- Only the ASCII 28-delimited format (FEC version 6 and later) is supported by `parse_header()` and `parse_line()`. +- `from_http()` reads the whole response into memory before parsing, and there is no `iter_file()` / `iter_http()` yet. -Or run manually with specific files: +## Native API -```bash -# Run with the built wheel using uv -uv run --no-cache --no-project --isolated \ - --with 'libfec_parser @ file://dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' \ - demo.py ../../cache2/1461586.fec ../../cache2/1478292.fec +```python +from libfec_parser.parser import Filing -# Or if installed locally -python demo.py path/to/filing1.fec path/to/filing2.fec +filing = Filing("1721696.fec") +# Filing(form_type='F3XN', filer_id='C00016683', 1387 itemizations) ``` -The demos will parse the provided FEC files and demonstrate the API usage +`Filing(source)` accepts a path (`str`), `bytes`, or any object with a `.read()` method that returns bytes: -## API Reference +```python +import urllib.request -### Classes +with urllib.request.urlopen("https://docquery.fec.gov/dcdev/posted/1721696.fec") as response: + filing = Filing(response) +``` -#### `Filing` +The whole filing is parsed up front. A bad path raises `IOError`, an unparseable filing raises `ValueError`. -Main class for parsing FEC filing files. +### `Filing` -**Constructor:** `Filing(source)` -- `source`: Can be a file path (str), bytes, or file-like object with a `read()` method +| Attribute | Type | | +| --- | --- | --- | +| `header` | `Header` | The `HDR` record | +| `cover` | `Cover` | The cover page | +| `itemizations` | `list[Itemization]` | Every remaining row, in file order | -**Attributes:** -- `header`: `Header` object with filing header information -- `cover`: `Cover` object with cover page information -- `itemizations`: List of `Itemization` objects representing all schedule rows +Each access to `itemizations` copies the list, so bind it to a variable rather than indexing `filing.itemizations` in a loop. -#### `Header` +### `Header` -Contains FEC filing header information. +| Attribute | Type | | +| --- | --- | --- | +| `record_type` | `str` | Always `"HDR"` | +| `ef_type` | `str` | Electronic filing type | +| `fec_version` | `str` | FEC format version, such as `"8.4"` | +| `software_name` | `str` | Software that produced the filing | +| `software_version` | `str` | | +| `report_id` | `str \| None` | For amendments, the filing being amended | +| `report_number` | `str \| None` | | +| `comment` | `str \| None` | | -**Attributes:** -- `record_type`: str - Record type (always "HDR") -- `ef_type`: str - Electronic filing type -- `fec_version`: str - FEC version (e.g., "8.4", "8.5") -- `software_name`: str - Software name used to create filing -- `software_version`: str - Software version -- `report_id`: Optional[str] - Report ID if present -- `report_number`: Optional[str] - Report number if present -- `comment`: Optional[str] - Comment if present +### `Cover` -#### `Cover` +| Attribute | Type | | +| --- | --- | --- | +| `form_type` | `str` | Such as `"F3XN"` or `"F3PA"` | +| `filer_id` | `str` | Committee ID | +| `filer_name` | `str` | | +| `report_code` | `str \| None` | Such as `"Q1"`, `"M8"`, `"YE"` | +| `coverage_from_date` | `str \| None` | ISO formatted, `"2023-07-01"` | +| `coverage_through_date` | `str \| None` | ISO formatted | -Contains FEC filing cover page information. +`cover.fields()` returns the same six values as a dict. For the rest of the cover page, use the [`fecfile` API](#fecfile-api). -**Attributes:** -- `form_type`: str - Form type (e.g., "F3P", "F3X") -- `filer_id`: str - Committee or filer ID -- `filer_name`: str - Committee or filer name -- `report_code`: Optional[str] - Report code (e.g., "Q1", "M10", "YE") -- `coverage_from_date`: Optional[str] - Coverage period start date -- `coverage_through_date`: Optional[str] - Coverage period end date +### `Itemization` -**Methods:** -- `fields()`: Returns a dictionary of all cover record fields +A single row: its `row_type` (such as `"SA11AI"`) plus the raw fields, in file order and without column names. -#### `Itemization` +```python +item = filing.itemizations[0] -Represents a single itemization (schedule) row in the filing. +item.row_type # 'SA11AI' +len(item) # 45 +item[0] # 'SA11AI' +item[-1] # negative indexes work +item.fields() # all fields as a list[str] +``` -**Attributes:** -- `row_type`: str - Row type identifier (e.g., "SA11AI", "SB21B") +### `fec_header(contents)` -**Methods:** -- `fields()`: Returns list of all field values -- `__len__()`: Returns number of fields -- `__getitem__(idx)`: Access field by index (supports negative indexing) +Takes the `bytes` of a filing and returns just its FEC format version. ## Development -After making changes to the Rust code: +Build with `maturin`, not `cargo build`, which can't link a Python extension module on its own. -1. Rebuild and test: - ```bash - cd /Users/alex/projects/libfec/crates/fec-py - make build - make demo - ``` +```bash +make build # debug wheel into dist/ +make build-release # optimized wheel into dist/ +make test-pytest # run tests/ against the wheel in dist/ +make notebook # build, then open examples/quickstart.ipynb in JupyterLab +``` -Or manually: +The tests look for `.fec` files in the repo's `cache/` and `benchmarks/` directories and skip when none are found. See [`tests/README.md`](tests/README.md). -1. Rebuild the wheel: - ```bash - cd /Users/alex/projects/libfec/crates/fec-py - maturin build -m Cargo.toml --out dist - ``` +Rebuilt wheels keep the same filename, so `uv` will happily reuse a stale cached copy. Pass `--no-cache` whenever you `uv run --with` a wheel from `dist/`, as the Makefile targets do. -2. Test with the new wheel: - ```bash - uv run --no-cache --no-project --isolated \ - --with 'libfec_parser @ file://dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' \ - demo.py ../../cache2/*.fec - ``` +To refresh the notebook's saved outputs after an API change: -Note: Use `--no-cache` with `uv` to ensure it uses the newly built wheel and doesn't cache an old version. +```bash +make build +cd examples +uv run --no-cache --no-project --isolated \ + --with "$(ls ../dist/libfec_parser-*.whl | head -1)" \ + --with pandas --with nbconvert --with ipykernel \ + jupyter nbconvert --to notebook --execute --inplace quickstart.ipynb +``` diff --git a/crates/fec-py/examples/quickstart.ipynb b/crates/fec-py/examples/quickstart.ipynb new file mode 100644 index 0000000..c45d798 --- /dev/null +++ b/crates/fec-py/examples/quickstart.ipynb @@ -0,0 +1,1153 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ccc14585", + "metadata": {}, + "source": [ + "# `libfec_parser` quickstart\n", + "\n", + "`libfec_parser` is the Python binding for [libfec](https://github.com/asg017/libfec)'s Rust `.fec` parser. This notebook walks through both APIs it ships with:\n", + "\n", + "1. **`libfec_parser.fecfile`** — a dict-based API modeled on the [`fecfile`](https://pypi.org/project/fecfile/) package. Rows come back as dicts keyed by column name. Start here.\n", + "2. **`libfec_parser.parser`** — a lower-level `Filing` class that gives you the raw positional fields of every row.\n", + "\n", + "The package isn't on PyPI yet, so build it from source first. From `crates/fec-py/`, `make notebook` builds the wheel and opens this notebook with everything installed. See the [README](../README.md) for other options." + ] + }, + { + "cell_type": "markdown", + "id": "b4bc15e8", + "metadata": {}, + "source": [ + "## Get a filing\n", + "\n", + "Every electronic filing is a public `.fec` file at `https://docquery.fec.gov/dcdev/posted/.fec`. We'll use [FEC-1721696](https://docquery.fec.gov/cgi-bin/forms/C00016683/1721696/), Pfizer Inc. PAC's monthly report for July 2023: about 260 KB with ~1,400 itemized rows." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "97559d2b", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:29.734731Z", + "iopub.status.busy": "2026-09-18T19:47:29.734648Z", + "iopub.status.idle": "2026-09-18T19:47:29.740787Z", + "shell.execute_reply": "2026-09-18T19:47:29.740428Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1721696.fec: 263,105 bytes\n" + ] + } + ], + "source": [ + "import urllib.request\n", + "from pathlib import Path\n", + "\n", + "FILING_ID = 1721696\n", + "path = Path(f\"{FILING_ID}.fec\")\n", + "\n", + "if not path.exists():\n", + " url = f\"https://docquery.fec.gov/dcdev/posted/{FILING_ID}.fec\"\n", + " with urllib.request.urlopen(url) as response:\n", + " path.write_bytes(response.read())\n", + "\n", + "print(f\"{path}: {path.stat().st_size:,} bytes\")" + ] + }, + { + "cell_type": "markdown", + "id": "00edaa54", + "metadata": {}, + "source": [ + "## The `fecfile` API\n", + "\n", + "`from_file()` parses a filing into a plain dict with four keys:\n", + "\n", + "- `header` — the `HDR` record: FEC format version and the software that produced the filing\n", + "- `filing` — the cover page (form type, committee, coverage dates, summary totals)\n", + "- `itemizations` — rows grouped by schedule: `\"Schedule A\"`, `\"Schedule B\"`, …\n", + "- `text` — free-form `TEXT` records" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c4dc682d", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:29.742132Z", + "iopub.status.busy": "2026-09-18T19:47:29.742056Z", + "iopub.status.idle": "2026-09-18T19:47:29.836031Z", + "shell.execute_reply": "2026-09-18T19:47:29.835577Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['header', 'filing', 'itemizations', 'text'])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from libfec_parser import fecfile\n", + "\n", + "parsed = fecfile.from_file(str(path))\n", + "parsed.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2fda64ba", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:29.837372Z", + "iopub.status.busy": "2026-09-18T19:47:29.837287Z", + "iopub.status.idle": "2026-09-18T19:47:29.839394Z", + "shell.execute_reply": "2026-09-18T19:47:29.839078Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'record_type': 'HDR',\n", + " 'ef_type': 'FEC',\n", + " 'fec_version': '8.4',\n", + " 'software_name': 'FECFile',\n", + " 'software_version': '8.4',\n", + " 'report_number': '0'}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parsed[\"header\"]" + ] + }, + { + "cell_type": "markdown", + "id": "4cc54271", + "metadata": {}, + "source": [ + "The cover page has one key per column on the form. An F3X has more than a hundred, so here are just a few:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0b8b8ce5", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:29.840628Z", + "iopub.status.busy": "2026-09-18T19:47:29.840552Z", + "iopub.status.idle": "2026-09-18T19:47:29.842498Z", + "shell.execute_reply": "2026-09-18T19:47:29.842156Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "123 cover fields\n", + "\n", + "form_type F3XN\n", + "filer_committee_id_number C00016683\n", + "committee_name PFIZER INC. PAC\n", + "report_code M8\n", + "coverage_from_date 20230701\n", + "coverage_through_date 20230731\n", + "col_a_cash_on_hand_beginning_period 394272.48\n", + "col_a_total_receipts 83741.93\n", + "col_a_total_disbursements 57650.00\n", + "col_a_cash_on_hand_close_of_period 420364.41\n" + ] + } + ], + "source": [ + "cover = parsed[\"filing\"]\n", + "print(len(cover), \"cover fields\\n\")\n", + "\n", + "for key in [\n", + " \"form_type\",\n", + " \"filer_committee_id_number\",\n", + " \"committee_name\",\n", + " \"report_code\",\n", + " \"coverage_from_date\",\n", + " \"coverage_through_date\",\n", + " \"col_a_cash_on_hand_beginning_period\",\n", + " \"col_a_total_receipts\",\n", + " \"col_a_total_disbursements\",\n", + " \"col_a_cash_on_hand_close_of_period\",\n", + "]:\n", + " print(f\"{key:40} {cover[key]}\")" + ] + }, + { + "cell_type": "markdown", + "id": "f362973c", + "metadata": {}, + "source": [ + "> **Every value is a string.** Unlike the original `fecfile` package, amounts are not converted to floats and dates stay in the FEC's `YYYYMMDD` format. Convert them yourself, as shown in the pandas section below." + ] + }, + { + "cell_type": "markdown", + "id": "fb6c362e", + "metadata": {}, + "source": [ + "### Itemizations\n", + "\n", + "Rows are grouped by schedule. The exact line number each row was reported on is in its `form_type` (`SA11AI`, `SB23`, …)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "27976117", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:29.843644Z", + "iopub.status.busy": "2026-09-18T19:47:29.843557Z", + "iopub.status.idle": "2026-09-18T19:47:29.845463Z", + "shell.execute_reply": "2026-09-18T19:47:29.845106Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Schedule A': 1354, 'Schedule B': 33}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "{schedule: len(rows) for schedule, rows in parsed[\"itemizations\"].items()}" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "35da23b5", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:29.846497Z", + "iopub.status.busy": "2026-09-18T19:47:29.846418Z", + "iopub.status.idle": "2026-09-18T19:47:29.848940Z", + "shell.execute_reply": "2026-09-18T19:47:29.848576Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'form_type': 'SA11AI',\n", + " 'filer_committee_id_number': 'C00016683',\n", + " 'transaction_id': '2023071716378-1066',\n", + " 'entity_type': 'IND',\n", + " 'contributor_last_name': 'Aaronson',\n", + " 'contributor_first_name': 'Eric',\n", + " 'contributor_street_1': '66 Hudson Blvd East',\n", + " 'contributor_city': 'New York',\n", + " 'contributor_state': 'NY',\n", + " 'contributor_zip_code': '10001',\n", + " 'contribution_date': '20230714',\n", + " 'contribution_amount': '104.17',\n", + " 'contribution_aggregate': '1458.38',\n", + " 'contributor_employer': 'Pfizer Inc',\n", + " 'contributor_occupation': 'SVP, Chief Counsel IP & IPE'}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "first = parsed[\"itemizations\"][\"Schedule A\"][0]\n", + "\n", + "# Only show the populated columns\n", + "{k: v for k, v in first.items() if v}" + ] + }, + { + "cell_type": "markdown", + "id": "a3bdb8d9", + "metadata": {}, + "source": [ + "### Into pandas\n", + "\n", + "Each schedule is a list of dicts, which is exactly what `pd.DataFrame` wants." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "40abb0c3", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:29.850050Z", + "iopub.status.busy": "2026-09-18T19:47:29.849972Z", + "iopub.status.idle": "2026-09-18T19:47:30.113248Z", + "shell.execute_reply": "2026-09-18T19:47:30.112842Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contributor_last_namecontributor_first_namecontributor_statecontributor_occupationcontribution_datecontribution_amount
0AaronsonEricNYSVP, Chief Counsel IP & IPE2023-07-14104.17
1AaronsonEricNYSVP, Chief Counsel IP & IPE2023-07-31104.17
2AartsJohannaNYVP MTL, Rheumatology and New I&I Area2023-07-1420.84
3AartsJohannaNYVP MTL, Rheumatology and New I&I Area2023-07-3120.84
4AdamsDorindaNYNational Pharmacy Business Manager2023-07-1420.00
\n", + "
" + ], + "text/plain": [ + " contributor_last_name contributor_first_name contributor_state \\\n", + "0 Aaronson Eric NY \n", + "1 Aaronson Eric NY \n", + "2 Aarts Johanna NY \n", + "3 Aarts Johanna NY \n", + "4 Adams Dorinda NY \n", + "\n", + " contributor_occupation contribution_date \\\n", + "0 SVP, Chief Counsel IP & IPE 2023-07-14 \n", + "1 SVP, Chief Counsel IP & IPE 2023-07-31 \n", + "2 VP MTL, Rheumatology and New I&I Area 2023-07-14 \n", + "3 VP MTL, Rheumatology and New I&I Area 2023-07-31 \n", + "4 National Pharmacy Business Manager 2023-07-14 \n", + "\n", + " contribution_amount \n", + "0 104.17 \n", + "1 104.17 \n", + "2 20.84 \n", + "3 20.84 \n", + "4 20.00 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "receipts = pd.DataFrame(parsed[\"itemizations\"][\"Schedule A\"])\n", + "receipts[\"contribution_amount\"] = receipts[\"contribution_amount\"].astype(float)\n", + "receipts[\"contribution_date\"] = pd.to_datetime(receipts[\"contribution_date\"], format=\"%Y%m%d\")\n", + "\n", + "receipts[\n", + " [\n", + " \"contributor_last_name\",\n", + " \"contributor_first_name\",\n", + " \"contributor_state\",\n", + " \"contributor_occupation\",\n", + " \"contribution_date\",\n", + " \"contribution_amount\",\n", + " ]\n", + "].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a7c19fea", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.114303Z", + "iopub.status.busy": "2026-09-18T19:47:30.114232Z", + "iopub.status.idle": "2026-09-18T19:47:30.116280Z", + "shell.execute_reply": "2026-09-18T19:47:30.115955Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1,354 itemized receipts totaling $57,161.47\n", + "reported on the cover page: $57,161.47\n" + ] + } + ], + "source": [ + "total = receipts[\"contribution_amount\"].sum()\n", + "print(f\"{len(receipts):,} itemized receipts totaling ${total:,.2f}\")\n", + "print(f\"reported on the cover page: ${float(cover['col_a_individuals_itemized']):,.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "67c20a58", + "metadata": {}, + "source": [ + "This PAC is funded by payroll deductions, so most people appear more than once in a month. Group by contributor to see who gave the most:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "42d2d765", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.117176Z", + "iopub.status.busy": "2026-09-18T19:47:30.117123Z", + "iopub.status.idle": "2026-09-18T19:47:30.124586Z", + "shell.execute_reply": "2026-09-18T19:47:30.124193Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countsum
contributor_last_namecontributor_first_namecontributor_occupation
SusmanSallyChief Corporate Affairs Officer, Execu2416.68
DolstenG.Chief Scientific Officer & President,2416.68
McDermottMichaelChief Global Supply Officer, Executive2416.66
PowerElizabethSenior Director, Groton Site Affairs2416.66
Bishop-MurphyMelissaSenior Director, State Government Rela2416.66
MuellerEmilySenior Director and Head of Congressio2416.66
BourlaAlbertChairman & CEO2416.66
KrebsMatthewSenior Manager, Alliance Development2416.66
JohnsonRadyChief Compliance,Quality & Risk Office2416.66
HoganTimothySVP, Global Policy & Public Affairs2416.66
\n", + "
" + ], + "text/plain": [ + " count \\\n", + "contributor_last_name contributor_first_name contributor_occupation \n", + "Susman Sally Chief Corporate Affairs Officer, Execu 2 \n", + "Dolsten G. Chief Scientific Officer & President, 2 \n", + "McDermott Michael Chief Global Supply Officer, Executive 2 \n", + "Power Elizabeth Senior Director, Groton Site Affairs 2 \n", + "Bishop-Murphy Melissa Senior Director, State Government Rela 2 \n", + "Mueller Emily Senior Director and Head of Congressio 2 \n", + "Bourla Albert Chairman & CEO 2 \n", + "Krebs Matthew Senior Manager, Alliance Development 2 \n", + "Johnson Rady Chief Compliance,Quality & Risk Office 2 \n", + "Hogan Timothy SVP, Global Policy & Public Affairs 2 \n", + "\n", + " sum \n", + "contributor_last_name contributor_first_name contributor_occupation \n", + "Susman Sally Chief Corporate Affairs Officer, Execu 416.68 \n", + "Dolsten G. Chief Scientific Officer & President, 416.68 \n", + "McDermott Michael Chief Global Supply Officer, Executive 416.66 \n", + "Power Elizabeth Senior Director, Groton Site Affairs 416.66 \n", + "Bishop-Murphy Melissa Senior Director, State Government Rela 416.66 \n", + "Mueller Emily Senior Director and Head of Congressio 416.66 \n", + "Bourla Albert Chairman & CEO 416.66 \n", + "Krebs Matthew Senior Manager, Alliance Development 416.66 \n", + "Johnson Rady Chief Compliance,Quality & Risk Office 416.66 \n", + "Hogan Timothy SVP, Global Policy & Public Affairs 416.66 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(\n", + " receipts.groupby([\"contributor_last_name\", \"contributor_first_name\", \"contributor_occupation\"])[\"contribution_amount\"]\n", + " .agg([\"count\", \"sum\"])\n", + " .sort_values(\"sum\", ascending=False)\n", + " .head(10)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4cda5eb9", + "metadata": {}, + "source": [ + "Schedule B is where the money goes. For a corporate PAC, that's mostly contributions to candidates and other committees." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "9ff31696", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.125752Z", + "iopub.status.busy": "2026-09-18T19:47:30.125686Z", + "iopub.status.idle": "2026-09-18T19:47:30.129856Z", + "shell.execute_reply": "2026-09-18T19:47:30.129485Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
payee_organization_namepayee_stateexpenditure_purpose_descripexpenditure_amount
19NRSC (Building Fund)DC2023 Contribution5000.0
7DSCC (Building Fund)DC2023 Contribution5000.0
32Republican Assembly Campaign CommitteeWINonfederal Contribution3750.0
24Committee to Elect a Republican SenateWINonfederal Contribution3750.0
17Mike Kelly For CongressPA2024 Primary3000.0
11Guy For CongressPA2024 Primary2500.0
20Oorah! Political Action CommitteeIN2023 Contribution2500.0
1Ann Wagner For CongressMO2024 Primary2500.0
15Lou Correa For CongressCA2024 Primary2500.0
0Alamo PACTX2023 Contribution2500.0
\n", + "
" + ], + "text/plain": [ + " payee_organization_name payee_state \\\n", + "19 NRSC (Building Fund) DC \n", + "7 DSCC (Building Fund) DC \n", + "32 Republican Assembly Campaign Committee WI \n", + "24 Committee to Elect a Republican Senate WI \n", + "17 Mike Kelly For Congress PA \n", + "11 Guy For Congress PA \n", + "20 Oorah! Political Action Committee IN \n", + "1 Ann Wagner For Congress MO \n", + "15 Lou Correa For Congress CA \n", + "0 Alamo PAC TX \n", + "\n", + " expenditure_purpose_descrip expenditure_amount \n", + "19 2023 Contribution 5000.0 \n", + "7 2023 Contribution 5000.0 \n", + "32 Nonfederal Contribution 3750.0 \n", + "24 Nonfederal Contribution 3750.0 \n", + "17 2024 Primary 3000.0 \n", + "11 2024 Primary 2500.0 \n", + "20 2023 Contribution 2500.0 \n", + "1 2024 Primary 2500.0 \n", + "15 2024 Primary 2500.0 \n", + "0 2023 Contribution 2500.0 " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "disbursements = pd.DataFrame(parsed[\"itemizations\"][\"Schedule B\"])\n", + "disbursements[\"expenditure_amount\"] = disbursements[\"expenditure_amount\"].astype(float)\n", + "\n", + "(\n", + " disbursements[[\"payee_organization_name\", \"payee_state\", \"expenditure_purpose_descrip\", \"expenditure_amount\"]]\n", + " .sort_values(\"expenditure_amount\", ascending=False)\n", + " .head(10)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "72039168", + "metadata": {}, + "source": [ + "### Only parse what you need\n", + "\n", + "`filter_itemizations` takes a list of row-type prefixes and drops everything else. On a large filing (ActBlue's reports run to several gigabytes) this saves most of the memory. An empty list skips itemizations entirely, leaving just the header and cover page." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ac9c1b61", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.130909Z", + "iopub.status.busy": "2026-09-18T19:47:30.130825Z", + "iopub.status.idle": "2026-09-18T19:47:30.155984Z", + "shell.execute_reply": "2026-09-18T19:47:30.155644Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Schedule B': 33}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "only_sb = fecfile.from_file(str(path), options={\"filter_itemizations\": [\"SB\"]})\n", + "{schedule: len(rows) for schedule, rows in only_sb[\"itemizations\"].items()}" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f3bb01e6", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.158229Z", + "iopub.status.busy": "2026-09-18T19:47:30.158146Z", + "iopub.status.idle": "2026-09-18T19:47:30.178617Z", + "shell.execute_reply": "2026-09-18T19:47:30.178220Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cover_only = fecfile.loads(path.read_bytes(), options={\"filter_itemizations\": []})\n", + "cover_only[\"itemizations\"]" + ] + }, + { + "cell_type": "markdown", + "id": "26736a10", + "metadata": {}, + "source": [ + "### Other entry points\n", + "\n", + "- `loads(content)` parses `bytes`, a `str`, or a list of lines you already have in memory.\n", + "- `from_http(filing_id)` downloads from the FEC and parses in one step. It returns `None` if the filing doesn't exist.\n", + "- `parse_header(line)` and `parse_line(line, version)` parse a single record, if you're streaming a file yourself.\n", + "\n", + "One gotcha when working with lines: `.fec` fields are separated by the ASCII 28 \"file separator\" character, which Python's `str.splitlines()` treats as a line break. Split on `\"\\n\"` instead." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f359ccc6", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.179860Z", + "iopub.status.busy": "2026-09-18T19:47:30.179787Z", + "iopub.status.idle": "2026-09-18T19:47:30.182577Z", + "shell.execute_reply": "2026-09-18T19:47:30.182294Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'record_type': 'HDR', 'ef_type': 'FEC', 'fec_version': '8.4', 'software_name': 'FECFile', 'software_version': '8.4', 'report_number': '0'}\n" + ] + }, + { + "data": { + "text/plain": [ + "{'form_type': 'SA11AI',\n", + " 'filer_committee_id_number': 'C00016683',\n", + " 'transaction_id': '2023071716378-1066',\n", + " 'entity_type': 'IND',\n", + " 'contributor_last_name': 'Aaronson',\n", + " 'contributor_first_name': 'Eric',\n", + " 'contributor_street_1': '66 Hudson Blvd East',\n", + " 'contributor_city': 'New York',\n", + " 'contributor_state': 'NY',\n", + " 'contributor_zip_code': '10001',\n", + " 'contribution_date': '20230714',\n", + " 'contribution_amount': '104.17',\n", + " 'contribution_aggregate': '1458.38',\n", + " 'contributor_employer': 'Pfizer Inc',\n", + " 'contributor_occupation': 'SVP, Chief Counsel IP & IPE'}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lines = path.read_text(encoding=\"latin-1\").split(\"\\n\")\n", + "\n", + "header, version, _ = fecfile.parse_header(lines[0])\n", + "print(header)\n", + "\n", + "row = fecfile.parse_line(lines[2], version)\n", + "{k: v for k, v in row.items() if v}" + ] + }, + { + "cell_type": "markdown", + "id": "02504485", + "metadata": {}, + "source": [ + "## The native `Filing` API\n", + "\n", + "`libfec_parser.parser.Filing` is a thinner wrapper over the Rust parser. It accepts a path, `bytes`, or any file-like object with a `.read()` method (including an open `urlopen()` response)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f49c7ad7", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.183817Z", + "iopub.status.busy": "2026-09-18T19:47:30.183744Z", + "iopub.status.idle": "2026-09-18T19:47:30.191602Z", + "shell.execute_reply": "2026-09-18T19:47:30.191185Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Filing(form_type='F3XN', filer_id='C00016683', 1387 itemizations)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from libfec_parser.parser import Filing\n", + "\n", + "filing = Filing(str(path))\n", + "filing" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "6d534255", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.192714Z", + "iopub.status.busy": "2026-09-18T19:47:30.192643Z", + "iopub.status.idle": "2026-09-18T19:47:30.194921Z", + "shell.execute_reply": "2026-09-18T19:47:30.194554Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Header(fec_version='8.4', software_name='FECFile', software_version='8.4')\n", + "8.4 | FECFile 8.4\n", + "\n", + "Cover(form_type='F3XN', filer_id='C00016683', filer_name='PFIZER INC. PAC')\n" + ] + }, + { + "data": { + "text/plain": [ + "{'form_type': 'F3XN',\n", + " 'filer_id': 'C00016683',\n", + " 'filer_name': 'PFIZER INC. PAC',\n", + " 'report_code': 'M8',\n", + " 'coverage_from_date': '2023-07-01',\n", + " 'coverage_through_date': '2023-07-31'}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(filing.header)\n", + "print(filing.header.fec_version, \"|\", filing.header.software_name, filing.header.software_version)\n", + "print()\n", + "print(filing.cover)\n", + "filing.cover.fields()" + ] + }, + { + "cell_type": "markdown", + "id": "6d181880", + "metadata": {}, + "source": [ + "Here the cover's coverage dates are ISO formatted (`2023-07-01`), and itemizations are positional: `row_type` plus a list of string fields, with no column names attached. It's the cheaper representation when you only need to count or filter rows." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3dc69314", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.196009Z", + "iopub.status.busy": "2026-09-18T19:47:30.195943Z", + "iopub.status.idle": "2026-09-18T19:47:30.200107Z", + "shell.execute_reply": "2026-09-18T19:47:30.199822Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({'SA11AI': 1354, 'SB23': 24, 'SB29': 9})" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from collections import Counter\n", + "\n", + "Counter(item.row_type for item in filing.itemizations)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4130a7fd", + "metadata": { + "execution": { + "iopub.execute_input": "2026-09-18T19:47:30.201113Z", + "iopub.status.busy": "2026-09-18T19:47:30.201053Z", + "iopub.status.idle": "2026-09-18T19:47:30.205145Z", + "shell.execute_reply": "2026-09-18T19:47:30.204830Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Itemization(row_type='SA11AI', 45 fields)\n", + "45 fields\n", + "SA11AI ... (empty)\n" + ] + }, + { + "data": { + "text/plain": [ + "['SA11AI',\n", + " 'C00016683',\n", + " '2023071716378-1066',\n", + " '',\n", + " '',\n", + " 'IND',\n", + " '',\n", + " 'Aaronson',\n", + " 'Eric',\n", + " '']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "item = filing.itemizations[0]\n", + "print(item)\n", + "print(len(item), \"fields\")\n", + "print(item[0], \"...\", item[-1] or \"(empty)\")\n", + "item.fields()[:10]" + ] + }, + { + "cell_type": "markdown", + "id": "27a5ee7d", + "metadata": {}, + "source": [ + "## Next steps\n", + "\n", + "- The [libfec CLI](https://github.com/asg017/libfec) can export whole election cycles of filings to SQLite or CSV, which is usually the better tool when you need more than a handful of filings.\n", + "- Column names for every form and schedule come from libfec's mappings, across FEC format versions." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 2935fed0f4bbba9eb1ca9996bd91aa132dfd309f Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:00:51 -0700 Subject: [PATCH 03/13] py: remove foo scaffold, stale .so, phantom root pyproject and lockfiles Co-Authored-By: Claude Fable 5.1 --- crates/fec-py/.gitignore | 7 +- crates/fec-py/demo.py | 4 - crates/fec-py/src/foo.rs | 13 - crates/fec-py/src/lib.rs | 2 - crates/fec-py/src/libfec_parser/__init__.py | 6 +- crates/fec-py/tests/README.md | 4 - crates/fec-py/tests/test_foo.py | 34 - crates/fec-py/uv.lock | 815 -------------------- pyproject.toml | 16 - uv.lock | 7 - 10 files changed, 8 insertions(+), 900 deletions(-) delete mode 100644 crates/fec-py/src/foo.rs delete mode 100644 crates/fec-py/tests/test_foo.py delete mode 100644 crates/fec-py/uv.lock delete mode 100644 pyproject.toml delete mode 100644 uv.lock diff --git a/crates/fec-py/.gitignore b/crates/fec-py/.gitignore index 7e99e36..35738b5 100644 --- a/crates/fec-py/.gitignore +++ b/crates/fec-py/.gitignore @@ -1 +1,6 @@ -*.pyc \ No newline at end of file +*.pyc +__pycache__/ +.pytest_cache/ +*.abi3.so +dist/ +.venv/ \ No newline at end of file diff --git a/crates/fec-py/demo.py b/crates/fec-py/demo.py index 9a5e682..f4954a5 100644 --- a/crates/fec-py/demo.py +++ b/crates/fec-py/demo.py @@ -1,7 +1,6 @@ # uv run --no-project --isolated --with 'libfec_parser @ file://../../dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' demo.py ... from libfec_parser.parser import fec_header -from libfec_parser.foo import bar from pathlib import Path import sys @@ -15,9 +14,6 @@ print(itemization) def main() -> None: - # Test the foo module - print(f"bar() returns: {bar()}") - # Get file paths from command line arguments if len(sys.argv) < 2: print("Usage: demo.py [fec_file2] [fec_file3] ...") diff --git a/crates/fec-py/src/foo.rs b/crates/fec-py/src/foo.rs deleted file mode 100644 index 01cf913..0000000 --- a/crates/fec-py/src/foo.rs +++ /dev/null @@ -1,13 +0,0 @@ -use pyo3::prelude::*; - -#[pyfunction] -pub fn bar() -> i32 { - 42 -} - -/// Foo submodule - example module -#[pymodule] -pub fn foo(m: &Bound<'_, PyModule>) -> PyResult<()> { - m.add_function(wrap_pyfunction!(bar, m)?)?; - Ok(()) -} diff --git a/crates/fec-py/src/lib.rs b/crates/fec-py/src/lib.rs index 4291e99..e2d7d0d 100644 --- a/crates/fec-py/src/lib.rs +++ b/crates/fec-py/src/lib.rs @@ -1,7 +1,6 @@ #![allow(clippy::useless_conversion)] mod fecfile; -mod foo; mod parser; use pyo3::prelude::*; @@ -14,7 +13,6 @@ use pyo3::wrap_pymodule; fn libfec_parser(m: &Bound<'_, PyModule>) -> PyResult<()> { // Add submodules m.add_wrapped(wrap_pymodule!(parser::parser))?; - m.add_wrapped(wrap_pymodule!(foo::foo))?; m.add_wrapped(wrap_pymodule!(fecfile::fecfile))?; Ok(()) } diff --git a/crates/fec-py/src/libfec_parser/__init__.py b/crates/fec-py/src/libfec_parser/__init__.py index cc07c87..24342ec 100644 --- a/crates/fec-py/src/libfec_parser/__init__.py +++ b/crates/fec-py/src/libfec_parser/__init__.py @@ -2,14 +2,12 @@ from . import libfec_parser as _libfec_parser import sys -# Make submodules accessible as libfec_parser.parser, libfec_parser.foo, and libfec_parser.fecfile +# Make submodules accessible as libfec_parser.parser and libfec_parser.fecfile parser = _libfec_parser.parser -foo = _libfec_parser.foo fecfile = _libfec_parser.fecfile # Also register them in sys.modules for "from libfec_parser.parser import ..." sys.modules['libfec_parser.parser'] = parser -sys.modules['libfec_parser.foo'] = foo sys.modules['libfec_parser.fecfile'] = fecfile -__all__ = ["parser", "foo", "fecfile"] +__all__ = ["parser", "fecfile"] diff --git a/crates/fec-py/tests/README.md b/crates/fec-py/tests/README.md index 839a085..7b26d84 100644 --- a/crates/fec-py/tests/README.md +++ b/crates/fec-py/tests/README.md @@ -9,9 +9,6 @@ This directory contains pytest-based tests for the `libfec_parser` Python packag - Tests for `Filing` class - Tests for `Header`, `Cover`, and `Itemization` classes -- `test_foo.py` - Tests for the `libfec_parser.foo` module - - Tests for the example `bar()` function - - `test_fecfile.py` - Tests for the `libfec_parser.fecfile` module - Tests for `loads()` function - Tests for `from_file()` function @@ -102,7 +99,6 @@ def test_large_file_parsing(first_fec_file): Current coverage includes: - ✅ Parser module (Filing, Header, Cover, Itemization classes) -- ✅ Foo module (example module) - ✅ Fecfile module (fecfile compatibility layer) - ✅ Error handling and edge cases - ✅ Integration tests diff --git a/crates/fec-py/tests/test_foo.py b/crates/fec-py/tests/test_foo.py deleted file mode 100644 index 292038d..0000000 --- a/crates/fec-py/tests/test_foo.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Tests for libfec_parser.foo module -""" -import pytest -from libfec_parser.foo import bar - - -class TestBar: - """Tests for bar function""" - - def test_bar_returns_42(self): - """Test that bar() returns 42""" - result = bar() - assert result == 42 - - def test_bar_returns_int(self): - """Test that bar() returns an integer""" - result = bar() - assert isinstance(result, int) - - def test_bar_is_callable(self): - """Test that bar is callable""" - assert callable(bar) - - def test_bar_no_arguments(self): - """Test that bar() accepts no arguments""" - # This should not raise an error - result = bar() - assert result is not None - - def test_bar_with_arguments_fails(self): - """Test that bar() with arguments raises TypeError""" - with pytest.raises(TypeError): - bar(123) diff --git a/crates/fec-py/uv.lock b/crates/fec-py/uv.lock deleted file mode 100644 index 9bea322..0000000 --- a/crates/fec-py/uv.lock +++ /dev/null @@ -1,815 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.7" -resolution-markers = [ - "python_full_version >= '3.10'", - "python_full_version == '3.9.*'", - "python_full_version == '3.8.*'", - "python_full_version < '3.8'", -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, -] - -[[package]] -name = "coverage" -version = "7.2.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -sdist = { url = "https://files.pythonhosted.org/packages/45/8b/421f30467e69ac0e414214856798d4bc32da1336df745e49e49ae5c1e2a8/coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59", size = 762575, upload-time = "2023-05-29T20:08:50.273Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/24/be01e62a7bce89bcffe04729c540382caa5a06bee45ae42136c93e2499f5/coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8", size = 200724, upload-time = "2023-05-29T20:07:03.422Z" }, - { url = "https://files.pythonhosted.org/packages/3d/80/7060a445e1d2c9744b683dc935248613355657809d6c6b2716cdf4ca4766/coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb", size = 201024, upload-time = "2023-05-29T20:07:05.694Z" }, - { url = "https://files.pythonhosted.org/packages/b8/9d/926fce7e03dbfc653104c2d981c0fa71f0572a9ebd344d24c573bd6f7c4f/coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6", size = 229528, upload-time = "2023-05-29T20:07:07.307Z" }, - { url = "https://files.pythonhosted.org/packages/d1/3a/67f5d18f911abf96857f6f7e4df37ca840e38179e2cc9ab6c0b9c3380f19/coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2", size = 227842, upload-time = "2023-05-29T20:07:09.331Z" }, - { url = "https://files.pythonhosted.org/packages/b4/bd/1b2331e3a04f4cc9b7b332b1dd0f3a1261dfc4114f8479bebfcc2afee9e8/coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063", size = 228717, upload-time = "2023-05-29T20:07:11.38Z" }, - { url = "https://files.pythonhosted.org/packages/2b/86/3dbf9be43f8bf6a5ca28790a713e18902b2d884bc5fa9512823a81dff601/coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1", size = 234632, upload-time = "2023-05-29T20:07:13.376Z" }, - { url = "https://files.pythonhosted.org/packages/91/e8/469ed808a782b9e8305a08bad8c6fa5f8e73e093bda6546c5aec68275bff/coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353", size = 232875, upload-time = "2023-05-29T20:07:15.093Z" }, - { url = "https://files.pythonhosted.org/packages/29/8f/4fad1c2ba98104425009efd7eaa19af9a7c797e92d40cd2ec026fa1f58cb/coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495", size = 234094, upload-time = "2023-05-29T20:07:17.013Z" }, - { url = "https://files.pythonhosted.org/packages/94/4e/d4e46a214ae857be3d7dc5de248ba43765f60daeb1ab077cb6c1536c7fba/coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818", size = 203184, upload-time = "2023-05-29T20:07:18.69Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e9/d6730247d8dec2a3dddc520ebe11e2e860f0f98cee3639e23de6cf920255/coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850", size = 204096, upload-time = "2023-05-29T20:07:20.153Z" }, - { url = "https://files.pythonhosted.org/packages/c6/fa/529f55c9a1029c840bcc9109d5a15ff00478b7ff550a1ae361f8745f8ad5/coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f", size = 200895, upload-time = "2023-05-29T20:07:21.963Z" }, - { url = "https://files.pythonhosted.org/packages/67/d7/cd8fe689b5743fffac516597a1222834c42b80686b99f5b44ef43ccc2a43/coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe", size = 201120, upload-time = "2023-05-29T20:07:23.765Z" }, - { url = "https://files.pythonhosted.org/packages/8c/95/16eed713202406ca0a37f8ac259bbf144c9d24f9b8097a8e6ead61da2dbb/coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3", size = 233178, upload-time = "2023-05-29T20:07:25.281Z" }, - { url = "https://files.pythonhosted.org/packages/c1/49/4d487e2ad5d54ed82ac1101e467e8994c09d6123c91b2a962145f3d262c2/coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f", size = 230754, upload-time = "2023-05-29T20:07:27.044Z" }, - { url = "https://files.pythonhosted.org/packages/a7/cd/3ce94ad9d407a052dc2a74fbeb1c7947f442155b28264eb467ee78dea812/coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb", size = 232558, upload-time = "2023-05-29T20:07:28.743Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a8/12cc7b261f3082cc299ab61f677f7e48d93e35ca5c3c2f7241ed5525ccea/coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833", size = 241509, upload-time = "2023-05-29T20:07:30.434Z" }, - { url = "https://files.pythonhosted.org/packages/04/fa/43b55101f75a5e9115259e8be70ff9279921cb6b17f04c34a5702ff9b1f7/coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97", size = 239924, upload-time = "2023-05-29T20:07:32.065Z" }, - { url = "https://files.pythonhosted.org/packages/68/5f/d2bd0f02aa3c3e0311986e625ccf97fdc511b52f4f1a063e4f37b624772f/coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a", size = 240977, upload-time = "2023-05-29T20:07:34.184Z" }, - { url = "https://files.pythonhosted.org/packages/ba/92/69c0722882643df4257ecc5437b83f4c17ba9e67f15dc6b77bad89b6982e/coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a", size = 203168, upload-time = "2023-05-29T20:07:35.869Z" }, - { url = "https://files.pythonhosted.org/packages/b1/96/c12ed0dfd4ec587f3739f53eb677b9007853fd486ccb0e7d5512a27bab2e/coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562", size = 204185, upload-time = "2023-05-29T20:07:37.39Z" }, - { url = "https://files.pythonhosted.org/packages/ff/d5/52fa1891d1802ab2e1b346d37d349cb41cdd4fd03f724ebbf94e80577687/coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4", size = 201020, upload-time = "2023-05-29T20:07:38.724Z" }, - { url = "https://files.pythonhosted.org/packages/24/df/6765898d54ea20e3197a26d26bb65b084deefadd77ce7de946b9c96dfdc5/coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4", size = 233994, upload-time = "2023-05-29T20:07:40.274Z" }, - { url = "https://files.pythonhosted.org/packages/15/81/b108a60bc758b448c151e5abceed027ed77a9523ecbc6b8a390938301841/coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01", size = 231358, upload-time = "2023-05-29T20:07:41.998Z" }, - { url = "https://files.pythonhosted.org/packages/61/90/c76b9462f39897ebd8714faf21bc985b65c4e1ea6dff428ea9dc711ed0dd/coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6", size = 233316, upload-time = "2023-05-29T20:07:43.539Z" }, - { url = "https://files.pythonhosted.org/packages/04/d6/8cba3bf346e8b1a4fb3f084df7d8cea25a6b6c56aaca1f2e53829be17e9e/coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d", size = 240159, upload-time = "2023-05-29T20:07:44.982Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ea/4a252dc77ca0605b23d477729d139915e753ee89e4c9507630e12ad64a80/coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de", size = 238127, upload-time = "2023-05-29T20:07:46.522Z" }, - { url = "https://files.pythonhosted.org/packages/9f/5c/d9760ac497c41f9c4841f5972d0edf05d50cad7814e86ee7d133ec4a0ac8/coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d", size = 239833, upload-time = "2023-05-29T20:07:47.992Z" }, - { url = "https://files.pythonhosted.org/packages/69/8c/26a95b08059db1cbb01e4b0e6d40f2e9debb628c6ca86b78f625ceaf9bab/coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511", size = 203463, upload-time = "2023-05-29T20:07:49.939Z" }, - { url = "https://files.pythonhosted.org/packages/b7/00/14b00a0748e9eda26e97be07a63cc911108844004687321ddcc213be956c/coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3", size = 204347, upload-time = "2023-05-29T20:07:51.909Z" }, - { url = "https://files.pythonhosted.org/packages/80/d7/67937c80b8fd4c909fdac29292bc8b35d9505312cff6bcab41c53c5b1df6/coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f", size = 200580, upload-time = "2023-05-29T20:07:54.076Z" }, - { url = "https://files.pythonhosted.org/packages/7a/05/084864fa4bbf8106f44fb72a56e67e0cd372d3bf9d893be818338c81af5d/coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb", size = 226237, upload-time = "2023-05-29T20:07:56.28Z" }, - { url = "https://files.pythonhosted.org/packages/67/a2/6fa66a50e6e894286d79a3564f42bd54a9bd27049dc0a63b26d9924f0aa3/coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9", size = 224256, upload-time = "2023-05-29T20:07:58.189Z" }, - { url = "https://files.pythonhosted.org/packages/e2/c0/73f139794c742840b9ab88e2e17fe14a3d4668a166ff95d812ac66c0829d/coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd", size = 225550, upload-time = "2023-05-29T20:08:00.383Z" }, - { url = "https://files.pythonhosted.org/packages/03/ec/6f30b4e0c96ce03b0e64aec46b4af2a8c49b70d1b5d0d69577add757b946/coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a", size = 232440, upload-time = "2023-05-29T20:08:02.495Z" }, - { url = "https://files.pythonhosted.org/packages/22/c1/2f6c1b6f01a0996c9e067a9c780e1824351dbe17faae54388a4477e6d86f/coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959", size = 230897, upload-time = "2023-05-29T20:08:04.382Z" }, - { url = "https://files.pythonhosted.org/packages/8d/d6/53e999ec1bf7498ca4bc5f3b8227eb61db39068d2de5dcc359dec5601b5a/coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02", size = 232024, upload-time = "2023-05-29T20:08:06.031Z" }, - { url = "https://files.pythonhosted.org/packages/e9/40/383305500d24122dbed73e505a4d6828f8f3356d1f68ab6d32c781754b81/coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f", size = 203293, upload-time = "2023-05-29T20:08:07.598Z" }, - { url = "https://files.pythonhosted.org/packages/0e/bc/7e3a31534fabb043269f14fb64e2bb2733f85d4cf39e5bbc71357c57553a/coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0", size = 204040, upload-time = "2023-05-29T20:08:09.919Z" }, - { url = "https://files.pythonhosted.org/packages/c6/fc/be19131010930a6cf271da48202c8cc1d3f971f68c02fb2d3a78247f43dc/coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5", size = 200689, upload-time = "2023-05-29T20:08:11.594Z" }, - { url = "https://files.pythonhosted.org/packages/28/d7/9a8de57d87f4bbc6f9a6a5ded1eaac88a89bf71369bb935dac3c0cf2893e/coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5", size = 200986, upload-time = "2023-05-29T20:08:13.228Z" }, - { url = "https://files.pythonhosted.org/packages/c8/e4/e6182e4697665fb594a7f4e4f27cb3a4dd00c2e3d35c5c706765de8c7866/coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9", size = 230648, upload-time = "2023-05-29T20:08:15.11Z" }, - { url = "https://files.pythonhosted.org/packages/7b/e3/f552d5871943f747165b92a924055c5d6daa164ae659a13f9018e22f3990/coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6", size = 228511, upload-time = "2023-05-29T20:08:16.877Z" }, - { url = "https://files.pythonhosted.org/packages/44/55/49f65ccdd4dfd6d5528e966b28c37caec64170c725af32ab312889d2f857/coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e", size = 229852, upload-time = "2023-05-29T20:08:18.47Z" }, - { url = "https://files.pythonhosted.org/packages/0d/31/340428c238eb506feb96d4fb5c9ea614db1149517f22cc7ab8c6035ef6d9/coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050", size = 235578, upload-time = "2023-05-29T20:08:20.298Z" }, - { url = "https://files.pythonhosted.org/packages/dd/ce/97c1dd6592c908425622fe7f31c017d11cf0421729b09101d4de75bcadc8/coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5", size = 234079, upload-time = "2023-05-29T20:08:22.365Z" }, - { url = "https://files.pythonhosted.org/packages/de/a3/5a98dc9e239d0dc5f243ef5053d5b1bdcaa1dee27a691dfc12befeccf878/coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f", size = 234991, upload-time = "2023-05-29T20:08:24.974Z" }, - { url = "https://files.pythonhosted.org/packages/4a/fb/78986d3022e5ccf2d4370bc43a5fef8374f092b3c21d32499dee8e30b7b6/coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e", size = 203160, upload-time = "2023-05-29T20:08:26.701Z" }, - { url = "https://files.pythonhosted.org/packages/c3/1c/6b3c9c363fb1433c79128e0d692863deb761b1b78162494abb9e5c328bc0/coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c", size = 204085, upload-time = "2023-05-29T20:08:28.146Z" }, - { url = "https://files.pythonhosted.org/packages/88/da/495944ebf0ad246235a6bd523810d9f81981f9b81c6059ba1f56e943abe0/coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9", size = 200725, upload-time = "2023-05-29T20:08:29.851Z" }, - { url = "https://files.pythonhosted.org/packages/ca/0c/3dfeeb1006c44b911ee0ed915350db30325d01808525ae7cc8d57643a2ce/coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2", size = 201022, upload-time = "2023-05-29T20:08:31.429Z" }, - { url = "https://files.pythonhosted.org/packages/61/af/5964b8d7d9a5c767785644d9a5a63cacba9a9c45cc42ba06d25895ec87be/coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7", size = 229102, upload-time = "2023-05-29T20:08:32.982Z" }, - { url = "https://files.pythonhosted.org/packages/d9/1d/cd467fceb62c371f9adb1d739c92a05d4e550246daa90412e711226bd320/coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e", size = 227441, upload-time = "2023-05-29T20:08:35.044Z" }, - { url = "https://files.pythonhosted.org/packages/fe/57/e4f8ad64d84ca9e759d783a052795f62a9f9111585e46068845b1cb52c2b/coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1", size = 228265, upload-time = "2023-05-29T20:08:36.861Z" }, - { url = "https://files.pythonhosted.org/packages/88/8b/b0d9fe727acae907fa7f1c8194ccb6fe9d02e1c3e9001ecf74c741f86110/coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9", size = 234217, upload-time = "2023-05-29T20:08:38.837Z" }, - { url = "https://files.pythonhosted.org/packages/66/2e/c99fe1f6396d93551aa352c75410686e726cd4ea104479b9af1af22367ce/coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250", size = 232466, upload-time = "2023-05-29T20:08:40.768Z" }, - { url = "https://files.pythonhosted.org/packages/bb/e9/88747b40c8fb4a783b40222510ce6d66170217eb05d7f46462c36b4fa8cc/coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2", size = 233669, upload-time = "2023-05-29T20:08:42.944Z" }, - { url = "https://files.pythonhosted.org/packages/b1/d5/a8e276bc005e42114468d4fe03e0a9555786bc51cbfe0d20827a46c1565a/coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb", size = 203199, upload-time = "2023-05-29T20:08:44.734Z" }, - { url = "https://files.pythonhosted.org/packages/a9/0c/4a848ae663b47f1195abcb09a951751dd61f80b503303b9b9d768e0fd321/coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27", size = 204109, upload-time = "2023-05-29T20:08:46.417Z" }, - { url = "https://files.pythonhosted.org/packages/67/fb/b3b1d7887e1ea25a9608b0776e480e4bbc303ca95a31fd585555ec4fff5a/coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d", size = 193207, upload-time = "2023-05-29T20:08:48.153Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", version = "2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, -] - -[[package]] -name = "coverage" -version = "7.6.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.8.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f7/08/7e37f82e4d1aead42a7443ff06a1e406aabf7302c4f00a546e4b320b994c/coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d", size = 798791, upload-time = "2024-08-04T19:45:30.9Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/61/eb7ce5ed62bacf21beca4937a90fe32545c91a3c8a42a30c6616d48fc70d/coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16", size = 206690, upload-time = "2024-08-04T19:43:07.695Z" }, - { url = "https://files.pythonhosted.org/packages/7d/73/041928e434442bd3afde5584bdc3f932fb4562b1597629f537387cec6f3d/coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36", size = 207127, upload-time = "2024-08-04T19:43:10.15Z" }, - { url = "https://files.pythonhosted.org/packages/c7/c8/6ca52b5147828e45ad0242388477fdb90df2c6cbb9a441701a12b3c71bc8/coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02", size = 235654, upload-time = "2024-08-04T19:43:12.405Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/9ac2b62557f4340270942011d6efeab9833648380109e897d48ab7c1035d/coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc", size = 233598, upload-time = "2024-08-04T19:43:14.078Z" }, - { url = "https://files.pythonhosted.org/packages/53/23/9e2c114d0178abc42b6d8d5281f651a8e6519abfa0ef460a00a91f80879d/coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23", size = 234732, upload-time = "2024-08-04T19:43:16.632Z" }, - { url = "https://files.pythonhosted.org/packages/0f/7e/a0230756fb133343a52716e8b855045f13342b70e48e8ad41d8a0d60ab98/coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34", size = 233816, upload-time = "2024-08-04T19:43:19.049Z" }, - { url = "https://files.pythonhosted.org/packages/28/7c/3753c8b40d232b1e5eeaed798c875537cf3cb183fb5041017c1fdb7ec14e/coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c", size = 232325, upload-time = "2024-08-04T19:43:21.246Z" }, - { url = "https://files.pythonhosted.org/packages/57/e3/818a2b2af5b7573b4b82cf3e9f137ab158c90ea750a8f053716a32f20f06/coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959", size = 233418, upload-time = "2024-08-04T19:43:22.945Z" }, - { url = "https://files.pythonhosted.org/packages/c8/fb/4532b0b0cefb3f06d201648715e03b0feb822907edab3935112b61b885e2/coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232", size = 209343, upload-time = "2024-08-04T19:43:25.121Z" }, - { url = "https://files.pythonhosted.org/packages/5a/25/af337cc7421eca1c187cc9c315f0a755d48e755d2853715bfe8c418a45fa/coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0", size = 210136, upload-time = "2024-08-04T19:43:26.851Z" }, - { url = "https://files.pythonhosted.org/packages/ad/5f/67af7d60d7e8ce61a4e2ddcd1bd5fb787180c8d0ae0fbd073f903b3dd95d/coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93", size = 206796, upload-time = "2024-08-04T19:43:29.115Z" }, - { url = "https://files.pythonhosted.org/packages/e1/0e/e52332389e057daa2e03be1fbfef25bb4d626b37d12ed42ae6281d0a274c/coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3", size = 207244, upload-time = "2024-08-04T19:43:31.285Z" }, - { url = "https://files.pythonhosted.org/packages/aa/cd/766b45fb6e090f20f8927d9c7cb34237d41c73a939358bc881883fd3a40d/coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff", size = 239279, upload-time = "2024-08-04T19:43:33.581Z" }, - { url = "https://files.pythonhosted.org/packages/70/6c/a9ccd6fe50ddaf13442a1e2dd519ca805cbe0f1fcd377fba6d8339b98ccb/coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d", size = 236859, upload-time = "2024-08-04T19:43:35.301Z" }, - { url = "https://files.pythonhosted.org/packages/14/6f/8351b465febb4dbc1ca9929505202db909c5a635c6fdf33e089bbc3d7d85/coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6", size = 238549, upload-time = "2024-08-04T19:43:37.578Z" }, - { url = "https://files.pythonhosted.org/packages/68/3c/289b81fa18ad72138e6d78c4c11a82b5378a312c0e467e2f6b495c260907/coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56", size = 237477, upload-time = "2024-08-04T19:43:39.92Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1c/aa1efa6459d822bd72c4abc0b9418cf268de3f60eeccd65dc4988553bd8d/coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234", size = 236134, upload-time = "2024-08-04T19:43:41.453Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c8/521c698f2d2796565fe9c789c2ee1ccdae610b3aa20b9b2ef980cc253640/coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133", size = 236910, upload-time = "2024-08-04T19:43:43.037Z" }, - { url = "https://files.pythonhosted.org/packages/7d/30/033e663399ff17dca90d793ee8a2ea2890e7fdf085da58d82468b4220bf7/coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c", size = 209348, upload-time = "2024-08-04T19:43:44.787Z" }, - { url = "https://files.pythonhosted.org/packages/20/05/0d1ccbb52727ccdadaa3ff37e4d2dc1cd4d47f0c3df9eb58d9ec8508ca88/coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6", size = 210230, upload-time = "2024-08-04T19:43:46.707Z" }, - { url = "https://files.pythonhosted.org/packages/7e/d4/300fc921dff243cd518c7db3a4c614b7e4b2431b0d1145c1e274fd99bd70/coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778", size = 206983, upload-time = "2024-08-04T19:43:49.082Z" }, - { url = "https://files.pythonhosted.org/packages/e1/ab/6bf00de5327ecb8db205f9ae596885417a31535eeda6e7b99463108782e1/coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391", size = 207221, upload-time = "2024-08-04T19:43:52.15Z" }, - { url = "https://files.pythonhosted.org/packages/92/8f/2ead05e735022d1a7f3a0a683ac7f737de14850395a826192f0288703472/coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8", size = 240342, upload-time = "2024-08-04T19:43:53.746Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ef/94043e478201ffa85b8ae2d2c79b4081e5a1b73438aafafccf3e9bafb6b5/coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d", size = 237371, upload-time = "2024-08-04T19:43:55.993Z" }, - { url = "https://files.pythonhosted.org/packages/1f/0f/c890339dd605f3ebc269543247bdd43b703cce6825b5ed42ff5f2d6122c7/coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca", size = 239455, upload-time = "2024-08-04T19:43:57.618Z" }, - { url = "https://files.pythonhosted.org/packages/d1/04/7fd7b39ec7372a04efb0f70c70e35857a99b6a9188b5205efb4c77d6a57a/coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163", size = 238924, upload-time = "2024-08-04T19:44:00.012Z" }, - { url = "https://files.pythonhosted.org/packages/ed/bf/73ce346a9d32a09cf369f14d2a06651329c984e106f5992c89579d25b27e/coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a", size = 237252, upload-time = "2024-08-04T19:44:01.713Z" }, - { url = "https://files.pythonhosted.org/packages/86/74/1dc7a20969725e917b1e07fe71a955eb34bc606b938316bcc799f228374b/coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d", size = 238897, upload-time = "2024-08-04T19:44:03.898Z" }, - { url = "https://files.pythonhosted.org/packages/b6/e9/d9cc3deceb361c491b81005c668578b0dfa51eed02cd081620e9a62f24ec/coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5", size = 209606, upload-time = "2024-08-04T19:44:05.532Z" }, - { url = "https://files.pythonhosted.org/packages/47/c8/5a2e41922ea6740f77d555c4d47544acd7dc3f251fe14199c09c0f5958d3/coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb", size = 210373, upload-time = "2024-08-04T19:44:07.079Z" }, - { url = "https://files.pythonhosted.org/packages/8c/f9/9aa4dfb751cb01c949c990d136a0f92027fbcc5781c6e921df1cb1563f20/coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106", size = 207007, upload-time = "2024-08-04T19:44:09.453Z" }, - { url = "https://files.pythonhosted.org/packages/b9/67/e1413d5a8591622a46dd04ff80873b04c849268831ed5c304c16433e7e30/coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9", size = 207269, upload-time = "2024-08-04T19:44:11.045Z" }, - { url = "https://files.pythonhosted.org/packages/14/5b/9dec847b305e44a5634d0fb8498d135ab1d88330482b74065fcec0622224/coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c", size = 239886, upload-time = "2024-08-04T19:44:12.83Z" }, - { url = "https://files.pythonhosted.org/packages/7b/b7/35760a67c168e29f454928f51f970342d23cf75a2bb0323e0f07334c85f3/coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a", size = 237037, upload-time = "2024-08-04T19:44:15.393Z" }, - { url = "https://files.pythonhosted.org/packages/f7/95/d2fd31f1d638df806cae59d7daea5abf2b15b5234016a5ebb502c2f3f7ee/coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060", size = 239038, upload-time = "2024-08-04T19:44:17.466Z" }, - { url = "https://files.pythonhosted.org/packages/6e/bd/110689ff5752b67924efd5e2aedf5190cbbe245fc81b8dec1abaffba619d/coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862", size = 238690, upload-time = "2024-08-04T19:44:19.336Z" }, - { url = "https://files.pythonhosted.org/packages/d3/a8/08d7b38e6ff8df52331c83130d0ab92d9c9a8b5462f9e99c9f051a4ae206/coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388", size = 236765, upload-time = "2024-08-04T19:44:20.994Z" }, - { url = "https://files.pythonhosted.org/packages/d6/6a/9cf96839d3147d55ae713eb2d877f4d777e7dc5ba2bce227167d0118dfe8/coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155", size = 238611, upload-time = "2024-08-04T19:44:22.616Z" }, - { url = "https://files.pythonhosted.org/packages/74/e4/7ff20d6a0b59eeaab40b3140a71e38cf52547ba21dbcf1d79c5a32bba61b/coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a", size = 209671, upload-time = "2024-08-04T19:44:24.418Z" }, - { url = "https://files.pythonhosted.org/packages/35/59/1812f08a85b57c9fdb6d0b383d779e47b6f643bc278ed682859512517e83/coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129", size = 210368, upload-time = "2024-08-04T19:44:26.276Z" }, - { url = "https://files.pythonhosted.org/packages/9c/15/08913be1c59d7562a3e39fce20661a98c0a3f59d5754312899acc6cb8a2d/coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e", size = 207758, upload-time = "2024-08-04T19:44:29.028Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ae/b5d58dff26cade02ada6ca612a76447acd69dccdbb3a478e9e088eb3d4b9/coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962", size = 208035, upload-time = "2024-08-04T19:44:30.673Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d7/62095e355ec0613b08dfb19206ce3033a0eedb6f4a67af5ed267a8800642/coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb", size = 250839, upload-time = "2024-08-04T19:44:32.412Z" }, - { url = "https://files.pythonhosted.org/packages/7c/1e/c2967cb7991b112ba3766df0d9c21de46b476d103e32bb401b1b2adf3380/coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704", size = 246569, upload-time = "2024-08-04T19:44:34.547Z" }, - { url = "https://files.pythonhosted.org/packages/8b/61/a7a6a55dd266007ed3b1df7a3386a0d760d014542d72f7c2c6938483b7bd/coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b", size = 248927, upload-time = "2024-08-04T19:44:36.313Z" }, - { url = "https://files.pythonhosted.org/packages/c8/fa/13a6f56d72b429f56ef612eb3bc5ce1b75b7ee12864b3bd12526ab794847/coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f", size = 248401, upload-time = "2024-08-04T19:44:38.155Z" }, - { url = "https://files.pythonhosted.org/packages/75/06/0429c652aa0fb761fc60e8c6b291338c9173c6aa0f4e40e1902345b42830/coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223", size = 246301, upload-time = "2024-08-04T19:44:39.883Z" }, - { url = "https://files.pythonhosted.org/packages/52/76/1766bb8b803a88f93c3a2d07e30ffa359467810e5cbc68e375ebe6906efb/coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3", size = 247598, upload-time = "2024-08-04T19:44:41.59Z" }, - { url = "https://files.pythonhosted.org/packages/66/8b/f54f8db2ae17188be9566e8166ac6df105c1c611e25da755738025708d54/coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f", size = 210307, upload-time = "2024-08-04T19:44:43.301Z" }, - { url = "https://files.pythonhosted.org/packages/9f/b0/e0dca6da9170aefc07515cce067b97178cefafb512d00a87a1c717d2efd5/coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657", size = 211453, upload-time = "2024-08-04T19:44:45.677Z" }, - { url = "https://files.pythonhosted.org/packages/81/d0/d9e3d554e38beea5a2e22178ddb16587dbcbe9a1ef3211f55733924bf7fa/coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0", size = 206674, upload-time = "2024-08-04T19:44:47.694Z" }, - { url = "https://files.pythonhosted.org/packages/38/ea/cab2dc248d9f45b2b7f9f1f596a4d75a435cb364437c61b51d2eb33ceb0e/coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a", size = 207101, upload-time = "2024-08-04T19:44:49.32Z" }, - { url = "https://files.pythonhosted.org/packages/ca/6f/f82f9a500c7c5722368978a5390c418d2a4d083ef955309a8748ecaa8920/coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b", size = 236554, upload-time = "2024-08-04T19:44:51.631Z" }, - { url = "https://files.pythonhosted.org/packages/a6/94/d3055aa33d4e7e733d8fa309d9adf147b4b06a82c1346366fc15a2b1d5fa/coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3", size = 234440, upload-time = "2024-08-04T19:44:53.464Z" }, - { url = "https://files.pythonhosted.org/packages/e4/6e/885bcd787d9dd674de4a7d8ec83faf729534c63d05d51d45d4fa168f7102/coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de", size = 235889, upload-time = "2024-08-04T19:44:55.165Z" }, - { url = "https://files.pythonhosted.org/packages/f4/63/df50120a7744492710854860783d6819ff23e482dee15462c9a833cc428a/coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6", size = 235142, upload-time = "2024-08-04T19:44:57.269Z" }, - { url = "https://files.pythonhosted.org/packages/3a/5d/9d0acfcded2b3e9ce1c7923ca52ccc00c78a74e112fc2aee661125b7843b/coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569", size = 233805, upload-time = "2024-08-04T19:44:59.033Z" }, - { url = "https://files.pythonhosted.org/packages/c4/56/50abf070cb3cd9b1dd32f2c88f083aab561ecbffbcd783275cb51c17f11d/coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989", size = 234655, upload-time = "2024-08-04T19:45:01.398Z" }, - { url = "https://files.pythonhosted.org/packages/25/ee/b4c246048b8485f85a2426ef4abab88e48c6e80c74e964bea5cd4cd4b115/coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7", size = 209296, upload-time = "2024-08-04T19:45:03.819Z" }, - { url = "https://files.pythonhosted.org/packages/5c/1c/96cf86b70b69ea2b12924cdf7cabb8ad10e6130eab8d767a1099fbd2a44f/coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8", size = 210137, upload-time = "2024-08-04T19:45:06.25Z" }, - { url = "https://files.pythonhosted.org/packages/19/d3/d54c5aa83268779d54c86deb39c1c4566e5d45c155369ca152765f8db413/coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255", size = 206688, upload-time = "2024-08-04T19:45:08.358Z" }, - { url = "https://files.pythonhosted.org/packages/a5/fe/137d5dca72e4a258b1bc17bb04f2e0196898fe495843402ce826a7419fe3/coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8", size = 207120, upload-time = "2024-08-04T19:45:11.526Z" }, - { url = "https://files.pythonhosted.org/packages/78/5b/a0a796983f3201ff5485323b225d7c8b74ce30c11f456017e23d8e8d1945/coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2", size = 235249, upload-time = "2024-08-04T19:45:13.202Z" }, - { url = "https://files.pythonhosted.org/packages/4e/e1/76089d6a5ef9d68f018f65411fcdaaeb0141b504587b901d74e8587606ad/coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a", size = 233237, upload-time = "2024-08-04T19:45:14.961Z" }, - { url = "https://files.pythonhosted.org/packages/9a/6f/eef79b779a540326fee9520e5542a8b428cc3bfa8b7c8f1022c1ee4fc66c/coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc", size = 234311, upload-time = "2024-08-04T19:45:16.924Z" }, - { url = "https://files.pythonhosted.org/packages/75/e1/656d65fb126c29a494ef964005702b012f3498db1a30dd562958e85a4049/coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004", size = 233453, upload-time = "2024-08-04T19:45:18.672Z" }, - { url = "https://files.pythonhosted.org/packages/68/6a/45f108f137941a4a1238c85f28fd9d048cc46b5466d6b8dda3aba1bb9d4f/coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb", size = 231958, upload-time = "2024-08-04T19:45:20.63Z" }, - { url = "https://files.pythonhosted.org/packages/9b/e7/47b809099168b8b8c72ae311efc3e88c8d8a1162b3ba4b8da3cfcdb85743/coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36", size = 232938, upload-time = "2024-08-04T19:45:23.062Z" }, - { url = "https://files.pythonhosted.org/packages/52/80/052222ba7058071f905435bad0ba392cc12006380731c37afaf3fe749b88/coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c", size = 209352, upload-time = "2024-08-04T19:45:25.042Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d8/1b92e0b3adcf384e98770a00ca095da1b5f7b483e6563ae4eb5e935d24a1/coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca", size = 210153, upload-time = "2024-08-04T19:45:27.079Z" }, - { url = "https://files.pythonhosted.org/packages/a5/2b/0354ed096bca64dc8e32a7cbcae28b34cb5ad0b1fe2125d6d99583313ac0/coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df", size = 198926, upload-time = "2024-08-04T19:45:28.875Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, -] - -[[package]] -name = "coverage" -version = "7.10.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.9.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987, upload-time = "2025-09-21T20:00:57.218Z" }, - { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388, upload-time = "2025-09-21T20:01:00.081Z" }, - { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148, upload-time = "2025-09-21T20:01:01.768Z" }, - { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958, upload-time = "2025-09-21T20:01:03.355Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819, upload-time = "2025-09-21T20:01:04.968Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754, upload-time = "2025-09-21T20:01:06.321Z" }, - { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860, upload-time = "2025-09-21T20:01:07.605Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877, upload-time = "2025-09-21T20:01:08.829Z" }, - { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108, upload-time = "2025-09-21T20:01:10.527Z" }, - { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752, upload-time = "2025-09-21T20:01:11.857Z" }, - { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497, upload-time = "2025-09-21T20:01:13.459Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392, upload-time = "2025-09-21T20:01:14.722Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102, upload-time = "2025-09-21T20:01:16.089Z" }, - { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505, upload-time = "2025-09-21T20:01:17.788Z" }, - { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898, upload-time = "2025-09-21T20:01:19.488Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831, upload-time = "2025-09-21T20:01:20.817Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937, upload-time = "2025-09-21T20:01:22.171Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021, upload-time = "2025-09-21T20:01:23.907Z" }, - { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626, upload-time = "2025-09-21T20:01:25.721Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682, upload-time = "2025-09-21T20:01:27.105Z" }, - { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402, upload-time = "2025-09-21T20:01:28.629Z" }, - { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320, upload-time = "2025-09-21T20:01:30.004Z" }, - { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536, upload-time = "2025-09-21T20:01:32.184Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425, upload-time = "2025-09-21T20:01:33.557Z" }, - { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103, upload-time = "2025-09-21T20:01:34.929Z" }, - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978, upload-time = "2025-09-21T20:03:30.362Z" }, - { url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370, upload-time = "2025-09-21T20:03:32.147Z" }, - { url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802, upload-time = "2025-09-21T20:03:33.919Z" }, - { url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625, upload-time = "2025-09-21T20:03:36.09Z" }, - { url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399, upload-time = "2025-09-21T20:03:38.342Z" }, - { url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142, upload-time = "2025-09-21T20:03:40.591Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284, upload-time = "2025-09-21T20:03:42.355Z" }, - { url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353, upload-time = "2025-09-21T20:03:44.218Z" }, - { url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430, upload-time = "2025-09-21T20:03:46.065Z" }, - { url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311, upload-time = "2025-09-21T20:03:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500, upload-time = "2025-09-21T20:03:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408, upload-time = "2025-09-21T20:03:51.803Z" }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, -] - -[[package]] -name = "coverage" -version = "7.12.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/89/26/4a96807b193b011588099c3b5c89fbb05294e5b90e71018e065465f34eb6/coverage-7.12.0.tar.gz", hash = "sha256:fc11e0a4e372cb5f282f16ef90d4a585034050ccda536451901abfb19a57f40c", size = 819341, upload-time = "2025-11-18T13:34:20.766Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/4a/0dc3de1c172d35abe512332cfdcc43211b6ebce629e4cc42e6cd25ed8f4d/coverage-7.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:32b75c2ba3f324ee37af3ccee5b30458038c50b349ad9b88cee85096132a575b", size = 217409, upload-time = "2025-11-18T13:31:53.122Z" }, - { url = "https://files.pythonhosted.org/packages/01/c3/086198b98db0109ad4f84241e8e9ea7e5fb2db8c8ffb787162d40c26cc76/coverage-7.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb2a1b6ab9fe833714a483a915de350abc624a37149649297624c8d57add089c", size = 217927, upload-time = "2025-11-18T13:31:54.458Z" }, - { url = "https://files.pythonhosted.org/packages/5d/5f/34614dbf5ce0420828fc6c6f915126a0fcb01e25d16cf141bf5361e6aea6/coverage-7.12.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5734b5d913c3755e72f70bf6cc37a0518d4f4745cde760c5d8e12005e62f9832", size = 244678, upload-time = "2025-11-18T13:31:55.805Z" }, - { url = "https://files.pythonhosted.org/packages/55/7b/6b26fb32e8e4a6989ac1d40c4e132b14556131493b1d06bc0f2be169c357/coverage-7.12.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b527a08cdf15753279b7afb2339a12073620b761d79b81cbe2cdebdb43d90daa", size = 246507, upload-time = "2025-11-18T13:31:57.05Z" }, - { url = "https://files.pythonhosted.org/packages/06/42/7d70e6603d3260199b90fb48b537ca29ac183d524a65cc31366b2e905fad/coverage-7.12.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9bb44c889fb68004e94cab71f6a021ec83eac9aeabdbb5a5a88821ec46e1da73", size = 248366, upload-time = "2025-11-18T13:31:58.362Z" }, - { url = "https://files.pythonhosted.org/packages/2d/4a/d86b837923878424c72458c5b25e899a3c5ca73e663082a915f5b3c4d749/coverage-7.12.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b59b501455535e2e5dde5881739897967b272ba25988c89145c12d772810ccb", size = 245366, upload-time = "2025-11-18T13:31:59.572Z" }, - { url = "https://files.pythonhosted.org/packages/e6/c2/2adec557e0aa9721875f06ced19730fdb7fc58e31b02b5aa56f2ebe4944d/coverage-7.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d8842f17095b9868a05837b7b1b73495293091bed870e099521ada176aa3e00e", size = 246408, upload-time = "2025-11-18T13:32:00.784Z" }, - { url = "https://files.pythonhosted.org/packages/5a/4b/8bd1f1148260df11c618e535fdccd1e5aaf646e55b50759006a4f41d8a26/coverage-7.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c5a6f20bf48b8866095c6820641e7ffbe23f2ac84a2efc218d91235e404c7777", size = 244416, upload-time = "2025-11-18T13:32:01.963Z" }, - { url = "https://files.pythonhosted.org/packages/0e/13/3a248dd6a83df90414c54a4e121fd081fb20602ca43955fbe1d60e2312a9/coverage-7.12.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:5f3738279524e988d9da2893f307c2093815c623f8d05a8f79e3eff3a7a9e553", size = 244681, upload-time = "2025-11-18T13:32:03.408Z" }, - { url = "https://files.pythonhosted.org/packages/76/30/aa833827465a5e8c938935f5d91ba055f70516941078a703740aaf1aa41f/coverage-7.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0d68c1f7eabbc8abe582d11fa393ea483caf4f44b0af86881174769f185c94d", size = 245300, upload-time = "2025-11-18T13:32:04.686Z" }, - { url = "https://files.pythonhosted.org/packages/38/24/f85b3843af1370fb3739fa7571819b71243daa311289b31214fe3e8c9d68/coverage-7.12.0-cp310-cp310-win32.whl", hash = "sha256:7670d860e18b1e3ee5930b17a7d55ae6287ec6e55d9799982aa103a2cc1fa2ef", size = 220008, upload-time = "2025-11-18T13:32:05.806Z" }, - { url = "https://files.pythonhosted.org/packages/3a/a2/c7da5b9566f7164db9eefa133d17761ecb2c2fde9385d754e5b5c80f710d/coverage-7.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:f999813dddeb2a56aab5841e687b68169da0d3f6fc78ccf50952fa2463746022", size = 220943, upload-time = "2025-11-18T13:32:07.166Z" }, - { url = "https://files.pythonhosted.org/packages/5a/0c/0dfe7f0487477d96432e4815537263363fb6dd7289743a796e8e51eabdf2/coverage-7.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa124a3683d2af98bd9d9c2bfa7a5076ca7e5ab09fdb96b81fa7d89376ae928f", size = 217535, upload-time = "2025-11-18T13:32:08.812Z" }, - { url = "https://files.pythonhosted.org/packages/9b/f5/f9a4a053a5bbff023d3bec259faac8f11a1e5a6479c2ccf586f910d8dac7/coverage-7.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d93fbf446c31c0140208dcd07c5d882029832e8ed7891a39d6d44bd65f2316c3", size = 218044, upload-time = "2025-11-18T13:32:10.329Z" }, - { url = "https://files.pythonhosted.org/packages/95/c5/84fc3697c1fa10cd8571919bf9693f693b7373278daaf3b73e328d502bc8/coverage-7.12.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:52ca620260bd8cd6027317bdd8b8ba929be1d741764ee765b42c4d79a408601e", size = 248440, upload-time = "2025-11-18T13:32:12.536Z" }, - { url = "https://files.pythonhosted.org/packages/f4/36/2d93fbf6a04670f3874aed397d5a5371948a076e3249244a9e84fb0e02d6/coverage-7.12.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f3433ffd541380f3a0e423cff0f4926d55b0cc8c1d160fdc3be24a4c03aa65f7", size = 250361, upload-time = "2025-11-18T13:32:13.852Z" }, - { url = "https://files.pythonhosted.org/packages/5d/49/66dc65cc456a6bfc41ea3d0758c4afeaa4068a2b2931bf83be6894cf1058/coverage-7.12.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7bbb321d4adc9f65e402c677cd1c8e4c2d0105d3ce285b51b4d87f1d5db5245", size = 252472, upload-time = "2025-11-18T13:32:15.068Z" }, - { url = "https://files.pythonhosted.org/packages/35/1f/ebb8a18dffd406db9fcd4b3ae42254aedcaf612470e8712f12041325930f/coverage-7.12.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22a7aade354a72dff3b59c577bfd18d6945c61f97393bc5fb7bd293a4237024b", size = 248592, upload-time = "2025-11-18T13:32:16.328Z" }, - { url = "https://files.pythonhosted.org/packages/da/a8/67f213c06e5ea3b3d4980df7dc344d7fea88240b5fe878a5dcbdfe0e2315/coverage-7.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3ff651dcd36d2fea66877cd4a82de478004c59b849945446acb5baf9379a1b64", size = 250167, upload-time = "2025-11-18T13:32:17.687Z" }, - { url = "https://files.pythonhosted.org/packages/f0/00/e52aef68154164ea40cc8389c120c314c747fe63a04b013a5782e989b77f/coverage-7.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:31b8b2e38391a56e3cea39d22a23faaa7c3fc911751756ef6d2621d2a9daf742", size = 248238, upload-time = "2025-11-18T13:32:19.2Z" }, - { url = "https://files.pythonhosted.org/packages/1f/a4/4d88750bcf9d6d66f77865e5a05a20e14db44074c25fd22519777cb69025/coverage-7.12.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:297bc2da28440f5ae51c845a47c8175a4db0553a53827886e4fb25c66633000c", size = 247964, upload-time = "2025-11-18T13:32:21.027Z" }, - { url = "https://files.pythonhosted.org/packages/a7/6b/b74693158899d5b47b0bf6238d2c6722e20ba749f86b74454fac0696bb00/coverage-7.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ff7651cc01a246908eac162a6a86fc0dbab6de1ad165dfb9a1e2ec660b44984", size = 248862, upload-time = "2025-11-18T13:32:22.304Z" }, - { url = "https://files.pythonhosted.org/packages/18/de/6af6730227ce0e8ade307b1cc4a08e7f51b419a78d02083a86c04ccceb29/coverage-7.12.0-cp311-cp311-win32.whl", hash = "sha256:313672140638b6ddb2c6455ddeda41c6a0b208298034544cfca138978c6baed6", size = 220033, upload-time = "2025-11-18T13:32:23.714Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a1/e7f63021a7c4fe20994359fcdeae43cbef4a4d0ca36a5a1639feeea5d9e1/coverage-7.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a1783ed5bd0d5938d4435014626568dc7f93e3cb99bc59188cc18857c47aa3c4", size = 220966, upload-time = "2025-11-18T13:32:25.599Z" }, - { url = "https://files.pythonhosted.org/packages/77/e8/deae26453f37c20c3aa0c4433a1e32cdc169bf415cce223a693117aa3ddd/coverage-7.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:4648158fd8dd9381b5847622df1c90ff314efbfc1df4550092ab6013c238a5fc", size = 219637, upload-time = "2025-11-18T13:32:27.265Z" }, - { url = "https://files.pythonhosted.org/packages/02/bf/638c0427c0f0d47638242e2438127f3c8ee3cfc06c7fdeb16778ed47f836/coverage-7.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:29644c928772c78512b48e14156b81255000dcfd4817574ff69def189bcb3647", size = 217704, upload-time = "2025-11-18T13:32:28.906Z" }, - { url = "https://files.pythonhosted.org/packages/08/e1/706fae6692a66c2d6b871a608bbde0da6281903fa0e9f53a39ed441da36a/coverage-7.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8638cbb002eaa5d7c8d04da667813ce1067080b9a91099801a0053086e52b736", size = 218064, upload-time = "2025-11-18T13:32:30.161Z" }, - { url = "https://files.pythonhosted.org/packages/a9/8b/eb0231d0540f8af3ffda39720ff43cb91926489d01524e68f60e961366e4/coverage-7.12.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:083631eeff5eb9992c923e14b810a179798bb598e6a0dd60586819fc23be6e60", size = 249560, upload-time = "2025-11-18T13:32:31.835Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a1/67fb52af642e974d159b5b379e4d4c59d0ebe1288677fbd04bbffe665a82/coverage-7.12.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:99d5415c73ca12d558e07776bd957c4222c687b9f1d26fa0e1b57e3598bdcde8", size = 252318, upload-time = "2025-11-18T13:32:33.178Z" }, - { url = "https://files.pythonhosted.org/packages/41/e5/38228f31b2c7665ebf9bdfdddd7a184d56450755c7e43ac721c11a4b8dab/coverage-7.12.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e949ebf60c717c3df63adb4a1a366c096c8d7fd8472608cd09359e1bd48ef59f", size = 253403, upload-time = "2025-11-18T13:32:34.45Z" }, - { url = "https://files.pythonhosted.org/packages/ec/4b/df78e4c8188f9960684267c5a4897836f3f0f20a20c51606ee778a1d9749/coverage-7.12.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6d907ddccbca819afa2cd014bc69983b146cca2735a0b1e6259b2a6c10be1e70", size = 249984, upload-time = "2025-11-18T13:32:35.747Z" }, - { url = "https://files.pythonhosted.org/packages/ba/51/bb163933d195a345c6f63eab9e55743413d064c291b6220df754075c2769/coverage-7.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b1518ecbad4e6173f4c6e6c4a46e49555ea5679bf3feda5edb1b935c7c44e8a0", size = 251339, upload-time = "2025-11-18T13:32:37.352Z" }, - { url = "https://files.pythonhosted.org/packages/15/40/c9b29cdb8412c837cdcbc2cfa054547dd83affe6cbbd4ce4fdb92b6ba7d1/coverage-7.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:51777647a749abdf6f6fd8c7cffab12de68ab93aab15efc72fbbb83036c2a068", size = 249489, upload-time = "2025-11-18T13:32:39.212Z" }, - { url = "https://files.pythonhosted.org/packages/c8/da/b3131e20ba07a0de4437a50ef3b47840dfabf9293675b0cd5c2c7f66dd61/coverage-7.12.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:42435d46d6461a3b305cdfcad7cdd3248787771f53fe18305548cba474e6523b", size = 249070, upload-time = "2025-11-18T13:32:40.598Z" }, - { url = "https://files.pythonhosted.org/packages/70/81/b653329b5f6302c08d683ceff6785bc60a34be9ae92a5c7b63ee7ee7acec/coverage-7.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5bcead88c8423e1855e64b8057d0544e33e4080b95b240c2a355334bb7ced937", size = 250929, upload-time = "2025-11-18T13:32:42.915Z" }, - { url = "https://files.pythonhosted.org/packages/a3/00/250ac3bca9f252a5fb1338b5ad01331ebb7b40223f72bef5b1b2cb03aa64/coverage-7.12.0-cp312-cp312-win32.whl", hash = "sha256:dcbb630ab034e86d2a0f79aefd2be07e583202f41e037602d438c80044957baa", size = 220241, upload-time = "2025-11-18T13:32:44.665Z" }, - { url = "https://files.pythonhosted.org/packages/64/1c/77e79e76d37ce83302f6c21980b45e09f8aa4551965213a10e62d71ce0ab/coverage-7.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:2fd8354ed5d69775ac42986a691fbf68b4084278710cee9d7c3eaa0c28fa982a", size = 221051, upload-time = "2025-11-18T13:32:46.008Z" }, - { url = "https://files.pythonhosted.org/packages/31/f5/641b8a25baae564f9e52cac0e2667b123de961985709a004e287ee7663cc/coverage-7.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:737c3814903be30695b2de20d22bcc5428fdae305c61ba44cdc8b3252984c49c", size = 219692, upload-time = "2025-11-18T13:32:47.372Z" }, - { url = "https://files.pythonhosted.org/packages/b8/14/771700b4048774e48d2c54ed0c674273702713c9ee7acdfede40c2666747/coverage-7.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:47324fffca8d8eae7e185b5bb20c14645f23350f870c1649003618ea91a78941", size = 217725, upload-time = "2025-11-18T13:32:49.22Z" }, - { url = "https://files.pythonhosted.org/packages/17/a7/3aa4144d3bcb719bf67b22d2d51c2d577bf801498c13cb08f64173e80497/coverage-7.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ccf3b2ede91decd2fb53ec73c1f949c3e034129d1e0b07798ff1d02ea0c8fa4a", size = 218098, upload-time = "2025-11-18T13:32:50.78Z" }, - { url = "https://files.pythonhosted.org/packages/fc/9c/b846bbc774ff81091a12a10203e70562c91ae71badda00c5ae5b613527b1/coverage-7.12.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b365adc70a6936c6b0582dc38746b33b2454148c02349345412c6e743efb646d", size = 249093, upload-time = "2025-11-18T13:32:52.554Z" }, - { url = "https://files.pythonhosted.org/packages/76/b6/67d7c0e1f400b32c883e9342de4a8c2ae7c1a0b57c5de87622b7262e2309/coverage-7.12.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bc13baf85cd8a4cfcf4a35c7bc9d795837ad809775f782f697bf630b7e200211", size = 251686, upload-time = "2025-11-18T13:32:54.862Z" }, - { url = "https://files.pythonhosted.org/packages/cc/75/b095bd4b39d49c3be4bffbb3135fea18a99a431c52dd7513637c0762fecb/coverage-7.12.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:099d11698385d572ceafb3288a5b80fe1fc58bf665b3f9d362389de488361d3d", size = 252930, upload-time = "2025-11-18T13:32:56.417Z" }, - { url = "https://files.pythonhosted.org/packages/6e/f3/466f63015c7c80550bead3093aacabf5380c1220a2a93c35d374cae8f762/coverage-7.12.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:473dc45d69694069adb7680c405fb1e81f60b2aff42c81e2f2c3feaf544d878c", size = 249296, upload-time = "2025-11-18T13:32:58.074Z" }, - { url = "https://files.pythonhosted.org/packages/27/86/eba2209bf2b7e28c68698fc13437519a295b2d228ba9e0ec91673e09fa92/coverage-7.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:583f9adbefd278e9de33c33d6846aa8f5d164fa49b47144180a0e037f0688bb9", size = 251068, upload-time = "2025-11-18T13:32:59.646Z" }, - { url = "https://files.pythonhosted.org/packages/ec/55/ca8ae7dbba962a3351f18940b359b94c6bafdd7757945fdc79ec9e452dc7/coverage-7.12.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2089cc445f2dc0af6f801f0d1355c025b76c24481935303cf1af28f636688f0", size = 249034, upload-time = "2025-11-18T13:33:01.481Z" }, - { url = "https://files.pythonhosted.org/packages/7a/d7/39136149325cad92d420b023b5fd900dabdd1c3a0d1d5f148ef4a8cedef5/coverage-7.12.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:950411f1eb5d579999c5f66c62a40961f126fc71e5e14419f004471957b51508", size = 248853, upload-time = "2025-11-18T13:33:02.935Z" }, - { url = "https://files.pythonhosted.org/packages/fe/b6/76e1add8b87ef60e00643b0b7f8f7bb73d4bf5249a3be19ebefc5793dd25/coverage-7.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b1aab7302a87bafebfe76b12af681b56ff446dc6f32ed178ff9c092ca776e6bc", size = 250619, upload-time = "2025-11-18T13:33:04.336Z" }, - { url = "https://files.pythonhosted.org/packages/95/87/924c6dc64f9203f7a3c1832a6a0eee5a8335dbe5f1bdadcc278d6f1b4d74/coverage-7.12.0-cp313-cp313-win32.whl", hash = "sha256:d7e0d0303c13b54db495eb636bc2465b2fb8475d4c8bcec8fe4b5ca454dfbae8", size = 220261, upload-time = "2025-11-18T13:33:06.493Z" }, - { url = "https://files.pythonhosted.org/packages/91/77/dd4aff9af16ff776bf355a24d87eeb48fc6acde54c907cc1ea89b14a8804/coverage-7.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:ce61969812d6a98a981d147d9ac583a36ac7db7766f2e64a9d4d059c2fe29d07", size = 221072, upload-time = "2025-11-18T13:33:07.926Z" }, - { url = "https://files.pythonhosted.org/packages/70/49/5c9dc46205fef31b1b226a6e16513193715290584317fd4df91cdaf28b22/coverage-7.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:bcec6f47e4cb8a4c2dc91ce507f6eefc6a1b10f58df32cdc61dff65455031dfc", size = 219702, upload-time = "2025-11-18T13:33:09.631Z" }, - { url = "https://files.pythonhosted.org/packages/9b/62/f87922641c7198667994dd472a91e1d9b829c95d6c29529ceb52132436ad/coverage-7.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:459443346509476170d553035e4a3eed7b860f4fe5242f02de1010501956ce87", size = 218420, upload-time = "2025-11-18T13:33:11.153Z" }, - { url = "https://files.pythonhosted.org/packages/85/dd/1cc13b2395ef15dbb27d7370a2509b4aee77890a464fb35d72d428f84871/coverage-7.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04a79245ab2b7a61688958f7a855275997134bc84f4a03bc240cf64ff132abf6", size = 218773, upload-time = "2025-11-18T13:33:12.569Z" }, - { url = "https://files.pythonhosted.org/packages/74/40/35773cc4bb1e9d4658d4fb669eb4195b3151bef3bbd6f866aba5cd5dac82/coverage-7.12.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:09a86acaaa8455f13d6a99221d9654df249b33937b4e212b4e5a822065f12aa7", size = 260078, upload-time = "2025-11-18T13:33:14.037Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ee/231bb1a6ffc2905e396557585ebc6bdc559e7c66708376d245a1f1d330fc/coverage-7.12.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:907e0df1b71ba77463687a74149c6122c3f6aac56c2510a5d906b2f368208560", size = 262144, upload-time = "2025-11-18T13:33:15.601Z" }, - { url = "https://files.pythonhosted.org/packages/28/be/32f4aa9f3bf0b56f3971001b56508352c7753915345d45fab4296a986f01/coverage-7.12.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b57e2d0ddd5f0582bae5437c04ee71c46cd908e7bc5d4d0391f9a41e812dd12", size = 264574, upload-time = "2025-11-18T13:33:17.354Z" }, - { url = "https://files.pythonhosted.org/packages/68/7c/00489fcbc2245d13ab12189b977e0cf06ff3351cb98bc6beba8bd68c5902/coverage-7.12.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:58c1c6aa677f3a1411fe6fb28ec3a942e4f665df036a3608816e0847fad23296", size = 259298, upload-time = "2025-11-18T13:33:18.958Z" }, - { url = "https://files.pythonhosted.org/packages/96/b4/f0760d65d56c3bea95b449e02570d4abd2549dc784bf39a2d4721a2d8ceb/coverage-7.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4c589361263ab2953e3c4cd2a94db94c4ad4a8e572776ecfbad2389c626e4507", size = 262150, upload-time = "2025-11-18T13:33:20.644Z" }, - { url = "https://files.pythonhosted.org/packages/c5/71/9a9314df00f9326d78c1e5a910f520d599205907432d90d1c1b7a97aa4b1/coverage-7.12.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:91b810a163ccad2e43b1faa11d70d3cf4b6f3d83f9fd5f2df82a32d47b648e0d", size = 259763, upload-time = "2025-11-18T13:33:22.189Z" }, - { url = "https://files.pythonhosted.org/packages/10/34/01a0aceed13fbdf925876b9a15d50862eb8845454301fe3cdd1df08b2182/coverage-7.12.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:40c867af715f22592e0d0fb533a33a71ec9e0f73a6945f722a0c85c8c1cbe3a2", size = 258653, upload-time = "2025-11-18T13:33:24.239Z" }, - { url = "https://files.pythonhosted.org/packages/8d/04/81d8fd64928acf1574bbb0181f66901c6c1c6279c8ccf5f84259d2c68ae9/coverage-7.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:68b0d0a2d84f333de875666259dadf28cc67858bc8fd8b3f1eae84d3c2bec455", size = 260856, upload-time = "2025-11-18T13:33:26.365Z" }, - { url = "https://files.pythonhosted.org/packages/f2/76/fa2a37bfaeaf1f766a2d2360a25a5297d4fb567098112f6517475eee120b/coverage-7.12.0-cp313-cp313t-win32.whl", hash = "sha256:73f9e7fbd51a221818fd11b7090eaa835a353ddd59c236c57b2199486b116c6d", size = 220936, upload-time = "2025-11-18T13:33:28.165Z" }, - { url = "https://files.pythonhosted.org/packages/f9/52/60f64d932d555102611c366afb0eb434b34266b1d9266fc2fe18ab641c47/coverage-7.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:24cff9d1f5743f67db7ba46ff284018a6e9aeb649b67aa1e70c396aa1b7cb23c", size = 222001, upload-time = "2025-11-18T13:33:29.656Z" }, - { url = "https://files.pythonhosted.org/packages/77/df/c303164154a5a3aea7472bf323b7c857fed93b26618ed9fc5c2955566bb0/coverage-7.12.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c87395744f5c77c866d0f5a43d97cc39e17c7f1cb0115e54a2fe67ca75c5d14d", size = 220273, upload-time = "2025-11-18T13:33:31.415Z" }, - { url = "https://files.pythonhosted.org/packages/bf/2e/fc12db0883478d6e12bbd62d481210f0c8daf036102aa11434a0c5755825/coverage-7.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a1c59b7dc169809a88b21a936eccf71c3895a78f5592051b1af8f4d59c2b4f92", size = 217777, upload-time = "2025-11-18T13:33:32.86Z" }, - { url = "https://files.pythonhosted.org/packages/1f/c1/ce3e525d223350c6ec16b9be8a057623f54226ef7f4c2fee361ebb6a02b8/coverage-7.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8787b0f982e020adb732b9f051f3e49dd5054cebbc3f3432061278512a2b1360", size = 218100, upload-time = "2025-11-18T13:33:34.532Z" }, - { url = "https://files.pythonhosted.org/packages/15/87/113757441504aee3808cb422990ed7c8bcc2d53a6779c66c5adef0942939/coverage-7.12.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5ea5a9f7dc8877455b13dd1effd3202e0bca72f6f3ab09f9036b1bcf728f69ac", size = 249151, upload-time = "2025-11-18T13:33:36.135Z" }, - { url = "https://files.pythonhosted.org/packages/d9/1d/9529d9bd44049b6b05bb319c03a3a7e4b0a8a802d28fa348ad407e10706d/coverage-7.12.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fdba9f15849534594f60b47c9a30bc70409b54947319a7c4fd0e8e3d8d2f355d", size = 251667, upload-time = "2025-11-18T13:33:37.996Z" }, - { url = "https://files.pythonhosted.org/packages/11/bb/567e751c41e9c03dc29d3ce74b8c89a1e3396313e34f255a2a2e8b9ebb56/coverage-7.12.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a00594770eb715854fb1c57e0dea08cce6720cfbc531accdb9850d7c7770396c", size = 253003, upload-time = "2025-11-18T13:33:39.553Z" }, - { url = "https://files.pythonhosted.org/packages/e4/b3/c2cce2d8526a02fb9e9ca14a263ca6fc074449b33a6afa4892838c903528/coverage-7.12.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5560c7e0d82b42eb1951e4f68f071f8017c824ebfd5a6ebe42c60ac16c6c2434", size = 249185, upload-time = "2025-11-18T13:33:42.086Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a7/967f93bb66e82c9113c66a8d0b65ecf72fc865adfba5a145f50c7af7e58d/coverage-7.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d6c2e26b481c9159c2773a37947a9718cfdc58893029cdfb177531793e375cfc", size = 251025, upload-time = "2025-11-18T13:33:43.634Z" }, - { url = "https://files.pythonhosted.org/packages/b9/b2/f2f6f56337bc1af465d5b2dc1ee7ee2141b8b9272f3bf6213fcbc309a836/coverage-7.12.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:6e1a8c066dabcde56d5d9fed6a66bc19a2883a3fe051f0c397a41fc42aedd4cc", size = 248979, upload-time = "2025-11-18T13:33:46.04Z" }, - { url = "https://files.pythonhosted.org/packages/f4/7a/bf4209f45a4aec09d10a01a57313a46c0e0e8f4c55ff2965467d41a92036/coverage-7.12.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f7ba9da4726e446d8dd8aae5a6cd872511184a5d861de80a86ef970b5dacce3e", size = 248800, upload-time = "2025-11-18T13:33:47.546Z" }, - { url = "https://files.pythonhosted.org/packages/b8/b7/1e01b8696fb0521810f60c5bbebf699100d6754183e6cc0679bf2ed76531/coverage-7.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e0f483ab4f749039894abaf80c2f9e7ed77bbf3c737517fb88c8e8e305896a17", size = 250460, upload-time = "2025-11-18T13:33:49.537Z" }, - { url = "https://files.pythonhosted.org/packages/71/ae/84324fb9cb46c024760e706353d9b771a81b398d117d8c1fe010391c186f/coverage-7.12.0-cp314-cp314-win32.whl", hash = "sha256:76336c19a9ef4a94b2f8dc79f8ac2da3f193f625bb5d6f51a328cd19bfc19933", size = 220533, upload-time = "2025-11-18T13:33:51.16Z" }, - { url = "https://files.pythonhosted.org/packages/e2/71/1033629deb8460a8f97f83e6ac4ca3b93952e2b6f826056684df8275e015/coverage-7.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:7c1059b600aec6ef090721f8f633f60ed70afaffe8ecab85b59df748f24b31fe", size = 221348, upload-time = "2025-11-18T13:33:52.776Z" }, - { url = "https://files.pythonhosted.org/packages/0a/5f/ac8107a902f623b0c251abdb749be282dc2ab61854a8a4fcf49e276fce2f/coverage-7.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:172cf3a34bfef42611963e2b661302a8931f44df31629e5b1050567d6b90287d", size = 219922, upload-time = "2025-11-18T13:33:54.316Z" }, - { url = "https://files.pythonhosted.org/packages/79/6e/f27af2d4da367f16077d21ef6fe796c874408219fa6dd3f3efe7751bd910/coverage-7.12.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:aa7d48520a32cb21c7a9b31f81799e8eaec7239db36c3b670be0fa2403828d1d", size = 218511, upload-time = "2025-11-18T13:33:56.343Z" }, - { url = "https://files.pythonhosted.org/packages/67/dd/65fd874aa460c30da78f9d259400d8e6a4ef457d61ab052fd248f0050558/coverage-7.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:90d58ac63bc85e0fb919f14d09d6caa63f35a5512a2205284b7816cafd21bb03", size = 218771, upload-time = "2025-11-18T13:33:57.966Z" }, - { url = "https://files.pythonhosted.org/packages/55/e0/7c6b71d327d8068cb79c05f8f45bf1b6145f7a0de23bbebe63578fe5240a/coverage-7.12.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ca8ecfa283764fdda3eae1bdb6afe58bf78c2c3ec2b2edcb05a671f0bba7b3f9", size = 260151, upload-time = "2025-11-18T13:33:59.597Z" }, - { url = "https://files.pythonhosted.org/packages/49/ce/4697457d58285b7200de6b46d606ea71066c6e674571a946a6ea908fb588/coverage-7.12.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:874fe69a0785d96bd066059cd4368022cebbec1a8958f224f0016979183916e6", size = 262257, upload-time = "2025-11-18T13:34:01.166Z" }, - { url = "https://files.pythonhosted.org/packages/2f/33/acbc6e447aee4ceba88c15528dbe04a35fb4d67b59d393d2e0d6f1e242c1/coverage-7.12.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b3c889c0b8b283a24d721a9eabc8ccafcfc3aebf167e4cd0d0e23bf8ec4e339", size = 264671, upload-time = "2025-11-18T13:34:02.795Z" }, - { url = "https://files.pythonhosted.org/packages/87/ec/e2822a795c1ed44d569980097be839c5e734d4c0c1119ef8e0a073496a30/coverage-7.12.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8bb5b894b3ec09dcd6d3743229dc7f2c42ef7787dc40596ae04c0edda487371e", size = 259231, upload-time = "2025-11-18T13:34:04.397Z" }, - { url = "https://files.pythonhosted.org/packages/72/c5/a7ec5395bb4a49c9b7ad97e63f0c92f6bf4a9e006b1393555a02dae75f16/coverage-7.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:79a44421cd5fba96aa57b5e3b5a4d3274c449d4c622e8f76882d76635501fd13", size = 262137, upload-time = "2025-11-18T13:34:06.068Z" }, - { url = "https://files.pythonhosted.org/packages/67/0c/02c08858b764129f4ecb8e316684272972e60777ae986f3865b10940bdd6/coverage-7.12.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:33baadc0efd5c7294f436a632566ccc1f72c867f82833eb59820ee37dc811c6f", size = 259745, upload-time = "2025-11-18T13:34:08.04Z" }, - { url = "https://files.pythonhosted.org/packages/5a/04/4fd32b7084505f3829a8fe45c1a74a7a728cb251aaadbe3bec04abcef06d/coverage-7.12.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c406a71f544800ef7e9e0000af706b88465f3573ae8b8de37e5f96c59f689ad1", size = 258570, upload-time = "2025-11-18T13:34:09.676Z" }, - { url = "https://files.pythonhosted.org/packages/48/35/2365e37c90df4f5342c4fa202223744119fe31264ee2924f09f074ea9b6d/coverage-7.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e71bba6a40883b00c6d571599b4627f50c360b3d0d02bfc658168936be74027b", size = 260899, upload-time = "2025-11-18T13:34:11.259Z" }, - { url = "https://files.pythonhosted.org/packages/05/56/26ab0464ca733fa325e8e71455c58c1c374ce30f7c04cebb88eabb037b18/coverage-7.12.0-cp314-cp314t-win32.whl", hash = "sha256:9157a5e233c40ce6613dead4c131a006adfda70e557b6856b97aceed01b0e27a", size = 221313, upload-time = "2025-11-18T13:34:12.863Z" }, - { url = "https://files.pythonhosted.org/packages/da/1c/017a3e1113ed34d998b27d2c6dba08a9e7cb97d362f0ec988fcd873dcf81/coverage-7.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e84da3a0fd233aeec797b981c51af1cabac74f9bd67be42458365b30d11b5291", size = 222423, upload-time = "2025-11-18T13:34:15.14Z" }, - { url = "https://files.pythonhosted.org/packages/4c/36/bcc504fdd5169301b52568802bb1b9cdde2e27a01d39fbb3b4b508ab7c2c/coverage-7.12.0-cp314-cp314t-win_arm64.whl", hash = "sha256:01d24af36fedda51c2b1aca56e4330a3710f83b02a5ff3743a6b015ffa7c9384", size = 220459, upload-time = "2025-11-18T13:34:17.222Z" }, - { url = "https://files.pythonhosted.org/packages/ce/a3/43b749004e3c09452e39bb56347a008f0a0668aad37324a99b5c8ca91d9e/coverage-7.12.0-py3-none-any.whl", hash = "sha256:159d50c0b12e060b15ed3d39f87ed43d4f7f7ad40b8a534f4dd331adbb51104a", size = 209503, upload-time = "2025-11-18T13:34:18.892Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and python_full_version <= '3.11'" }, -] - -[[package]] -name = "exceptiongroup" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", version = "4.7.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, - { name = "typing-extensions", version = "4.13.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, - { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, -] - -[[package]] -name = "importlib-metadata" -version = "6.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", version = "4.7.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, - { name = "zipp", marker = "python_full_version < '3.8'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/82/f6e29c8d5c098b6be61460371c2c5591f4a335923639edec43b3830650a4/importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4", size = 53569, upload-time = "2023-06-18T21:44:35.024Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/94/64287b38c7de4c90683630338cf28f129decbba0a44f0c6db35a873c73c4/importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5", size = 22934, upload-time = "2023-06-18T21:44:33.441Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646, upload-time = "2023-01-07T11:08:11.254Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892, upload-time = "2023-01-07T11:08:09.864Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.9.*'", - "python_full_version == '3.8.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, -] - -[[package]] -name = "libfec-parser" -version = "0.1.0" -source = { editable = "." } - -[package.optional-dependencies] -dev = [ - { name = "pytest", version = "7.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, - { name = "pytest", version = "8.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, - { name = "pytest", version = "9.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pytest-cov", version = "4.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, - { name = "pytest-cov", version = "5.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, - { name = "pytest-cov", version = "7.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" }, -] - -[package.metadata] -requires-dist = [ - { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0.0" }, - { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=4.0.0" }, -] -provides-extras = ["dev"] - -[[package]] -name = "packaging" -version = "24.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -sdist = { url = "https://files.pythonhosted.org/packages/ee/b5/b43a27ac7472e1818c4bafd44430e69605baefe1f34440593e0332ec8b4d/packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9", size = 147882, upload-time = "2024-03-10T09:39:28.33Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", size = 53488, upload-time = "2024-03-10T09:39:25.947Z" }, -] - -[[package]] -name = "packaging" -version = "25.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", - "python_full_version == '3.9.*'", - "python_full_version == '3.8.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, -] - -[[package]] -name = "pluggy" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.8'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8a/42/8f2833655a29c4e9cb52ee8a2be04ceac61bcff4a680fb338cbd3d1e322d/pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3", size = 61613, upload-time = "2023-06-21T09:12:28.745Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/32/4a79112b8b87b21450b066e102d6608907f4c885ed7b04c3fdb085d4d6ae/pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849", size = 17695, upload-time = "2023-06-21T09:12:27.397Z" }, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.8.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955, upload-time = "2024-04-20T21:34:42.531Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556, upload-time = "2024-04-20T21:34:40.434Z" }, -] - -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", - "python_full_version == '3.9.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, -] - -[[package]] -name = "pygments" -version = "2.19.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, -] - -[[package]] -name = "pytest" -version = "7.4.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.8' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.8'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.8'" }, - { name = "iniconfig", version = "2.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, - { name = "packaging", version = "24.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, - { name = "pluggy", version = "1.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, - { name = "tomli", version = "2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116, upload-time = "2023-12-31T12:00:18.035Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size = 325287, upload-time = "2023-12-31T12:00:13.963Z" }, -] - -[[package]] -name = "pytest" -version = "8.3.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.8.*'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version == '3.8.*' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.8.*'" }, - { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, - { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, - { name = "pluggy", version = "1.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, - { name = "tomli", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891, upload-time = "2025-03-02T12:54:54.503Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634, upload-time = "2025-03-02T12:54:52.069Z" }, -] - -[[package]] -name = "pytest" -version = "8.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.9.*'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version == '3.9.*' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.9.*'" }, - { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, - { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, - { name = "pluggy", version = "1.6.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, - { name = "pygments", marker = "python_full_version == '3.9.*'" }, - { name = "tomli", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, -] - -[[package]] -name = "pytest" -version = "9.0.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, - { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "packaging", version = "25.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pluggy", version = "1.6.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pygments", marker = "python_full_version >= '3.10'" }, - { name = "tomli", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/07/56/f013048ac4bc4c1d9be45afd4ab209ea62822fb1598f40687e6bf45dcea4/pytest-9.0.1.tar.gz", hash = "sha256:3e9c069ea73583e255c3b21cf46b8d3c56f6e3a1a8f6da94ccb0fcf57b9d73c8", size = 1564125, upload-time = "2025-11-12T13:05:09.333Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl", hash = "sha256:67be0030d194df2dfa7b556f2e56fb3c3315bd5c8822c6951162b92b32ce7dad", size = 373668, upload-time = "2025-11-12T13:05:07.379Z" }, -] - -[[package]] -name = "pytest-cov" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -dependencies = [ - { name = "coverage", version = "7.2.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.8'" }, - { name = "pytest", version = "7.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/15/da3df99fd551507694a9b01f512a2f6cf1254f33601605843c3775f39460/pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6", size = 63245, upload-time = "2023-05-24T18:44:56.845Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/4b/8b78d126e275efa2379b1c2e09dc52cf70df16fc3b90613ef82531499d73/pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a", size = 21949, upload-time = "2023-05-24T18:44:54.079Z" }, -] - -[[package]] -name = "pytest-cov" -version = "5.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.8.*'", -] -dependencies = [ - { name = "coverage", version = "7.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version == '3.8.*'" }, - { name = "pytest", version = "8.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.8.*'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/74/67/00efc8d11b630c56f15f4ad9c7f9223f1e5ec275aaae3fa9118c6a223ad2/pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857", size = 63042, upload-time = "2024-03-24T20:16:34.856Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/3a/af5b4fa5961d9a1e6237b530eb87dd04aea6eb83da09d2a4073d81b54ccf/pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652", size = 21990, upload-time = "2024-03-24T20:16:32.444Z" }, -] - -[[package]] -name = "pytest-cov" -version = "7.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", - "python_full_version == '3.9.*'", -] -dependencies = [ - { name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version == '3.9.*'" }, - { name = "coverage", version = "7.12.0", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10'" }, - { name = "pluggy", version = "1.6.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, - { name = "pytest", version = "9.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, -] - -[[package]] -name = "tomli" -version = "2.0.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -sdist = { url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f", size = 15164, upload-time = "2022-02-08T10:54:04.006Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", size = 12757, upload-time = "2022-02-08T10:54:02.017Z" }, -] - -[[package]] -name = "tomli" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", - "python_full_version == '3.9.*'", - "python_full_version == '3.8.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, - { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, - { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, - { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, - { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, - { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, - { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, - { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, - { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, - { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, - { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, - { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, - { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, - { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, - { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, - { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, - { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, - { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, - { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, - { url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" }, - { url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" }, - { url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" }, - { url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" }, - { url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" }, - { url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" }, - { url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" }, - { url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" }, - { url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" }, - { url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" }, - { url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" }, - { url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" }, - { url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" }, - { url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" }, - { url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" }, - { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.7.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.8'", -] -sdist = { url = "https://files.pythonhosted.org/packages/3c/8b/0111dd7d6c1478bf83baa1cab85c686426c7a6274119aceb2bd9d35395ad/typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2", size = 72876, upload-time = "2023-07-02T14:20:55.045Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/6b/63cc3df74987c36fe26157ee12e09e8f9db4de771e0f3404263117e75b95/typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", size = 33232, upload-time = "2023-07-02T14:20:53.275Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.13.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.8.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967, upload-time = "2025-04-10T14:19:05.416Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806, upload-time = "2025-04-10T14:19:03.967Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.10'", - "python_full_version == '3.9.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, -] - -[[package]] -name = "zipp" -version = "3.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/27/f0ac6b846684cecce1ee93d32450c45ab607f65c2e0255f0092032d91f07/zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", size = 18454, upload-time = "2023-02-25T02:17:22.503Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/fa/c9e82bbe1af6266adf08afb563905eb87cab83fde00a0a08963510621047/zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556", size = 6758, upload-time = "2023-02-25T02:17:20.807Z" }, -] diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index c2364eb..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,16 +0,0 @@ -[build-system] -requires = ["maturin>=1,<2"] -build-backend = "maturin" - -[project] -name = "fec-py" -requires-python = ">=3.7" -version = "0.1.0" -classifiers = [ - "Programming Language :: Rust", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", -] - -[tool.uv.workspace] -members = ["fec-py/fec-py"] diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 42b131f..0000000 --- a/uv.lock +++ /dev/null @@ -1,7 +0,0 @@ -version = 1 -requires-python = ">=3.7" - -[[package]] -name = "fec-py" -version = "0.1.0" -source = { editable = "." } From d15e1396525b4f2d0e36b94a88565e8fb7efcbfb Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:02:47 -0700 Subject: [PATCH 04/13] license: MIT OR Apache-2.0 Co-Authored-By: Claude Fable 5.1 --- LICENSE-APACHE | 202 ++++++++++++++++++++++++++++ LICENSE-MIT | 25 ++++ README.md | 6 +- crates/fec-api/Cargo.toml | 1 + crates/fec-cli/Cargo.toml | 1 + crates/fec-cli/LICENSE-APACHE | 1 + crates/fec-cli/LICENSE-MIT | 1 + crates/fec-cli/pyproject.toml | 4 +- crates/fec-parser-macros/Cargo.toml | 1 + crates/fec-parser/Cargo.toml | 1 + crates/fec-py/Cargo.toml | 1 + crates/fec-py/LICENSE-APACHE | 1 + crates/fec-py/LICENSE-MIT | 1 + crates/fec-py/README.md | 4 + crates/fec-py/pyproject.toml | 4 +- crates/fec-wasm/Cargo.toml | 1 + 16 files changed, 252 insertions(+), 3 deletions(-) create mode 100644 LICENSE-APACHE create mode 100644 LICENSE-MIT create mode 120000 crates/fec-cli/LICENSE-APACHE create mode 120000 crates/fec-cli/LICENSE-MIT create mode 120000 crates/fec-py/LICENSE-APACHE create mode 120000 crates/fec-py/LICENSE-MIT diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 0000000..35d89fe --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,25 @@ +Copyright (c) 2023-2026 Alex Garcia + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index f0f3934..e83a526 100644 --- a/README.md +++ b/README.md @@ -189,4 +189,8 @@ Below are all the open source FEC file parsers and tools that I could readily fi | https://github.com/newsdev/fec2json | Python | ~2018 | | https://github.com/esonderegger/fecfile | Python | ~2018 | | https://github.com/washingtonpost/FastFEC | C/Python/WASM | ~2021 | -| https://github.com/NickCrews/feco3 | Rust | ~2023 | \ No newline at end of file +| https://github.com/NickCrews/feco3 | Rust | ~2023 | + +## License + +Dual-licensed under MIT or Apache-2.0, at your option. \ No newline at end of file diff --git a/crates/fec-api/Cargo.toml b/crates/fec-api/Cargo.toml index 950ecbf..2821258 100644 --- a/crates/fec-api/Cargo.toml +++ b/crates/fec-api/Cargo.toml @@ -2,6 +2,7 @@ name = "fec-api" version = "0.1.0" edition = "2021" +license = "MIT OR Apache-2.0" [dependencies] anyhow = "1.0" diff --git a/crates/fec-cli/Cargo.toml b/crates/fec-cli/Cargo.toml index b8180ac..c81f7f5 100644 --- a/crates/fec-cli/Cargo.toml +++ b/crates/fec-cli/Cargo.toml @@ -6,6 +6,7 @@ authors = ["Alex Garcia "] description = "A fast FEC filing parser and toolkit" repository = "https://github.com/asg017/libfec" homepage = "https://github.com/asg017/libfec" +license = "MIT OR Apache-2.0" [package.metadata.wix] upgrade-guid = "BA74C7A9-7590-48BD-B8B4-E502C5DD79B6" diff --git a/crates/fec-cli/LICENSE-APACHE b/crates/fec-cli/LICENSE-APACHE new file mode 120000 index 0000000..1cd601d --- /dev/null +++ b/crates/fec-cli/LICENSE-APACHE @@ -0,0 +1 @@ +../../LICENSE-APACHE \ No newline at end of file diff --git a/crates/fec-cli/LICENSE-MIT b/crates/fec-cli/LICENSE-MIT new file mode 120000 index 0000000..b2cfbdc --- /dev/null +++ b/crates/fec-cli/LICENSE-MIT @@ -0,0 +1 @@ +../../LICENSE-MIT \ No newline at end of file diff --git a/crates/fec-cli/pyproject.toml b/crates/fec-cli/pyproject.toml index 28e4d6d..0d421c4 100644 --- a/crates/fec-cli/pyproject.toml +++ b/crates/fec-cli/pyproject.toml @@ -1,7 +1,9 @@ [build-system] -requires = ["maturin>=1.0,<2.0"] +requires = ["maturin>=1.9.4,<2.0"] build-backend = "maturin" [project] name = "libfec" description = "A command line interface for working with FEC filings" +license = "MIT OR Apache-2.0" +license-files = ["LICENSE-*"] diff --git a/crates/fec-parser-macros/Cargo.toml b/crates/fec-parser-macros/Cargo.toml index dcba1d0..ab4571b 100644 --- a/crates/fec-parser-macros/Cargo.toml +++ b/crates/fec-parser-macros/Cargo.toml @@ -2,6 +2,7 @@ name = "fec-parser-macros" version = "0.1.0" edition = "2021" +license = "MIT OR Apache-2.0" [dependencies] proc-macro2 = "1.0.39" diff --git a/crates/fec-parser/Cargo.toml b/crates/fec-parser/Cargo.toml index 3358c7f..b174143 100644 --- a/crates/fec-parser/Cargo.toml +++ b/crates/fec-parser/Cargo.toml @@ -2,6 +2,7 @@ name = "fec-parser" version = "0.1.0" edition = "2021" +license = "MIT OR Apache-2.0" [dependencies] csv = "1.2.2" diff --git a/crates/fec-py/Cargo.toml b/crates/fec-py/Cargo.toml index f8680e9..9cbfdce 100644 --- a/crates/fec-py/Cargo.toml +++ b/crates/fec-py/Cargo.toml @@ -2,6 +2,7 @@ name = "libfec_parser" version = "0.1.0" edition = "2021" +license = "MIT OR Apache-2.0" [lib] name = "libfec_parser" diff --git a/crates/fec-py/LICENSE-APACHE b/crates/fec-py/LICENSE-APACHE new file mode 120000 index 0000000..1cd601d --- /dev/null +++ b/crates/fec-py/LICENSE-APACHE @@ -0,0 +1 @@ +../../LICENSE-APACHE \ No newline at end of file diff --git a/crates/fec-py/LICENSE-MIT b/crates/fec-py/LICENSE-MIT new file mode 120000 index 0000000..b2cfbdc --- /dev/null +++ b/crates/fec-py/LICENSE-MIT @@ -0,0 +1 @@ +../../LICENSE-MIT \ No newline at end of file diff --git a/crates/fec-py/README.md b/crates/fec-py/README.md index 94ec746..7de7fbf 100644 --- a/crates/fec-py/README.md +++ b/crates/fec-py/README.md @@ -207,3 +207,7 @@ uv run --no-cache --no-project --isolated \ --with pandas --with nbconvert --with ipykernel \ jupyter nbconvert --to notebook --execute --inplace quickstart.ipynb ``` + +## License + +Dual-licensed under MIT or Apache-2.0, at your option. diff --git a/crates/fec-py/pyproject.toml b/crates/fec-py/pyproject.toml index 11ba3a8..9484a00 100644 --- a/crates/fec-py/pyproject.toml +++ b/crates/fec-py/pyproject.toml @@ -8,6 +8,8 @@ authors = [ ] requires-python = ">=3.7" dependencies = [] +license = "MIT OR Apache-2.0" +license-files = ["LICENSE-*"] [project.optional-dependencies] dev = [ @@ -24,5 +26,5 @@ python-packages = ["libfec_parser"] python-source = "src" [build-system] -requires = ["maturin>=1.0,<2.0"] +requires = ["maturin>=1.9.4,<2.0"] build-backend = "maturin" diff --git a/crates/fec-wasm/Cargo.toml b/crates/fec-wasm/Cargo.toml index b8b0b99..4c52d75 100644 --- a/crates/fec-wasm/Cargo.toml +++ b/crates/fec-wasm/Cargo.toml @@ -2,6 +2,7 @@ name = "fec-wasm" version = "0.1.0" edition = "2024" +license = "MIT OR Apache-2.0" [dependencies] wasm-bindgen = {version="0.2.100", features = ["serde-serialize"] } From 89fa6affbf091ec0b095971f4b8be5050489d6e8 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:03:13 -0700 Subject: [PATCH 05/13] py: bump pyo3 to 0.29, abi3-py311, drop extension-module Co-Authored-By: Claude Fable 5.1 --- Cargo.lock | 36 ++++++++++++------------------------ crates/fec-py/Cargo.toml | 7 ++++--- crates/fec-py/Makefile | 6 +++--- crates/fec-py/README.md | 2 +- crates/fec-py/pyproject.toml | 7 ++----- crates/fec-py/src/fecfile.rs | 36 ++++++++++++++++++------------------ crates/fec-py/src/lib.rs | 2 -- crates/fec-py/src/parser.rs | 8 ++++---- 8 files changed, 44 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index edb09f9..3a3d6a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2129,37 +2129,32 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.22.6" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" +checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b" dependencies = [ - "cfg-if", - "indoc", "libc", - "memoffset", "once_cell", "portable-atomic", "pyo3-build-config", "pyo3-ffi", "pyo3-macros", - "unindent", ] [[package]] name = "pyo3-build-config" -version = "0.22.6" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" +checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9" dependencies = [ - "once_cell", "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.22.6" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" +checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327" dependencies = [ "libc", "pyo3-build-config", @@ -2167,9 +2162,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.22.6" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" +checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -2179,13 +2174,12 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.22.6" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" +checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952" dependencies = [ "heck", "proc-macro2", - "pyo3-build-config", "quote", "syn 2.0.100", ] @@ -2780,9 +2774,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.16" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] name = "tempfile" @@ -3038,12 +3032,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" -[[package]] -name = "unindent" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" - [[package]] name = "unsafe-libyaml" version = "0.2.11" diff --git a/crates/fec-py/Cargo.toml b/crates/fec-py/Cargo.toml index 9cbfdce..59af4ab 100644 --- a/crates/fec-py/Cargo.toml +++ b/crates/fec-py/Cargo.toml @@ -10,8 +10,9 @@ name = "libfec_parser" crate-type = ["cdylib"] [dependencies] -# "extension-module" tells pyo3 we want to build an extension module (skips linking against libpython.so) -# "abi3-py39" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.9 -pyo3 = { version = "0.22.4", features = ["extension-module", "abi3-py39"] } +# "abi3-py311" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.11. +# "extension-module" is intentionally absent: maturin >= 1.9.4 sets PYO3_BUILD_EXTENSION_MODULE itself, +# and leaving it off keeps `cargo test -p libfec_parser` linkable. +pyo3 = { version = "0.29", features = ["abi3-py311"] } fec-parser = { path="../fec-parser" } csv = "1.3" diff --git a/crates/fec-py/Makefile b/crates/fec-py/Makefile index dad9ebc..10194bd 100644 --- a/crates/fec-py/Makefile +++ b/crates/fec-py/Makefile @@ -11,13 +11,13 @@ build-release: # Run demo.py with sample FEC files from cache2 demo: build uv run --no-cache --no-project --isolated \ - --with 'libfec_parser @ file://dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' \ + --with "$$(ls dist/libfec_parser-*.whl | head -1)" \ demo.py ../../cache2/*.fec # Run demo-fecfile.py with sample FEC files from cache2 demo-fecfile: build uv run --no-cache --no-project --isolated \ - --with 'libfec_parser @ file://dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' \ + --with "$$(ls dist/libfec_parser-*.whl | head -1)" \ demo-fecfile.py ../../cache2/*.fec # Open examples/quickstart.ipynb in JupyterLab with the freshly built wheel installed @@ -31,5 +31,5 @@ notebook: build test-pytest: uv run --no-cache --no-project --isolated \ --with pytest \ - --with 'libfec_parser @ file://dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' \ + --with "$$(ls dist/libfec_parser-*.whl | head -1)" \ pytest tests/ \ No newline at end of file diff --git a/crates/fec-py/README.md b/crates/fec-py/README.md index 7de7fbf..7df6792 100644 --- a/crates/fec-py/README.md +++ b/crates/fec-py/README.md @@ -39,7 +39,7 @@ uvx maturin build --release --out dist pip install dist/libfec_parser-*.whl ``` -Wheels use the stable ABI (`abi3`), so one build works on Python 3.9 and up. +Wheels use the stable ABI (`abi3`), so one build works on Python 3.11 and up. ## `fecfile` API diff --git a/crates/fec-py/pyproject.toml b/crates/fec-py/pyproject.toml index 9484a00..dfc8f83 100644 --- a/crates/fec-py/pyproject.toml +++ b/crates/fec-py/pyproject.toml @@ -1,12 +1,12 @@ [project] name = "libfec-parser" version = "0.1.0" -description = "Add your description here" +description = "Fast parser for FEC electronic filings (.fec), backed by Rust" readme = "README.md" authors = [ { name = "Alex Garcia", email = "alexsebastian.garcia@gmail.com" } ] -requires-python = ">=3.7" +requires-python = ">=3.11" dependencies = [] license = "MIT OR Apache-2.0" license-files = ["LICENSE-*"] @@ -17,9 +17,6 @@ dev = [ "pytest-cov>=4.0.0", ] -[project.scripts] -libfec-parser = "libfec_parser:main" - [tool.maturin] module-name = "libfec_parser" python-packages = ["libfec_parser"] diff --git a/crates/fec-py/src/fecfile.rs b/crates/fec-py/src/fecfile.rs index 445a46c..8516265 100644 --- a/crates/fec-py/src/fecfile.rs +++ b/crates/fec-py/src/fecfile.rs @@ -44,10 +44,10 @@ pub fn loads<'py>( })?; // Build result dictionary - let result = PyDict::new_bound(py); + let result = PyDict::new(py); // Add header - let header_dict = PyDict::new_bound(py); + let header_dict = PyDict::new(py); header_dict.set_item("record_type", &filing.header.record_type)?; header_dict.set_item("ef_type", &filing.header.ef_type)?; header_dict.set_item("fec_version", &filing.header.fec_version)?; @@ -65,7 +65,7 @@ pub fn loads<'py>( result.set_item("header", header_dict)?; // Add filing (cover) - let filing_dict = PyDict::new_bound(py); + let filing_dict = PyDict::new(py); filing_dict.set_item("form_type", &filing.cover.form_type)?; filing_dict.set_item("filer_committee_id_number", &filing.cover.filer_id)?; @@ -77,7 +77,7 @@ pub fn loads<'py>( // Add itemizations - grouped by schedule type let mut itemizations: HashMap>> = HashMap::new(); - let text_list = PyList::empty_bound(py); + let text_list = PyList::empty(py); // Process all rows while let Some(row_result) = filing.next_row() { @@ -102,7 +102,7 @@ pub fn loads<'py>( // Handle TEXT records specially if row_type == "TEXT" { - let text_dict = PyDict::new_bound(py); + let text_dict = PyDict::new(py); text_dict.set_item("form_type", row_type)?; for (i, field) in row.record.iter().enumerate() { text_dict.set_item(format!("field_{}", i), field)?; @@ -134,7 +134,7 @@ pub fn loads<'py>( }; // Build row dictionary - let row_dict = PyDict::new_bound(py); + let row_dict = PyDict::new(py); for (column_name, field) in column_names.iter().zip(row.record.iter()) { // For now, always return as strings (type conversion would require types.json equivalent) row_dict.set_item(column_name.as_str(), field)?; @@ -145,9 +145,9 @@ pub fn loads<'py>( } // Convert itemizations map to dictionary - let itemizations_dict = PyDict::new_bound(py); + let itemizations_dict = PyDict::new(py); for (schedule, rows) in itemizations { - let rows_list = PyList::new_bound(py, rows); + let rows_list = PyList::new(py, rows)?; itemizations_dict.set_item(schedule, rows_list)?; } result.set_item("itemizations", itemizations_dict)?; @@ -190,7 +190,7 @@ pub fn parse_header<'py>( .map_err(|e| pyo3::exceptions::PyValueError::new_err(format!("CSV parse error: {}", e)))?; // Build header dict - let header_dict = PyDict::new_bound(py); + let header_dict = PyDict::new(py); let record_type = record.get(0).unwrap_or("HDR"); let ef_type = record.get(1).unwrap_or(""); @@ -265,7 +265,7 @@ pub fn parse_line<'py>( }; // Build dictionary - let result = PyDict::new_bound(py); + let result = PyDict::new(py); for (column_name, field) in column_names.iter().zip(record.iter()) { result.set_item(column_name.as_str(), field)?; } @@ -291,7 +291,7 @@ pub fn from_http<'py>( let primary_url = format!("https://docquery.fec.gov/dcdev/posted/{}.fec", file_num_str); // Use Python's requests library - let requests = py.import_bound("urllib.request")?; + let requests = py.import("urllib.request")?; let urlopen = requests.getattr("urlopen")?; // Try primary URL @@ -329,7 +329,7 @@ pub fn from_file<'py>( let bytes = std::fs::read(&file_path) .map_err(|e| pyo3::exceptions::PyIOError::new_err(format!("Failed to read file: {}", e)))?; - loads(py, bytes.into_py(py).bind(py), options) + loads(py, pyo3::types::PyBytes::new(py, &bytes).as_any(), options) } /// Print example output showing first itemization of each type @@ -338,20 +338,20 @@ pub fn print_example(parsed: &Bound<'_, PyDict>) -> PyResult<()> { let itemizations_item = parsed .get_item("itemizations")? .ok_or_else(|| pyo3::exceptions::PyKeyError::new_err("itemizations"))?; - let itemizations: &Bound = itemizations_item.downcast()?; + let itemizations: &Bound = itemizations_item.cast()?; - let example = PyDict::new_bound(parsed.py()); + let example = PyDict::new(parsed.py()); example.set_item("header", parsed.get_item("header")?)?; example.set_item("filing", parsed.get_item("filing")?)?; - let example_itemizations = PyDict::new_bound(parsed.py()); + let example_itemizations = PyDict::new(parsed.py()); for item in itemizations.items() { let (key, value): (Bound, Bound) = item.extract()?; - let list: &Bound = value.downcast()?; + let list: &Bound = value.cast()?; if list.len() > 0 { let first_item = list.get_item(0)?; - let single_item_list = PyList::new_bound(parsed.py(), [first_item]); + let single_item_list = PyList::new(parsed.py(), [first_item])?; example_itemizations.set_item(&key, single_item_list)?; } } @@ -360,7 +360,7 @@ pub fn print_example(parsed: &Bound<'_, PyDict>) -> PyResult<()> { example.set_item("text", parsed.get_item("text")?)?; // Print as JSON - let json = parsed.py().import_bound("json")?; + let json = parsed.py().import("json")?; let json_str = json.call_method1("dumps", (example,))?; println!("{}", json_str); diff --git a/crates/fec-py/src/lib.rs b/crates/fec-py/src/lib.rs index e2d7d0d..86d54c8 100644 --- a/crates/fec-py/src/lib.rs +++ b/crates/fec-py/src/lib.rs @@ -1,5 +1,3 @@ -#![allow(clippy::useless_conversion)] - mod fecfile; mod parser; diff --git a/crates/fec-py/src/parser.rs b/crates/fec-py/src/parser.rs index 6a401e2..bb18a4c 100644 --- a/crates/fec-py/src/parser.rs +++ b/crates/fec-py/src/parser.rs @@ -4,7 +4,7 @@ use std::io::Cursor; use std::path::PathBuf; /// Python wrapper for FilingHeader -#[pyclass] +#[pyclass(skip_from_py_object)] #[derive(Clone)] pub struct Header { #[pyo3(get)] @@ -36,7 +36,7 @@ impl Header { } /// Python wrapper for FilingCover -#[pyclass] +#[pyclass(skip_from_py_object)] #[derive(Clone)] pub struct Cover { #[pyo3(get)] @@ -64,7 +64,7 @@ impl Cover { /// Get all cover record fields as a dictionary fn fields<'py>(&self, py: Python<'py>) -> PyResult> { - let dict = PyDict::new_bound(py); + let dict = PyDict::new(py); dict.set_item("form_type", &self.form_type)?; dict.set_item("filer_id", &self.filer_id)?; dict.set_item("filer_name", &self.filer_name)?; @@ -76,7 +76,7 @@ impl Cover { } /// Python wrapper for FilingRow (itemization) -#[pyclass] +#[pyclass(skip_from_py_object)] #[derive(Clone)] pub struct Itemization { #[pyo3(get)] From c67be63c82471fbbb566c92ab0ca155e0f7d203e Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:11:21 -0700 Subject: [PATCH 06/13] =?UTF-8?q?ci:=20run=20fec-py=20pytest=20on=203=20OS?= =?UTF-8?q?es=20=C3=97=20Python=203.11/3.14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- .github/workflows/test-python.yml | 53 +++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index ebee384..861e338 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -1,29 +1,56 @@ name: "test-python" on: push: - branches: - - main + branches: [main] pull_request: permissions: contents: read +concurrency: + group: test-python-${{ github.ref }} + cancel-in-progress: true jobs: test-python: strategy: - matrix: - os: [ubuntu-latest, macos-latest, macos-15-intel, windows-latest] fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + python: ["3.11", "3.14"] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - run: rustup toolchain install stable --profile minimal - - uses: Swatinem/rust-cache@v2 - - uses: astral-sh/setup-uv@v6 - - run: uv tool install maturin - - name: Build Python wheels - run: make build + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 + with: + workspaces: ". -> target" + - uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0 + with: + python-version: ${{ matrix.python }} + - name: Build wheel + shell: bash + run: uvx maturin@1.15.0 build --release --out dist + working-directory: crates/fec-py + - name: Install wheel + test deps + shell: bash + working-directory: crates/fec-py + run: | + # "cpython-${{ matrix.python }}" (not bare "${{ matrix.python }}"): uv can + # otherwise resolve "3.14" to the free-threaded (3.14t) build when one happens + # to already be installed on the runner. We only build/ship the GIL build (D8), + # and free-threaded wheels install fine but crash on import (see ticket 01), so + # the assertion below fails loudly instead of leaving a confusing pytest crash. + uv venv .venv --python cpython-${{ matrix.python }} + uv run --python .venv --no-project python -c "import sysconfig, sys; sys.exit('picked the free-threaded interpreter for .venv; expected the GIL build' if sysconfig.get_config_var('Py_GIL_DISABLED') else 0)" + uv pip install --python .venv dist/*.whl pytest + - name: pytest + shell: bash + working-directory: crates/fec-py + run: uv run --python .venv --no-project pytest tests -v -rs + - name: Smoke test - construct a Filing (guards against the pyo3 0.22 3.14 segfault) + shell: bash working-directory: crates/fec-py - - name: Upload wheels - uses: actions/upload-artifact@v4 + run: uv run --python .venv --no-project python -c "from libfec_parser.parser import Filing; print(Filing('tests/fixtures/1921705.fec'))" + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + if: matrix.python == '3.11' with: - name: wheels-${{ matrix.os }} + name: wheel-${{ matrix.os }} path: crates/fec-py/dist/*.whl From 2a30b914e1d9305f2f4837c96ff36aaeafa75928 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:11:14 -0700 Subject: [PATCH 07/13] py: commit test fixtures, share via conftest, mock from_http tests Co-Authored-By: Claude Fable 5.1 --- .gitignore | 2 + crates/fec-py/tests/README.md | 84 +- crates/fec-py/tests/conftest.py | 107 +- crates/fec-py/tests/fixtures/1721696.fec | 1389 ++++++++++++++++++++++ crates/fec-py/tests/fixtures/1913493.fec | 28 + crates/fec-py/tests/fixtures/1913562.fec | 5 + crates/fec-py/tests/fixtures/1921705.fec | 22 + crates/fec-py/tests/fixtures/1923816.fec | 5 + crates/fec-py/tests/test_fecfile.py | 209 ++-- crates/fec-py/tests/test_fixtures.py | 65 + crates/fec-py/tests/test_parser.py | 187 ++- 11 files changed, 1853 insertions(+), 250 deletions(-) create mode 100644 crates/fec-py/tests/fixtures/1721696.fec create mode 100644 crates/fec-py/tests/fixtures/1913493.fec create mode 100644 crates/fec-py/tests/fixtures/1913562.fec create mode 100644 crates/fec-py/tests/fixtures/1921705.fec create mode 100644 crates/fec-py/tests/fixtures/1923816.fec create mode 100644 crates/fec-py/tests/test_fixtures.py diff --git a/.gitignore b/.gitignore index 7d33cd9..b684aba 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ june/ *.fec.part *.fec.gz *.fec.zst +# committed test fixtures for the Python bindings (see crates/fec-py/tests/README.md) +!crates/fec-py/tests/fixtures/*.fec *.db.gz *.csv *.zip diff --git a/crates/fec-py/tests/README.md b/crates/fec-py/tests/README.md index 7b26d84..c072ca0 100644 --- a/crates/fec-py/tests/README.md +++ b/crates/fec-py/tests/README.md @@ -18,7 +18,12 @@ This directory contains pytest-based tests for the `libfec_parser` Python packag - Tests for `print_example()` function - Integration tests -- `conftest.py` - Shared pytest configuration and fixtures +- `test_fixtures.py` - Smoke tests over every file in `fixtures/`, through both APIs + +- `conftest.py` - Shared pytest configuration and fixtures (the only place test + fixtures are defined) + +- `fixtures/` - Five small, committed `.fec` filings (see [Test Data](#test-data)) ## Running Tests @@ -51,16 +56,21 @@ pytest tests/test_parser.py::TestFiling pytest tests/test_parser.py::TestFiling::test_filing_from_path_string ``` -## Test Options +## Markers -Skip slow tests: -```bash -pytest -m "not slow" tests/ -``` +Two markers are registered in `conftest.py`, and both are **off by default** — +`pytest_collection_modifyitems` skips them unless you select them with `-m`: + +| Marker | Meaning | Run it with | +|---|---|---| +| `network` | Hits `docquery.fec.gov` | `pytest -m network tests/` | +| `slow` | Parses the 91 MB `benchmarks/1805248.fec` | `pytest -m slow tests/` | + +So a plain `pytest tests/` runs every offline test and skips nothing else. Use +`-rs` to see the skip reasons: -Skip network tests: ```bash -pytest -m "not network" tests/ +pytest tests/ -rs # the only skip should be the one `network` test ``` Run with coverage: @@ -70,11 +80,36 @@ pytest --cov=libfec_parser --cov-report=html tests/ ## Test Data -The tests look for sample FEC files in: -- `../../cache/` - Cached FEC files -- `../../benchmarks/` - Benchmark FEC files - -If no sample files are found, tests that require them will be skipped. +All test data lives in `tests/fixtures/` and is **committed to the repository** +(~271 KB total). The root `.gitignore` ignores `*.fec`, with a negation rule +`!crates/fec-py/tests/fixtures/*.fec` so these five stay tracked. + +| File | Bytes | What it is | +|---|---|---| +| `1921705.fec` | 4,022 | **Primary.** v8.5, F3N, filer `C00900860` "Jason Byors for Congress"; 20 rows (1 SA11AI, 13 SA11C, 1 SA11D, 5 SB17) | +| `1721696.fec` | 263,105 | v8.4, F3XN, filer `C00016683` "PFIZER INC. PAC"; 1,387 rows (1,354 SA11AI, 24 SB23, 9 SB29) | +| `1913562.fec` | 1,019 | v8.4, F1A with 3 `F1S` rows: a non-`S` itemization key, `report_id` present in the HDR | +| `1913493.fec` | 1,609 | v8.4, F99 with a `[BEGINTEXT]` block and U+FFFD replacement characters; zero rows | +| `1923816.fec` | 810 | v8.5, F1N with 3 `F1S` rows | + +Fixtures defined in `conftest.py`: + +| Fixture | Gives you | +|---|---| +| `sample_fec_file` | `Path` to `1921705.fec` | +| `sample_fec_bytes` | its raw `bytes` | +| `sample_fec_content` | its decoded `str` (`parse_header`/`parse_line` take text) | +| `pac_fec_file` | `Path` to `1721696.fec` (many rows) | +| `f99_fec_file` | `Path` to `1913493.fec` (zero rows) | +| `all_fixture_files` | sorted `list[Path]` of every fixture | +| `fec_fixture` | parametrized: the test runs once per fixture file | +| `benchmark_fec_file` | `Path` to the gitignored 91 MB filing; use with `@pytest.mark.slow` | + +A **missing fixture is a hard failure, not a skip** — `_fixture()` asserts. Tests +that silently skip are tests that never run in CI. + +To add a filing, drop it in `fixtures/`, add its expected values to `EXPECTED` +in `test_fixtures.py`, and `git add` it (no `-f` needed). ## Adding New Tests @@ -83,13 +118,16 @@ When adding new functionality to `libfec_parser`: 1. Add tests to the appropriate `test_*.py` file 2. Use descriptive test names starting with `test_` 3. Add docstrings to explain what each test does -4. Use fixtures from `conftest.py` for common setup -5. Add markers for slow or network-dependent tests +4. Use fixtures from `conftest.py` for common setup — never re-define fixtures + in a test module, and never `pytest.skip()` for missing test data +5. Assert exact values against the fixtures rather than guarding with + `if len(...) > 0:` — the data is committed, so the numbers are knowable +6. Add markers for slow or network-dependent tests Example: ```python @pytest.mark.slow -def test_large_file_parsing(first_fec_file): +def test_large_file_parsing(benchmark_fec_file): """Test parsing a very large FEC file""" # Test implementation pass @@ -102,15 +140,11 @@ Current coverage includes: - ✅ Fecfile module (fecfile compatibility layer) - ✅ Error handling and edge cases - ✅ Integration tests +- ✅ Every committed fixture, through both APIs (`test_fixtures.py`) ## CI/CD -These tests can be integrated into CI/CD pipelines: - -```bash -# Example GitHub Actions workflow -- name: Run tests - run: | - uv pip install pytest pytest-cov - pytest tests/ --cov=libfec_parser --cov-report=xml -``` +These tests run in CI from the built wheel — see +[`.github/workflows/test-python.yml`](../../../.github/workflows/test-python.yml). +The `network` and `slow` markers are not selected there, so CI runs the offline +suite only. diff --git a/crates/fec-py/tests/conftest.py b/crates/fec-py/tests/conftest.py index 329897b..d16200d 100644 --- a/crates/fec-py/tests/conftest.py +++ b/crates/fec-py/tests/conftest.py @@ -1,55 +1,98 @@ """ -Pytest configuration and shared fixtures for libfec_parser tests +Pytest configuration and shared fixtures for libfec_parser tests. + +All test data lives in ``tests/fixtures/`` and is committed to the repository +(see the ``!crates/fec-py/tests/fixtures/*.fec`` negation in the root +``.gitignore``). A missing fixture is a hard failure, never a skip: tests that +silently skip are tests that never run in CI. """ import pytest from pathlib import Path +FIXTURES = Path(__file__).parent / "fixtures" + + def pytest_configure(config): - """Configure pytest with custom markers""" + """Register the opt-in markers.""" config.addinivalue_line( - "markers", "slow: marks tests as slow (deselect with '-m \"not slow\"')" + "markers", "slow: parses the 91 MB benchmark filing; run with -m slow" ) config.addinivalue_line( - "markers", "network: marks tests that require network access" + "markers", "network: hits fec.gov; run with -m network" ) +def pytest_collection_modifyitems(config, items): + """``network`` and ``slow`` tests are off unless explicitly selected.""" + selected = config.getoption("-m") or "" + for item in items: + for mark in ("network", "slow"): + if mark in item.keywords and mark not in selected: + item.add_marker( + pytest.mark.skip(reason=f"{mark} test; run with -m {mark}") + ) + + +def pytest_generate_tests(metafunc): + """Parametrize any test asking for ``fec_fixture`` over every committed fixture.""" + if "fec_fixture" in metafunc.fixturenames: + files = sorted(FIXTURES.glob("*.fec")) + assert files, f"no fixtures found in {FIXTURES}" + metafunc.parametrize("fec_fixture", files, ids=[p.name for p in files]) + + +def _fixture(name: str) -> Path: + p = FIXTURES / name + # A missing fixture must FAIL, never skip. + assert p.exists(), f"missing fixture {p}" + return p + + +@pytest.fixture(scope="session") +def sample_fec_file() -> Path: + """Primary fixture: 1921705.fec — v8.5, F3N, 20 itemizations, 4,022 bytes.""" + return _fixture("1921705.fec") + + +@pytest.fixture(scope="session") +def sample_fec_bytes(sample_fec_file) -> bytes: + """The primary fixture's raw bytes.""" + return sample_fec_file.read_bytes() + + +@pytest.fixture(scope="session") +def sample_fec_content(sample_fec_bytes) -> str: + """The primary fixture decoded as text. + + ``parse_header``/``parse_line`` accept ``str`` (or ``list[str]``) only, so + this stays a string; use ``sample_fec_bytes`` for the bytes APIs. + """ + return sample_fec_bytes.decode("utf-8") + + @pytest.fixture(scope="session") -def project_root(): - """Get the project root directory""" - return Path(__file__).parent.parent.parent.parent +def pac_fec_file() -> Path: + """1721696.fec — v8.4, F3XN, 1,387 itemizations, 263,105 bytes.""" + return _fixture("1721696.fec") @pytest.fixture(scope="session") -def cache_dir(project_root): - """Get the cache directory with FEC files""" - return project_root / "cache" +def f99_fec_file() -> Path: + """1913493.fec — v8.4, F99 with a [BEGINTEXT] block and zero itemizations.""" + return _fixture("1913493.fec") @pytest.fixture(scope="session") -def benchmarks_dir(project_root): - """Get the benchmarks directory with FEC files""" - return project_root / "benchmarks" +def all_fixture_files() -> list[Path]: + """Every committed fixture, sorted by name.""" + return sorted(FIXTURES.glob("*.fec")) @pytest.fixture(scope="session") -def available_fec_files(cache_dir, benchmarks_dir): - """Get list of all available FEC test files""" - files = [] - - if cache_dir.exists(): - files.extend(list(cache_dir.glob("*.fec"))) - - if benchmarks_dir.exists(): - files.extend(list(benchmarks_dir.glob("*.fec"))) - - return files - - -@pytest.fixture -def first_fec_file(available_fec_files): - """Get the first available FEC file for testing""" - if not available_fec_files: - pytest.skip("No FEC test files available") - return available_fec_files[0] +def benchmark_fec_file() -> Path: + """The 91 MB benchmark filing — gitignored, opt-in via ``-m slow``.""" + p = Path(__file__).parents[3] / "benchmarks" / "1805248.fec" + if not p.exists(): + pytest.skip("benchmarks/1805248.fec not present") + return p diff --git a/crates/fec-py/tests/fixtures/1721696.fec b/crates/fec-py/tests/fixtures/1721696.fec new file mode 100644 index 0000000..25e407b --- /dev/null +++ b/crates/fec-py/tests/fixtures/1721696.fec @@ -0,0 +1,1389 @@ +HDRFEC8.4FECFile8.40 +F3XNC00016683PFIZER INC. PAC66 Hudson Blvd EastNEW YORKNY10001M82023070120230731XCotareloJuanC.20230814394272.4883741.93478014.4157650.00420364.410.000.0057161.4726580.4683741.930.000.0083741.930.000.000.000.000.000.000.000.000.0083741.9383741.930.000.000.000.000.0047000.000.000.000.000.000.000.000.000.0010650.000.000.000.000.0057650.0057650.0083741.930.0083741.930.000.000.00356113.192023606427.25962540.44542176.03420364.41298369.81308056.41606426.220.000.00606426.220.000.000.001.030.000.000.000.000.00606427.25606427.250.000.001.031.030.00464300.000.000.000.000.000.000.000.000.0077875.000.000.000.000.00542176.03542176.03606426.220.00606426.221.031.030.00 +SA11AIC000166832023071716378-1066INDAaronsonEric66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSVP, Chief Counsel IP & IPE +SA11AIC000166832023073110297-1064INDAaronsonEric66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSVP, Chief Counsel IP & IPE +SA11AIC000166832023071716378-1371INDAartsJohanna66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer U.S. PharmaceuticalsVP MTL, Rheumatology and New I&I Area +SA11AIC000166832023073110297-1369INDAartsJohanna66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer U.S. PharmaceuticalsVP MTL, Rheumatology and New I&I Area +SA11AIC000166832023071716378-3174INDAdamsDorindaC66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer, Inc.National Pharmacy Business Manager +SA11AIC000166832023073110297-3164INDAdamsDorindaC66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer, Inc.National Pharmacy Business Manager +SA11AIC000166832023071716378-2650INDAdamsTaretaM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncVaccines Insights Ecosystem Lead (Seco +SA11AIC000166832023073110297-2645INDAdamsTaretaM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncVaccines Insights Ecosystem Lead (Seco +SA11AIC000166832023071716378-1549INDAdeleyeMicheleS66 Hudson Blvd EastNew YorkNY100012023071422.84319.76Pfizer IncVP & AGC, Chief Counsel, Digital +SA11AIC000166832023073110297-1547INDAdeleyeMicheleS66 Hudson Blvd EastNew YorkNY100012023073122.84319.76Pfizer IncVP & AGC, Chief Counsel, Digital +SA11AIC000166832023071716378-2436INDAguilarAndrewScott66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Value & Access +SA11AIC000166832023073110297-2430INDAguilarAndrewScott66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Value & Access +SA11AIC000166832023071716378-2377INDAlbenElissa66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer, IncVP Global Trade Policy Public Affairs +SA11AIC000166832023073110297-2371INDAlbenElissa66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer, IncVP Global Trade Policy Public Affairs +SA11AIC000166832023071716378-578INDAlbrightBrianS66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer IncNational Account Director, U.S. Payers +SA11AIC000166832023073110297-576INDAlbrightBrianS66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer IncNational Account Director, U.S. Payers +SA11AIC000166832023073110297-389INDAlbrightJamesE66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer Pfizer Pharmaceuticals GroupDirector, PDA +SA11AIC000166832023073110297-1014INDAlemayehuDemissie66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncVP, Statistics Head, SRDC +SA11AIC000166832023071716378-1969INDAlfaroArturoA.66 Hudson Blvd EastNew YorkNY100012023071440.00560.00Pfizer, IncSr Manager ClinicalResOps (P) +SA11AIC000166832023073110297-1965INDAlfaroArturoA.66 Hudson Blvd EastNew YorkNY100012023073140.00560.00Pfizer, IncSr Manager ClinicalResOps (P) +SA11AIC000166832023071716378-1108INDAllenJulieNovak66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAccount Management Enablement Lead +SA11AIC000166832023073110297-1106INDAllenJulieNovak66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAccount Management Enablement Lead +SA11AIC000166832023071716378-1036INDAlvarezMaryB66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-1034INDAlvarezMaryB66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-1118INDAmorosoLara66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-1116INDAmorosoLara66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-1503INDAnantaneniHarshawardhan66 Hudson Blvd EastNew YorkNY100012023071416.00219.00Pfizer, IncDirector Stats Program (P) +SA11AIC000166832023073110297-1501INDAnantaneniHarshawardhan66 Hudson Blvd EastNew YorkNY100012023073116.00219.00Pfizer, IncDirector Stats Program (P) +SA11AIC000166832023071716378-3115INDAndersonEric66 Hudson Blvd EastNew YorkNY100012023071422.84319.76Pfizer, IncSenior Director, RSV Franchise Market +SA11AIC000166832023073110297-3107INDAndersonEric66 Hudson Blvd EastNew YorkNY100012023073122.84319.76Pfizer, IncSenior Director, RSV Franchise Market +SA11AIC000166832023071716378-1572INDAndersonSusanC66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncPRD Operations +SA11AIC000166832023073110297-1570INDAndersonSusanC66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncPRD Operations +SA11AIC000166832023071716378-537INDAndrewsEmmaN66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer Global Research And DevelopmenVP, Patient Advocacy Lead +SA11AIC000166832023073110297-535INDAndrewsEmmaN66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer Global Research And DevelopmenVP, Patient Advocacy Lead +SA11AIC000166832023071716378-3149INDAngeliFrancaStedile66 Hudson Blvd EastNew YorkNY10001202307147.00486.68Pfizer, IncSenior Director, Global Clinical Lead +SA11AIC000166832023073110297-3140INDAngeliFrancaStedile66 Hudson Blvd EastNew YorkNY10001202307317.00486.68Pfizer, IncSenior Director, Global Clinical Lead +SA11AIC000166832023071716378-12INDAriyanChristopherS66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer IncEM Marketing Group Lead - Onc +SA11AIC000166832023073110297-12INDAriyanChristopherS66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer IncEM Marketing Group Lead - Onc +SA11AIC000166832023071716378-1365INDArnKelliM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVaccine Account Director +SA11AIC000166832023073110297-1363INDArnKelliM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVaccine Account Director +SA11AIC000166832023071716378-1621INDArnoldLarryGerard66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-1619INDArnoldLarryGerard66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-1142INDArnoldLesterJ66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncSr. Corp Counsel +SA11AIC000166832023071716378-602INDArriagaStevenM66 Hudson Blvd EastNew YorkNY100012023071423.84309.92Pfizer IncUS Hospital Sales Lead +SA11AIC000166832023073110297-600INDArriagaStevenM66 Hudson Blvd EastNew YorkNY100012023073123.84309.92Pfizer IncUS Hospital Sales Lead +SA11AIC000166832023071716378-599INDAskelandDomenicaM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP, GBS Colleague Services +SA11AIC000166832023073110297-597INDAskelandDomenicaM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP, GBS Colleague Services +SA11AIC000166832023071716378-488INDAvalo RiveraCarlosA.66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Pharmaceuticals LLCHSP Level 2 +SA11AIC000166832023073110297-486INDAvalo RiveraCarlosA.66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Pharmaceuticals LLCHSP Level 2 +SA11AIC000166832023071716378-1743INDAwaltBrookeHuntley66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1740INDAwaltBrookeHuntley66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-2358INDBaldwinCory66 Hudson Blvd EastNew YorkNY100012023071421.00294.00Pfizer, IncArea Business Manager +SA11AIC000166832023073110297-2352INDBaldwinCory66 Hudson Blvd EastNew YorkNY100012023073121.00294.00Pfizer, IncArea Business Manager +SA11AIC000166832023071716378-2390INDBallardMelissa66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr. Director, Compliance ESG Governanc +SA11AIC000166832023073110297-2384INDBallardMelissa66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr. Director, Compliance ESG Governanc +SA11AIC000166832023071716378-895INDBarnumRebeccaJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer U.S. PharmaceuticalsSHR Level 2 +SA11AIC000166832023073110297-893INDBarnumRebeccaJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer U.S. PharmaceuticalsSHR Level 2 +SA11AIC000166832023071716378-3168INDBarrettFrancisXavier66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncDirector, Specialty Access Solutions & +SA11AIC000166832023073110297-3158INDBarrettFrancisXavier66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncDirector, Specialty Access Solutions & +SA11AIC000166832023071716378-376INDBarryKevinM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer U.S. PharmaceuticalsSHR Level 3 +SA11AIC000166832023073110297-374INDBarryKevinM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer U.S. PharmaceuticalsSHR Level 3 +SA11AIC000166832023071716378-496INDBastinIVelisse66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-494INDBastinIVelisse66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1972INDBaumanKelly66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncClinical Study Team Lead (Director) +SA11AIC000166832023073110297-1968INDBaumanKelly66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncClinical Study Team Lead (Director) +SA11AIC000166832023071716378-1356INDBeemanKellyBruce66 Hudson Blvd EastNew YorkNY100012023071415.80221.20Pfizer IncKAM Team Lead Northeast +SA11AIC000166832023073110297-1354INDBeemanKellyBruce66 Hudson Blvd EastNew YorkNY100012023073115.80221.20Pfizer IncKAM Team Lead Northeast +SA11AIC000166832023071716378-1354INDBellNancyK66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer U.S. PharmaceuticalsSrDirector FldMedMedLiasNMD (P) +SA11AIC000166832023073110297-1352INDBellNancyK66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer U.S. PharmaceuticalsSrDirector FldMedMedLiasNMD (P) +SA11AIC000166832023071716378-2802INDBenckerKimberlyA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Senior Director, External Communicatio +SA11AIC000166832023073110297-2796INDBenckerKimberlyA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Senior Director, External Communicatio +SA11AIC000166832023071716378-1766INDBergrenJoshua66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector, Advocacy & Professional Rela +SA11AIC000166832023073110297-1763INDBergrenJoshua66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector, Advocacy & Professional Rela +SA11AIC000166832023071716378-371INDBhallaAtul66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncOpinion Leader Liaison East +SA11AIC000166832023073110297-369INDBhallaAtul66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncOpinion Leader Liaison East +SA11AIC000166832023071716378-689INDBianchiJamesF66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncOncology Access & Reimbursement Region +SA11AIC000166832023073110297-687INDBianchiJamesF66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncOncology Access & Reimbursement Region +SA11AIC000166832023071716378-928INDBishop-MurphyMelissaL66 Hudson Blvd EastNew YorkNY1000120230714208.332729.96Pfizer IncSenior Director, State Government Rela +SA11AIC000166832023073110297-926INDBishop-MurphyMelissaL66 Hudson Blvd EastNew YorkNY1000120230731208.332729.96Pfizer IncSenior Director, State Government Rela +SA11AIC000166832023071716378-618INDBisiorowskiMaryAnn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncInsurance Risk Analyst +SA11AIC000166832023073110297-616INDBisiorowskiMaryAnn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncInsurance Risk Analyst +SA11AIC000166832023071716378-999INDBlountJenai66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-997INDBlountJenai66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-705INDBolandPatrickJ66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-703INDBolandPatrickJ66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-1632INDBonfiglioBarbara66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncAGC, US Government Relations +SA11AIC000166832023073110297-1629INDBonfiglioBarbara66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncAGC, US Government Relations +SA11AIC000166832023071716378-131INDBootheMonicaSweeney66 Hudson Blvd EastNew YorkNY100012023071442.67597.38Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023073110297-130INDBootheMonicaSweeney66 Hudson Blvd EastNew YorkNY100012023073142.67597.38Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023071716378-2043INDBoshoffChris66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncChief Oncology Research and Developmen +SA11AIC000166832023073110297-2038INDBoshoffChris66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncChief Oncology Research and Developmen +SA11AIC000166832023071716378-2806INDBottoneLynnA66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, Inc.SVP, QO / EHS Lead +SA11AIC000166832023073110297-2800INDBottoneLynnA66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, Inc.SVP, QO / EHS Lead +SA11AIC000166832023071716378-1048INDBourlaAlbert66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncChairman & CEO +SA11AIC000166832023073110297-1046INDBourlaAlbert66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncChairman & CEO +SA11AIC000166832023071716378-2807INDBourretJeffreyA66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer, Inc.Senior Director +SA11AIC000166832023073110297-2801INDBourretJeffreyA66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer, Inc.Senior Director +SA11AIC000166832023071716378-610INDBrachmanDinaI66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director, U.S. Policy & Public +SA11AIC000166832023073110297-608INDBrachmanDinaI66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director, U.S. Policy & Public +SA11AIC000166832023071716378-559INDBradleyKennethA66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncVPresident Leadership (M) +SA11AIC000166832023073110297-557INDBradleyKennethA66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncVPresident Leadership (M) +SA11AIC000166832023071716378-1501INDBrehenyEdward66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSenior Director, Finance +SA11AIC000166832023073110297-1499INDBrehenyEdward66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSenior Director, Finance +SA11AIC000166832023071716378-968INDBrekkenTadR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-966INDBrekkenTadR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-1595INDBrensilverPeter66 Hudson Blvd EastNew YorkNY100012023071420.84270.92Pfizer IncVP, Compliance - Biopharma Global and +SA11AIC000166832023073110297-1593INDBrensilverPeter66 Hudson Blvd EastNew YorkNY100012023073120.84270.92Pfizer IncVP, Compliance - Biopharma Global and +SA11AIC000166832023071716378-2624INDBrianBarbaraK.66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncHospital Area Business Manager, Steril +SA11AIC000166832023073110297-2619INDBrianBarbaraK.66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncHospital Area Business Manager, Steril +SA11AIC000166832023071716378-3189INDBrodbeckSheilaMary66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncSVP, Chief Counsel Litigation +SA11AIC000166832023073110297-3179INDBrodbeckSheilaMary66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncSVP, Chief Counsel Litigation +SA11AIC000166832023071716378-1181INDBrophyPatrick66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncKAM Regional Director +SA11AIC000166832023073110297-1179INDBrophyPatrick66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncKAM Regional Director +SA11AIC000166832023073110297-906INDBrounkMargaret66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-1128INDBrownDarrisL66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Inc4887517 Team Leader USMA - Customer St +SA11AIC000166832023073110297-1126INDBrownDarrisL66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Inc4887517 Team Leader USMA - Customer St +SA11AIC000166832023071716378-1824INDBrownJoshua66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncVP, U.S. Government Relations +SA11AIC000166832023073110297-1821INDBrownJoshua66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncVP, U.S. Government Relations +SA11AIC000166832023071716378-1142INDBrownNicki66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncUS VYNDAMAX HCP Marketing Secondment ( +SA11AIC000166832023073110297-1140INDBrownNicki66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncUS VYNDAMAX HCP Marketing Secondment ( +SA11AIC000166832023071716378-1568INDBrownRobertV66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSVP, WRDM, GPD, Regulatory and Safety +SA11AIC000166832023073110297-1566INDBrownRobertV66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSVP, WRDM, GPD, Regulatory and Safety +SA11AIC000166832023071716378-1534INDBrownlieThomas66 Hudson Blvd EastNew YorkNY1000120230714104.17893.36Pfizer IncSenior Director, Head of State Policy +SA11AIC000166832023073110297-1532INDBrownlieThomas66 Hudson Blvd EastNew YorkNY1000120230731104.17893.36Pfizer IncSenior Director, Head of State Policy +SA11AIC000166832023071716378-2812INDBruceAlbertM66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, Inc.US Commercial Rare Disease Lead +SA11AIC000166832023073110297-2806INDBruceAlbertM66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, Inc.US Commercial Rare Disease Lead +SA11AIC000166832023071716378-175INDBuchananBrianD66 Hudson Blvd EastNew YorkNY100012023071416.32228.48Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023073110297-174INDBuchananBrianD66 Hudson Blvd EastNew YorkNY100012023073116.32228.48Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-1917INDBudajMark66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSenior Director - Team Lead, Contract +SA11AIC000166832023073110297-1913INDBudajMark66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSenior Director - Team Lead, Contract +SA11AIC000166832023071716378-639INDBuenoSolange66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSr Director, People Experience, Global +SA11AIC000166832023073110297-637INDBuenoSolange66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSr Director, People Experience, Global +SA11AIC000166832023071716378-2249INDBullockJohn66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncUS Dermatology Sales Lead +SA11AIC000166832023073110297-2242INDBullockJohn66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncUS Dermatology Sales Lead +SA11AIC000166832023071716378-2052INDBurgPaula66 Hudson Blvd EastNew YorkNY1000120230714113.001582.00Pfizer IncSenior Director, Federal Government Re +SA11AIC000166832023073110297-2047INDBurgPaula66 Hudson Blvd EastNew YorkNY1000120230731113.001582.00Pfizer IncSenior Director, Federal Government Re +SA11AIC000166832023071716378-2656INDBurnsBrandonJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 4 +SA11AIC000166832023073110297-2651INDBurnsBrandonJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 4 +SA11AIC000166832023071716378-1079INDBurnsJillFranck66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector, Organized Customer Marketing +SA11AIC000166832023073110297-1077INDBurnsJillFranck66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector, Organized Customer Marketing +SA11AIC000166832023071716378-1370INDBurtinBryceD66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector, Eliquis Global Marketing - O +SA11AIC000166832023073110297-1368INDBurtinBryceD66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector, Eliquis Global Marketing - O +SA11AIC000166832023071716378-859INDBurtonWilliam66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncI&I Account Manager +SA11AIC000166832023073110297-857INDBurtonWilliam66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncI&I Account Manager +SA11AIC000166832023071716378-2819INDButtersAmyL66 Hudson Blvd EastNew YorkNY1000120230714104.171148.87Pfizer, Inc.Dir Business Operations QO and EHS +SA11AIC000166832023073110297-2813INDButtersAmyL66 Hudson Blvd EastNew YorkNY1000120230731104.171148.87Pfizer, Inc.Dir Business Operations QO and EHS +SA11AIC000166832023071716378-649INDByalaBrian66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSVP & Treasurer +SA11AIC000166832023073110297-647INDByalaBrian66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSVP & Treasurer +SA11AIC000166832023071716378-2821INDCafoneJamesP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSVP GSC Lead +SA11AIC000166832023073110297-2815INDCafoneJamesP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSVP GSC Lead +SA11AIC000166832023071716378-2704INDCaldwellJohnWilliam66 Hudson Blvd EastNew YorkNY100012023071420.84250.08Pfizer, IncSr. Director, Integrated Operations Le +SA11AIC000166832023073110297-2699INDCaldwellJohnWilliam66 Hudson Blvd EastNew YorkNY100012023073120.84250.08Pfizer, IncSr. Director, Integrated Operations Le +SA11AIC000166832023071716378-653INDCalmerReganC66 Hudson Blvd EastNew YorkNY100012023071416.32228.48Pfizer IncSenior Manager, People Experience, Ope +SA11AIC000166832023073110297-651INDCalmerReganC66 Hudson Blvd EastNew YorkNY100012023073116.32228.48Pfizer IncSenior Manager, People Experience, Ope +SA11AIC000166832023071716378-176INDCampbellCharlesR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023073110297-175INDCampbellCharlesR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-919INDCapersChristi66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncOncology Field Medical, Genitourinary +SA11AIC000166832023073110297-917INDCapersChristi66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncOncology Field Medical, Genitourinary +SA11AIC000166832023071716378-970INDCarlsonDesiree66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-968INDCarlsonDesiree66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-985INDCarlsonLisaM66 Hudson Blvd EastNew YorkNY100012023071435.00490.00Pfizer IncKey Account Manager +SA11AIC000166832023073110297-983INDCarlsonLisaM66 Hudson Blvd EastNew YorkNY100012023073135.00490.00Pfizer IncKey Account Manager +SA11AIC000166832023071716378-699INDCarolanJohnA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector Leadership (M) +SA11AIC000166832023073110297-697INDCarolanJohnA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector Leadership (M) +SA11AIC000166832023071716378-1848INDCarpenterShannon66 Hudson Blvd EastNew YorkNY100012023071422.00295.24Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-1845INDCarpenterShannon66 Hudson Blvd EastNew YorkNY100012023073122.00295.24Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-2466INDCarrilloFrancisco66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncSenior Director, Federal Government Re +SA11AIC000166832023073110297-2460INDCarrilloFrancisco66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncSenior Director, Federal Government Re +SA11AIC000166832023071716378-1070INDCarrollPatriciaLorraine66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-1068INDCarrollPatriciaLorraine66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-788INDCarterEmily66 Hudson Blvd EastNew YorkNY100012023071422.84319.76Pfizer IncRegional Business Director (Secondment +SA11AIC000166832023073110297-787INDCarterEmily66 Hudson Blvd EastNew YorkNY100012023073122.84319.76Pfizer IncRegional Business Director (Secondment +SA11AIC000166832023071716378-998INDCarverCorbettT66 Hudson Blvd EastNew YorkNY100012023071425.84361.76Pfizer IncKey Account Manager +SA11AIC000166832023073110297-996INDCarverCorbettT66 Hudson Blvd EastNew YorkNY100012023073125.84361.76Pfizer IncKey Account Manager +SA11AIC000166832023071716378-1024INDCasambreRenato66 Hudson Blvd EastNew YorkNY100012023071422.00303.36Pfizer IncNational Director, Employer +SA11AIC000166832023073110297-1022INDCasambreRenato66 Hudson Blvd EastNew YorkNY100012023073122.00303.36Pfizer IncNational Director, Employer +SA11AIC000166832023071716378-1093INDCasbonTullyC66 Hudson Blvd EastNew YorkNY100012023071430.00395.00Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-1091INDCasbonTullyC66 Hudson Blvd EastNew YorkNY100012023073130.00395.00Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-1242INDCaseyAnaWikes66 Hudson Blvd EastNew YorkNY100012023071435.00490.00Pfizer IncSr. Director, HCP/MedEd Team Lead, US +SA11AIC000166832023073110297-1240INDCaseyAnaWikes66 Hudson Blvd EastNew YorkNY100012023073135.00490.00Pfizer IncSr. Director, HCP/MedEd Team Lead, US +SA11AIC000166832023073110297-1421INDCaseyEdwardW66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-1988INDCastilloSharonJ.66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, Government Affairs/Po +SA11AIC000166832023073110297-1983INDCastilloSharonJ.66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, Government Affairs/Po +SA11AIC000166832023071716378-1277INDCataruozoloPatricia66 Hudson Blvd EastNew YorkNY100012023071423.00322.00PharmaciaOncology Field Medical, Hematology +SA11AIC000166832023073110297-1275INDCataruozoloPatricia66 Hudson Blvd EastNew YorkNY100012023073123.00322.00PharmaciaOncology Field Medical, Hematology +SA11AIC000166832023071716378-2353INDCavazosNoraMarie66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSafety Risk Lead SRL _ MD _ Director +SA11AIC000166832023073110297-2347INDCavazosNoraMarie66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSafety Risk Lead SRL _ MD _ Director +SA11AIC000166832023071716378-2149INDChangJane66 Hudson Blvd EastNew YorkNY100012023071440.00560.00Pfizer, IncValue & Evidence Lead, Genitourinary C +SA11AIC000166832023073110297-2144INDChangJane66 Hudson Blvd EastNew YorkNY100012023073140.00560.00Pfizer, IncValue & Evidence Lead, Genitourinary C +SA11AIC000166832023071716378-2514INDChappleKevinJames66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncDirector, IM & H FM TA +SA11AIC000166832023073110297-2509INDChappleKevinJames66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncDirector, IM & H FM TA +SA11AIC000166832023071716378-661INDChasnowJeffreyB66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSVP, Chief Counsel GPD/Reg Affairs/EHS +SA11AIC000166832023073110297-659INDChasnowJeffreyB66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSVP, Chief Counsel GPD/Reg Affairs/EHS +SA11AIC000166832023071716378-721INDCheigh NakamuraEileen66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer U.S. PharmaceuticalsVP CSI Business Assessment CoE +SA11AIC000166832023073110297-719INDCheigh NakamuraEileen66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer U.S. PharmaceuticalsVP CSI Business Assessment CoE +SA11AIC000166832023071716378-708INDChenowethLaura66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSVP, Deputy GC Biopharma & Legal Strat +SA11AIC000166832023073110297-706INDChenowethLaura66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSVP, Deputy GC Biopharma & Legal Strat +SA11AIC000166832023071716378-785INDChildressBradleyC66 Hudson Blvd EastNew YorkNY100012023071424.00327.00Pfizer IncOncology Key Account Manager +SA11AIC000166832023073110297-784INDChildressBradleyC66 Hudson Blvd EastNew YorkNY100012023073124.00327.00Pfizer IncOncology Key Account Manager +SA11AIC000166832023071716378-1005INDChouCarolynW66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-1003INDChouCarolynW66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-2107INDChristianAmyMichelle66 Hudson Blvd EastNew YorkNY1000120230714130.001820.00Pfizer IncDirector, State Government Relations +SA11AIC000166832023073110297-2102INDChristianAmyMichelle66 Hudson Blvd EastNew YorkNY1000120230731130.001820.00Pfizer IncDirector, State Government Relations +SA11AIC000166832023071716378-2756INDCinceraBrianD66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncCISO & SVP, Enterprise Platforms & Sec +SA11AIC000166832023073110297-2750INDCinceraBrianD66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncCISO & SVP, Enterprise Platforms & Sec +SA11AIC000166832023071716378-3197INDCirelliDavidJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Senior Director +SA11AIC000166832023073110297-3187INDCirelliDavidJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Senior Director +SA11AIC000166832023071716378-2426INDClaeysStephen66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncSenior Director, Global Trade Policy & +SA11AIC000166832023073110297-2420INDClaeysStephen66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncSenior Director, Global Trade Policy & +SA11AIC000166832023071716378-1654INDCleckleyLukeWallace66 Hudson Blvd EastNew YorkNY100012023071416.00220.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1651INDCleckleyLukeWallace66 Hudson Blvd EastNew YorkNY100012023073116.00220.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-776INDClippMichaelC66 Hudson Blvd EastNew YorkNY100012023071424.84347.76Pfizer IncVaccines National Account Director +SA11AIC000166832023073110297-775INDClippMichaelC66 Hudson Blvd EastNew YorkNY100012023073124.84347.76Pfizer IncVaccines National Account Director +SA11AIC000166832023071716378-474INDCobianIdalis66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer U.S. PharmaceuticalsSHR Level 2 +SA11AIC000166832023073110297-472INDCobianIdalis66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer U.S. PharmaceuticalsSHR Level 2 +SA11AIC000166832023071716378-3198INDCoburnJuliL66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer, Inc.Area Business Manager +SA11AIC000166832023073110297-3188INDCoburnJuliL66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer, Inc.Area Business Manager +SA11AIC000166832023073110297-3189INDCoiaKarenM66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.SHR Level 4 +SA11AIC000166832023071716378-1102INDCollRenaE66 Hudson Blvd EastNew YorkNY100012023071425.84361.76Pfizer IncOrganized Customer, HQ, Therapeutic Le +SA11AIC000166832023073110297-1100INDCollRenaE66 Hudson Blvd EastNew YorkNY100012023073125.84361.76Pfizer IncOrganized Customer, HQ, Therapeutic Le +SA11AIC000166832023071716378-583INDCollinsJonB66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector CDARS Product Owner +SA11AIC000166832023073110297-581INDCollinsJonB66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector CDARS Product Owner +SA11AIC000166832023071716378-1821INDColyerSheryl66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncVP, People Experience, GBS +SA11AIC000166832023073110297-1818INDColyerSheryl66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncVP, People Experience, GBS +SA11AIC000166832023071716378-2089INDCostelloMeredethJohnson66 Hudson Blvd EastNew YorkNY100012023071421.00294.00Pfizer, IncHSP Level 2 +SA11AIC000166832023073110297-2084INDCostelloMeredethJohnson66 Hudson Blvd EastNew YorkNY100012023073121.00294.00Pfizer, IncHSP Level 2 +SA11AIC000166832023071716378-1105INDCotareloJuanC66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncSr. Mgr, Political Outreach and Head o +SA11AIC000166832023073110297-1103INDCotareloJuanC66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncSr. Mgr, Political Outreach and Head o +SA11AIC000166832023071716378-458INDCoulterGlennM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr. Director, Global Network Engineeri +SA11AIC000166832023073110297-456INDCoulterGlennM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr. Director, Global Network Engineeri +SA11AIC000166832023071716378-1728INDCourson-SmithSusan66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSr Director, American Tax Ctr, State & +SA11AIC000166832023073110297-1725INDCourson-SmithSusan66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSr Director, American Tax Ctr, State & +SA11AIC000166832023071716378-268INDCoxEdward66 Hudson Blvd EastNew YorkNY1000120230714104.17625.02Pfizer, IncGeneral Manager and Head of Digital He +SA11AIC000166832023073110297-267INDCoxEdward66 Hudson Blvd EastNew YorkNY1000120230731104.17625.02Pfizer, IncGeneral Manager and Head of Digital He +SA11AIC000166832023071716378-1011INDCraigTerriL66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-1009INDCraigTerriL66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-983INDCraryClarenceJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVaccines Account Manager +SA11AIC000166832023073110297-981INDCraryClarenceJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVaccines Account Manager +SA11AIC000166832023071716378-953INDCrawfordCaseyHamilton66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAccount Lead +SA11AIC000166832023073110297-951INDCrawfordCaseyHamilton66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAccount Lead +SA11AIC000166832023071716378-879INDCreedChadR66 Hudson Blvd EastNew YorkNY100012023071421.88306.32Pfizer IncHSP Level 3 +SA11AIC000166832023073110297-877INDCreedChadR66 Hudson Blvd EastNew YorkNY100012023073121.88306.32Pfizer IncHSP Level 3 +SA11AIC000166832023071716378-365INDCrottyMaryC66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVice President and AGC, HR/Benefits +SA11AIC000166832023073110297-363INDCrottyMaryC66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVice President and AGC, HR/Benefits +SA11AIC000166832023071716378-1756INDCunninghamVitoria66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Manager, Alliance Development +SA11AIC000166832023073110297-1753INDCunninghamVitoria66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Manager, Alliance Development +SA11AIC000166832023071716378-1816INDDagherRamzi66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncHead, GRA International & Regulatory P +SA11AIC000166832023073110297-1813INDDagherRamzi66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncHead, GRA International & Regulatory P +SA11AIC000166832023071716378-1753INDDaltonBarbara66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncVP, Business Development, Venture Capi +SA11AIC000166832023073110297-1750INDDaltonBarbara66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncVP, Business Development, Venture Capi +SA11AIC000166832023073110297-1885INDDalyJames66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncDirector, Payer & Channel Access Marke +SA11AIC000166832023071716378-645INDDamicoJenniferB66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSVP & Controller +SA11AIC000166832023073110297-643INDDamicoJenniferB66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSVP & Controller +SA11AIC000166832023071716378-1450INDDamleBharatD66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer, IncVP, Clin Pharm Head, Global Brands, Po +SA11AIC000166832023073110297-1448INDDamleBharatD66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer, IncVP, Clin Pharm Head, Global Brands, Po +SA11AIC000166832023071716378-2837INDDanielsAmandaJosephson66 Hudson Blvd EastNew YorkNY100012023071445.00630.00Pfizer, Inc.Global Enbrel/Biosims Lead +SA11AIC000166832023073110297-2830INDDanielsAmandaJosephson66 Hudson Blvd EastNew YorkNY100012023073145.00630.00Pfizer, Inc.Global Enbrel/Biosims Lead +SA11AIC000166832023071716378-899INDDaoustStevenD66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncHSP Level 3 +SA11AIC000166832023073110297-897INDDaoustStevenD66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncHSP Level 3 +SA11AIC000166832023071716378-2522INDDavisLindsayElizabeth66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, IM & H FM TA +SA11AIC000166832023073110297-2517INDDavisLindsayElizabeth66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, IM & H FM TA +SA11AIC000166832023071716378-3209INDDavisReneM66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer, Inc.HSP Level 3 +SA11AIC000166832023073110297-3199INDDavisReneM66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer, Inc.HSP Level 3 +SA11AIC000166832023071716378-205INDDavisRobertJ66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023073110297-204INDDavisRobertJ66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-2273INDDayKaren66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSenior Corporate Counsel +SA11AIC000166832023073110297-2267INDDayKaren66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSenior Corporate Counsel +SA11AIC000166832023071716378-1970INDDeebJonathanD66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Corporate Audit +SA11AIC000166832023073110297-1966INDDeebJonathanD66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Corporate Audit +SA11AIC000166832023071716378-894INDDelorBonnie66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer U.S. PharmaceuticalsIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-892INDDelorBonnie66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer U.S. PharmaceuticalsIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-377INDDelosaJosephJ66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncTraining Director +SA11AIC000166832023073110297-375INDDelosaJosephJ66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncTraining Director +SA11AIC000166832023071716378-3096INDDelpLawrenceMichael66 Hudson Blvd EastNew YorkNY100012023071424.00336.00Pfizer, IncVP, Global Information Security +SA11AIC000166832023073110297-3088INDDelpLawrenceMichael66 Hudson Blvd EastNew YorkNY100012023073124.00336.00Pfizer, IncVP, Global Information Security +SA11AIC000166832023071716378-2296INDDemereMichelle66 Hudson Blvd EastNew YorkNY100012023071419.00266.00Pfizer, IncSHR Level 1 +SA11AIC000166832023073110297-2290INDDemereMichelle66 Hudson Blvd EastNew YorkNY100012023073119.00266.00Pfizer, IncSHR Level 1 +SA11AIC000166832023071716378-418INDDempsMarkA66 Hudson Blvd EastNew YorkNY100012023071429.00406.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-416INDDempsMarkA66 Hudson Blvd EastNew YorkNY100012023073129.00406.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-3211INDDennisDonnieR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.HSP Level 2 +SA11AIC000166832023073110297-3201INDDennisDonnieR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.HSP Level 2 +SA11AIC000166832023071716378-107INDDentonBrianC66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyNational Account Director, U.S Channel +SA11AIC000166832023073110297-106INDDentonBrianC66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyNational Account Director, U.S Channel +SA11AIC000166832023071716378-2511INDDentonDavid66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer, IncChief Financial Officer, Executive Vic +SA11AIC000166832023073110297-2506INDDentonDavid66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer, IncChief Financial Officer, Executive Vic +SA11AIC000166832023071716378-2762INDDepaolisLouis66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncDirector, Business Applications Engine +SA11AIC000166832023073110297-2756INDDepaolisLouis66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncDirector, Business Applications Engine +SA11AIC000166832023071716378-1001INDDermodyKatherineA66 Hudson Blvd EastNew YorkNY100012023071421.84301.76Pfizer IncOpinion Leader Liaison West +SA11AIC000166832023073110297-999INDDermodyKatherineA66 Hudson Blvd EastNew YorkNY100012023073121.84301.76Pfizer IncOpinion Leader Liaison West +SA11AIC000166832023071716378-719INDDes Etages-WongShelleyAnn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Research And DevelopmenHead of PM Translational Med Leads IMR +SA11AIC000166832023073110297-717INDDes Etages-WongShelleyAnn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Research And DevelopmenHead of PM Translational Med Leads IMR +SA11AIC000166832023071716378-1792INDDevlinFrances66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSenior Director, IDM Global Policy & P +SA11AIC000166832023073110297-1789INDDevlinFrances66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSenior Director, IDM Global Policy & P +SA11AIC000166832023071716378-878INDDeyoungJohn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncBusiness Development Lead, Oncology +SA11AIC000166832023073110297-876INDDeyoungJohn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncBusiness Development Lead, Oncology +SA11AIC000166832023071716378-1044INDDi StefanoReneeAllen66 Hudson Blvd EastNew YorkNY100012023071450.00700.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1042INDDi StefanoReneeAllen66 Hudson Blvd EastNew YorkNY100012023073150.00700.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1525INDDiacoMichael66 Hudson Blvd EastNew YorkNY100012023071422.84319.76Pfizer IncAGC +SA11AIC000166832023073110297-1523INDDiacoMichael66 Hudson Blvd EastNew YorkNY100012023073122.84319.76Pfizer IncAGC +SA11AIC000166832023071716378-1388INDDietschiLindseyM66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncIM and Antiviral KAM Lead +SA11AIC000166832023073110297-1386INDDietschiLindseyM66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncIM and Antiviral KAM Lead +SA11AIC000166832023073110297-1180INDDignosEricG66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncUS Comirnaty, Navigator, Account Speci +SA11AIC000166832023071716378-101INDDilleGary66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023073110297-100INDDilleGary66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023071716378-3084INDDirussoGregoryB66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDevelopment Head, Benign Hematology +SA11AIC000166832023073110297-3076INDDirussoGregoryB66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDevelopment Head, Benign Hematology +SA11AIC000166832023071716378-652INDDivineySuzanneS66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Research And DevelopmenVP, Office of the Ombuds +SA11AIC000166832023073110297-650INDDivineySuzanneS66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Research And DevelopmenVP, Office of the Ombuds +SA11AIC000166832023071716378-2843INDDolstenG.Mikael66 Hudson Blvd EastNew YorkNY1000120230714208.342916.76Pfizer, Inc.Chief Scientific Officer & President, +SA11AIC000166832023073110297-2836INDDolstenG.Mikael66 Hudson Blvd EastNew YorkNY1000120230731208.342916.76Pfizer, Inc.Chief Scientific Officer & President, +SA11AIC000166832023071716378-1794INDDonnellyErlingThor66 Hudson Blvd EastNew YorkNY1000120230714106.001488.34Pfizer IncUS Breast Cancer Lead +SA11AIC000166832023073110297-1791INDDonnellyErlingThor66 Hudson Blvd EastNew YorkNY1000120230731106.001488.34Pfizer IncUS Breast Cancer Lead +SA11AIC000166832023071716378-536INDDonnellySusanM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023073110297-534INDDonnellySusanM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023071716378-30INDDowneyRussellG66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyDirector Remediation Large Sites +SA11AIC000166832023073110297-29INDDowneyRussellG66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyDirector Remediation Large Sites +SA11AIC000166832023071716378-103INDDoyle-ScharffMaureen66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncSrDirector Med Grant & Res Col +SA11AIC000166832023073110297-102INDDoyle-ScharffMaureen66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncSrDirector Med Grant & Res Col +SA11AIC000166832023071716378-841INDDudekRichardC66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSVP Payer & Channel Access +SA11AIC000166832023073110297-840INDDudekRichardC66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSVP Payer & Channel Access +SA11AIC000166832023071716378-1189INDDufourJeff66 Hudson Blvd EastNew YorkNY100012023071442.00588.00Pfizer IncGlobal Commercial GTM Strategy & Innov +SA11AIC000166832023073110297-1187INDDufourJeff66 Hudson Blvd EastNew YorkNY100012023073142.00588.00Pfizer IncGlobal Commercial GTM Strategy & Innov +SA11AIC000166832023071716378-2082INDDufresneDeborah66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncSr. Director New Prod Concept +SA11AIC000166832023073110297-2077INDDufresneDeborah66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncSr. Director New Prod Concept +SA11AIC000166832023073110297-2673INDDugganRichardPaul66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-1746INDDuncanDrue66 Hudson Blvd EastNew YorkNY1000120230714104.17958.38Pfizer IncSenior Director, SGR Team and Internal +SA11AIC000166832023073110297-1743INDDuncanDrue66 Hudson Blvd EastNew YorkNY1000120230731104.17958.38Pfizer IncSenior Director, SGR Team and Internal +SA11AIC000166832023071716378-3215INDDuqueIsidroV66 Hudson Blvd EastNew YorkNY1000120230714104.17379.51Pfizer, Inc.Sr Manager OthFldSup-Pharm (P) +SA11AIC000166832023073110297-3205INDDuqueIsidroV66 Hudson Blvd EastNew YorkNY1000120230731104.17379.51Pfizer, Inc.Sr Manager OthFldSup-Pharm (P) +SA11AIC000166832023071716378-211INDEbnerShaylaM66 Hudson Blvd EastNew YorkNY100012023071443.00602.00Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023073110297-210INDEbnerShaylaM66 Hudson Blvd EastNew YorkNY100012023073143.00602.00Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023071716378-1796INDEdgeKatrina66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Corporate Counsel +SA11AIC000166832023073110297-1793INDEdgeKatrina66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Corporate Counsel +SA11AIC000166832023071716378-3216INDEdmondsJasonN66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer, Inc.SrScien'st Biology +SA11AIC000166832023073110297-3206INDEdmondsJasonN66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer, Inc.SrScien'st Biology +SA11AIC000166832023071716378-623INDElghazalyMarkM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncPGS Co-Development Lead (PGS CDL) (Sen +SA11AIC000166832023073110297-621INDElghazalyMarkM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncPGS Co-Development Lead (PGS CDL) (Sen +SA11AIC000166832023071716378-455INDElliottJamesThomas66 Hudson Blvd EastNew YorkNY100012023071450.00700.00Pfizer IncSr Dir, Network Strtg & Mngmt +SA11AIC000166832023073110297-453INDElliottJamesThomas66 Hudson Blvd EastNew YorkNY100012023073150.00700.00Pfizer IncSr Dir, Network Strtg & Mngmt +SA11AIC000166832023071716378-1473INDElliottMatthewB66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncKey Account Manager +SA11AIC000166832023073110297-1471INDElliottMatthewB66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncKey Account Manager +SA11AIC000166832023071716378-1276INDEngelEricNathan66 Hudson Blvd EastNew YorkNY100012023071425.84361.76PharmaciaSenior Director, S&ES PGS - Global Ste +SA11AIC000166832023073110297-1274INDEngelEricNathan66 Hudson Blvd EastNew YorkNY100012023073125.84361.76PharmaciaSenior Director, S&ES PGS - Global Ste +SA11AIC000166832023071716378-868INDEngelPaulA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSr. Director, Team Leader +SA11AIC000166832023073110297-866INDEngelPaulA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSr. Director, Team Leader +SA11AIC000166832023071716378-3218INDEnglehartDavidS66 Hudson Blvd EastNew YorkNY100012023071425.84361.76Pfizer, Inc.Area Business Manager +SA11AIC000166832023073110297-3208INDEnglehartDavidS66 Hudson Blvd EastNew YorkNY100012023073125.84361.76Pfizer, Inc.Area Business Manager +SA11AIC000166832023071716378-2453INDEskenasJoseph66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncQC Scientist III +SA11AIC000166832023073110297-2447INDEskenasJoseph66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncQC Scientist III +SA11AIC000166832023071716378-3220INDFaganDaniel66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.SrDirector Tax Operations +SA11AIC000166832023073110297-3210INDFaganDaniel66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.SrDirector Tax Operations +SA11AIC000166832023071716378-1803INDFahrerRichard66 Hudson Blvd EastNew YorkNY1000120230714104.17937.53Pfizer, IncDirector, Oncology Customer Marketing, +SA11AIC000166832023073110297-1800INDFahrerRichard66 Hudson Blvd EastNew YorkNY1000120230731104.17937.53Pfizer, IncDirector, Oncology Customer Marketing, +SA11AIC000166832023071716378-1837INDFareedErikaLisa66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Solution Delivery Lead +SA11AIC000166832023073110297-1834INDFareedErikaLisa66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Solution Delivery Lead +SA11AIC000166832023071716378-1099INDFaulknerStevenT66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director, Medical Analytics & I +SA11AIC000166832023073110297-1097INDFaulknerStevenT66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director, Medical Analytics & I +SA11AIC000166832023071716378-2503INDFeeneyMelinda66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncDirector BusUnitSupport (P) +SA11AIC000166832023073110297-2498INDFeeneyMelinda66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncDirector BusUnitSupport (P) +SA11AIC000166832023071716378-419INDFentonJenniferL66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncKey Account Manager +SA11AIC000166832023073110297-417INDFentonJenniferL66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncKey Account Manager +SA11AIC000166832023071716378-763INDFererMichaelK66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncUS DMD Gene Therapy Marketing Director +SA11AIC000166832023073110297-761INDFererMichaelK66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncUS DMD Gene Therapy Marketing Director +SA11AIC000166832023071716378-795INDFernandezJenniferJ66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncSenior Manager Business Operations +SA11AIC000166832023073110297-794INDFernandezJenniferJ66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncSenior Manager Business Operations +SA11AIC000166832023071716378-1984INDFerrisJustin66 Hudson Blvd EastNew YorkNY100012023071418.00252.00Pfizer, IncDirector, Customer and Channel Marketi +SA11AIC000166832023073110297-1979INDFerrisJustin66 Hudson Blvd EastNew YorkNY100012023073118.00252.00Pfizer, IncDirector, Customer and Channel Marketi +SA11AIC000166832023071716378-1268INDFigueroa GonzalezJavier66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer Pharmaceuticals LLCVP, People Experience, Organizational +SA11AIC000166832023073110297-1266INDFigueroa GonzalezJavier66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer Pharmaceuticals LLCVP, People Experience, Organizational +SA11AIC000166832023071716378-3223INDFirstStevenA66 Hudson Blvd EastNew YorkNY100012023071465.00910.00Pfizer, Inc.Vice President, People Experience, Glo +SA11AIC000166832023073110297-3213INDFirstStevenA66 Hudson Blvd EastNew YorkNY100012023073165.00910.00Pfizer, Inc.Vice President, People Experience, Glo +SA11AIC000166832023071716378-1569INDFleckerAlexander66 Hudson Blvd EastNew YorkNY100012023071422.84319.76Pfizer IncSenior Director, Team Leader Oncology +SA11AIC000166832023073110297-1567INDFleckerAlexander66 Hudson Blvd EastNew YorkNY100012023073122.84319.76Pfizer IncSenior Director, Team Leader Oncology +SA11AIC000166832023073110297-85INDFlickingerAmyG66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanySenior Scientist, Technical Writer +SA11AIC000166832023071716378-1560INDFloodJames66 Hudson Blvd EastNew YorkNY100012023071427.00361.68Pfizer IncBusiness Planning Team Lead +SA11AIC000166832023073110297-1558INDFloodJames66 Hudson Blvd EastNew YorkNY100012023073127.00361.68Pfizer IncBusiness Planning Team Lead +SA11AIC000166832023071716378-2367INDFloresBrandyBlaze66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncSenior Manager, Alliance Development +SA11AIC000166832023073110297-2361INDFloresBrandyBlaze66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncSenior Manager, Alliance Development +SA11AIC000166832023071716378-2856INDFlotronCarolineAdrienne66 Hudson Blvd EastNew YorkNY100012023071422.88320.32Pfizer, Inc.Chief Counsel, Vaccines +SA11AIC000166832023073110297-2849INDFlotronCarolineAdrienne66 Hudson Blvd EastNew YorkNY100012023073122.88320.32Pfizer, Inc.Chief Counsel, Vaccines +SA11AIC000166832023071716378-1418INDFlowersJonelleM66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncDirector, External Activation +SA11AIC000166832023073110297-1416INDFlowersJonelleM66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncDirector, External Activation +SA11AIC000166832023071716378-751INDFloydGilbert66 Hudson Blvd EastNew YorkNY100012023071446.00644.00Pfizer IncIM & Antiviral Sales Lead +SA11AIC000166832023073110297-749INDFloydGilbert66 Hudson Blvd EastNew YorkNY100012023073146.00644.00Pfizer IncIM & Antiviral Sales Lead +SA11AIC000166832023071716378-3224INDFoehrkolbJayneE66 Hudson Blvd EastNew YorkNY100012023071417.00238.00Pfizer, Inc.HSP Level 4 +SA11AIC000166832023073110297-3214INDFoehrkolbJayneE66 Hudson Blvd EastNew YorkNY100012023073117.00238.00Pfizer, Inc.HSP Level 4 +SA11AIC000166832023071716378-2378INDFonsecaLidia66 Hudson Blvd EastNew YorkNY1000120230714104.17729.19Pfizer, IncChief Digital & Technology Officer, Ex +SA11AIC000166832023073110297-2372INDFonsecaLidia66 Hudson Blvd EastNew YorkNY1000120230731104.17729.19Pfizer, IncChief Digital & Technology Officer, Ex +SA11AIC000166832023071716378-453INDForero UribeJuanFernando66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncVP, Oncology Category Supply Chain Lea +SA11AIC000166832023073110297-451INDForero UribeJuanFernando66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncVP, Oncology Category Supply Chain Lea +SA11AIC000166832023071716378-2336INDForsythMichael66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncOncology Field Medical, Outcomes & Ana +SA11AIC000166832023073110297-2330INDForsythMichael66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncOncology Field Medical, Outcomes & Ana +SA11AIC000166832023071716378-1217INDFosterNieshaN66 Hudson Blvd EastNew YorkNY100012023071441.64582.96Pfizer IncVP, Product Access +SA11AIC000166832023073110297-1215INDFosterNieshaN66 Hudson Blvd EastNew YorkNY100012023073141.64582.96Pfizer IncVP, Product Access +SA11AIC000166832023071716378-3063INDFoxSteven66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncService Delivery Manager, Collegeville +SA11AIC000166832023073110297-3055INDFoxSteven66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncService Delivery Manager, Collegeville +SA11AIC000166832023071716378-2858INDFox-SorcicKelliAnnette66 Hudson Blvd EastNew YorkNY100012023071426.00362.00Pfizer, Inc.Sr Manager, EHS Process Management Lea +SA11AIC000166832023073110297-2851INDFox-SorcicKelliAnnette66 Hudson Blvd EastNew YorkNY100012023073126.00362.00Pfizer, Inc.Sr Manager, EHS Process Management Lea +SA11AIC000166832023071716378-664INDFrancoJudithB66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDSRD Outsourcing and External Business +SA11AIC000166832023073110297-662INDFrancoJudithB66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDSRD Outsourcing and External Business +SA11AIC000166832023071716378-2162INDFraneyRodney66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncGlobal Onc Content & Education TL, Bre +SA11AIC000166832023073110297-2157INDFraneyRodney66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncGlobal Onc Content & Education TL, Bre +SA11AIC000166832023071716378-88INDFrazerGregoryLee66 Hudson Blvd EastNew YorkNY100012023071420.84237.56Pharmacia & Upjohn CompanyA.R.Fellow Chem-Analytical +SA11AIC000166832023073110297-87INDFrazerGregoryLee66 Hudson Blvd EastNew YorkNY100012023073120.84237.56Pharmacia & Upjohn CompanyA.R.Fellow Chem-Analytical +SA11AIC000166832023071716378-1000INDFreemanMaryBeth66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVaccines, mRNA Sales & Account Managem +SA11AIC000166832023073110297-998INDFreemanMaryBeth66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVaccines, mRNA Sales & Account Managem +SA11AIC000166832023071716378-2513INDFrenzelZacharyEben66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncScientist, Packaging Engineer R&D +SA11AIC000166832023073110297-2508INDFrenzelZacharyEben66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncScientist, Packaging Engineer R&D +SA11AIC000166832023071716378-3050INDFriedmanGarySteven66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncCD&O Clinician +SA11AIC000166832023073110297-3042INDFriedmanGarySteven66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncCD&O Clinician +SA11AIC000166832023071716378-1465INDFrielingSusanCresci66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncChief of Staff to CPXO PX _ Enabling +SA11AIC000166832023073110297-1463INDFrielingSusanCresci66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncChief of Staff to CPXO PX _ Enabling +SA11AIC000166832023071716378-1307INDFulmerPatriciaA66 Hudson Blvd EastNew YorkNY100012023071424.83347.62Pfizer IncHSP Level 3 +SA11AIC000166832023073110297-1305INDFulmerPatriciaA66 Hudson Blvd EastNew YorkNY100012023073124.83347.62Pfizer IncHSP Level 3 +SA11AIC000166832023071716378-3227INDGabbaiTaraJ.66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer, IncVice President and AGC, Governance/SEC +SA11AIC000166832023073110297-3217INDGabbaiTaraJ.66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer, IncVice President and AGC, Governance/SEC +SA11AIC000166832023071716378-3228INDGagnonPamelaD66 Hudson Blvd EastNew YorkNY100012023071416.00220.00Pfizer, Inc.SHR Level 3 +SA11AIC000166832023073110297-3218INDGagnonPamelaD66 Hudson Blvd EastNew YorkNY100012023073116.00220.00Pfizer, Inc.SHR Level 3 +SA11AIC000166832023071716378-2991INDGalvinElizabethA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Sr. Director Strategy & Performance Ex +SA11AIC000166832023073110297-2983INDGalvinElizabethA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Sr. Director Strategy & Performance Ex +SA11AIC000166832023071716378-620INDGalvinJohnM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-618INDGalvinJohnM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-1626INDGandsmanDana66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncVP, Enterprise Reputation +SA11AIC000166832023071716378-2724INDGansDavidI66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncVP, PCA Marketing +SA11AIC000166832023073110297-2718INDGansDavidI66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncVP, PCA Marketing +SA11AIC000166832023071716378-2785INDGarciaAndrew66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr. Director, Global Operations Lead +SA11AIC000166832023073110297-2779INDGarciaAndrew66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr. Director, Global Operations Lead +SA11AIC000166832023071716378-519INDGardnerBelinda66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Research And DevelopmenVice President, Head of US Country Ope +SA11AIC000166832023073110297-517INDGardnerBelinda66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Research And DevelopmenVice President, Head of US Country Ope +SA11AIC000166832023071716378-1387INDGargRachanaV66 Hudson Blvd EastNew YorkNY100012023071435.00490.00Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-1385INDGargRachanaV66 Hudson Blvd EastNew YorkNY100012023073135.00490.00Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-2417INDGaroneDennisJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 2 +SA11AIC000166832023073110297-2411INDGaroneDennisJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 2 +SA11AIC000166832023071716378-1103INDGeolyFrankJ66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncDSRD Global Pathology Team Lead +SA11AIC000166832023073110297-1101INDGeolyFrankJ66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncDSRD Global Pathology Team Lead +SA11AIC000166832023071716378-1579INDGerkenRobert66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSenior Manager, Audit +SA11AIC000166832023073110297-1577INDGerkenRobert66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSenior Manager, Audit +SA11AIC000166832023071716378-1015INDGerloffJerianneS66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, SGR Team and External +SA11AIC000166832023073110297-1013INDGerloffJerianneS66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, SGR Team and External +SA11AIC000166832023071716378-2866INDGiardinaPeterC66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Senior Director, Head of Operations & +SA11AIC000166832023073110297-2859INDGiardinaPeterC66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Senior Director, Head of Operations & +SA11AIC000166832023071716378-1017INDGillCraigA66 Hudson Blvd EastNew YorkNY1000120230714145.002030.00Pfizer IncDirector, State Government Relations +SA11AIC000166832023073110297-1015INDGillCraigA66 Hudson Blvd EastNew YorkNY1000120230731145.002030.00Pfizer IncDirector, State Government Relations +SA11AIC000166832023071716378-2519INDGillJasjitSingh66 Hudson Blvd EastNew YorkNY1000120230714104.171020.88Pfizer, IncHBU Anti-Infectives Field Medical Dire +SA11AIC000166832023073110297-2514INDGillJasjitSingh66 Hudson Blvd EastNew YorkNY1000120230731104.171020.88Pfizer, IncHBU Anti-Infectives Field Medical Dire +SA11AIC000166832023071716378-977INDGillespieBrianK66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAccess Innovation Team Leader +SA11AIC000166832023073110297-975INDGillespieBrianK66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAccess Innovation Team Leader +SA11AIC000166832023071716378-204INDGilmoreMichaelR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023073110297-203INDGilmoreMichaelR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023073110297-138INDGio-FitmanJacqueline66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanySHR Level 3 +SA11AIC000166832023071716378-2258INDGoldmanErinn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncGlobal Medical Director Multiple Myelo +SA11AIC000166832023073110297-2252INDGoldmanErinn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncGlobal Medical Director Multiple Myelo +SA11AIC000166832023071716378-463INDGonzalez-RamosFelipe66 Hudson Blvd EastNew YorkNY100012023071450.00700.00Pfizer Pharmaceuticals LLCSenior Director, S & ES, PGS Procureme +SA11AIC000166832023073110297-461INDGonzalez-RamosFelipe66 Hudson Blvd EastNew YorkNY100012023073150.00700.00Pfizer Pharmaceuticals LLCSenior Director, S & ES, PGS Procureme +SA11AIC000166832023071716378-1957INDGoodrichAmy66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, External Activation +SA11AIC000166832023073110297-1953INDGoodrichAmy66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, External Activation +SA11AIC000166832023071716378-581INDGoodwinRobertR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Research And DevelopmenHead, Clinical Development & Operation +SA11AIC000166832023073110297-579INDGoodwinRobertR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Research And DevelopmenHead, Clinical Development & Operation +SA11AIC000166832023071716378-1049INDGouveia-PisanoJulieAnn66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-1047INDGouveia-PisanoJulieAnn66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-934INDGrahamNeeliHester66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-932INDGrahamNeeliHester66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-1741INDGrannisLauraAllison66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector Worldwide Policy (M) +SA11AIC000166832023073110297-1738INDGrannisLauraAllison66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector Worldwide Policy (M) +SA11AIC000166832023071716378-2346INDGrayPaulineM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 2 +SA11AIC000166832023073110297-2340INDGrayPaulineM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 2 +SA11AIC000166832023071716378-1231INDGreenFrancisDaniel66 Hudson Blvd EastNew YorkNY100012023071427.84389.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1229INDGreenFrancisDaniel66 Hudson Blvd EastNew YorkNY100012023073127.84389.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1637INDGreenMarkus66 Hudson Blvd EastNew YorkNY1000120230714104.17854.21Pfizer IncVP & AGC, Government Relations/AG Outr +SA11AIC000166832023073110297-1634INDGreenMarkus66 Hudson Blvd EastNew YorkNY1000120230731104.17854.21Pfizer IncVP & AGC, Government Relations/AG Outr +SA11AIC000166832023071716378-57INDGreeneRobertAnthony66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyNew Products Lead, Hospital +SA11AIC000166832023073110297-56INDGreeneRobertAnthony66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyNew Products Lead, Hospital +SA11AIC000166832023071716378-683INDGriesingTeresaA66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncInternal Medicine & Hospital CMAO +SA11AIC000166832023073110297-681INDGriesingTeresaA66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncInternal Medicine & Hospital CMAO +SA11AIC000166832023071716378-771INDGriesmerThomas66 Hudson Blvd EastNew YorkNY100012023071450.00700.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-769INDGriesmerThomas66 Hudson Blvd EastNew YorkNY100012023073150.00700.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-502INDGriffithMelodie66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncSenior Director, Global Hem. Opinion L +SA11AIC000166832023073110297-500INDGriffithMelodie66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncSenior Director, Global Hem. Opinion L +SA11AIC000166832023071716378-824INDGriffithSean66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncRetail Pharmacy Business Manager +SA11AIC000166832023073110297-823INDGriffithSean66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncRetail Pharmacy Business Manager +SA11AIC000166832023071716378-2429INDGriffithsTimothy66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023073110297-2423INDGriffithsTimothy66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-775INDGroomeKevinP66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncArea Business Manager +SA11AIC000166832023073110297-774INDGroomeKevinP66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1058INDGrossDavid66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncIM Field Medical, Payer Account Medica +SA11AIC000166832023073110297-1056INDGrossDavid66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncIM Field Medical, Payer Account Medica +SA11AIC000166832023071716378-1249INDGroverJamieM66 Hudson Blvd EastNew YorkNY100012023071439.21548.94Pfizer IncHSP Level 2 +SA11AIC000166832023073110297-1247INDGroverJamieM66 Hudson Blvd EastNew YorkNY100012023073139.21548.94Pfizer IncHSP Level 2 +SA11AIC000166832023071716378-2690INDGuilliamsVeronica66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSenior Manager, Vials Visual Inspectio +SA11AIC000166832023073110297-2685INDGuilliamsVeronica66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSenior Manager, Vials Visual Inspectio +SA11AIC000166832023073110297-3014INDGustkeyJennifer66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, IncDirector Tech Training (P) +SA11AIC000166832023071716378-2104INDHaasRichardT66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-2099INDHaasRichardT66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-1857INDHabanekKristin66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023073110297-1854INDHabanekKristin66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-1165INDHadfieldJayA66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer IncSBS Resourcing & Facilities Lead +SA11AIC000166832023073110297-1163INDHadfieldJayA66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer IncSBS Resourcing & Facilities Lead +SA11AIC000166832023071716378-3236INDHaggertyStephanieMarie66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer, Inc.Senior Corporate Counsel +SA11AIC000166832023073110297-3226INDHaggertyStephanieMarie66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer, Inc.Senior Corporate Counsel +SA11AIC000166832023073110297-1158INDHallYi-Ling66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncAdvanced Customer Engagement Director +SA11AIC000166832023071716378-3160INDHalstromSuzanne66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncSenior Director, US Abrysvo OA/Portfol +SA11AIC000166832023073110297-3151INDHalstromSuzanne66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncSenior Director, US Abrysvo OA/Portfol +SA11AIC000166832023071716378-727INDHanavanElizabethA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer U.S. PharmaceuticalsHSP Level 3 +SA11AIC000166832023073110297-725INDHanavanElizabethA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer U.S. PharmaceuticalsHSP Level 3 +SA11AIC000166832023071716378-965INDHanksObieJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector, US Oncology Portfolio Agile +SA11AIC000166832023073110297-963INDHanksObieJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector, US Oncology Portfolio Agile +SA11AIC000166832023071716378-1775INDHarnagaEd66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncSVP, Global External Communications & +SA11AIC000166832023073110297-1772INDHarnagaEd66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncSVP, Global External Communications & +SA11AIC000166832023073110297-3230INDHarrisonWilliamK66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.HSP Level 3 +SA11AIC000166832023071716378-3241INDHartleyGarrettA66 Hudson Blvd EastNew YorkNY100012023071427.00378.00Pfizer, Inc.Director, Oncology Customer Marketing +SA11AIC000166832023073110297-3231INDHartleyGarrettA66 Hudson Blvd EastNew YorkNY100012023073127.00378.00Pfizer, Inc.Director, Oncology Customer Marketing +SA11AIC000166832023071716378-3242INDHaskinsKellyL66 Hudson Blvd EastNew YorkNY100012023071416.00222.00Pfizer, Inc.HSP Level 3 +SA11AIC000166832023073110297-3232INDHaskinsKellyL66 Hudson Blvd EastNew YorkNY100012023073116.00222.00Pfizer, Inc.HSP Level 3 +SA11AIC000166832023071716378-1819INDHavernLindsayAnne66 Hudson Blvd EastNew YorkNY100012023071410.00799.19Pfizer IncVP Compliance _ Governance Science and +SA11AIC000166832023073110297-1816INDHavernLindsayAnne66 Hudson Blvd EastNew YorkNY100012023073110.00799.19Pfizer IncVP Compliance _ Governance Science and +SA11AIC000166832023071716378-202INDHaydenTracyL66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pharmacia & Upjohn CompanySHR Level 4 +SA11AIC000166832023073110297-201INDHaydenTracyL66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pharmacia & Upjohn CompanySHR Level 4 +SA11AIC000166832023071716378-197INDHealdJamesA66 Hudson Blvd EastNew YorkNY100012023071418.00252.00PharmaciaSHR Level 2 +SA11AIC000166832023073110297-196INDHealdJamesA66 Hudson Blvd EastNew YorkNY100012023073118.00252.00PharmaciaSHR Level 2 +SA11AIC000166832023071716378-1090INDHeardMelissaK66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023073110297-1088INDHeardMelissaK66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023071716378-216INDHemlerAlanJ66 Hudson Blvd EastNew YorkNY100012023071427.00378.00Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023073110297-215INDHemlerAlanJ66 Hudson Blvd EastNew YorkNY100012023073127.00378.00Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-2876INDHeneseyCarolineMary66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, Inc.Global Reg Portfolio Lead +SA11AIC000166832023073110297-2869INDHeneseyCarolineMary66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, Inc.Global Reg Portfolio Lead +SA11AIC000166832023071716378-1191INDHenleyChadwick66 Hudson Blvd EastNew YorkNY100012023071422.84319.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-1189INDHenleyChadwick66 Hudson Blvd EastNew YorkNY100012023073122.84319.76Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-976INDHensleySusanS66 Hudson Blvd EastNew YorkNY100012023071428.00387.00Pfizer IncSenior Director, Advocacy & Profession +SA11AIC000166832023073110297-974INDHensleySusanS66 Hudson Blvd EastNew YorkNY100012023073128.00387.00Pfizer IncSenior Director, Advocacy & Profession +SA11AIC000166832023071716378-1041INDHeunJefferyM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncCommercial Excellence Rare Hematology +SA11AIC000166832023073110297-1039INDHeunJefferyM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncCommercial Excellence Rare Hematology +SA11AIC000166832023071716378-790INDHichkadTejanR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncPCA National Account Director +SA11AIC000166832023073110297-789INDHichkadTejanR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncPCA National Account Director +SA11AIC000166832023071716378-1298INDHigginsJeffrey66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSr Manager, Support & Operations Lead +SA11AIC000166832023073110297-1296INDHigginsJeffrey66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSr Manager, Support & Operations Lead +SA11AIC000166832023071716378-1115INDHillChristopherJ66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector, Technical Product Owner - Di +SA11AIC000166832023073110297-1113INDHillChristopherJ66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector, Technical Product Owner - Di +SA11AIC000166832023071716378-962INDHinojosaEdwardA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHSP Level 4 +SA11AIC000166832023073110297-960INDHinojosaEdwardA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHSP Level 4 +SA11AIC000166832023071716378-2579INDHobanWilliamP66 Hudson Blvd EastNew YorkNY1000120230714104.17833.36Pfizer, IncArea Business Manager +SA11AIC000166832023073110297-2574INDHobanWilliamP66 Hudson Blvd EastNew YorkNY1000120230731104.17833.36Pfizer, IncArea Business Manager +SA11AIC000166832023071716378-2415INDHoffmanSteven66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer, IncVP, Digital Product Management +SA11AIC000166832023073110297-2409INDHoffmanSteven66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer, IncVP, Digital Product Management +SA11AIC000166832023071716378-2500INDHoganTimothy66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer, IncSVP, Global Policy & Public Affairs +SA11AIC000166832023073110297-2494INDHoganTimothy66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer, IncSVP, Global Policy & Public Affairs +SA11AIC000166832023071716378-713INDHolmesWayneP66 Hudson Blvd EastNew YorkNY100012023071445.83641.62Pfizer IncSenior Director, Global Innovation Pol +SA11AIC000166832023073110297-711INDHolmesWayneP66 Hudson Blvd EastNew YorkNY100012023073145.83641.62Pfizer IncSenior Director, Global Innovation Pol +SA11AIC000166832023071716378-756INDHoop IIIEPaul66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-754INDHoop IIIEPaul66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-943INDHorseyJimE66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer IncEnterprise Strategy and Solutions Dire +SA11AIC000166832023073110297-941INDHorseyJimE66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer IncEnterprise Strategy and Solutions Dire +SA11AIC000166832023071716378-141INDHoveyMandeeR66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pharmacia & Upjohn CompanyWomen_s Health Sr. Marketing Manager 1 +SA11AIC000166832023073110297-140INDHoveyMandeeR66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pharmacia & Upjohn CompanyWomen_s Health Sr. Marketing Manager 1 +SA11AIC000166832023071716378-1174INDHsiehLily66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncAssoc Director, CII Info Strat +SA11AIC000166832023073110297-1172INDHsiehLily66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncAssoc Director, CII Info Strat +SA11AIC000166832023071716378-957INDHudsonEricD66 Hudson Blvd EastNew YorkNY100012023071447.00653.00Pfizer IncAccount Director, US Payers +SA11AIC000166832023073110297-955INDHudsonEricD66 Hudson Blvd EastNew YorkNY100012023073147.00653.00Pfizer IncAccount Director, US Payers +SA11AIC000166832023071716378-1065INDHunterKentC66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncPaxlovid and Vaccines Field Medical St +SA11AIC000166832023073110297-1063INDHunterKentC66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncPaxlovid and Vaccines Field Medical St +SA11AIC000166832023073110297-178INDHunterScottA66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanyVaccines Account Director +SA11AIC000166832023071716378-907INDHurlburtMatthewW66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHealthcare Innovation Lead +SA11AIC000166832023073110297-905INDHurlburtMatthewW66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHealthcare Innovation Lead +SA11AIC000166832023071716378-407INDHurstSusanI66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncAssociate Research Fellow +SA11AIC000166832023073110297-405INDHurstSusanI66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncAssociate Research Fellow +SA11AIC000166832023071716378-650INDHwangAngela66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncChief Commercial Officer, President, G +SA11AIC000166832023073110297-648INDHwangAngela66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncChief Commercial Officer, President, G +SA11AIC000166832023071716378-1399INDIglesiasAntonioJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVaccines Field Medical +SA11AIC000166832023073110297-1397INDIglesiasAntonioJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVaccines Field Medical +SA11AIC000166832023071716378-459INDIottGary66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector, External Communications, Vac +SA11AIC000166832023073110297-457INDIottGary66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector, External Communications, Vac +SA11AIC000166832023071716378-1299INDIslamShahan66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Corporate Counsel +SA11AIC000166832023073110297-1297INDIslamShahan66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Corporate Counsel +SA11AIC000166832023071716378-2883INDJaegerLynnL66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Sr Manager Analytical TT +SA11AIC000166832023073110297-2876INDJaegerLynnL66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Sr Manager Analytical TT +SA11AIC000166832023071716378-1228INDJariwalaMineshM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncIM Field Medical, Payer Account Team L +SA11AIC000166832023073110297-1226INDJariwalaMineshM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncIM Field Medical, Payer Account Team L +SA11AIC000166832023071716378-2884INDJarnaginJohnM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Technology Lead, Conjugation Chemistry +SA11AIC000166832023073110297-2877INDJarnaginJohnM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Technology Lead, Conjugation Chemistry +SA11AIC000166832023071716378-2312INDJatonLisaAnn66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer, IncSr. Director, Team Leader, IM & H FM T +SA11AIC000166832023073110297-2306INDJatonLisaAnn66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer, IncSr. Director, Team Leader, IM & H FM T +SA11AIC000166832023071716378-3152INDJean-LouisRamcess66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncChief Diversity, Equity & Inclusion Of +SA11AIC000166832023073110297-3143INDJean-LouisRamcess66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncChief Diversity, Equity & Inclusion Of +SA11AIC000166832023071716378-612INDJean-PierreJames66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncAccount Director, US Payers +SA11AIC000166832023073110297-610INDJean-PierreJames66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncAccount Director, US Payers +SA11AIC000166832023071716378-53INDJensonJulieM.66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyDirector, International Product Donati +SA11AIC000166832023073110297-52INDJensonJulieM.66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyDirector, International Product Donati +SA11AIC000166832023071716378-911INDJewellPatriciaFine66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, Public Affairs, US An +SA11AIC000166832023073110297-909INDJewellPatriciaFine66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, Public Affairs, US An +SA11AIC000166832023071716378-1322INDJohnsonChanelD66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023073110297-1320INDJohnsonChanelD66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023071716378-1372INDJohnsonKatrinaM66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncDirector, Advocacy & Professional Rela +SA11AIC000166832023073110297-1370INDJohnsonKatrinaM66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncDirector, Advocacy & Professional Rela +SA11AIC000166832023071716378-770INDJohnsonRadyA66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncChief Compliance,Quality & Risk Office +SA11AIC000166832023073110297-768INDJohnsonRadyA66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncChief Compliance,Quality & Risk Office +SA11AIC000166832023071716378-755INDJonesAlannaN66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncKAM Team Lead Southwest +SA11AIC000166832023073110297-753INDJonesAlannaN66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncKAM Team Lead Southwest +SA11AIC000166832023071716378-1INDJonesElizabethAnn66 Hudson Blvd EastNew YorkNY100012023070711.54334.66PharmaciaRegional Coordinator II +SA11AIC000166832023071716378-3INDJonesElizabethAnn66 Hudson Blvd EastNew YorkNY100012023071411.54334.66PharmaciaRegional Coordinator II +SA11AIC000166832023073110297-1INDJonesElizabethAnn66 Hudson Blvd EastNew YorkNY100012023072111.54334.66PharmaciaRegional Coordinator II +SA11AIC000166832023073110297-3INDJonesElizabethAnn66 Hudson Blvd EastNew YorkNY100012023072811.54334.66PharmaciaRegional Coordinator II +SA11AIC000166832023071716378-2888INDJonesJoanneF66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, Inc.Sr. Director, Digital Solution Adoptio +SA11AIC000166832023073110297-2881INDJonesJoanneF66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, Inc.Sr. Director, Digital Solution Adoptio +SA11AIC000166832023071716378-1366INDJonesMeaghanH66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer U.S. PharmaceuticalsVP, NA Diagnostics Business Lead +SA11AIC000166832023073110297-1364INDJonesMeaghanH66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer U.S. PharmaceuticalsVP, NA Diagnostics Business Lead +SA11AIC000166832023071716378-1343INDJosephsFeliciaL66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Inc_Director Global HCP Marketing FSME +SA11AIC000166832023073110297-1341INDJosephsFeliciaL66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Inc_Director Global HCP Marketing FSME +SA11AIC000166832023071716378-739INDJuantorenaDeborahE66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP Analytics, Informatics Tools & Plat +SA11AIC000166832023073110297-737INDJuantorenaDeborahE66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP Analytics, Informatics Tools & Plat +SA11AIC000166832023071716378-2039INDKangYoonsunK66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncGlobal Hemophilia Gene Therapy HCP Lea +SA11AIC000166832023073110297-2034INDKangYoonsunK66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncGlobal Hemophilia Gene Therapy HCP Lea +SA11AIC000166832023071716378-2576INDKatyalNavin66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncUS Commercial and Global Business Lead +SA11AIC000166832023073110297-2571INDKatyalNavin66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncUS Commercial and Global Business Lead +SA11AIC000166832023071716378-2523INDKauhaneJason66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 2 +SA11AIC000166832023073110297-2518INDKauhaneJason66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 2 +SA11AIC000166832023071716378-1187INDKaylorDonna66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023073110297-1185INDKaylorDonna66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023073110297-394INDKearstanMelissaR66 Hudson Blvd EastNew YorkNY100012023073114.68205.52Pfizer IncDirector, Quality Improvement Lead +SA11AIC000166832023071716378-2895INDKellamDorothyW66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Site Strategy and Operations +SA11AIC000166832023073110297-2888INDKellamDorothyW66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Site Strategy and Operations +SA11AIC000166832023071716378-201INDKellyCarolJ66 Hudson Blvd EastNew YorkNY100012023071425.84361.76Pharmacia & Upjohn CompanySenior Manager, Alliance Development +SA11AIC000166832023073110297-200INDKellyCarolJ66 Hudson Blvd EastNew YorkNY100012023073125.84361.76Pharmacia & Upjohn CompanySenior Manager, Alliance Development +SA11AIC000166832023071716378-1893INDKen-KwofieLawrence66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSr. Director/Team Leader, Contracting +SA11AIC000166832023073110297-1889INDKen-KwofieLawrence66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSr. Director/Team Leader, Contracting +SA11AIC000166832023071716378-93INDKesslerRobertKendall66 Hudson Blvd EastNew YorkNY100012023071420.84291.76PharmaciaExecutive Director, Business Strategy +SA11AIC000166832023073110297-92INDKesslerRobertKendall66 Hudson Blvd EastNew YorkNY100012023073120.84291.76PharmaciaExecutive Director, Business Strategy +SA11AIC000166832023071716378-1828INDKilgallenSuzanne66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncDirector, Enterprise Travel & Meetings +SA11AIC000166832023073110297-1825INDKilgallenSuzanne66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncDirector, Enterprise Travel & Meetings +SA11AIC000166832023071716378-815INDKilkerSeanPatrick66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-814INDKilkerSeanPatrick66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-821INDKilkerTimothyJ66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1555INDKimSandra66 Hudson Blvd EastNew YorkNY100012023071421.00294.00Pfizer, IncSenior Corporate Counsel +SA11AIC000166832023073110297-1553INDKimSandra66 Hudson Blvd EastNew YorkNY100012023073121.00294.00Pfizer, IncSenior Corporate Counsel +SA11AIC000166832023071716378-735INDKimbarkJ.Craig66 Hudson Blvd EastNew YorkNY100012023071426.00364.00Pfizer IncHSP Level 3 +SA11AIC000166832023073110297-733INDKimbarkJ.Craig66 Hudson Blvd EastNew YorkNY100012023073126.00364.00Pfizer IncHSP Level 3 +SA11AIC000166832023071716378-1812INDKinaniAbdallah66 Hudson Blvd EastNew YorkNY100012023071450.00700.00Pfizer IncSenior Associate, Senior eSub Programm +SA11AIC000166832023073110297-1809INDKinaniAbdallah66 Hudson Blvd EastNew YorkNY100012023073150.00700.00Pfizer IncSenior Associate, Senior eSub Programm +SA11AIC000166832023071716378-2116INDKitchenLanceJordan66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer, IncSHR Level 3 +SA11AIC000166832023073110297-2111INDKitchenLanceJordan66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-1859INDKleaBrian66 Hudson Blvd EastNew YorkNY1000120230714104.17958.37Pfizer, IncSHR Level 3 +SA11AIC000166832023073110297-1856INDKleaBrian66 Hudson Blvd EastNew YorkNY1000120230731104.17958.37Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-939INDKlingmanGregoryJ66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncDirector, Value Strategist +SA11AIC000166832023073110297-937INDKlingmanGregoryJ66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncDirector, Value Strategist +SA11AIC000166832023071716378-2302INDKlockeJana66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023073110297-2296INDKlockeJana66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-2898INDKnappLeslieBollweg66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.R&D Finance Lead, I&I & GPD Operations +SA11AIC000166832023073110297-2891INDKnappLeslieBollweg66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.R&D Finance Lead, I&I & GPD Operations +SA11AIC000166832023071716378-2042INDKnipeVictoria66 Hudson Blvd EastNew YorkNY100012023071422.00295.24Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-2037INDKnipeVictoria66 Hudson Blvd EastNew YorkNY100012023073122.00295.24Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-1929INDKobyLeslie66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncUS Commercial I&I Lead +SA11AIC000166832023073110297-1925INDKobyLeslie66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncUS Commercial I&I Lead +SA11AIC000166832023071716378-3121INDKouryKenneth66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncVPresident/TA Head Clinical Biostatist +SA11AIC000166832023073110297-3113INDKouryKenneth66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncVPresident/TA Head Clinical Biostatist +SA11AIC000166832023071716378-2085INDKraemerJohnWilliam66 Hudson Blvd EastNew YorkNY1000120230714117.501645.00Pfizer IncSenior Director and Head of Federal Re +SA11AIC000166832023073110297-2080INDKraemerJohnWilliam66 Hudson Blvd EastNew YorkNY1000120230731117.501645.00Pfizer IncSenior Director and Head of Federal Re +SA11AIC000166832023071716378-425INDKrantzMonicaH66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHSP Level 2 +SA11AIC000166832023073110297-423INDKrantzMonicaH66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHSP Level 2 +SA11AIC000166832023073110297-889INDKraynakEvelynGutzmer66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-1003INDKrebsMatthewR66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncSenior Manager, Alliance Development +SA11AIC000166832023073110297-1001INDKrebsMatthewR66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncSenior Manager, Alliance Development +SA11AIC000166832023073110297-1029INDKreppeinJohnF66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-3257INDKreuzeMichaelJ66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer, Inc.Senior People Leader II +SA11AIC000166832023073110297-3247INDKreuzeMichaelJ66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer, Inc.Senior People Leader II +SA11AIC000166832023071716378-6INDKruppAaronN66 Hudson Blvd EastNew YorkNY100012023071441.67500.04Pfizer, IncSenior Director, Specialty Care, Globa +SA11AIC000166832023073110297-6INDKruppAaronN66 Hudson Blvd EastNew YorkNY100012023073141.67500.04Pfizer, IncSenior Director, Specialty Care, Globa +SA11AIC000166832023071716378-25INDKrzysikThomas66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncManager Res, Devel & MDG +SA11AIC000166832023073110297-25INDKrzysikThomas66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncManager Res, Devel & MDG +SA11AIC000166832023071716378-3258INDKubiakJulieL66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer, Inc.SHR Level 3 +SA11AIC000166832023073110297-3248INDKubiakJulieL66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer, Inc.SHR Level 3 +SA11AIC000166832023071716378-1860INDLagunowichNick66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, Inc.Emerging Markets President +SA11AIC000166832023073110297-1857INDLagunowichNick66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, Inc.Emerging Markets President +SA11AIC000166832023071716378-2634INDLambertNealR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr. Director, Value Marketing +SA11AIC000166832023073110297-2629INDLambertNealR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr. Director, Value Marketing +SA11AIC000166832023071716378-930INDLamptonJenniferG66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-928INDLamptonJenniferG66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-651INDLanguedocChristineG66 Hudson Blvd EastNew YorkNY100012023071450.00700.00Pfizer IncVP, Digital Client Partner WRDM +SA11AIC000166832023073110297-649INDLanguedocChristineG66 Hudson Blvd EastNew YorkNY100012023073150.00700.00Pfizer IncVP, Digital Client Partner WRDM +SA11AIC000166832023071716378-1240INDLankfordChadclay66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Manager, Oncology Training +SA11AIC000166832023073110297-1238INDLankfordChadclay66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Manager, Oncology Training +SA11AIC000166832023071716378-1064INDLankfordPiyaHuang66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1062INDLankfordPiyaHuang66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-414INDLanklerDouglasM66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncGeneral Counsel, Executive Vice Presid +SA11AIC000166832023073110297-412INDLanklerDouglasM66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncGeneral Counsel, Executive Vice Presid +SA11AIC000166832023071716378-348INDLargentShannonB66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncKey Account Manager +SA11AIC000166832023073110297-346INDLargentShannonB66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncKey Account Manager +SA11AIC000166832023071716378-845INDLasleyShannaC66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-844INDLasleyShannaC66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-796INDLeblancAllisonL66 Hudson Blvd EastNew YorkNY100012023071423.00322.00Pfizer IncUS ELIQUIS HCP Director +SA11AIC000166832023073110297-795INDLeblancAllisonL66 Hudson Blvd EastNew YorkNY100012023073123.00322.00Pfizer IncUS ELIQUIS HCP Director +SA11AIC000166832023071716378-926INDLeeHsiao-Yu66 Hudson Blvd EastNew YorkNY1000120230714104.171250.04Pfizer IncAssoc Dir, Data Ana and Rptg +SA11AIC000166832023073110297-924INDLeeHsiao-Yu66 Hudson Blvd EastNew YorkNY1000120230731104.171250.04Pfizer IncAssoc Dir, Data Ana and Rptg +SA11AIC000166832023071716378-1199INDLeeLenny66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023073110297-1197INDLeeLenny66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023071716378-1757INDLesueurJohn66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer IncNational Account Director, US Account +SA11AIC000166832023073110297-1754INDLesueurJohn66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer IncNational Account Director, US Account +SA11AIC000166832023071716378-663INDLeventhalDavidP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director, Clinical Trial Data S +SA11AIC000166832023073110297-661INDLeventhalDavidP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director, Clinical Trial Data S +SA11AIC000166832023071716378-2905INDLevinDanielB66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer, Inc.Global Hemophilia GTx& In-Line Lead +SA11AIC000166832023073110297-2898INDLevinDanielB66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer, Inc.Global Hemophilia GTx& In-Line Lead +SA11AIC000166832023071716378-2573INDLevyTamiraKatrice66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSr. Director, Solution Delivery Lead +SA11AIC000166832023073110297-2568INDLevyTamiraKatrice66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSr. Director, Solution Delivery Lead +SA11AIC000166832023071716378-1962INDLiebelMarthaL.66 Hudson Blvd EastNew YorkNY100012023071425.00308.40Pfizer, IncManager, U.S. Government Relations +SA11AIC000166832023073110297-1958INDLiebelMarthaL.66 Hudson Blvd EastNew YorkNY100012023073125.00308.40Pfizer, IncManager, U.S. Government Relations +SA11AIC000166832023071716378-506INDLiebermanLisa66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer US Consumer Products GroupHCP Strategy Director +SA11AIC000166832023073110297-504INDLiebermanLisa66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer US Consumer Products GroupHCP Strategy Director +SA11AIC000166832023071716378-625INDLinehanTerence66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP, Market Access Operations +SA11AIC000166832023073110297-623INDLinehanTerence66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP, Market Access Operations +SA11AIC000166832023071716378-655INDLombardoRichard66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncRegional Business Director +SA11AIC000166832023073110297-653INDLombardoRichard66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncRegional Business Director +SA11AIC000166832023073110297-149INDLopezLindaC66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023071716378-134INDLouwersRobertJ66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023073110297-133INDLouwersRobertJ66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023071716378-1243INDLucaScott66 Hudson Blvd EastNew YorkNY100012023071421.00294.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1241INDLucaScott66 Hudson Blvd EastNew YorkNY100012023073121.00294.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-52INDLudwigJohnD66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyHead, Pharmaceutical Sciences & Global +SA11AIC000166832023073110297-51INDLudwigJohnD66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyHead, Pharmaceutical Sciences & Global +SA11AIC000166832023071716378-1861INDLukinAngela66 Hudson Blvd EastNew YorkNY1000120230714104.171354.21Pfizer International IncGlobal Primary Care US President_ +SA11AIC000166832023071716378-2782INDLutschaunigMichaelJ66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer, Inc.Sr. Director, Digital Operations and A +SA11AIC000166832023073110297-2776INDLutschaunigMichaelJ66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer, Inc.Sr. Director, Digital Operations and A +SA11AIC000166832023071716378-1567INDLyleYolanda66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncVP Exec Opns & NYHQ Site Lead +SA11AIC000166832023073110297-1565INDLyleYolanda66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncVP Exec Opns & NYHQ Site Lead +SA11AIC000166832023071716378-2342INDLynkiewiczZachery66 Hudson Blvd EastNew YorkNY100012023071460.00840.00Pfizer, IncSenior Manager, Alliance Development +SA11AIC000166832023073110297-2336INDLynkiewiczZachery66 Hudson Blvd EastNew YorkNY100012023073160.00840.00Pfizer, IncSenior Manager, Alliance Development +SA11AIC000166832023071716378-2373INDLynnJasonBradley66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncI&I Field Medical Outcomes & Analytics +SA11AIC000166832023073110297-2367INDLynnJasonBradley66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncI&I Field Medical Outcomes & Analytics +SA11AIC000166832023071716378-1671INDMableElizabethLienesch66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer IncUS I&I Commercial Effectiveness Lead +SA11AIC000166832023073110297-1668INDMableElizabethLienesch66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer IncUS I&I Commercial Effectiveness Lead +SA11AIC000166832023071716378-1050INDMaddenMargaret66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSVP & Corp Secretary, Chief Counsel Go +SA11AIC000166832023073110297-1048INDMaddenMargaret66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSVP & Corp Secretary, Chief Counsel Go +SA11AIC000166832023071716378-3102INDMaguireJason66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer, IncSenior Director, MD +SA11AIC000166832023073110297-3094INDMaguireJason66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer, IncSenior Director, MD +SA11AIC000166832023071716378-1825INDMahadevNitinL66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncGlobal Marketing GTx/Hemophilia Lead +SA11AIC000166832023073110297-1822INDMahadevNitinL66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncGlobal Marketing GTx/Hemophilia Lead +SA11AIC000166832023071716378-1659INDMalikAamir66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncChief Business Innovation Officer, Exe +SA11AIC000166832023073110297-1656INDMalikAamir66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncChief Business Innovation Officer, Exe +SA11AIC000166832023071716378-1973INDMallardWilliamThomas66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer IncR2R Global Close COE Specialist +SA11AIC000166832023073110297-1969INDMallardWilliamThomas66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer IncR2R Global Close COE Specialist +SA11AIC000166832023071716378-10INDMangoneDebra66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Corporate Finance GroupVP Executive Operations +SA11AIC000166832023073110297-10INDMangoneDebra66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Corporate Finance GroupVP Executive Operations +SA11AIC000166832023071716378-2053INDManningAmy66 Hudson Blvd EastNew YorkNY100012023071443.00602.00Pfizer, IncSr Dir People Experience, Glb Benefits +SA11AIC000166832023073110297-2048INDManningAmy66 Hudson Blvd EastNew YorkNY100012023073143.00602.00Pfizer, IncSr Dir People Experience, Glb Benefits +SA11AIC000166832023071716378-619INDMaritatoAnnaMaria66 Hudson Blvd EastNew YorkNY1000120230714125.001583.36Pfizer IncSenior Director, State Government Rela +SA11AIC000166832023073110297-617INDMaritatoAnnaMaria66 Hudson Blvd EastNew YorkNY1000120230731125.001583.36Pfizer IncSenior Director, State Government Rela +SA11AIC000166832023071716378-1667INDMasseyGary66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023073110297-1664INDMasseyGary66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023071716378-1823INDMastenMia66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, Patient Advocacy +SA11AIC000166832023073110297-1820INDMastenMia66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, Patient Advocacy +SA11AIC000166832023071716378-3264INDMatteoConnieA.66 Hudson Blvd EastNew YorkNY100012023071418.00252.00Pfizer, Inc.AGC +SA11AIC000166832023073110297-3254INDMatteoConnieA.66 Hudson Blvd EastNew YorkNY100012023073118.00252.00Pfizer, Inc.AGC +SA11AIC000166832023071716378-821INDMavesBrianE66 Hudson Blvd EastNew YorkNY100012023071445.00630.00Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-820INDMavesBrianE66 Hudson Blvd EastNew YorkNY100012023073145.00630.00Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-680INDMayerWendyJ66 Hudson Blvd EastNew YorkNY10001202307147.00212.00Pfizer IncVP, People Experience, Performance & S +SA11AIC000166832023073110297-678INDMayerWendyJ66 Hudson Blvd EastNew YorkNY10001202307317.00212.00Pfizer IncVP, People Experience, Performance & S +SA11AIC000166832023071716378-637INDMcCaheyPatriciaM66 Hudson Blvd EastNew YorkNY1000120230714104.17958.38Pfizer IncSenior Manager, Political Outreach +SA11AIC000166832023073110297-635INDMcCaheyPatriciaM66 Hudson Blvd EastNew YorkNY1000120230731104.17958.38Pfizer IncSenior Manager, Political Outreach +SA11AIC000166832023071716378-399INDMcCarthyDavidR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Manufacturing-USSenior Director, S & ES, Sourcing Oper +SA11AIC000166832023073110297-397INDMcCarthyDavidR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Manufacturing-USSenior Director, S & ES, Sourcing Oper +SA11AIC000166832023073110297-96INDMcCarthyTimothyJ66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanyVice President, Head of Digital Scienc +SA11AIC000166832023071716378-659INDMcClainWalterJ66 Hudson Blvd EastNew YorkNY100012023071420.19282.66Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-657INDMcClainWalterJ66 Hudson Blvd EastNew YorkNY100012023073120.19282.66Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-2134INDMcClellandHeidi66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncOncology Field Medical Outcomes & Anal +SA11AIC000166832023073110297-2129INDMcClellandHeidi66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncOncology Field Medical Outcomes & Anal +SA11AIC000166832023071716378-1931INDMcCormickCristinaHelena66 Hudson Blvd EastNew YorkNY100012023071437.00518.00Pfizer IncNational Advanced Customer Engagement +SA11AIC000166832023073110297-1927INDMcCormickCristinaHelena66 Hudson Blvd EastNew YorkNY100012023073137.00518.00Pfizer IncNational Advanced Customer Engagement +SA11AIC000166832023071716378-2918INDMcCormickPeterMichael66 Hudson Blvd EastNew YorkNY100012023071425.84361.76Pfizer, IncDirector ERP Engineering Perf. _Cybers +SA11AIC000166832023073110297-2911INDMcCormickPeterMichael66 Hudson Blvd EastNew YorkNY100012023073125.84361.76Pfizer, IncDirector ERP Engineering Perf. _Cybers +SA11AIC000166832023071716378-904INDMcCoyKeithM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncNational Account Director, U.S. Payers +SA11AIC000166832023073110297-902INDMcCoyKeithM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncNational Account Director, U.S. Payers +SA11AIC000166832023071716378-2103INDMcCoyVanessaL.66 Hudson Blvd EastNew YorkNY100012023071417.00238.00Pfizer, IncCommunity Engagement Specialist, US CO +SA11AIC000166832023073110297-2098INDMcCoyVanessaL.66 Hudson Blvd EastNew YorkNY100012023073117.00238.00Pfizer, IncCommunity Engagement Specialist, US CO +SA11AIC000166832023071716378-167INDMcCulloughKristiB66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023073110297-166INDMcCulloughKristiB66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023071716378-2919INDMcDermottMichaelP66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer, Inc.Chief Global Supply Officer, Executive +SA11AIC000166832023073110297-2912INDMcDermottMichaelP66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer, Inc.Chief Global Supply Officer, Executive +SA11AIC000166832023071716378-2492INDMcDevittRyan66 Hudson Blvd EastNew YorkNY100012023071425.00308.40Pfizer, IncSenior Manager, U.S. Policy & Public A +SA11AIC000166832023073110297-2486INDMcDevittRyan66 Hudson Blvd EastNew YorkNY100012023073125.00308.40Pfizer, IncSenior Manager, U.S. Policy & Public A +SA11AIC000166832023071716378-2921INDMcGettiganDavidS66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.SVP, Global Business Services and Enab +SA11AIC000166832023073110297-2914INDMcGettiganDavidS66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.SVP, Global Business Services and Enab +SA11AIC000166832023071716378-38INDMcGuiganPeterS66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pharmacia & Upjohn CompanySVP, PGS Finance +SA11AIC000166832023073110297-37INDMcGuiganPeterS66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pharmacia & Upjohn CompanySVP, PGS Finance +SA11AIC000166832023071716378-2922INDMcHughDouglasP66 Hudson Blvd EastNew YorkNY100012023071435.00490.00Pfizer, Inc.VP, Digital Client Partner - PGS & Ena +SA11AIC000166832023073110297-2915INDMcHughDouglasP66 Hudson Blvd EastNew YorkNY100012023073135.00490.00Pfizer, Inc.VP, Digital Client Partner - PGS & Ena +SA11AIC000166832023071716378-520INDMcKillopAndrewGordon66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSVP, PharmSci Small Molecules +SA11AIC000166832023073110297-518INDMcKillopAndrewGordon66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSVP, PharmSci Small Molecules +SA11AIC000166832023071716378-7INDMcMillanKevinBernard66 Hudson Blvd EastNew YorkNY100012023071441.67375.03Pfizer, IncSHR Level 1 +SA11AIC000166832023073110297-7INDMcMillanKevinBernard66 Hudson Blvd EastNew YorkNY100012023073141.67375.03Pfizer, IncSHR Level 1 +SA11AIC000166832023071716378-1177INDMcNultyMartinP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023073110297-1175INDMcNultyMartinP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023071716378-2594INDMcRae JRJamesD66 Hudson Blvd EastNew YorkNY100012023071426.00364.00Pfizer, IncSpecialty and Ig West, Regional Busine +SA11AIC000166832023073110297-2589INDMcRae JRJamesD66 Hudson Blvd EastNew YorkNY100012023073126.00364.00Pfizer, IncSpecialty and Ig West, Regional Busine +SA11AIC000166832023071716378-2091INDMcRoyLynn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncBreast Cancer Lead +SA11AIC000166832023073110297-2086INDMcRoyLynn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncBreast Cancer Lead +SA11AIC000166832023071716378-1641INDMedeirosJonathan66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023073110297-1638INDMedeirosJonathan66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023071716378-1584INDMedlandMitchell66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncGlobal Antiviral Lead +SA11AIC000166832023073110297-1582INDMedlandMitchell66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncGlobal Antiviral Lead +SA11AIC000166832023071716378-1915INDMenonSandeepM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncHead, Artificial Intelligence & Early +SA11AIC000166832023073110297-1911INDMenonSandeepM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncHead, Artificial Intelligence & Early +SA11AIC000166832023071716378-731INDMentzerStevenC66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer IncSenior Director Strategy & Business De +SA11AIC000166832023073110297-729INDMentzerStevenC66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer IncSenior Director Strategy & Business De +SA11AIC000166832023071716378-927INDMerriweatherMaryL66 Hudson Blvd EastNew YorkNY100012023071417.50227.50Pfizer IncSenior Manager, DS CoE Operations +SA11AIC000166832023073110297-925INDMerriweatherMaryL66 Hudson Blvd EastNew YorkNY100012023073117.50227.50Pfizer IncSenior Manager, DS CoE Operations +SA11AIC000166832023071716378-1486INDMicallefRyanD66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSr Director, Customer Solutions +SA11AIC000166832023073110297-1484INDMicallefRyanD66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSr Director, Customer Solutions +SA11AIC000166832023071716378-992INDMichelsonG.Scott66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-990INDMichelsonG.Scott66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-801INDMiddlebrooksJairusD66 Hudson Blvd EastNew YorkNY100012023071427.50385.00Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-800INDMiddlebrooksJairusD66 Hudson Blvd EastNew YorkNY100012023073127.50385.00Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-937INDMillerBrentW66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-935INDMillerBrentW66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-2360INDMillsJennieRebecca66 Hudson Blvd EastNew YorkNY100012023071421.87306.18Pfizer, IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-2354INDMillsJennieRebecca66 Hudson Blvd EastNew YorkNY100012023073121.87306.18Pfizer, IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-3060INDMohapatraSovan66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr Manager, Plant Track and Trace Lead +SA11AIC000166832023073110297-3052INDMohapatraSovan66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr Manager, Plant Track and Trace Lead +SA11AIC000166832023073110297-3261INDMonovichRobertC66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.Key Account Manager +SA11AIC000166832023071716378-1960INDMooreMichaelScott66 Hudson Blvd EastNew YorkNY100012023071417.00238.00Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-1956INDMooreMichaelScott66 Hudson Blvd EastNew YorkNY100012023073117.00238.00Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-2403INDMorrisEboni66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncDirector, U.S. Policy & Public Affairs +SA11AIC000166832023073110297-2397INDMorrisEboni66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncDirector, U.S. Policy & Public Affairs +SA11AIC000166832023071716378-1213INDMorrisYolandeM66 Hudson Blvd EastNew YorkNY100012023071418.52259.28Pfizer IncDirector, Internal Multimedia Assets a +SA11AIC000166832023073110297-1211INDMorrisYolandeM66 Hudson Blvd EastNew YorkNY100012023073118.52259.28Pfizer IncDirector, Internal Multimedia Assets a +SA11AIC000166832023071716378-1262INDMorrisonLesleyBillings66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Manufacturing-USDirector, EHS +SA11AIC000166832023073110297-1260INDMorrisonLesleyBillings66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Manufacturing-USDirector, EHS +SA11AIC000166832023071716378-792INDMossbacherNicoleI66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-791INDMossbacherNicoleI66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-638INDMoynahanJohnP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023073110297-636INDMoynahanJohnP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023071716378-2327INDMuellerEmily66 Hudson Blvd EastNew YorkNY1000120230714208.332674.97Pfizer, IncSenior Director and Head of Congressio +SA11AIC000166832023073110297-2321INDMuellerEmily66 Hudson Blvd EastNew YorkNY1000120230731208.332674.97Pfizer, IncSenior Director and Head of Congressio +SA11AIC000166832023071716378-2482INDMujicaAnthony66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncHIT Solutions Account Director- Mid-At +SA11AIC000166832023073110297-2476INDMujicaAnthony66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncHIT Solutions Account Director- Mid-At +SA11AIC000166832023071716378-1281INDMukherjeeRajaS66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38PharmaciaUS Antiviral Lead +SA11AIC000166832023073110297-1279INDMukherjeeRajaS66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38PharmaciaUS Antiviral Lead +SA11AIC000166832023071716378-1553INDMullane-RobinsonKarenP66 Hudson Blvd EastNew YorkNY100012023071452.67632.04Pfizer IncSenior Manager, Biology Solutions Lead +SA11AIC000166832023073110297-1551INDMullane-RobinsonKarenP66 Hudson Blvd EastNew YorkNY100012023073152.67632.04Pfizer IncSenior Manager, Biology Solutions Lead +SA11AIC000166832023071716378-2394INDMullinsKelly66 Hudson Blvd EastNew YorkNY1000120230714128.001792.00Pfizer, IncDirector, State Government Relations +SA11AIC000166832023073110297-2388INDMullinsKelly66 Hudson Blvd EastNew YorkNY1000120230731128.001792.00Pfizer, IncDirector, State Government Relations +SA11AIC000166832023071716378-1810INDMuratoreAndrewJ66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncVP & AGC, M&A/Licensing +SA11AIC000166832023073110297-1807INDMuratoreAndrewJ66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncVP & AGC, M&A/Licensing +SA11AIC000166832023071716378-420INDMurrayBrianC66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncDirector, Payer Brand Marketing, Oncol +SA11AIC000166832023073110297-418INDMurrayBrianC66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncDirector, Payer Brand Marketing, Oncol +SA11AIC000166832023071716378-2929INDMurrayJamesN66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Director Risk Management (M) +SA11AIC000166832023073110297-2922INDMurrayJamesN66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Director Risk Management (M) +SA11AIC000166832023071716378-122INDNelsonMichaelD66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023073110297-121INDNelsonMichaelD66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-415INDNewellMiaT66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector, SOM Operations Excellence +SA11AIC000166832023073110297-413INDNewellMiaT66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector, SOM Operations Excellence +SA11AIC000166832023073110297-214INDNewhouseEdwardA.66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-611INDNewmanStevenE66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director, S & ES, Strategic Ser +SA11AIC000166832023073110297-609INDNewmanStevenE66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director, S & ES, Strategic Ser +SA11AIC000166832023071716378-1490INDNguyenThanh-Nghia66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Customer Solutions +SA11AIC000166832023073110297-1488INDNguyenThanh-Nghia66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Customer Solutions +SA11AIC000166832023071716378-1593INDNietoAlejandra66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncSrDirector ClinResClinicMD +SA11AIC000166832023073110297-1591INDNietoAlejandra66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncSrDirector ClinResClinicMD +SA11AIC000166832023071716378-501INDNoonanSeanTimothy66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023073110297-499INDNoonanSeanTimothy66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-1545INDNorgrenAnneka66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncChief of Staff & Senior Director +SA11AIC000166832023073110297-1543INDNorgrenAnneka66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncChief of Staff & Senior Director +SA11AIC000166832023071716378-1496INDNowickiEdwardJ66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncSVP,Deputy Chief Compliance Officer,Gl +SA11AIC000166832023073110297-1494INDNowickiEdwardJ66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncSVP,Deputy Chief Compliance Officer,Gl +SA11AIC000166832023071716378-875INDO'DonnellChristopherJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVice President, Partner Pfizer Venture +SA11AIC000166832023073110297-873INDO'DonnellChristopherJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVice President, Partner Pfizer Venture +SA11AIC000166832023071716378-3035INDO'HaraMaureen66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSenior Corporate Counsel +SA11AIC000166832023073110297-3027INDO'HaraMaureen66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSenior Corporate Counsel +SA11AIC000166832023071716378-2401INDO'MearaJason66 Hudson Blvd EastNew YorkNY1000120230714110.001540.00Pfizer, IncVP, Digital Strategic Initiatives +SA11AIC000166832023073110297-2395INDO'MearaJason66 Hudson Blvd EastNew YorkNY1000120230731110.001540.00Pfizer, IncVP, Digital Strategic Initiatives +SA11AIC000166832023071716378-3281INDO'NeillAlisonLee Marquez66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer, Inc.VP & AGC, M&A and Licensing +SA11AIC000166832023073110297-3271INDO'NeillAlisonLee Marquez66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer, Inc.VP & AGC, M&A and Licensing +SA11AIC000166832023071716378-2935INDOchoaDanielA66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer, Inc.Sr. Engineer / Sr. Scientist +SA11AIC000166832023073110297-2928INDOchoaDanielA66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer, Inc.Sr. Engineer / Sr. Scientist +SA11AIC000166832023071716378-2420INDOdnealKatherine66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncPScientist Formultn Devlpmnt (R) +SA11AIC000166832023073110297-2414INDOdnealKatherine66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncPScientist Formultn Devlpmnt (R) +SA11AIC000166832023071716378-1012INDOkamotoCaryA66 Hudson Blvd EastNew YorkNY100012023071442.67597.38Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-1010INDOkamotoCaryA66 Hudson Blvd EastNew YorkNY100012023073142.67597.38Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-1095INDOliverioDominickP66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncIntegration Lead (secondment) +SA11AIC000166832023073110297-1093INDOliverioDominickP66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncIntegration Lead (secondment) +SA11AIC000166832023071716378-2168INDOlsonGrant66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncDirector, External Activation +SA11AIC000166832023073110297-2163INDOlsonGrant66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncDirector, External Activation +SA11AIC000166832023071716378-828INDOrrJamesKevin66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023073110297-827INDOrrJamesKevin66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023071716378-165INDOusleyRobertB66 Hudson Blvd EastNew YorkNY100012023071417.00238.00Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023073110297-164INDOusleyRobertB66 Hudson Blvd EastNew YorkNY100012023073117.00238.00Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-2737INDPalaciosDennyF66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncVaccines Account Manager +SA11AIC000166832023073110297-2731INDPalaciosDennyF66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncVaccines Account Manager +SA11AIC000166832023071716378-2467INDParapattJohn66 Hudson Blvd EastNew YorkNY1000120230714104.171041.70Pfizer, IncVP, Strategy & Consulting Lead, IDM an +SA11AIC000166832023073110297-2461INDParapattJohn66 Hudson Blvd EastNew YorkNY1000120230731104.171041.70Pfizer, IncVP, Strategy & Consulting Lead, IDM an +SA11AIC000166832023071716378-584INDParsonsMatthewT66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Corporate Finance GroupDirector, Application Services +SA11AIC000166832023073110297-582INDParsonsMatthewT66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Corporate Finance GroupDirector, Application Services +SA11AIC000166832023071716378-636INDPassioninoPaulA66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncUS Vaccines Account Manager - VAM AM B +SA11AIC000166832023073110297-634INDPassioninoPaulA66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncUS Vaccines Account Manager - VAM AM B +SA11AIC000166832023073110297-2937INDPastorJohnW66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.Global Commercial Engineering Lead +SA11AIC000166832023071716378-3043INDPatrickDenis66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncVP, ES&I, Head of Partnering Innovatio +SA11AIC000166832023073110297-3035INDPatrickDenis66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncVP, ES&I, Head of Partnering Innovatio +SA11AIC000166832023071716378-827INDPaulKatherineD66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer U.S. PharmaceuticalsVice President Finance, Business Innov +SA11AIC000166832023073110297-826INDPaulKatherineD66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer U.S. PharmaceuticalsVice President Finance, Business Innov +SA11AIC000166832023071716378-1897INDPearceAmberLee66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023073110297-1893INDPearceAmberLee66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector, State Government Relations +SA11AIC000166832023071716378-1762INDPeltJavon66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer IncVaccines Sales - Area Business Manager +SA11AIC000166832023073110297-1759INDPeltJavon66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer IncVaccines Sales - Area Business Manager +SA11AIC000166832023071716378-1169INDPenkeBrigita66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncSI Product Portfolio Leader +SA11AIC000166832023073110297-1167INDPenkeBrigita66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncSI Product Portfolio Leader +SA11AIC000166832023071716378-441INDPerezJuanC66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Manufacturing-USVice President _ Sourcing Enterprise +SA11AIC000166832023073110297-439INDPerezJuanC66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Manufacturing-USVice President _ Sourcing Enterprise +SA11AIC000166832023071716378-181INDPerezWarrenE66 Hudson Blvd EastNew YorkNY1000120230714105.171472.38Pharmacia & Upjohn CompanySHR Level 4 +SA11AIC000166832023073110297-180INDPerezWarrenE66 Hudson Blvd EastNew YorkNY1000120230731105.171472.38Pharmacia & Upjohn CompanySHR Level 4 +SA11AIC000166832023071716378-2035INDPerilleuxDidierCharles M66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncHospital Global Marketing Lead, Specia +SA11AIC000166832023073110297-2030INDPerilleuxDidierCharles M66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncHospital Global Marketing Lead, Specia +SA11AIC000166832023071716378-647INDPersaudMukesh66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSr. Manager, Database Engineering Disc +SA11AIC000166832023073110297-645INDPersaudMukesh66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSr. Manager, Database Engineering Disc +SA11AIC000166832023071716378-1899INDPetrohoyTheresaMarie66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Clinician +SA11AIC000166832023073110297-1895INDPetrohoyTheresaMarie66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Clinician +SA11AIC000166832023071716378-1602INDPezzaJoseph66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr. Manager Authentication +SA11AIC000166832023073110297-1600INDPezzaJoseph66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr. Manager Authentication +SA11AIC000166832023073110297-810INDPickeringMirthaV66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncHSP Level 4 +SA11AIC000166832023071716378-1416INDPigottRachelOlderman66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer, IncBiopharma Operations Lead +SA11AIC000166832023073110297-1414INDPigottRachelOlderman66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer, IncBiopharma Operations Lead +SA11AIC000166832023071716378-1696INDPikeJamesJoseph66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncManager, Solaris, Linux Engineering +SA11AIC000166832023073110297-1693INDPikeJamesJoseph66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncManager, Solaris, Linux Engineering +SA11AIC000166832023073110297-2940INDPinto-EatonClara66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, IncManager +SA11AIC000166832023071716378-2123INDPointGary66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSrScien'st Toxicology (R) +SA11AIC000166832023073110297-2118INDPointGary66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSrScien'st Toxicology (R) +SA11AIC000166832023071716378-3292INDPoirierJasonRolf66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncProgram Oversight Lead +SA11AIC000166832023073110297-3282INDPoirierJasonRolf66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncProgram Oversight Lead +SA11AIC000166832023071716378-2950INDPonderGwendolynKay66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, Inc.Assistant General Counsel +SA11AIC000166832023073110297-2942INDPonderGwendolynKay66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, Inc.Assistant General Counsel +SA11AIC000166832023071716378-709INDPongracRobert66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncRegional Business Director East +SA11AIC000166832023073110297-707INDPongracRobert66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncRegional Business Director East +SA11AIC000166832023071716378-1389INDPostJulieAnn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director Commercial Strategy an +SA11AIC000166832023073110297-1387INDPostJulieAnn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director Commercial Strategy an +SA11AIC000166832023071716378-1919INDPoteetClaudiaBridgeford66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, EM Global Policy & Pu +SA11AIC000166832023073110297-1915INDPoteetClaudiaBridgeford66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, EM Global Policy & Pu +SA11AIC000166832023071716378-682INDPowerElizabeth66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncSenior Director, Groton Site Affairs +SA11AIC000166832023073110297-680INDPowerElizabeth66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncSenior Director, Groton Site Affairs +SA11AIC000166832023073110297-3285INDPreusseJamieS66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.Area Business Manager +SA11AIC000166832023071716378-2621INDPribbleCharlesJacob66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSenior Director, PGS Finance +SA11AIC000166832023073110297-2616INDPribbleCharlesJacob66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSenior Director, PGS Finance +SA11AIC000166832023071716378-421INDProstMichaelJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSr Manager Dist Mgmt-Pharm (M) +SA11AIC000166832023073110297-419INDProstMichaelJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSr Manager Dist Mgmt-Pharm (M) +SA11AIC000166832023071716378-451INDQuinlanMichaelC66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer IncSenior Manager, Business Analytics & I +SA11AIC000166832023073110297-449INDQuinlanMichaelC66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer IncSenior Manager, Business Analytics & I +SA11AIC000166832023071716378-1758INDRabbaniGolam66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHeadCenterofExcellence MedRev +SA11AIC000166832023073110297-1755INDRabbaniGolam66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHeadCenterofExcellence MedRev +SA11AIC000166832023071716378-270INDRabbatChristopherJoseph66 Hudson Blvd EastNew YorkNY100012023071420.84270.92Pfizer, IncGlobal Senior Medical Director, Etrasi +SA11AIC000166832023071716378-1180INDRakestrawSethA66 Hudson Blvd EastNew YorkNY100012023071425.00304.24Pfizer IncNational HSSS Team Lead - IM Sales +SA11AIC000166832023073110297-1178INDRakestrawSethA66 Hudson Blvd EastNew YorkNY100012023073125.00304.24Pfizer IncNational HSSS Team Lead - IM Sales +SA11AIC000166832023071716378-72INDRayDouglasR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76PharmaciaDirector, eRIM +SA11AIC000166832023073110297-71INDRayDouglasR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76PharmaciaDirector, eRIM +SA11AIC000166832023071716378-2577INDReadLawrenceR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023073110297-2572INDReadLawrenceR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023071716378-3354INDReddyMicaelaB66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncDirector, Clinical Pharmacology +SA11AIC000166832023073110297-3344INDReddyMicaelaB66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncDirector, Clinical Pharmacology +SA11AIC000166832023071716378-212INDRedmanDaniella66 Hudson Blvd EastNew YorkNY100012023071441.67550.04Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023073110297-211INDRedmanDaniella66 Hudson Blvd EastNew YorkNY100012023073141.67550.04Pharmacia & Upjohn CompanyArea Business Manager +SA11AIC000166832023071716378-1331INDReicheSharon66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncAssistant General Counsel, Global IP P +SA11AIC000166832023073110297-1329INDReicheSharon66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncAssistant General Counsel, Global IP P +SA11AIC000166832023071716378-685INDReillyMariaT66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP, NA & Global BOP Lead +SA11AIC000166832023073110297-683INDReillyMariaT66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP, NA & Global BOP Lead +SA11AIC000166832023071716378-319INDRejtoPaulA66 Hudson Blvd EastNew YorkNY100012023071442.67554.71Pfizer IncVPresident Leadership (M) +SA11AIC000166832023073110297-317INDRejtoPaulA66 Hudson Blvd EastNew YorkNY100012023073142.67554.71Pfizer IncVPresident Leadership (M) +SA11AIC000166832023071716378-2339INDRelifordStacy66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncSenior Manager, Alliance Development +SA11AIC000166832023073110297-2333INDRelifordStacy66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncSenior Manager, Alliance Development +SA11AIC000166832023071716378-545INDRelihanTimothyC66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-543INDRelihanTimothyC66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-1822INDRibeiroAlbertWalter66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncVP, Primary Care Global Policy & Publi +SA11AIC000166832023073110297-1819INDRibeiroAlbertWalter66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncVP, Primary Care Global Policy & Publi +SA11AIC000166832023071716378-3300INDRiemerAngelaW.66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer, Inc.VP, Oncology Global Policy & Public Af +SA11AIC000166832023073110297-3290INDRiemerAngelaW.66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer, Inc.VP, Oncology Global Policy & Public Af +SA11AIC000166832023071716378-760INDRileyLawrenceA66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncSenior Manager Digital Client Partner +SA11AIC000166832023073110297-758INDRileyLawrenceA66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncSenior Manager Digital Client Partner +SA11AIC000166832023071716378-1777INDRivasKristina66 Hudson Blvd EastNew YorkNY100012023071440.84571.76Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-1774INDRivasKristina66 Hudson Blvd EastNew YorkNY100012023073140.84571.76Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-1116INDRoanCaroline66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncSVP Global Health & Social Impact +SA11AIC000166832023073110297-1114INDRoanCaroline66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncSVP Global Health & Social Impact +SA11AIC000166832023071716378-1559INDRobertSebastian66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncInformation Manager +SA11AIC000166832023073110297-1557INDRobertSebastian66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncInformation Manager +SA11AIC000166832023071716378-1764INDRobertsJulia66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncVaccines Account Manager +SA11AIC000166832023073110297-1761INDRobertsJulia66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncVaccines Account Manager +SA11AIC000166832023071716378-2153INDRobinsonCatherine66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Global Trade Policy & Public +SA11AIC000166832023073110297-2148INDRobinsonCatherine66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Global Trade Policy & Public +SA11AIC000166832023071716378-2459INDRogersJoyceAnn66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncVP, U.S. Policy & Public Affairs +SA11AIC000166832023073110297-2453INDRogersJoyceAnn66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncVP, U.S. Policy & Public Affairs +SA11AIC000166832023071716378-1554INDRolonSuzanne66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncDirector, Shareholder Services +SA11AIC000166832023073110297-1552INDRolonSuzanne66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncDirector, Shareholder Services +SA11AIC000166832023071716378-3095INDRomeoJessica66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Solution Delivery +SA11AIC000166832023073110297-3087INDRomeoJessica66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Solution Delivery +SA11AIC000166832023071716378-2414INDRoseAmy66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncVP, Global Media Relations +SA11AIC000166832023073110297-2408INDRoseAmy66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncVP, Global Media Relations +SA11AIC000166832023071716378-1532INDRosenDanielleP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAssistant General Counsel +SA11AIC000166832023073110297-1530INDRosenDanielleP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAssistant General Counsel +SA11AIC000166832023071716378-2559INDRossSusan66 Hudson Blvd EastNew YorkNY100012023071425.00300.00Pfizer, IncArea Business Manager +SA11AIC000166832023073110297-2554INDRossSusan66 Hudson Blvd EastNew YorkNY100012023073125.00300.00Pfizer, IncArea Business Manager +SA11AIC000166832023071716378-573INDRottasMelindaM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Research And DevelopmenHead, Operational Analytics & Quantita +SA11AIC000166832023073110297-571INDRottasMelindaM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Research And DevelopmenHead, Operational Analytics & Quantita +SA11AIC000166832023071716378-1287INDRowanNoelleElizabeth66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023073110297-1285INDRowanNoelleElizabeth66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023073110297-2729INDRowbothamMichael66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer U.S. PharmaceuticalsDirector Brand/Prod Mgmt (M) +SA11AIC000166832023071716378-3302INDRubyHelenJ66 Hudson Blvd EastNew YorkNY100012023071431.00434.00Pfizer, Inc.Senior Director, Global Tax Operations +SA11AIC000166832023073110297-3292INDRubyHelenJ66 Hudson Blvd EastNew YorkNY100012023073131.00434.00Pfizer, Inc.Senior Director, Global Tax Operations +SA11AIC000166832023071716378-1815INDRuppTodd66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHIT Enterprise Team Lead +SA11AIC000166832023073110297-1812INDRuppTodd66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHIT Enterprise Team Lead +SA11AIC000166832023071716378-1077INDRussellDavid66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncGlobal Medical Lead, Xtandi +SA11AIC000166832023073110297-1075INDRussellDavid66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncGlobal Medical Lead, Xtandi +SA11AIC000166832023071716378-2094INDRussellKhariD66 Hudson Blvd EastNew YorkNY100012023071422.00295.24Pfizer IncSHR Level 1 +SA11AIC000166832023073110297-2089INDRussellKhariD66 Hudson Blvd EastNew YorkNY100012023073122.00295.24Pfizer IncSHR Level 1 +SA11AIC000166832023071716378-2279INDRuttmanDanielleJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncKaiser/Federal National Account Direct +SA11AIC000166832023073110297-2273INDRuttmanDanielleJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncKaiser/Federal National Account Direct +SA11AIC000166832023071716378-568INDRyanDianeP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Research And DevelopmenVPresident Leadership (M) +SA11AIC000166832023073110297-566INDRyanDianeP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Research And DevelopmenVPresident Leadership (M) +SA11AIC000166832023071716378-1425INDSacristan SiffrediDiego66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncUS Oncology Lead +SA11AIC000166832023073110297-1423INDSacristan SiffrediDiego66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncUS Oncology Lead +SA11AIC000166832023071716378-2166INDSahan GulerOzlem66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncAdvanced Customer Engagement Team Lead +SA11AIC000166832023073110297-2161INDSahan GulerOzlem66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncAdvanced Customer Engagement Team Lead +SA11AIC000166832023071716378-720INDSahniPayal66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer U.S. PharmaceuticalsChief People Experience Officer, Execu +SA11AIC000166832023073110297-718INDSahniPayal66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer U.S. PharmaceuticalsChief People Experience Officer, Execu +SA11AIC000166832023071716378-831INDSakachShaeW.66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncEnterprise Executive Account Director +SA11AIC000166832023073110297-830INDSakachShaeW.66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncEnterprise Executive Account Director +SA11AIC000166832023071716378-2967INDSalasTracyR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.US Channel Management - Trade National +SA11AIC000166832023073110297-2959INDSalasTracyR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.US Channel Management - Trade National +SA11AIC000166832023071716378-1209INDSalisNicole66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHCP and Patient Enablement Lead +SA11AIC000166832023073110297-1207INDSalisNicole66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHCP and Patient Enablement Lead +SA11AIC000166832023071716378-8INDSampsonNajahG66 Hudson Blvd EastNew YorkNY1000120230714105.001470.00Pfizer U.S. PharmaceuticalsVP, Global Franchise Lead Genitourinar +SA11AIC000166832023073110297-8INDSampsonNajahG66 Hudson Blvd EastNew YorkNY1000120230731105.001470.00Pfizer U.S. PharmaceuticalsVP, Global Franchise Lead Genitourinar +SA11AIC000166832023071716378-1186INDSamuelsLisaA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Legal-USVP & Assistant General Counsel +SA11AIC000166832023073110297-1184INDSamuelsLisaA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Legal-USVP & Assistant General Counsel +SA11AIC000166832023071716378-1052INDSandersMark66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director, S&ES, GPD Procurement +SA11AIC000166832023073110297-1050INDSandersMark66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director, S&ES, GPD Procurement +SA11AIC000166832023071716378-3305INDSandersonScottC66 Hudson Blvd EastNew YorkNY100012023071425.84361.76Pfizer, Inc.HSP Level 3 +SA11AIC000166832023073110297-3295INDSandersonScottC66 Hudson Blvd EastNew YorkNY100012023073125.84361.76Pfizer, Inc.HSP Level 3 +SA11AIC000166832023071716378-671INDSandsGeorgeH66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncSenior Director +SA11AIC000166832023073110297-669INDSandsGeorgeH66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncSenior Director +SA11AIC000166832023071716378-1558INDSansoneKaren66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP, Business Application Platforms +SA11AIC000166832023073110297-1556INDSansoneKaren66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP, Business Application Platforms +SA11AIC000166832023071716378-594INDSchaafAllysonB66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Manager, Alliance Development +SA11AIC000166832023073110297-592INDSchaafAllysonB66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Manager, Alliance Development +SA11AIC000166832023071716378-1964INDSchellhasCaroline66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, Federal and State Tax +SA11AIC000166832023073110297-1960INDSchellhasCaroline66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, Federal and State Tax +SA11AIC000166832023071716378-900INDSchmidtThomasJ66 Hudson Blvd EastNew YorkNY100012023071422.50315.00Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-898INDSchmidtThomasJ66 Hudson Blvd EastNew YorkNY100012023073122.50315.00Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-2109INDSchrockJoel66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director/Team Leader, PDA +SA11AIC000166832023073110297-2104INDSchrockJoel66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director/Team Leader, PDA +SA11AIC000166832023073110297-516INDSchulzDarrenJ66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncProduct Portfolio Leader +SA11AIC000166832023071716378-140INDSchusterRobertJ66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023073110297-139INDSchusterRobertJ66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023071716378-2783INDSchwaningerJamesC66 Hudson Blvd EastNew YorkNY10001202307145.00220.00Pfizer, Inc.Senior Director, Global Tax +SA11AIC000166832023073110297-2777INDSchwaningerJamesC66 Hudson Blvd EastNew YorkNY10001202307315.00220.00Pfizer, Inc.Senior Director, Global Tax +SA11AIC000166832023071716378-2972INDSchweizerRachaelM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr. Director Global Cybersecurity Engi +SA11AIC000166832023073110297-2964INDSchweizerRachaelM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr. Director Global Cybersecurity Engi +SA11AIC000166832023071716378-3052INDScottJeffrey66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncLead Compliance Counsel - Digital, Rep +SA11AIC000166832023073110297-3044INDScottJeffrey66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncLead Compliance Counsel - Digital, Rep +SA11AIC000166832023071716378-1226INDScottMarioLadel66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncABM (Fellowship) Secondment +SA11AIC000166832023073110297-1224INDScottMarioLadel66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncABM (Fellowship) Secondment +SA11AIC000166832023071716378-14INDSeifertDeborahP66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer, Inc.EM Group Lead _ II +SA11AIC000166832023073110297-14INDSeifertDeborahP66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer, Inc.EM Group Lead _ II +SA11AIC000166832023071716378-2007INDSeitzNicole66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer, IncSHR Level 3 +SA11AIC000166832023073110297-2002INDSeitzNicole66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-2277INDSemenasChristopherMichael66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSenior Manager, U.S. Government Relati +SA11AIC000166832023073110297-2271INDSemenasChristopherMichael66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSenior Manager, U.S. Government Relati +SA11AIC000166832023073110297-1866INDSemienJanice66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, IncSHR Level 3 +SA11AIC000166832023071716378-2126INDSeverenko SurchinLarissa66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSenior Director, External Communicatio +SA11AIC000166832023073110297-2121INDSeverenko SurchinLarissa66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSenior Director, External Communicatio +SA11AIC000166832023071716378-2399INDSewellFrancesBlack66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector - State Tax Reporting/Controv +SA11AIC000166832023073110297-2393INDSewellFrancesBlack66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector - State Tax Reporting/Controv +SA11AIC000166832023071716378-98INDSeymourChristineB66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pharmacia & Upjohn CompanySrDirector Reg CMC Strategy +SA11AIC000166832023073110297-97INDSeymourChristineB66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pharmacia & Upjohn CompanySrDirector Reg CMC Strategy +SA11AIC000166832023071716378-1089INDShannonKarr66 Hudson Blvd EastNew YorkNY1000120230714104.17713.02Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1087INDShannonKarr66 Hudson Blvd EastNew YorkNY1000120230731104.17713.02Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1069INDShealyWilliamC66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncSrDirector Cust Marketing (P) +SA11AIC000166832023073110297-1067INDShealyWilliamC66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncSrDirector Cust Marketing (P) +SA11AIC000166832023071716378-2628INDSheedyMichelleL66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncVP, Digital, Global Acquisition, Allia +SA11AIC000166832023073110297-2623INDSheedyMichelleL66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncVP, Digital, Global Acquisition, Allia +SA11AIC000166832023071716378-1042INDSheltonPaulA66 Hudson Blvd EastNew YorkNY10001202307141.00620.70Pfizer IncEnterprise Team Lead +SA11AIC000166832023073110297-1040INDSheltonPaulA66 Hudson Blvd EastNew YorkNY10001202307311.00620.70Pfizer IncEnterprise Team Lead +SA11AIC000166832023071716378-188INDSheltonScottJ66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pharmacia & Upjohn CompanyVaccines Account Director +SA11AIC000166832023073110297-187INDSheltonScottJ66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pharmacia & Upjohn CompanyVaccines Account Director +SA11AIC000166832023071716378-938INDShortTerrenceD66 Hudson Blvd EastNew YorkNY100012023071417.50241.00Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023073110297-936INDShortTerrenceD66 Hudson Blvd EastNew YorkNY100012023073117.50241.00Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023071716378-2977INDShroffKhushrooE66 Hudson Blvd EastNew YorkNY100012023071420.84270.92Pfizer, Inc.VP, Quality and Compliant Operations +SA11AIC000166832023073110297-2969INDShroffKhushrooE66 Hudson Blvd EastNew YorkNY100012023073120.84270.92Pfizer, Inc.VP, Quality and Compliant Operations +SA11AIC000166832023073110297-2782INDShterngelYakov66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.Platform Services Engineering +SA11AIC000166832023071716378-2386INDSilvaMatthew66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncScientist Biology, Automation +SA11AIC000166832023073110297-2380INDSilvaMatthew66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncScientist Biology, Automation +SA11AIC000166832023071716378-1078INDSimmonsKathrynHd66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1076INDSimmonsKathrynHd66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1035INDSimonsDorothy66 Hudson Blvd EastNew YorkNY1000120230714104.171145.88Pfizer IncU.S. Risk Assessment and Monitoring _ +SA11AIC000166832023073110297-1033INDSimonsDorothy66 Hudson Blvd EastNew YorkNY1000120230731104.171145.88Pfizer IncU.S. Risk Assessment and Monitoring _ +SA11AIC000166832023071716378-1991INDSimpsonRebeccaLynn66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncR2R Strategic Operations Senior Manage +SA11AIC000166832023073110297-1986INDSimpsonRebeccaLynn66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncR2R Strategic Operations Senior Manage +SA11AIC000166832023071716378-3314INDSimsLindaC66 Hudson Blvd EastNew YorkNY100012023071426.00353.00Pfizer, Inc.SHR Level 3 +SA11AIC000166832023073110297-3304INDSimsLindaC66 Hudson Blvd EastNew YorkNY100012023073126.00353.00Pfizer, Inc.SHR Level 3 +SA11AIC000166832023071716378-1386INDSingermanElizabethAnne Brewer66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncUS Rhu/GI Sales Lead +SA11AIC000166832023073110297-1384INDSingermanElizabethAnne Brewer66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncUS Rhu/GI Sales Lead +SA11AIC000166832023071716378-256INDSinghRominder66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, IncRegulatory International Innov +SA11AIC000166832023073110297-255INDSinghRominder66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, IncRegulatory International Innov +SA11AIC000166832023071716378-847INDSinkDarenJ66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncSenior Director, Oncology Global Polic +SA11AIC000166832023073110297-846INDSinkDarenJ66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncSenior Director, Oncology Global Polic +SA11AIC000166832023071716378-613INDSiwiecMarvaM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVPresident Global Launch Operations Le +SA11AIC000166832023073110297-611INDSiwiecMarvaM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVPresident Global Launch Operations Le +SA11AIC000166832023073110297-1327INDSkinnerHeatherA66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-1080INDSmallDarcyLeffingwell66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1078INDSmallDarcyLeffingwell66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1051INDSmithCedricJ66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncNational Key Accts & Enterprise Strate +SA11AIC000166832023073110297-1049INDSmithCedricJ66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncNational Key Accts & Enterprise Strate +SA11AIC000166832023071716378-1130INDSmithDavidS66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP & AGC, PGS +SA11AIC000166832023073110297-1128INDSmithDavidS66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP & AGC, PGS +SA11AIC000166832023071716378-2024INDSmithDesiree66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncDirector, Strategic Customer Engagemen +SA11AIC000166832023073110297-2019INDSmithDesiree66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncDirector, Strategic Customer Engagemen +SA11AIC000166832023071716378-1098INDSmithHolliD66 Hudson Blvd EastNew YorkNY100012023071420.84247.56Pfizer U.S. PharmaceuticalsArea Business Manager +SA11AIC000166832023073110297-1096INDSmithHolliD66 Hudson Blvd EastNew YorkNY100012023073120.84247.56Pfizer U.S. PharmaceuticalsArea Business Manager +SA11AIC000166832023071716378-169INDSmithKristinL66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanySHR Level 2 +SA11AIC000166832023073110297-168INDSmithKristinL66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanySHR Level 2 +SA11AIC000166832023071716378-2730INDSmithMatthewHenson66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer Global Research And DevelopmenTA Lead, Dev Therapeutics CoE +SA11AIC000166832023073110297-2724INDSmithMatthewHenson66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer Global Research And DevelopmenTA Lead, Dev Therapeutics CoE +SA11AIC000166832023073110297-163INDSmithPatriciaC66 Hudson Blvd EastNew YorkNY100012023073115.00210.00PharmaciaSHR Level 4 +SA11AIC000166832023071716378-398INDSmithRobertD66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncKAM Regional Director East_ +SA11AIC000166832023073110297-396INDSmithRobertD66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncKAM Regional Director East_ +SA11AIC000166832023071716378-929INDSmithTerrenceS66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director, National Pharmacy Str +SA11AIC000166832023073110297-927INDSmithTerrenceS66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director, National Pharmacy Str +SA11AIC000166832023071716378-2751INDSmolizzaChristianMarius66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP & Assistant General Counsel +SA11AIC000166832023073110297-2745INDSmolizzaChristianMarius66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP & Assistant General Counsel +SA11AIC000166832023071716378-1627INDSolomonDaniel66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector Brand/Prod Mgmt (P) +SA11AIC000166832023073110297-1624INDSolomonDaniel66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector Brand/Prod Mgmt (P) +SA11AIC000166832023071716378-144INDSolsethShereenK66 Hudson Blvd EastNew YorkNY100012023071423.00322.00Pharmacia & Upjohn CompanyVaccines Account Manager +SA11AIC000166832023073110297-143INDSolsethShereenK66 Hudson Blvd EastNew YorkNY100012023073123.00322.00Pharmacia & Upjohn CompanyVaccines Account Manager +SA11AIC000166832023071716378-362INDSoto PerezElsieM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP, Supply Chain, Emerging Markets Bus +SA11AIC000166832023073110297-360INDSoto PerezElsieM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP, Supply Chain, Emerging Markets Bus +SA11AIC000166832023073110297-772INDSowderDonaldS.66 Hudson Blvd EastNew YorkNY100012023073120.84270.92Pfizer IncVP, Emerging Markets and China Complia +SA11AIC000166832023071716378-2231INDSpainJohn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-2224INDSpainJohn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-1826INDSpataforaDominickV.66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncDirector, Alliance Development +SA11AIC000166832023073110297-1823INDSpataforaDominickV.66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncDirector, Alliance Development +SA11AIC000166832023071716378-127INDSpaziantePaulA66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023073110297-126INDSpaziantePaulA66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pharmacia & Upjohn CompanyKey Account Manager +SA11AIC000166832023071716378-1059INDSporrerSusanMaria66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-1057INDSporrerSusanMaria66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-2612INDStarrReginald66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncNational Account Director +SA11AIC000166832023073110297-2607INDStarrReginald66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncNational Account Director +SA11AIC000166832023071716378-3091INDSteinBradley66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSr Manager SolutionDelivery +SA11AIC000166832023073110297-3083INDSteinBradley66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSr Manager SolutionDelivery +SA11AIC000166832023071716378-2770INDSteinbergerRyanG66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.SVP,Client Partners, Product Managemen +SA11AIC000166832023073110297-2764INDSteinbergerRyanG66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.SVP,Client Partners, Product Managemen +SA11AIC000166832023071716378-1007INDSteinkampGregoryG66 Hudson Blvd EastNew YorkNY1000120230714106.171486.38Pfizer IncRegional Business Director +SA11AIC000166832023073110297-1005INDSteinkampGregoryG66 Hudson Blvd EastNew YorkNY1000120230731106.171486.38Pfizer IncRegional Business Director +SA11AIC000166832023071716378-1552INDStevensonScott66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023073110297-1550INDStevensonScott66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncKey Account Manager +SA11AIC000166832023071716378-951INDStinsonRobertL66 Hudson Blvd EastNew YorkNY100012023071417.00238.00Pfizer IncHSP Level 4 +SA11AIC000166832023073110297-949INDStinsonRobertL66 Hudson Blvd EastNew YorkNY100012023073117.00238.00Pfizer IncHSP Level 4 +SA11AIC000166832023071716378-119INDStrempekKaraA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanySHR Level 2 +SA11AIC000166832023073110297-118INDStrempekKaraA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanySHR Level 2 +SA11AIC000166832023071716378-2473INDStroiaMatthew66 Hudson Blvd EastNew YorkNY1000120230714104.171020.88Pfizer, IncSenior Director, Federal Government Re +SA11AIC000166832023073110297-2467INDStroiaMatthew66 Hudson Blvd EastNew YorkNY100012023073141.671020.88Pfizer, IncSenior Director, Federal Government Re +SA11AIC000166832023071716378-592INDStuartPaulC66 Hudson Blvd EastNew YorkNY100012023071475.001020.00Pfizer IncVice President +SA11AIC000166832023073110297-590INDStuartPaulC66 Hudson Blvd EastNew YorkNY100012023073175.001020.00Pfizer IncVice President +SA11AIC000166832023073110297-3308INDSullivanDavidJ66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.VP, Large Molecule Technology +SA11AIC000166832023071716378-672INDSullivanKevinW66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncGlobal Specialty Care & US President +SA11AIC000166832023073110297-670INDSullivanKevinW66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncGlobal Specialty Care & US President +SA11AIC000166832023071716378-115INDSullivanPatrickNeal66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pharmacia & Upjohn CompanyResource Management Lead +SA11AIC000166832023073110297-114INDSullivanPatrickNeal66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pharmacia & Upjohn CompanyResource Management Lead +SA11AIC000166832023071716378-3320INDSupranBryanA66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, Inc.SVP, Deputy General Counsel, Bus Trans +SA11AIC000166832023073110297-3310INDSupranBryanA66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, Inc.SVP, Deputy General Counsel, Bus Trans +SA11AIC000166832023071716378-1989INDSurmayGary66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Director, Primary Care Global P +SA11AIC000166832023073110297-1984INDSurmayGary66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Director, Primary Care Global P +SA11AIC000166832023071716378-1791INDSusmanSally66 Hudson Blvd EastNew YorkNY1000120230714208.342916.76Pfizer IncChief Corporate Affairs Officer, Execu +SA11AIC000166832023073110297-1788INDSusmanSally66 Hudson Blvd EastNew YorkNY1000120230731208.342916.76Pfizer IncChief Corporate Affairs Officer, Execu +SA11AIC000166832023071716378-2381INDSwiftCarlDrake Davidson66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncHIT Enterprise Account Director +SA11AIC000166832023073110297-2375INDSwiftCarlDrake Davidson66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncHIT Enterprise Account Director +SA11AIC000166832023071716378-3322INDTchessalovSergueiA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.Res Fellow Proc Development (R) +SA11AIC000166832023073110297-3312INDTchessalovSergueiA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.Res Fellow Proc Development (R) +SA11AIC000166832023071716378-117INDTedeschiJohnE66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanyField Reimbursement Manager +SA11AIC000166832023073110297-116INDTedeschiJohnE66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanyField Reimbursement Manager +SA11AIC000166832023071716378-1241INDTempleTimothyScott66 Hudson Blvd EastNew YorkNY100012023071422.00286.00Pfizer IncVaccines Account Manager +SA11AIC000166832023073110297-1239INDTempleTimothyScott66 Hudson Blvd EastNew YorkNY100012023073122.00286.00Pfizer IncVaccines Account Manager +SA11AIC000166832023071716378-2350INDTeresiRosemaryElaine66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncRCC-Sutent, Inlyta +SA11AIC000166832023073110297-2344INDTeresiRosemaryElaine66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncRCC-Sutent, Inlyta +SA11AIC000166832023071716378-711INDTerranovaDavid66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncUS RD Sales & Account Management Lead +SA11AIC000166832023073110297-709INDTerranovaDavid66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncUS RD Sales & Account Management Lead +SA11AIC000166832023071716378-1218INDTerryMyronK66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncSenior Director, Political Outreach +SA11AIC000166832023073110297-1216INDTerryMyronK66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncSenior Director, Political Outreach +SA11AIC000166832023071716378-375INDThompsonChrisJ66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncUS I&I Access & Reimbursement Lead +SA11AIC000166832023073110297-373INDThompsonChrisJ66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncUS I&I Access & Reimbursement Lead +SA11AIC000166832023071716378-1520INDThompsonGregoryMichael66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer IncDirector Commercial Effectiveness +SA11AIC000166832023073110297-1518INDThompsonGregoryMichael66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer IncDirector Commercial Effectiveness +SA11AIC000166832023071716378-988INDThompsonJamesM66 Hudson Blvd EastNew YorkNY100012023071422.92320.88Pfizer IncHSP Level 4 +SA11AIC000166832023073110297-986INDThompsonJamesM66 Hudson Blvd EastNew YorkNY100012023073122.92320.88Pfizer IncHSP Level 4 +SA11AIC000166832023071716378-1014INDThompsonJeanette66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncTraining Senior Manager +SA11AIC000166832023073110297-1012INDThompsonJeanette66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncTraining Senior Manager +SA11AIC000166832023071716378-1421INDThompsonKamalaC66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 2 +SA11AIC000166832023073110297-1419INDThompsonKamalaC66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 2 +SA11AIC000166832023071716378-2669INDThompsonKyleP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncmRNA Influenza US Launch Operations Le +SA11AIC000166832023073110297-2664INDThompsonKyleP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncmRNA Influenza US Launch Operations Le +SA11AIC000166832023073110297-1104INDThompsonWendy66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-1194INDThorneAlanBernard66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncKey Account Manager +SA11AIC000166832023073110297-1192INDThorneAlanBernard66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncKey Account Manager +SA11AIC000166832023071716378-2524INDTomesYvonne66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023073110297-2519INDTomesYvonne66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023071716378-697INDTomlinsonCarolineM66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-695INDTomlinsonCarolineM66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-3304INDTorresLouletteSalazar66 Hudson Blvd EastNew YorkNY100012023071421.00294.00Pfizer, Inc.HSP Level 1 +SA11AIC000166832023073110297-3294INDTorresLouletteSalazar66 Hudson Blvd EastNew YorkNY100012023073121.00294.00Pfizer, Inc.HSP Level 1 +SA11AIC000166832023071716378-465INDTorres-FigueroaErnesto66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer Global Manufacturing-USSr Manager, LATAM +SA11AIC000166832023073110297-463INDTorres-FigueroaErnesto66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer Global Manufacturing-USSr Manager, LATAM +SA11AIC000166832023071716378-2347INDTraxlerRachelBright66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer, IncDirector, External Activation +SA11AIC000166832023073110297-2341INDTraxlerRachelBright66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer, IncDirector, External Activation +SA11AIC000166832023071716378-3159INDTrieuVu66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, DEI Governance Lead +SA11AIC000166832023073110297-3150INDTrieuVu66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, DEI Governance Lead +SA11AIC000166832023071716378-2990INDTuckerJonathan66 Hudson Blvd EastNew YorkNY100012023071441.67541.71Pfizer, IncPGS Site Leader - Sanford +SA11AIC000166832023073110297-2982INDTuckerJonathan66 Hudson Blvd EastNew YorkNY100012023073141.67541.71Pfizer, IncPGS Site Leader - Sanford +SA11AIC000166832023071716378-587INDTurnerJamesA66 Hudson Blvd EastNew YorkNY100012023071455.00770.00Pfizer IncDirector, People Experience, Operation +SA11AIC000166832023073110297-585INDTurnerJamesA66 Hudson Blvd EastNew YorkNY100012023073155.00770.00Pfizer IncDirector, People Experience, Operation +SA11AIC000166832023071716378-974INDTwidwellJonJ66 Hudson Blvd EastNew YorkNY100012023071421.95307.30Pfizer IncArea Business Manager +SA11AIC000166832023073110297-972INDTwidwellJonJ66 Hudson Blvd EastNew YorkNY100012023073121.95307.30Pfizer IncArea Business Manager +SA11AIC000166832023071716378-1254INDUnderwoodKadidiaC66 Hudson Blvd EastNew YorkNY100012023071445.00630.00Pfizer IncRare Disease Key Account Management Le +SA11AIC000166832023073110297-1252INDUnderwoodKadidiaC66 Hudson Blvd EastNew YorkNY100012023073145.00630.00Pfizer IncRare Disease Key Account Management Le +SA11AIC000166832023071716378-1101INDVaccaJohnD66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer Global Research And DevelopmenProgramming TA Lead - Executive Direct +SA11AIC000166832023073110297-1099INDVaccaJohnD66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer Global Research And DevelopmenProgramming TA Lead - Executive Direct +SA11AIC000166832023071716378-984INDVailJimmieD66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncKey Account Manager +SA11AIC000166832023073110297-982INDVailJimmieD66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncKey Account Manager +SA11AIC000166832023071716378-862INDVailLisaL66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHSP Level 3 +SA11AIC000166832023073110297-860INDVailLisaL66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHSP Level 3 +SA11AIC000166832023071716378-1536INDVan HausenJohnRichard66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSr. Manager - Workforce Platforms +SA11AIC000166832023073110297-1534INDVan HausenJohnRichard66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSr. Manager - Workforce Platforms +SA11AIC000166832023071716378-470INDVargas-De JesusJoseA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Pharmaceuticals LLCRegional Business Director & Marketing +SA11AIC000166832023073110297-468INDVargas-De JesusJoseA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Pharmaceuticals LLCRegional Business Director & Marketing +SA11AIC000166832023073110297-699INDVargheseAlisonE66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncPScientist XRayCrystalogr'y (R) +SA11AIC000166832023071716378-3173INDVarmaSuneet66 Hudson Blvd EastNew YorkNY1000120230714105.001470.00Pfizer, Inc.Global Oncology US President_ +SA11AIC000166832023073110297-3163INDVarmaSuneet66 Hudson Blvd EastNew YorkNY1000120230731105.001470.00Pfizer, Inc.Global Oncology US President_ +SA11AIC000166832023071716378-3331INDVaughanMarkAndrew66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.IM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-3321INDVaughanMarkAndrew66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.IM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-2197INDVesserMegan66 Hudson Blvd EastNew YorkNY1000120230714208.332499.98Pfizer, IncUS RD Access and Reimbursement Lead +SA11AIC000166832023073110297-2191INDVesserMegan66 Hudson Blvd EastNew YorkNY1000120230731208.332499.98Pfizer, IncUS RD Access and Reimbursement Lead +SA11AIC000166832023071716378-2993INDViscusiNicholas66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncOutsourcing Lead +SA11AIC000166832023073110297-2985INDViscusiNicholas66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncOutsourcing Lead +SA11AIC000166832023073110297-2986INDVlahosBonnieLynn66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.Medical Team Lead, Crisaborole +SA11AIC000166832023071716378-273INDVollerSteven66 Hudson Blvd EastNew YorkNY10001202307145.00270.00Monarch PharmaceuticalsSHR Level 4 +SA11AIC000166832023073110297-271INDVollerSteven66 Hudson Blvd EastNew YorkNY10001202307315.00270.00Monarch PharmaceuticalsSHR Level 4 +SA11AIC000166832023073110297-141INDVoskuilKathleen66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanySenior Manager, Alliance Development +SA11AIC000166832023071716378-1716INDWaldropJacqueline66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncGlobal Medical Grants Cluster Lead, Sr +SA11AIC000166832023073110297-1713INDWaldropJacqueline66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncGlobal Medical Grants Cluster Lead, Sr +SA11AIC000166832023073110297-989INDWalkerTraceyEllen66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer IncUS Lead, Enterprise Medical and Field +SA11AIC000166832023071716378-632INDWallenmaierFrederick66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-630INDWallenmaierFrederick66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-574INDWalrathIVanP66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer Global Research And DevelopmenExecutive Director +SA11AIC000166832023073110297-572INDWalrathIVanP66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer Global Research And DevelopmenExecutive Director +SA11AIC000166832023071716378-765INDWaltersCFaith W66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncPaxlovid and Vaccines Field Medical Gr +SA11AIC000166832023073110297-763INDWaltersCFaith W66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncPaxlovid and Vaccines Field Medical Gr +SA11AIC000166832023071716378-1068INDWalters-FranciqueDebbieA66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer Legal-USVP & AGC, Chief Counsel, Pricing & Acc +SA11AIC000166832023073110297-1066INDWalters-FranciqueDebbieA66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer Legal-USVP & AGC, Chief Counsel, Pricing & Acc +SA11AIC000166832023071716378-1943INDWaltonJenniferSwenson66 Hudson Blvd EastNew YorkNY1000120230714208.332916.62Pfizer IncSVP US Policy & Government Relations +SA11AIC000166832023073110297-1939INDWaltonJenniferSwenson66 Hudson Blvd EastNew YorkNY1000120230731208.332916.62Pfizer IncSVP US Policy & Government Relations +SA11AIC000166832023071716378-3335INDWarneNicholasW66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer, Inc.VPresident Leadership (M) +SA11AIC000166832023073110297-3325INDWarneNicholasW66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer, Inc.VPresident Leadership (M) +SA11AIC000166832023071716378-1427INDWarnerMichelleEileen66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncOpinion Leader Liaison MEL/CRC +SA11AIC000166832023073110297-1425INDWarnerMichelleEileen66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncOpinion Leader Liaison MEL/CRC +SA11AIC000166832023071716378-1640INDWasunnaJacquelineAngela Amondi66 Hudson Blvd EastNew YorkNY100012023071441.67583.38Pfizer IncChief of Staff, Biopharma +SA11AIC000166832023073110297-1637INDWasunnaJacquelineAngela Amondi66 Hudson Blvd EastNew YorkNY100012023073141.67583.38Pfizer IncChief of Staff, Biopharma +SA11AIC000166832023071716378-1411INDWatkinTreciNoelle66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 3 +SA11AIC000166832023073110297-1409INDWatkinTreciNoelle66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 3 +SA11AIC000166832023071716378-3001INDWatrousCristineMarie66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.US RSV Maternal HCP Lead +SA11AIC000166832023073110297-2993INDWatrousCristineMarie66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.US RSV Maternal HCP Lead +SA11AIC000166832023071716378-2227INDWatsonMarcus66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023073110297-2220INDWatsonMarcus66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncArea Business Manager +SA11AIC000166832023071716378-3003INDWeaverJennifer66 Hudson Blvd EastNew YorkNY100012023071426.00364.00Pfizer, Inc.Director Business Operations - Sterile +SA11AIC000166832023073110297-2995INDWeaverJennifer66 Hudson Blvd EastNew YorkNY100012023073126.00364.00Pfizer, Inc.Director Business Operations - Sterile +SA11AIC000166832023071716378-779INDWebsterPamelaS66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncSenior Director, Vaccines and Antivira +SA11AIC000166832023073110297-778INDWebsterPamelaS66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncSenior Director, Vaccines and Antivira +SA11AIC000166832023071716378-1131INDWeigelDouglasJ66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1129INDWeigelDouglasJ66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncArea Business Manager +SA11AIC000166832023071716378-2702INDWelterValerieAnn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSite Quality Operations Leader - McPhe +SA11AIC000166832023073110297-2697INDWelterValerieAnn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSite Quality Operations Leader - McPhe +SA11AIC000166832023071716378-829INDWenclewiczKellyK66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-828INDWenclewiczKellyK66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-531INDWestcottLeah66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023073110297-529INDWestcottLeah66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAccount Director, U.S. Payers +SA11AIC000166832023071716378-1401INDWestonAndrea66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSrDirector Cellular, Genomic and Prote +SA11AIC000166832023073110297-1399INDWestonAndrea66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSrDirector Cellular, Genomic and Prote +SA11AIC000166832023071716378-416INDWheelerStephenM66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer IncRegional Business Director +SA11AIC000166832023073110297-414INDWheelerStephenM66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer IncRegional Business Director +SA11AIC000166832023071716378-2326INDWhiteSheneisha66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc12 Month Secondment - Vaccines/AntiVir +SA11AIC000166832023073110297-2320INDWhiteSheneisha66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc12 Month Secondment - Vaccines/AntiVir +SA11AIC000166832023071716378-856INDWhiteStephanieS66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVaccines Account Manager +SA11AIC000166832023073110297-855INDWhiteStephanieS66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVaccines Account Manager +SA11AIC000166832023071716378-1909INDWickerAnn66 Hudson Blvd EastNew YorkNY100012023071421.84305.76Pfizer IncUS Senior Medical Director, Biosimilar +SA11AIC000166832023073110297-1905INDWickerAnn66 Hudson Blvd EastNew YorkNY100012023073121.84305.76Pfizer IncUS Senior Medical Director, Biosimilar +SA11AIC000166832023071716378-2533INDWilesAngelaBoothe66 Hudson Blvd EastNew YorkNY1000120230714104.171145.87Pfizer, IncSenior Director, Federal Government Re +SA11AIC000166832023073110297-2528INDWilesAngelaBoothe66 Hudson Blvd EastNew YorkNY1000120230731104.171145.87Pfizer, IncSenior Director, Federal Government Re +SA11AIC000166832023071716378-2023INDWileyChristopher66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncSrScien'st Formultn Devlpmnt (R) +SA11AIC000166832023073110297-2018INDWileyChristopher66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncSrScien'st Formultn Devlpmnt (R) +SA11AIC000166832023071716378-1409INDWilliamsKevinW66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncGlobal Medical Excellence & Innovation +SA11AIC000166832023073110297-1407INDWilliamsKevinW66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncGlobal Medical Excellence & Innovation +SA11AIC000166832023071716378-3342INDWilliamsMollyKremers66 Hudson Blvd EastNew YorkNY1000120230714125.001687.51Pfizer, Inc.Director, Alliance Development +SA11AIC000166832023073110297-3332INDWilliamsMollyKremers66 Hudson Blvd EastNew YorkNY1000120230731125.001687.51Pfizer, Inc.Director, Alliance Development +SA11AIC000166832023071716378-1038INDWilliamsRickieJ66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023073110297-1036INDWilliamsRickieJ66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncArea Business Manager +SA11AIC000166832023071716378-963INDWillisByronT66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncUS I&I Strategic Customer Group Lead +SA11AIC000166832023073110297-961INDWillisByronT66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncUS I&I Strategic Customer Group Lead +SA11AIC000166832023071716378-933INDWillisE.Elaine66 Hudson Blvd EastNew YorkNY100012023071423.84333.76Pfizer IncRetail Pharmacy Account Specialist +SA11AIC000166832023073110297-931INDWillisE.Elaine66 Hudson Blvd EastNew YorkNY100012023073123.84333.76Pfizer IncRetail Pharmacy Account Specialist +SA11AIC000166832023071716378-1959INDWilsonGena66 Hudson Blvd EastNew YorkNY100012023071420.00280.00Pfizer, IncHSP Level 3 +SA11AIC000166832023073110297-1955INDWilsonGena66 Hudson Blvd EastNew YorkNY100012023073120.00280.00Pfizer, IncHSP Level 3 +SA11AIC000166832023073110297-19INDWilsonRonaldR66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pharmacia & Upjohn CompanyRegional Business Director, I&I Accoun +SA11AIC000166832023071716378-3009INDWilsonThomasPatrick66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, Inc.PC1 Global Head of Business Developmen +SA11AIC000166832023073110297-3001INDWilsonThomasPatrick66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, Inc.PC1 Global Head of Business Developmen +SA11AIC000166832023073110297-3334INDWiniarskiJamesT66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.Regional Account Director (Secondment- +SA11AIC000166832023073110297-3002INDWiniarskiMarcS66 Hudson Blvd EastNew YorkNY100012023073115.00210.00Pfizer, Inc.Sr. Manager, Oracle Database Engineeri +SA11AIC000166832023071716378-3085INDWisselPaulS66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncClinical Lead Oncology BD +SA11AIC000166832023073110297-3077INDWisselPaulS66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncClinical Lead Oncology BD +SA11AIC000166832023071716378-1975INDWitzigJohn66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP, Corporate Aviation +SA11AIC000166832023073110297-1971INDWitzigJohn66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP, Corporate Aviation +SA11AIC000166832023071716378-3355INDWollenbergLanceA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector ClinPh/Pharmacometr (P) +SA11AIC000166832023073110297-3345INDWollenbergLanceA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector ClinPh/Pharmacometr (P) +SA11AIC000166832023071716378-1709INDWoodCatherineR66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncHSP Level 4 +SA11AIC000166832023073110297-1706INDWoodCatherineR66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncHSP Level 4 +SA11AIC000166832023071716378-3345INDWoodHollyM66 Hudson Blvd EastNew YorkNY100012023071422.00308.00Pfizer, Inc.RD Patient Access Communicator +SA11AIC000166832023073110297-3335INDWoodHollyM66 Hudson Blvd EastNew YorkNY100012023073122.00308.00Pfizer, Inc.RD Patient Access Communicator +SA11AIC000166832023071716378-2145INDWoodrumFaithSadler66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncHSP Level 3 +SA11AIC000166832023073110297-2140INDWoodrumFaithSadler66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncHSP Level 3 +SA11AIC000166832023071716378-2569INDWorkmanDianeL66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncDirector, Project Manager +SA11AIC000166832023073110297-2564INDWorkmanDianeL66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncDirector, Project Manager +SA11AIC000166832023071716378-986INDWrightMarciaA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023073110297-984INDWrightMarciaA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncIM Field Medical, Outcomes & Analytics +SA11AIC000166832023071716378-532INDWrobelAlan66 Hudson Blvd EastNew YorkNY100012023071425.84361.76Pfizer IncDirector +SA11AIC000166832023073110297-530INDWrobelAlan66 Hudson Blvd EastNew YorkNY100012023073125.84361.76Pfizer IncDirector +SA11AIC000166832023071716378-2265INDWynnThomasA66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncVice President Inflammation and Immuno +SA11AIC000166832023073110297-2259INDWynnThomasA66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncVice President Inflammation and Immuno +SA11AIC000166832023071716378-942INDYoungbloodJillBorelli66 Hudson Blvd EastNew YorkNY100012023071417.00238.00Pfizer IncField Reimbursement Manager +SA11AIC000166832023073110297-940INDYoungbloodJillBorelli66 Hudson Blvd EastNew YorkNY100012023073117.00238.00Pfizer IncField Reimbursement Manager +SA11AIC000166832023071716378-1708INDYunisCarla66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVPresident ClinResClinicMD (M) +SA11AIC000166832023073110297-1705INDYunisCarla66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVPresident ClinResClinicMD (M) +SA11AIC000166832023071716378-369INDZachmeyerKathleenM66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAdvanced Customer Engagement Director +SA11AIC000166832023073110297-367INDZachmeyerKathleenM66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAdvanced Customer Engagement Director +SA11AIC000166832023071716378-2276INDZambasDemetrisNeophytou66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncVP Global Head, Clinical Data Sciences +SA11AIC000166832023073110297-2270INDZambasDemetrisNeophytou66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncVP Global Head, Clinical Data Sciences +SA11AIC000166832023071716378-1936INDZanzalariRichard66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncSenior Corporate Counsel +SA11AIC000166832023073110297-1932INDZanzalariRichard66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncSenior Corporate Counsel +SA11AIC000166832023071716378-718INDZavattieriJoseph66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncIntegrated Marketing Operations Lead, +SA11AIC000166832023073110297-716INDZavattieriJoseph66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncIntegrated Marketing Operations Lead, +SA11AIC000166832023071716378-152INDZeisMichelleS66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023073110297-151INDZeisMichelleS66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pharmacia & Upjohn CompanyHSP Level 3 +SA11AIC000166832023071716378-852INDZeronikKimberlyM66 Hudson Blvd EastNew YorkNY100012023071425.00350.00Pfizer IncSHR Level 4 +SA11AIC000166832023073110297-851INDZeronikKimberlyM66 Hudson Blvd EastNew YorkNY100012023073125.00350.00Pfizer IncSHR Level 4 +SA11AIC000166832023071716378-1384INDZettelJenniferD66 Hudson Blvd EastNew YorkNY100012023071416.00224.00Pfizer IncRBD Cardiology West +SA11AIC000166832023073110297-1382INDZettelJenniferD66 Hudson Blvd EastNew YorkNY100012023073116.00224.00Pfizer IncRBD Cardiology West +SA11AIC000166832023071716378-2257INDZhangBeiBetty66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer, IncVP Metabolic Biology +SA11AIC000166832023073110297-2251INDZhangBeiBetty66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer, IncVP Metabolic Biology +SA11AIC000166832023071716378-92INDZhangKun66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pharmacia & Upjohn CompanySPrScien't Chem-Analytical +SA11AIC000166832023073110297-91INDZhangKun66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pharmacia & Upjohn CompanySPrScien't Chem-Analytical +SA11AIC000166832023071716378-21INDZielinskiBryanC66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncVP & Chief Patent Counsel +SA11AIC000166832023073110297-21INDZielinskiBryanC66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncVP & Chief Patent Counsel +SA11AIC000166832023071716378-643INDZimbelmannSusanE66 Hudson Blvd EastNew YorkNY1000120230714104.171458.38Pfizer IncVice President, People Experience, Wor +SA11AIC000166832023073110297-641INDZimbelmannSusanE66 Hudson Blvd EastNew YorkNY1000120230731104.171458.38Pfizer IncVice President, People Experience, Wor +SA11AIC000166832023071716378-394INDZinconeMichaelJ66 Hudson Blvd EastNew YorkNY100012023071430.00420.00Pfizer IncSenior Director, Patient Advocacy +SA11AIC000166832023073110297-392INDZinconeMichaelJ66 Hudson Blvd EastNew YorkNY100012023073130.00420.00Pfizer IncSenior Director, Patient Advocacy +SA11AIC000166832023071716378-1530INDZlatevaGergana66 Hudson Blvd EastNew YorkNY100012023071420.84291.76Pfizer IncAccess Strategy Business Unit Lead, On +SA11AIC000166832023073110297-1528INDZlatevaGergana66 Hudson Blvd EastNew YorkNY100012023073120.84291.76Pfizer IncAccess Strategy Business Unit Lead, On +SA11AIC000166832023071716378-3348INDZupaWendyS66 Hudson Blvd EastNew YorkNY100012023071417.00238.00Pfizer, Inc.SHR Level 1 +SA11AIC000166832023073110297-3338INDZupaWendyS66 Hudson Blvd EastNew YorkNY100012023073117.00238.00Pfizer, Inc.SHR Level 1 +SB23C00016683F70BF55E173EF82ACFAPACAlamo PAC919 Congress AveSte 1400AustinTX78701O2023Contribution202307202500.002023 Contribution011C00387464Alamo PAC +SB23C00016683910B70A38B884EFE58FCCMAnn Wagner For CongressPO Box 50BallwinMO63022P2024202307202500.002024 Primary011C00495846H2MO02102WagnerAnnLouiseHMO02 +SB23C000166839ED287EF4DF3F6B3C30CCMBarragan For Congress1840 SOUTH GAFFEY STREET #421SAN PEDROCA90731P2024202307201000.002024 Primary011C00577353H6CA44103BarraganNanetteDiazHCA44 +SB23C00016683CC878C41EBA0D3071A9CCMBera For CongressPO Box 582496Elk GroveCA95758P2024202307201000.002024 Primary011C00461061H0CA03078BeraAmerishB.HCA06 +SB23C00016683EF16625A8F09A56F189CCMClaudia Tenney For CongressPO Box 378VictorNY14564P2024202307202500.002024 Primary011C00632828H4NY22051TenneyClaudiaHNY24 +SB23C00016683267EE76FC27C7B0FAC5CCMDon Davis For NcPO Box 511Snow HillNC28580P2024202307201000.002024 Primary011C00795211H2NC02287DavisDonaldGeneHNC01 +SB23C0001668388F08C40C24BAC194BDCCMDr. Raul Ruiz For CongressPO Box 1566IndioCA92202P2024202307202500.002024 Primary011C00502575H2CA36439RuizRaulHCA25 +SB23C000166837D5575C91B032C5F88DPTYDSCC (Building Fund)120 Maryland Ave NEWashingtonDC20002O2023Contribution202307205000.002023 Contribution011C00042366DSCC (Building Fund) +SB23C0001668378C4EAE28BDEC0EB9B8CCMFeenstra For Congress641 2nd StHullIA51239P2024202307201000.002024 Primary011C00693663H0IA04145FeenstraRandyHIA04 +SB23C00016683EF3E1497E28AF2C69AECCMGabe Vasquez For CongressPO Box LMesillaNM88046P2024202307201000.002024 Primary011C00789404H2NM02191VasquezGabeHNM02 +SB23C00016683DFCB9C648738B2A4D8ECCMGreg Pence For CongressPO Box 275TaylorsvilleIN47280P2024202307201500.002024 Primary011C00658401H8IN06129PenceGregoryJ.HIN06 +SB23C00016683A74F50BB5E65A3F15B9CCMGuy For CongressPO Box 23177PittsburghPA15222P2024202307202500.002024 Primary011C00657833H8PA18199ReschenthalerGuyL.HPA14 +SB23C00016683B616ADDCF2BAFB0BD33PACJobs Opportunity And New Ideas PACPO Box 93441Des MoinesIA50393O2023Contribution202307201000.002023 Contribution011C00566851Jobs Opportunity And New Ideas PAC +SB23C0001668340A53077B0E27A39407PACJustice League PAC65 Pine Ave# 348Long BeachCA90802O2023Contribution202307201500.002023 Contribution011C00823773Justice League PAC +SB23C0001668311227690A1136EB23A1CCMKansans For LaturnerPO Box 67237TopekaKS66667P2024202307201000.002024 Primary011C00718346H0KS02188LaTurnerJacobHKS02 +SB23C00016683F812970C6B6BB12FA0ACCMLou Correa For Congress3230 Arena BlvdSte 245SacramentoCA95834P2024202307202500.002024 Primary011C00578302H6CA46116CorreaJ. LuisHCA46 +SB23C0001668343EC302C00934BB8F6DCCMMann For CongressPO Box 1084SalinaKS674021084P2024202307201500.002024 Primary011C00460659H0KS01123MannTraceyRobertHKS01 +SB23C0001668314359D50058498A3B02CCMMike Kelly For CongressPO Box 476LyndoraPA16045P2024202307203000.002024 Primary011C00474189H0PA03271KellyG. MikeJ.HPA16 +SB23C0001668378EAB34209CA29ACA16CCMNevadans For Steven HorsfordPO Box 336664North Las VegasNV89033P2024202307201500.002024 Primary011C00668228H2NV04011HorsfordStevenAlexzanderHNV04 +SB23C0001668341C069FBCC0B5FA940EPTYNRSC (Building Fund)425 Second Street NEWashingtonDC20002O2023Contribution202307205000.002023 Contribution011C00027466NRSC (Building Fund) +SB23C00016683C11C579AEF7D06B31FCPACOorah! Political Action CommitteePO Box 3743CarmelIN46082O2023Contribution202307202500.002023 Contribution011C00551853Oorah! Political Action Committee +SB23C0001668364C203861112A8A3B6FCCMPete Aguilar For CongressPO Box 10954San BernardinoCA92423P2024202307201000.002024 Primary011C00510461H2CA31125AguilarPeterRayHCA33 +SB23C000166835CFA7EF4BBCEBDABFABCCMRobert Aderholt For CongressPO Box 1158HaleyvilleAL35565P2024202307201500.002024 Primary011C00313247H6AL04098AderholtRobertBrownHAL04 +SB23C00016683A719DDBBC91EB24DAFACCMStand With SanchezPO Box 4006WhittierCA90607P2024202307201000.002024 Primary011C00384057H2CA39078SanchezLindaT.HCA38 +SB29C0001668309FA60370A7B6DEE70DCOMCommittee to Elect a Republican SenateP.O. Box 2741MadisonWI53701202307213750.00Nonfederal Contribution011 +SB29C000166837527EB33548EF408CEDCOMCommittee to Elect Gayle Manning7064 Avon Belden Rd.North RidgevilleOH4403920230721350.00Nonfederal Contribution011 +SB29C000166832B23FA9F1E160EE4F61COMFriends of Jon Cross8 North Main St.KentonOH4332620230721350.00Nonfederal Contribution011 +SB29C000166838D4200F8B0919EFCE86COMFriends of Rachel Baker7807 Ashbury Hills DriveCincinnatiOH4525520230721300.00Nonfederal Contribution011 +SB29C00016683B9909A3D50C1384667ECOMFriends of Scott MartinP.O. Box 624HarrisburgPA17108202307211000.00Nonfederal Contribution011 +SB29C00016683FFCF243F75139BB8C61COMFriends of Sean Brennan6306 Hamstead AvenueParmaOH4413920230721300.00Nonfederal Contribution011 +SB29C000166834C947C95BEAED10C1E9COMFriends of Susan Manchester2168 Sutter ParkwayDublinOH4301620230721500.00Nonfederal Contribution011 +SB29C000166831E6C396DC3E1CECB8D4COMLorenz for Ohio4111 Village Club DrivePowellOH4306520230721350.00Nonfederal Contribution011 +SB29C00016683747683737F94D637483COMRepublican Assembly Campaign Committee148 E. Johnson StreetMadisonWI53703202307213750.00Nonfederal Contribution011 diff --git a/crates/fec-py/tests/fixtures/1913493.fec b/crates/fec-py/tests/fixtures/1913493.fec new file mode 100644 index 0000000..87faab8 --- /dev/null +++ b/crates/fec-py/tests/fixtures/1913493.fec @@ -0,0 +1,28 @@ +HDRFEC8.4FEC WebForms8.4.0.0 +F99C00917203RIGHTS OF AMERICANS ASSOCIATION2444 W. TOUHY AVENUECHICAGOIL60645HillTamikaLa'ShonMrs.20250901 +[BEGINTEXT] +Submitted by: Tamika La�Shon Hill +Candidate ID: H6IL09368 +Committee Name: Tamika La�Shon Hill for Congress +Committee ID: C00917633 Election Year: 2026 +Office Sought: U.S. House of Representatives, Illinois District 09 + +Subject: Termination of Candidacy Statement + +Pursuant to 11 CFR � 102.3 and � 104.3, I, Tamika La�Shon Hill, hereby formally withdraw my candidacy for the U.S. House of Representatives for Illinois�s 9th Congressional District in the 2026 election cycle. This decision is effective as of Monday, September 1, 2025. + +My principal campaign committee, Tamika La�Shon Hill for Congress, will proceed with the necessary steps to wind down operations, resolve any outstanding obligations, and file a termination report in accordance with FEC guidelines. All contributions received to date will be accounted for and disclosed in final filings. + +This withdrawal does not reflect a retreat from public service or advocacy. I remain committed to advancing transparency, audit resilience, and grassroots empowerment through other civic channels, including the Rights Of Americans Association PAC. + +Please update your records accordingly. If further documentation is required, I am available to provide clarification. + +Respectfully, + +Tamika La�Shon Hill +Federal Candidate (Withdrawn) +President & Treasurer, Rights Of Americans Association PAC +224-231-7474 +tami3763il@gmail.com +[ENDTEXT] + diff --git a/crates/fec-py/tests/fixtures/1913562.fec b/crates/fec-py/tests/fixtures/1913562.fec new file mode 100644 index 0000000..284b1e3 --- /dev/null +++ b/crates/fec-py/tests/fixtures/1913562.fec @@ -0,0 +1,5 @@ +HDRFEC8.4NGP8FEC-122886322 +F1AC00677898Friends of Jahana HayesPO BOX 1487WaterburyCT06721Xtreasurer@jahanahayes.com;janica@pcmsllc.comjahanahayes.com20250902ThompsonChanita20250902AH8CT05245HayesJahanaHCT05DEMC00908152FRONTLINE ORGANIZING FOR REPRESENTATION, CHANGE & EQUITY (FORCE) PAC122 C ST NWSUITE 360WashingtonDC20001JFRKyriacopoulosJanicaPO Box 65322WashingtonDC20035Asst Treasurer2026281580ThompsonChanitaPO Box 1487WaterburyCT06721Treasurer9174036193TD Bank21 W Main StreetWaterburyCT06721Amalgamated Bank1825 K St NWWashingtonDC20006 +F1SC00677898C00873331HAYES VICTORY FUNDPO BOX 65322WashingtonDC20035JFR +F1SC00677898C00902270FRONTLINE PROTECTION FUNDPO Box 65322WashingtonDC20035JFR +F1SC00677898C00916429JEFFRIES BATTLEGROUND PROTECTION FUND430 SOUTH CAPITOL STREET SE2ND FLWashingtonDC20003JFR diff --git a/crates/fec-py/tests/fixtures/1921705.fec b/crates/fec-py/tests/fixtures/1921705.fec new file mode 100644 index 0000000..3e5c81f --- /dev/null +++ b/crates/fec-py/tests/fixtures/1921705.fec @@ -0,0 +1,22 @@ +HDRFEC8.5FECfile8.5.0.0(f33) +F3NC00900860Jason Byors for Congress6815 Concepcion RdCathedral CityCA92234CA41Q32025070120250930ByorsJason20251015720.880.00720.883366.520.003366.52922.190.000.00500.000.00500.000.00187.2833.60720.880.000.000.000.000.000.00720.883366.520.000.000.000.000.000.000.000.000.003366.523567.83720.884288.713366.52922.195695.240.005695.244773.050.004773.05500.000.00500.000.003350.111845.135695.240.000.000.000.000.000.005695.244773.050.000.000.000.000.000.000.000.000.004773.05 +SA11AIC00900860SA11AI.4264INDWeedRichard14 Stacey StMarbleheadMA01945P202620250707500.00500.00Not EmployedNot Employed +SA11CC00900860SA11C.4250PACACTBLUEPO BOX 441146SOMERVILLEMA02144P2026202507064.803167.63C00401224ACTBLUE +SA11CC00900860SA11C.4250.0SA11C.4250SA11CINDCASTANONGINAPO BOX 1332WILDOMARCA92595P2026202507065.0010.00Not EmployedNot EmployedX +SA11CC00900860SA11C.4252PACACTBLUEPO BOX 441146SOMERVILLEMA02144P2026202507134.803172.43C00401224ACTBLUE +SA11CC00900860SA11C.4252.0SA11C.4252SA11CINDTuretskyLisa5225 Dahlia DrLos AngelesCA900411406P2026202507125.0010.00Not EmployedNot EmployedX +SA11CC00900860SA11C.4254PACACTBLUEPO BOX 441146SOMERVILLEMA02144P202620250720120.063292.49C00401224ACTBLUE +SA11CC00900860SA11C.4254.0SA11C.4254SA11CINDArenivarCamilo5301 E Waverly Dr Unit 170Palm SpringsCA92264P20262025071625.00175.00Entertainment PartnersSr. Scrum MasterX +SA11CC00900860SA11C.4254.1SA11C.4254SA11CINDBorjaHugo6108 Pioneer BoulevardWhittierCA90606P202620250719100.00205.00SCGEXPF|EXECUTIVE PROFESSIONALX +SA11CC00900860SA11C.4257PACACTBLUEPO BOX 441146SOMERVILLEMA02144P20262025080348.023340.51C00401224ACTBLUE +SA11CC00900860SA11C.4257.0SA11C.4257SA11CINDMaxwellMarcie74977 S Cove DrIndian WellsCA92210P20262025073050.0050.00RetiredRetiredX +SA11CC00900860SA11C.4259PACACTBLUEPO BOX 441146SOMERVILLEMA02144P2026202508104.803345.31C00401224ACTBLUE +SA11CC00900860SA11C.4259.0SA11C.4259SA11CINDCASTANONGINAPO BOX 1332WILDOMARCA92595P2026202508065.0015.00Not EmployedNot EmployedX +SA11CC00900860SA11C.4261PACACTBLUEPO BOX 441146SOMERVILLEMA02144P2026202508174.803350.11C00401224ACTBLUE +SA11CC00900860SA11C.4261.0SA11C.4261SA11CINDTuretskyLisa5225 Dahlia DrLos AngelesCA900411406P2026202508125.0015.00Not EmployedNot EmployedX +SA11DC00900860SA11D.4233CANByorsJason68195 Concepcion RdCathedral CityCA92234P20262025070133.601845.13In-kind - software rentalCPS, Inc.Computer ProgrammerH6CA41257ByorsJasonHCA41 +SB17C00900860SB17.4234CANByorsJason68195 Concepcion RdCathedral CityCA92234P20262025070133.60In-kind - software rentalH6CA41257HCA41 +SB17C00900860SB17.4276ORGGrassroots Analytics806 7Th St NWWashingtonDC20001P202620250728121.92Fundraising Consulting +SB17C00900860SB17.4268ORGStrike Team Political Strategies51194 Romeo Plank RoadNumber 239MacombMI48042P2026202507092500.00Consulting Services +SB17C00900860SB17.4272ORGTrademark Engine1000 N West StreetSuite 1200WilmingtonDE19081P202620250721450.00legal services +SB17C00900860SB17.4274ORGTrademark Engine1000 N West StreetSuite 1200WilmingtonDE19081P202620250722199.00legal services diff --git a/crates/fec-py/tests/fixtures/1923816.fec b/crates/fec-py/tests/fixtures/1923816.fec new file mode 100644 index 0000000..3b82382 --- /dev/null +++ b/crates/fec-py/tests/fixtures/1923816.fec @@ -0,0 +1,5 @@ +HDRFEC8.5FEC Webforms8.5.0.0 +F1NC00925099Dodo Joint Victory Committee138 East Goodwin Chase LNDodo Mail RoomWendellNC27591logankeener85@gmail.com;logankeener85@gmail.com20251030KeenerLoganBenjamin20251030INONEKeenerLoganBenjamin138 East Goodwin Chase LNDodo Mail RoomWendellNC27591President/senator9842122623KeenerLoganBenjamin138 East Goodwin Chase LNDodo Mail RoomWendellNC275919842122623Dodo Bank138 East Goodwin Chase LNDodo Mail RoomWendellNC27591 +F1SC00925099Dodo CommitteeC00853135P +F1SC00925099Dodo Congress and lobbying committeeC00925065N +F1SC00925099Dodo Commonwealth PACC00925073N diff --git a/crates/fec-py/tests/test_fecfile.py b/crates/fec-py/tests/test_fecfile.py index 51e02e6..8c9f71b 100644 --- a/crates/fec-py/tests/test_fecfile.py +++ b/crates/fec-py/tests/test_fecfile.py @@ -1,8 +1,11 @@ """ Tests for libfec_parser.fecfile module """ +import io +import urllib.error +import urllib.request + import pytest -from pathlib import Path from libfec_parser.fecfile import ( loads, from_file, @@ -12,37 +15,9 @@ print_example ) - -@pytest.fixture -def sample_fec_file(): - """Get path to a sample FEC file""" - # Look for a sample file in the cache or benchmarks directory - cache_dir = Path(__file__).parent.parent.parent.parent / "cache" - if cache_dir.exists(): - fec_files = list(cache_dir.glob("*.fec")) - if fec_files: - return fec_files[0] - - # Try benchmarks - bench_dir = Path(__file__).parent.parent.parent.parent / "benchmarks" - if bench_dir.exists(): - fec_files = list(bench_dir.glob("*.fec")) - if fec_files: - return fec_files[0] - - pytest.skip("No sample FEC files found") - - -@pytest.fixture -def sample_fec_content(sample_fec_file): - """Read sample FEC file as string""" - return sample_fec_file.read_text(encoding='utf-8', errors='ignore') - - -@pytest.fixture -def sample_fec_bytes(sample_fec_file): - """Read sample FEC file as bytes""" - return sample_fec_file.read_bytes() +# The fixtures (`sample_fec_file`, `sample_fec_content`, `sample_fec_bytes`, …) +# live in conftest.py. The primary one is tests/fixtures/1921705.fec: +# v8.5, F3N, filer C00900860, 15 Schedule A + 5 Schedule B rows. class TestLoads: @@ -94,12 +69,25 @@ def test_loads_filing_structure(self, sample_fec_content): assert 'filer_committee_id_number' in filing def test_loads_itemizations_structure(self, sample_fec_content): - """Test that itemizations is a dictionary""" + """Test that itemizations is a dictionary, keyed by schedule""" result = loads(sample_fec_content) itemizations = result['itemizations'] - + assert isinstance(itemizations, dict) - + assert {k: len(v) for k, v in itemizations.items()} == { + 'Schedule A': 15, + 'Schedule B': 5, + } + + def test_loads_known_values(self, sample_fec_content): + """Test the parsed values for the known fixture 1921705.fec""" + result = loads(sample_fec_content) + + assert result['header']['fec_version'] == '8.5' + assert result['filing']['form_type'] == 'F3N' + assert result['filing']['filer_committee_id_number'] == 'C00900860' + assert result['text'] == [] + def test_loads_text_structure(self, sample_fec_content): """Test that text is a list""" result = loads(sample_fec_content) @@ -172,40 +160,67 @@ def test_from_file_with_nonexistent_file(self): class TestFromHttp: - """Tests for from_http function""" - - @pytest.mark.skip(reason="Requires network access and may be flaky") - def test_from_http_with_valid_file_number(self): - """Test from_http() with valid file number""" - # Using a known valid FEC file number - result = from_http(1805249) - - if result is not None: - assert isinstance(result, dict) - assert 'header' in result - - def test_from_http_with_string_file_number(self): - """Test from_http() accepts string file number""" - # This test just checks that the function accepts strings - # without making an actual HTTP request (would need mocking) - # We'll let it fail gracefully if network is unavailable - try: - result = from_http("1805249") - if result is not None: - assert isinstance(result, dict) - except: - # Network errors are okay for this test - pass - - def test_from_http_with_options(self): - """Test from_http() with options parameter""" - try: - result = from_http(1805249, options={'filter_itemizations': ['SA']}) - if result is not None: - assert isinstance(result, dict) - except: - # Network errors are okay for this test - pass + """Tests for from_http function. + + The Rust side resolves ``urlopen`` at call time via + ``py.import("urllib.request").getattr("urlopen")`` (src/fecfile.rs), so + monkeypatching ``urllib.request.urlopen`` is enough to intercept the + download. + """ + + def test_from_http_parses_downloaded_bytes(self, monkeypatch, sample_fec_bytes): + """Test from_http() parses whatever urlopen() hands back""" + urls = [] + + def fake_urlopen(url): # fecfile.rs calls urlopen(url) with one positional arg + urls.append(url) + return io.BytesIO(sample_fec_bytes) + + monkeypatch.setattr(urllib.request, "urlopen", fake_urlopen) + result = from_http(1921705) + + assert urls == ["https://docquery.fec.gov/dcdev/posted/1921705.fec"] + assert result["header"]["fec_version"] == "8.5" + assert result["filing"]["filer_committee_id_number"] == "C00900860" + assert len(result["itemizations"]["Schedule A"]) == 15 + + def test_from_http_accepts_string_file_number(self, monkeypatch, sample_fec_bytes): + """Test from_http() accepts a string file number""" + urls = [] + + def fake_urlopen(url): + urls.append(url) + return io.BytesIO(sample_fec_bytes) + + monkeypatch.setattr(urllib.request, "urlopen", fake_urlopen) + result = from_http("1921705", options={'filter_itemizations': ['SA']}) + + assert urls == ["https://docquery.fec.gov/dcdev/posted/1921705.fec"] + assert set(result["itemizations"]) == {"Schedule A"} + + def test_from_http_falls_back_then_returns_none(self, monkeypatch): + """Test from_http() tries the paper URL, then returns None""" + urls = [] + + def failing(url): + urls.append(url) + raise urllib.error.URLError("nope") + + monkeypatch.setattr(urllib.request, "urlopen", failing) + + assert from_http(1) is None + assert urls == [ + "https://docquery.fec.gov/dcdev/posted/1.fec", + "https://docquery.fec.gov/paper/posted/1.fec", + ] + + @pytest.mark.network + def test_from_http_live(self): + """Test from_http() against the real docquery.fec.gov (opt in: -m network)""" + result = from_http(1921705) + + assert result is not None + assert result["filing"]["filer_committee_id_number"] == "C00900860" class TestParseHeader: @@ -271,48 +286,46 @@ class TestParseLine: def test_parse_line_returns_dict(self, sample_fec_content): """Test parse_line() returns a dictionary""" lines = sample_fec_content.split('\n') - if len(lines) > 1: - # Get header first to extract version - first_line = lines[0] - _, version, _ = parse_header(first_line) - - # Parse second line (cover record) - second_line = lines[1] - result = parse_line(second_line, version) - - assert isinstance(result, dict) - + # Get header first to extract version + _, version, _ = parse_header(lines[0]) + + # Parse second line (cover record) + result = parse_line(lines[1], version) + + assert isinstance(result, dict) + assert result['form_type'] == 'F3N' + assert result['filer_committee_id_number'] == 'C00900860' + def test_parse_line_with_line_number(self, sample_fec_content): """Test parse_line() with line_num parameter""" lines = sample_fec_content.split('\n') - if len(lines) > 1: - _, version, _ = parse_header(lines[0]) - result = parse_line(lines[1], version, _line_num=1) - - assert isinstance(result, dict) - + _, version, _ = parse_header(lines[0]) + result = parse_line(lines[1], version, _line_num=1) + + assert isinstance(result, dict) + assert result['form_type'] == 'F3N' + def test_parse_line_has_form_type(self, sample_fec_content): """Test parse_line() result has form/record type field""" lines = sample_fec_content.split('\n') - if len(lines) > 1: - _, version, _ = parse_header(lines[0]) - result = parse_line(lines[1], version) - - # The first field should be the form type - assert len(result) > 0 - + _, version, _ = parse_header(lines[0]) + result = parse_line(lines[1], version) + + # The first field should be the form type + assert len(result) > 0 + assert 'form_type' in result + def test_parse_line_with_empty_line(self): """Test parse_line() with empty line""" with pytest.raises(ValueError): parse_line("", "8.0") - + def test_parse_line_with_invalid_version(self, sample_fec_content): """Test parse_line() with various versions""" lines = sample_fec_content.split('\n') - if len(lines) > 1: - # Should work with any version string - result = parse_line(lines[1], "8.0") - assert isinstance(result, dict) + # Should work with any version string + result = parse_line(lines[1], "8.0") + assert isinstance(result, dict) class TestPrintExample: diff --git a/crates/fec-py/tests/test_fixtures.py b/crates/fec-py/tests/test_fixtures.py new file mode 100644 index 0000000..bc56847 --- /dev/null +++ b/crates/fec-py/tests/test_fixtures.py @@ -0,0 +1,65 @@ +""" +Smoke tests over every committed fixture, through both public APIs. + +``fec_fixture`` is parametrized in conftest.py over ``tests/fixtures/*.fec``, +so dropping a new filing into that directory automatically extends this suite. +""" +from pathlib import Path + +from libfec_parser import fecfile +from libfec_parser.parser import Filing + +# name -> (fec_version, form_type, filer_id, itemization row count) +EXPECTED = { + "1721696.fec": ("8.4", "F3XN", "C00016683", 1387), + "1913493.fec": ("8.4", "F99", "C00917203", 0), # [BEGINTEXT], zero rows + "1913562.fec": ("8.4", "F1A", "C00677898", 3), + "1921705.fec": ("8.5", "F3N", "C00900860", 20), + "1923816.fec": ("8.5", "F1N", "C00925099", 3), +} + + +def test_all_fixtures_present(all_fixture_files): + """All five fixtures are committed and discovered""" + assert [p.name for p in all_fixture_files] == sorted(EXPECTED) + + +def test_parser_api_parses_fixture(fec_fixture: Path): + """Filing() parses every fixture with the documented shape""" + version, form_type, filer_id, n_rows = EXPECTED[fec_fixture.name] + filing = Filing(str(fec_fixture)) + + assert filing.header.fec_version == version + assert filing.cover.form_type == form_type + assert filing.cover.filer_id == filer_id + assert len(filing.itemizations) == n_rows + + +def test_fecfile_api_parses_fixture(fec_fixture: Path): + """fecfile.from_file() parses every fixture with the documented shape""" + version, form_type, filer_id, n_rows = EXPECTED[fec_fixture.name] + result = fecfile.from_file(str(fec_fixture)) + + assert set(result) == {"header", "filing", "itemizations", "text"} + assert result["header"]["fec_version"] == version + assert result["filing"]["form_type"] == form_type + assert result["filing"]["filer_committee_id_number"] == filer_id + assert sum(len(v) for v in result["itemizations"].values()) == n_rows + + +def test_both_apis_agree_on_row_count(fec_fixture: Path): + """The parser and fecfile layers see the same number of itemizations""" + filing = Filing(str(fec_fixture)) + result = fecfile.from_file(str(fec_fixture)) + + assert len(filing.itemizations) == sum( + len(v) for v in result["itemizations"].values() + ) + + +def test_bytes_and_path_agree(fec_fixture: Path): + """Filing(bytes) and Filing(path) produce the same filing""" + from_path = Filing(str(fec_fixture)) + from_bytes = Filing(fec_fixture.read_bytes()) + + assert repr(from_path) == repr(from_bytes) diff --git a/crates/fec-py/tests/test_parser.py b/crates/fec-py/tests/test_parser.py index 163d23b..dec4909 100644 --- a/crates/fec-py/tests/test_parser.py +++ b/crates/fec-py/tests/test_parser.py @@ -2,34 +2,12 @@ Tests for libfec_parser.parser module """ import pytest -from pathlib import Path from libfec_parser.parser import fec_header, Filing, Header, Cover, Itemization - -@pytest.fixture -def sample_fec_file(): - """Get path to a sample FEC file""" - # Look for a sample file in the cache or benchmarks directory - cache_dir = Path(__file__).parent.parent.parent.parent / "cache" - if cache_dir.exists(): - fec_files = list(cache_dir.glob("*.fec")) - if fec_files: - return fec_files[0] - - # Try benchmarks - bench_dir = Path(__file__).parent.parent.parent.parent / "benchmarks" - if bench_dir.exists(): - fec_files = list(bench_dir.glob("*.fec")) - if fec_files: - return fec_files[0] - - pytest.skip("No sample FEC files found") - - -@pytest.fixture -def sample_fec_bytes(sample_fec_file): - """Read sample FEC file as bytes""" - return sample_fec_file.read_bytes() +# The fixtures (`sample_fec_file`, `sample_fec_bytes`, `all_fixture_files`, …) +# live in conftest.py. The primary one is tests/fixtures/1921705.fec: +# v8.5, F3N, filer C00900860 "Jason Byors for Congress", 20 itemizations +# (1 SA11AI, 13 SA11C, 1 SA11D, 5 SB17) in that file order. class TestFecHeader: @@ -69,7 +47,16 @@ def test_header_attributes(self, sample_fec_file): assert hasattr(header, 'report_id') assert hasattr(header, 'report_number') assert hasattr(header, 'comment') - + + def test_header_values(self, sample_fec_file): + """Test Header values for the known fixture 1921705.fec""" + header = Filing(str(sample_fec_file)).header + + assert header.fec_version == "8.5" + assert header.record_type == "HDR" + assert header.ef_type == "FEC" + assert header.software_name == "FECfile" + def test_header_repr(self, sample_fec_file): """Test Header __repr__""" filing = Filing(str(sample_fec_file)) @@ -96,7 +83,15 @@ def test_cover_attributes(self, sample_fec_file): assert hasattr(cover, 'report_code') assert hasattr(cover, 'coverage_from_date') assert hasattr(cover, 'coverage_through_date') - + + def test_cover_values(self, sample_fec_file): + """Test Cover values for the known fixture 1921705.fec""" + cover = Filing(str(sample_fec_file)).cover + + assert cover.form_type == "F3N" + assert cover.filer_id == "C00900860" + assert cover.filer_name == "Jason Byors for Congress" + def test_cover_repr(self, sample_fec_file): """Test Cover __repr__""" filing = Filing(str(sample_fec_file)) @@ -120,80 +115,66 @@ def test_cover_fields_method(self, sample_fec_file): class TestItemization: - """Tests for Itemization class""" - + """Tests for Itemization class, against the known fixture 1921705.fec""" + def test_itemization_attributes(self, sample_fec_file): """Test that Itemization has expected attributes""" + itemization = Filing(str(sample_fec_file)).itemizations[0] + + assert isinstance(itemization, Itemization) + assert itemization.row_type == "SA11AI" + + def test_itemization_row_type_order(self, sample_fec_file): + """Test the exact itemization row types, in file order""" filing = Filing(str(sample_fec_file)) - - if len(filing.itemizations) > 0: - itemization = filing.itemizations[0] - assert isinstance(itemization, Itemization) - assert hasattr(itemization, 'row_type') - assert isinstance(itemization.row_type, str) - + + assert len(filing.itemizations) == 20 + assert [i.row_type for i in filing.itemizations] == ( + ["SA11AI"] + ["SA11C"] * 13 + ["SA11D"] + ["SB17"] * 5 + ) + def test_itemization_repr(self, sample_fec_file): """Test Itemization __repr__""" - filing = Filing(str(sample_fec_file)) - - if len(filing.itemizations) > 0: - itemization = filing.itemizations[0] - repr_str = repr(itemization) - - assert isinstance(repr_str, str) - assert 'Itemization' in repr_str - assert itemization.row_type in repr_str - + itemization = Filing(str(sample_fec_file)).itemizations[0] + + assert repr(itemization) == "Itemization(row_type='SA11AI', 45 fields)" + def test_itemization_len(self, sample_fec_file): """Test Itemization __len__""" - filing = Filing(str(sample_fec_file)) - - if len(filing.itemizations) > 0: - itemization = filing.itemizations[0] - length = len(itemization) - - assert isinstance(length, int) - assert length >= 0 - + itemization = Filing(str(sample_fec_file)).itemizations[0] + + assert len(itemization) == 45 + def test_itemization_getitem_positive_index(self, sample_fec_file): """Test Itemization __getitem__ with positive index""" - filing = Filing(str(sample_fec_file)) - - if len(filing.itemizations) > 0: - itemization = filing.itemizations[0] - if len(itemization) > 0: - field = itemization[0] - assert isinstance(field, str) - + itemization = Filing(str(sample_fec_file)).itemizations[0] + + assert itemization[0] == "SA11AI" + assert itemization[1] == "C00900860" + def test_itemization_getitem_negative_index(self, sample_fec_file): """Test Itemization __getitem__ with negative index""" - filing = Filing(str(sample_fec_file)) - - if len(filing.itemizations) > 0: - itemization = filing.itemizations[0] - if len(itemization) > 0: - field = itemization[-1] - assert isinstance(field, str) - + itemization = Filing(str(sample_fec_file)).itemizations[0] + + assert itemization[-1] == itemization[len(itemization) - 1] + assert isinstance(itemization[-1], str) + def test_itemization_getitem_out_of_bounds(self, sample_fec_file): """Test Itemization __getitem__ with out of bounds index""" - filing = Filing(str(sample_fec_file)) - - if len(filing.itemizations) > 0: - itemization = filing.itemizations[0] - with pytest.raises(IndexError): - _ = itemization[9999] - + itemization = Filing(str(sample_fec_file)).itemizations[0] + + with pytest.raises(IndexError): + _ = itemization[9999] + def test_itemization_fields_method(self, sample_fec_file): """Test Itemization.fields() returns a list""" - filing = Filing(str(sample_fec_file)) - - if len(filing.itemizations) > 0: - itemization = filing.itemizations[0] - fields = itemization.fields() - - assert isinstance(fields, list) - assert all(isinstance(f, str) for f in fields) + itemization = Filing(str(sample_fec_file)).itemizations[0] + fields = itemization.fields() + + assert isinstance(fields, list) + assert len(fields) == 45 + assert all(isinstance(f, str) for f in fields) + assert fields[0] == "SA11AI" class TestFiling: @@ -228,12 +209,11 @@ def test_filing_from_file_object(self, sample_fec_file): def test_filing_repr(self, sample_fec_file): """Test Filing __repr__""" filing = Filing(str(sample_fec_file)) - repr_str = repr(filing) - - assert isinstance(repr_str, str) - assert 'Filing' in repr_str - assert filing.cover.form_type in repr_str - + + assert repr(filing) == ( + "Filing(form_type='F3N', filer_id='C00900860', 20 itemizations)" + ) + def test_filing_header_property(self, sample_fec_file): """Test Filing.header property""" filing = Filing(str(sample_fec_file)) @@ -255,10 +235,27 @@ def test_filing_itemizations_property(self, sample_fec_file): """Test Filing.itemizations property""" filing = Filing(str(sample_fec_file)) itemizations = filing.itemizations - + assert isinstance(itemizations, list) + assert len(itemizations) == 20 assert all(isinstance(item, Itemization) for item in itemizations) - + + def test_filing_many_itemizations(self, pac_fec_file): + """Test a filing with many rows: 1721696.fec, v8.4 F3XN, 1,387 rows""" + filing = Filing(str(pac_fec_file)) + + assert filing.header.fec_version == "8.4" + assert filing.cover.form_type == "F3XN" + assert filing.cover.filer_id == "C00016683" + assert len(filing.itemizations) == 1387 + + def test_filing_with_no_itemizations(self, f99_fec_file): + """Test the F99 fixture: a [BEGINTEXT] filing with zero rows""" + filing = Filing(str(f99_fec_file)) + + assert filing.cover.form_type == "F99" + assert filing.itemizations == [] + def test_filing_with_invalid_path(self): """Test Filing with non-existent file path""" with pytest.raises(IOError): From 72512ebc5238fd64102d334cc6363b8617a5c2f0 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:23:35 -0700 Subject: [PATCH 08/13] py: private _native module, python/ source tree, declarative pymodule Co-Authored-By: Claude Fable 5.1 --- crates/fec-py/.gitignore | 1 + crates/fec-py/Cargo.toml | 4 ++- crates/fec-py/pyproject.toml | 5 ++-- .../fec-py/python/libfec_parser/__init__.py | 5 ++++ crates/fec-py/python/libfec_parser/fecfile.py | 22 ++++++++++++++ crates/fec-py/python/libfec_parser/parser.py | 14 +++++++++ crates/fec-py/src/fecfile.rs | 12 -------- crates/fec-py/src/lib.rs | 29 +++++++++++++------ crates/fec-py/src/libfec_parser/__init__.py | 13 --------- crates/fec-py/src/parser.rs | 19 +++--------- 10 files changed, 71 insertions(+), 53 deletions(-) create mode 100644 crates/fec-py/python/libfec_parser/__init__.py create mode 100644 crates/fec-py/python/libfec_parser/fecfile.py create mode 100644 crates/fec-py/python/libfec_parser/parser.py delete mode 100644 crates/fec-py/src/libfec_parser/__init__.py diff --git a/crates/fec-py/.gitignore b/crates/fec-py/.gitignore index 35738b5..a2c3946 100644 --- a/crates/fec-py/.gitignore +++ b/crates/fec-py/.gitignore @@ -2,5 +2,6 @@ __pycache__/ .pytest_cache/ *.abi3.so +python/libfec_parser/*.so dist/ .venv/ \ No newline at end of file diff --git a/crates/fec-py/Cargo.toml b/crates/fec-py/Cargo.toml index 59af4ab..46e9726 100644 --- a/crates/fec-py/Cargo.toml +++ b/crates/fec-py/Cargo.toml @@ -5,7 +5,9 @@ edition = "2021" license = "MIT OR Apache-2.0" [lib] -name = "libfec_parser" +# The compiled extension is private: it is imported as `libfec_parser._native`. +# The public API lives in python/libfec_parser/{parser,fecfile}.py. +name = "_native" # "cdylib" is necessary to produce a shared library for Python to import from. crate-type = ["cdylib"] diff --git a/crates/fec-py/pyproject.toml b/crates/fec-py/pyproject.toml index dfc8f83..aa9f50b 100644 --- a/crates/fec-py/pyproject.toml +++ b/crates/fec-py/pyproject.toml @@ -18,9 +18,8 @@ dev = [ ] [tool.maturin] -module-name = "libfec_parser" -python-packages = ["libfec_parser"] -python-source = "src" +module-name = "libfec_parser._native" +python-source = "python" [build-system] requires = ["maturin>=1.9.4,<2.0"] diff --git a/crates/fec-py/python/libfec_parser/__init__.py b/crates/fec-py/python/libfec_parser/__init__.py new file mode 100644 index 0000000..a689890 --- /dev/null +++ b/crates/fec-py/python/libfec_parser/__init__.py @@ -0,0 +1,5 @@ +"""Python bindings for libfec's .fec parser.""" + +from . import fecfile, parser + +__all__ = ["fecfile", "parser"] diff --git a/crates/fec-py/python/libfec_parser/fecfile.py b/crates/fec-py/python/libfec_parser/fecfile.py new file mode 100644 index 0000000..5c9026f --- /dev/null +++ b/crates/fec-py/python/libfec_parser/fecfile.py @@ -0,0 +1,22 @@ +"""`fecfile`-compatible API backed by libfec.""" + +# `_native` is a single extension module; `_native.fecfile` is an attribute of it, +# not an importable submodule, so it is bound by attribute access rather than +# `from ._native.fecfile import ...`. +from ._native import fecfile as _fecfile + +from_file = _fecfile.from_file +from_http = _fecfile.from_http +loads = _fecfile.loads +parse_header = _fecfile.parse_header +parse_line = _fecfile.parse_line +print_example = _fecfile.print_example + +__all__ = [ + "from_file", + "from_http", + "loads", + "parse_header", + "parse_line", + "print_example", +] diff --git a/crates/fec-py/python/libfec_parser/parser.py b/crates/fec-py/python/libfec_parser/parser.py new file mode 100644 index 0000000..a0ba613 --- /dev/null +++ b/crates/fec-py/python/libfec_parser/parser.py @@ -0,0 +1,14 @@ +"""Parsing primitives for FEC electronic filings.""" + +# `_native` is a single extension module; `_native.parser` is an attribute of it, +# not an importable submodule, so it is bound by attribute access rather than +# `from ._native.parser import ...`. +from ._native import parser as _parser + +Cover = _parser.Cover +Filing = _parser.Filing +Header = _parser.Header +Itemization = _parser.Itemization +fec_header = _parser.fec_header + +__all__ = ["Cover", "Filing", "Header", "Itemization", "fec_header"] diff --git a/crates/fec-py/src/fecfile.rs b/crates/fec-py/src/fecfile.rs index 8516265..b99042c 100644 --- a/crates/fec-py/src/fecfile.rs +++ b/crates/fec-py/src/fecfile.rs @@ -366,15 +366,3 @@ pub fn print_example(parsed: &Bound<'_, PyDict>) -> PyResult<()> { Ok(()) } - -/// FecFile compatibility submodule -#[pymodule] -pub fn fecfile(m: &Bound<'_, PyModule>) -> PyResult<()> { - m.add_function(wrap_pyfunction!(loads, m)?)?; - m.add_function(wrap_pyfunction!(parse_header, m)?)?; - m.add_function(wrap_pyfunction!(parse_line, m)?)?; - m.add_function(wrap_pyfunction!(from_http, m)?)?; - m.add_function(wrap_pyfunction!(from_file, m)?)?; - m.add_function(wrap_pyfunction!(print_example, m)?)?; - Ok(()) -} diff --git a/crates/fec-py/src/lib.rs b/crates/fec-py/src/lib.rs index 86d54c8..c4691b1 100644 --- a/crates/fec-py/src/lib.rs +++ b/crates/fec-py/src/lib.rs @@ -2,15 +2,26 @@ mod fecfile; mod parser; use pyo3::prelude::*; -use pyo3::wrap_pymodule; -/// A Python module implemented in Rust. The name of this function must match -/// the `lib.name` setting in the `Cargo.toml`, else Python will not be able to -/// import the module. +/// Native extension backing the `libfec_parser` package. +/// +/// The public API lives in `python/libfec_parser/{parser,fecfile}.py`, which +/// re-export from the submodules declared here. #[pymodule] -fn libfec_parser(m: &Bound<'_, PyModule>) -> PyResult<()> { - // Add submodules - m.add_wrapped(wrap_pymodule!(parser::parser))?; - m.add_wrapped(wrap_pymodule!(fecfile::fecfile))?; - Ok(()) +mod _native { + use pyo3::prelude::*; + + #[pymodule] + mod parser { + #[pymodule_export] + use crate::parser::{fec_header, Cover, Filing, Header, Itemization}; + } + + #[pymodule] + mod fecfile { + #[pymodule_export] + use crate::fecfile::{ + from_file, from_http, loads, parse_header, parse_line, print_example, + }; + } } diff --git a/crates/fec-py/src/libfec_parser/__init__.py b/crates/fec-py/src/libfec_parser/__init__.py deleted file mode 100644 index 24342ec..0000000 --- a/crates/fec-py/src/libfec_parser/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Import the native extension and expose submodules -from . import libfec_parser as _libfec_parser -import sys - -# Make submodules accessible as libfec_parser.parser and libfec_parser.fecfile -parser = _libfec_parser.parser -fecfile = _libfec_parser.fecfile - -# Also register them in sys.modules for "from libfec_parser.parser import ..." -sys.modules['libfec_parser.parser'] = parser -sys.modules['libfec_parser.fecfile'] = fecfile - -__all__ = ["parser", "fecfile"] diff --git a/crates/fec-py/src/parser.rs b/crates/fec-py/src/parser.rs index bb18a4c..396e839 100644 --- a/crates/fec-py/src/parser.rs +++ b/crates/fec-py/src/parser.rs @@ -4,7 +4,7 @@ use std::io::Cursor; use std::path::PathBuf; /// Python wrapper for FilingHeader -#[pyclass(skip_from_py_object)] +#[pyclass(module = "libfec_parser.parser", skip_from_py_object)] #[derive(Clone)] pub struct Header { #[pyo3(get)] @@ -36,7 +36,7 @@ impl Header { } /// Python wrapper for FilingCover -#[pyclass(skip_from_py_object)] +#[pyclass(module = "libfec_parser.parser", skip_from_py_object)] #[derive(Clone)] pub struct Cover { #[pyo3(get)] @@ -76,7 +76,7 @@ impl Cover { } /// Python wrapper for FilingRow (itemization) -#[pyclass(skip_from_py_object)] +#[pyclass(module = "libfec_parser.parser", skip_from_py_object)] #[derive(Clone)] pub struct Itemization { #[pyo3(get)] @@ -119,7 +119,7 @@ impl Itemization { } /// Main Filing class -#[pyclass] +#[pyclass(module = "libfec_parser.parser")] pub struct Filing { header: Header, cover: Cover, @@ -249,14 +249,3 @@ pub fn fec_header(contents: &[u8]) -> PyResult { )?; Ok(f.header.fec_version) } - -/// Parser submodule for FEC file parsing -#[pymodule] -pub fn parser(m: &Bound<'_, PyModule>) -> PyResult<()> { - m.add_function(wrap_pyfunction!(fec_header, m)?)?; - m.add_class::()?; - m.add_class::
()?; - m.add_class::()?; - m.add_class::()?; - Ok(()) -} From 21f949a98cc48870d716dec3d95eeb16f0c4e8f6 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:28:37 -0700 Subject: [PATCH 09/13] py: dynamic version from Cargo, __version__, full project metadata Co-Authored-By: Claude Fable 5.1 --- Cargo.lock | 2 +- crates/fec-py/Cargo.toml | 2 +- crates/fec-py/README.md | 2 + crates/fec-py/pyproject.toml | 32 +- .../fec-py/python/libfec_parser/__init__.py | 4 + crates/fec-py/uv.lock | 1787 +++++++++++++++++ 6 files changed, 1818 insertions(+), 11 deletions(-) create mode 100644 crates/fec-py/uv.lock diff --git a/Cargo.lock b/Cargo.lock index 3a3d6a7..8c7c406 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1529,7 +1529,7 @@ checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libfec_parser" -version = "0.1.0" +version = "0.0.32" dependencies = [ "csv", "fec-parser", diff --git a/crates/fec-py/Cargo.toml b/crates/fec-py/Cargo.toml index 46e9726..b2a988e 100644 --- a/crates/fec-py/Cargo.toml +++ b/crates/fec-py/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libfec_parser" -version = "0.1.0" +version = "0.0.32" edition = "2021" license = "MIT OR Apache-2.0" diff --git a/crates/fec-py/README.md b/crates/fec-py/README.md index 7df6792..39c12e4 100644 --- a/crates/fec-py/README.md +++ b/crates/fec-py/README.md @@ -197,6 +197,8 @@ The tests look for `.fec` files in the repo's `cache/` and `benchmarks/` directo Rebuilt wheels keep the same filename, so `uv` will happily reuse a stale cached copy. Pass `--no-cache` whenever you `uv run --with` a wheel from `dist/`, as the Makefile targets do. +**Releasing:** the version is read from `Cargo.toml` (not `pyproject.toml`) — bump it together with `crates/fec-cli/Cargo.toml` so the bindings stay in lockstep with the CLI. + To refresh the notebook's saved outputs after an API change: ```bash diff --git a/crates/fec-py/pyproject.toml b/crates/fec-py/pyproject.toml index aa9f50b..0bf3e88 100644 --- a/crates/fec-py/pyproject.toml +++ b/crates/fec-py/pyproject.toml @@ -1,21 +1,35 @@ [project] name = "libfec-parser" -version = "0.1.0" +dynamic = ["version"] description = "Fast parser for FEC electronic filings (.fec), backed by Rust" readme = "README.md" +requires-python = ">=3.11" +license = "MIT OR Apache-2.0" +license-files = ["LICENSE-*"] authors = [ { name = "Alex Garcia", email = "alexsebastian.garcia@gmail.com" } ] -requires-python = ">=3.11" +keywords = ["fec", "campaign-finance", "elections", "parser"] +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Science/Research", + "Programming Language :: Rust", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Scientific/Engineering :: Information Analysis", + "Typing :: Typed", +] dependencies = [] -license = "MIT OR Apache-2.0" -license-files = ["LICENSE-*"] -[project.optional-dependencies] -dev = [ - "pytest>=7.0.0", - "pytest-cov>=4.0.0", -] +[project.urls] +Homepage = "https://github.com/asg017/libfec" +Repository = "https://github.com/asg017/libfec" +Issues = "https://github.com/asg017/libfec/issues" +Changelog = "https://github.com/asg017/libfec/releases" + +[dependency-groups] +dev = ["pytest>=8", "fecfile", "pandas", "nbconvert", "ipykernel", "mypy", "maturin>=1.15,<2"] [tool.maturin] module-name = "libfec_parser._native" diff --git a/crates/fec-py/python/libfec_parser/__init__.py b/crates/fec-py/python/libfec_parser/__init__.py index a689890..dc45716 100644 --- a/crates/fec-py/python/libfec_parser/__init__.py +++ b/crates/fec-py/python/libfec_parser/__init__.py @@ -1,5 +1,9 @@ """Python bindings for libfec's .fec parser.""" +from importlib.metadata import version as _version + from . import fecfile, parser +__version__ = _version("libfec-parser") + __all__ = ["fecfile", "parser"] diff --git a/crates/fec-py/uv.lock b/crates/fec-py/uv.lock new file mode 100644 index 0000000..46a6bb4 --- /dev/null +++ b/crates/fec-py/uv.lock @@ -0,0 +1,1787 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version < '3.12' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version < '3.12' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[[package]] +name = "appnope" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/f7/a82489c2b6ebe32d3e2831895ae19c77861f0eadf3bb16034484d965dbb2/appnope-1.0.0.tar.gz", hash = "sha256:685db59cb6043c3c2e528adc0b3bce3a5f8d09bcf7492c6ea650d1b7421f3c49", size = 5454, upload-time = "2026-08-20T21:36:13.748Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/c7/6b687cb0f83d2a51017d47953f2ee430ffad6fec2a8ebc964e0718a33eb1/appnope-1.0.0-py3-none-any.whl", hash = "sha256:6fe0c04218aab65c54c4ff81638cdbf848d89f5653b74d68638a137f200dd16e", size = 4158, upload-time = "2026-08-20T21:36:12.444Z" }, +] + +[[package]] +name = "ast-serialize" +version = "0.11.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/1e/4f6082cdd6e5a29093513e9a3eabc5ed1c5331a9a84386b2fece80a00a48/ast_serialize-0.11.2.tar.gz", hash = "sha256:976a5bd75845d22f4b52905ddf53ab669ef1b14dba7735f5512841a2ef2b5450", size = 954387, upload-time = "2026-09-13T18:48:55.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/2e/beec3364eef4b01793a676d8cd16e9014c42044a5505000ceae3955e33fa/ast_serialize-0.11.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f6a8dfc5ab204a706f6e5d39c6f77c18c27ef084fa2081803a64a9160ce89277", size = 897089, upload-time = "2026-09-13T18:47:22.69Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d7/ef56443df2891c6ba2c4019c2cb3dcaf97c9948da6d963068e04e8dac6ea/ast_serialize-0.11.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:cb073bfa15742699d408ac50f60878383b5665ae1791d1b6799ea6f08633cd77", size = 1235218, upload-time = "2026-09-13T18:47:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/42/8d/cff58d17ba1d0272ff0b7ab5d3bdfcf8f47317eb0f47c001d394bffebf95/ast_serialize-0.11.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1d6ad94edbe93bf1dabc06c9f37d55b898fdabc456aa6d7ced5e23c14f795f32", size = 1216399, upload-time = "2026-09-13T18:47:26.202Z" }, + { url = "https://files.pythonhosted.org/packages/de/d2/a1da7675af5f42335c36e4da6d86ef4fd7168cead18de81df0a2d6faeb1a/ast_serialize-0.11.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40b2801cf2221bd922d9f69d2f0ebc373c3db47207315d525b2d87fa161a2af4", size = 1282064, upload-time = "2026-09-13T18:47:27.787Z" }, + { url = "https://files.pythonhosted.org/packages/97/89/5a400a13b2c9c0152ebb5ad45408a3fe5e4e60e325d3ac4e5cf6e915a0cc/ast_serialize-0.11.2-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd666cebd6ab3b3c0fd348a6202c26e18a401ee34293c3804d3472266bc146f6", size = 1285864, upload-time = "2026-09-13T18:47:29.667Z" }, + { url = "https://files.pythonhosted.org/packages/02/b8/80a381c70fd49f0316fb0383c4f9e4c13e81b010b64889bd45898ce8f5f4/ast_serialize-0.11.2-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d01f61352c96370febf6c0dbd488dee9183a731fb2702170da9163ae317cded", size = 1554755, upload-time = "2026-09-13T18:47:31.257Z" }, + { url = "https://files.pythonhosted.org/packages/90/97/dcaa34a32d2db789221c125b3eb10feb5089715fe53d9874d627afc26231/ast_serialize-0.11.2-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0fd40c668b0fa19b8fdb61d9e63d547e2e19cfbfe053a51ef0b6c37070298a8", size = 1301807, upload-time = "2026-09-13T18:47:32.714Z" }, + { url = "https://files.pythonhosted.org/packages/5c/9a/84a22420cb312642d7d31547c644d09a3d101418c6d6b9ef2ec30735cf11/ast_serialize-0.11.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa819d7c14c8e4153dcd84671826331538be7cbe460383fc6386f5eea5bd234", size = 1301941, upload-time = "2026-09-13T18:47:34.418Z" }, + { url = "https://files.pythonhosted.org/packages/20/8a/aa5f3dcf1aed9678c25982f40d366004e3c0cac47bc0c240f6b837dcbb1f/ast_serialize-0.11.2-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:a9ffa8a197a721f07a352d0be6185f5b3e6f9aaebfdb66169ed652108531ae3b", size = 1307910, upload-time = "2026-09-13T18:47:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/78/79/91a5102797fe3dc992171382d8579bcb33cbd1424b864ad3117ac43fb3fe/ast_serialize-0.11.2-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00119a8fb8c1dc0f1fab023f4d8071fa49e3b0208ee54d589fd463c16ab0124e", size = 1356258, upload-time = "2026-09-13T18:47:37.984Z" }, + { url = "https://files.pythonhosted.org/packages/51/52/54eeef9918e187ced417c4363eecea66975314cd5b9c91759eef7f7b714b/ast_serialize-0.11.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0de02520c11391a026e62987a9aa2c3c2ff01545155059ddf0c4bdf2c5ecbe9f", size = 1459057, upload-time = "2026-09-13T18:47:39.891Z" }, + { url = "https://files.pythonhosted.org/packages/e4/cb/fd84b52b15d42f2423319cffd1fb7f1e9df5d5198e69ab0b449c450254cf/ast_serialize-0.11.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b4e4558956b6a0fb35e18fba58f7d1810b1f2c0e6b52352572cd5dfb6b4ef33a", size = 1562447, upload-time = "2026-09-13T18:47:41.727Z" }, + { url = "https://files.pythonhosted.org/packages/be/92/9fb34f2e64b84a63cca92fb86bd0847b995a63b67477f44c20502fb60352/ast_serialize-0.11.2-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:6061a54f39e82a9f2cbcb9c268fc441890e4818a6636473caa4f4063254e0750", size = 1556423, upload-time = "2026-09-13T18:47:43.357Z" }, + { url = "https://files.pythonhosted.org/packages/75/0f/c43c44449e7ebc4e83ebd48750088fb06234622faa2d62d2a6dc8970d2a3/ast_serialize-0.11.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:85fbb01e83967a126d71f679f2b9528ef0912cb0854aa1a4657314c34e255b57", size = 1687156, upload-time = "2026-09-13T18:47:44.995Z" }, + { url = "https://files.pythonhosted.org/packages/2b/a7/9e520f4a79b639da9ee20c1e747c3d739329e902fc55ac38065f25419f56/ast_serialize-0.11.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:7aaaffc32905159774a107d3cf33dad59bd41b7a0d1bc9885532186753ee7439", size = 1481008, upload-time = "2026-09-13T18:47:46.602Z" }, + { url = "https://files.pythonhosted.org/packages/48/a8/bdd3989f19de09cffcd8179c131f6741a5a8619705fc75b09541ff61530b/ast_serialize-0.11.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:08eda88a0f290a36c38cab33df8bf7e35eb95bc802ca5beb2c8fcda471a7d10c", size = 1501597, upload-time = "2026-09-13T18:47:48.265Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8a/ca2dce2950875a4ef1d7c298196f803b0adcdb7c15ed0cecc71d84bccd70/ast_serialize-0.11.2-cp314-cp314t-win32.whl", hash = "sha256:76cc294246e60a914326b4ca88c6a5ea89c064906614aaf1537ce82f09e9449f", size = 1119503, upload-time = "2026-09-13T18:47:49.896Z" }, + { url = "https://files.pythonhosted.org/packages/5a/12/3f38e3613d07c46f9f81c5b1352748c6552397cc52825502e2c6ae44c6ea/ast_serialize-0.11.2-cp314-cp314t-win_amd64.whl", hash = "sha256:43b51e6ebe6549bf21416c3c78ee886147b80875a87cc6f69e303dde0d75be0b", size = 1156828, upload-time = "2026-09-13T18:47:51.454Z" }, + { url = "https://files.pythonhosted.org/packages/22/90/f89a4f67428a261daafdb69a0d0132c27933268702d1ba47e0b61c51aff1/ast_serialize-0.11.2-cp314-cp314t-win_arm64.whl", hash = "sha256:8df32ad4ff7843734a6c2f067ee974f6d3109ee5a2c3e1a9d2f79347bd282a9a", size = 1128298, upload-time = "2026-09-13T18:47:53.008Z" }, + { url = "https://files.pythonhosted.org/packages/0b/55/a1962188abf0e62d84d55892bb044347e434711763b9a1d4ad867a70c1be/ast_serialize-0.11.2-cp315-abi3.abi3t-macosx_10_12_x86_64.whl", hash = "sha256:ab924ba260efd7509492f272d4e236d24564033f20c005d7c63a107c6a76fc85", size = 1235457, upload-time = "2026-09-13T18:47:54.554Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ad/439c2959150718446af76fbe2f4000f35eba9869ef8564f3d9a3d0b1c370/ast_serialize-0.11.2-cp315-abi3.abi3t-macosx_11_0_arm64.whl", hash = "sha256:a586be418eb70a9f1396cea29ddac8f4b9bf277fb73ea2340db31e218bc00f32", size = 1215705, upload-time = "2026-09-13T18:47:56.178Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d8/2c6542fc3e7c56a0a25d8d12d034d5a2d2e1900e292567b1c1dca8e83124/ast_serialize-0.11.2-cp315-abi3.abi3t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8532f20916fa3189d4d785ef2a62d93c4d651ec9c5bffda66d2fc36898351f34", size = 1282530, upload-time = "2026-09-13T18:47:57.619Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ad/6f6755cd0842db46c3b10b1e4735f14aad78d71dea4753eb46933101711b/ast_serialize-0.11.2-cp315-abi3.abi3t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee732ae167e686d1d3c00f98d7d82b23138304694f0441b14d7ddf9c0f8a921c", size = 1287792, upload-time = "2026-09-13T18:47:59.227Z" }, + { url = "https://files.pythonhosted.org/packages/03/40/5da672f5dd23fb7dc0c884c97711e56a3540f2fe3c4355a81f8beb385911/ast_serialize-0.11.2-cp315-abi3.abi3t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75a1c7f46b9c19fc0ae01ca6fd076301628faa2ed7a8edbd55c6353c483946a3", size = 1557971, upload-time = "2026-09-13T18:48:00.96Z" }, + { url = "https://files.pythonhosted.org/packages/df/c7/2bb25684f697801eb72866fdb94ed5edbff3867ce878b0e542a4a5b9dab9/ast_serialize-0.11.2-cp315-abi3.abi3t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdf31a0bb85ea2575cc91669f005e6647d2efed491231c4dc1497bc9a5b3aa6", size = 1303230, upload-time = "2026-09-13T18:48:02.337Z" }, + { url = "https://files.pythonhosted.org/packages/d8/85/754681846f26e0ff1da729b1ffe3171e93c22f0aa6ec3cea5b14e3703846/ast_serialize-0.11.2-cp315-abi3.abi3t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b78e6fdef3b06c86ed263e1962fee5a7b9d2d158e738b212d13b2c605ee12f5", size = 1302271, upload-time = "2026-09-13T18:48:03.915Z" }, + { url = "https://files.pythonhosted.org/packages/fb/dc/f5521d8cb44b69095c3982ae3658a12c403e0efa19e51aeb9c8a79dff60c/ast_serialize-0.11.2-cp315-abi3.abi3t-manylinux_2_31_riscv64.whl", hash = "sha256:8d62a47714c8bc432b9fabcc29989c815c5da17327d35151f2fd0d85c2a7a5ff", size = 1309529, upload-time = "2026-09-13T18:48:05.562Z" }, + { url = "https://files.pythonhosted.org/packages/73/0d/649182c7fd7c4f782279bed514de2dd67e48a5afecb605a098d64fdc01fd/ast_serialize-0.11.2-cp315-abi3.abi3t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a5ffa70e76191dcf240d3c43e20c93b3bfd26f54d89148c762d57837f5bcd2c", size = 1356869, upload-time = "2026-09-13T18:48:07.534Z" }, + { url = "https://files.pythonhosted.org/packages/bf/cc/aff4d84c16afa742d13a75384127c7d24594dc8c304f0558a15924fd51af/ast_serialize-0.11.2-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl", hash = "sha256:bfbe47a3a7c368f28836e78b2440a3643ac0ec4c67d9fe53588e1448f0a3d35d", size = 1460006, upload-time = "2026-09-13T18:48:09.162Z" }, + { url = "https://files.pythonhosted.org/packages/94/a7/891cbec2e5e0d7159196159d3ff0646622f3120ff4576c839ac2dd56c719/ast_serialize-0.11.2-cp315-abi3.abi3t-musllinux_1_2_armv7l.whl", hash = "sha256:7f1823275b246f9c7d373be6879e4eec09686948895d4ad083f4b27fd7e4da70", size = 1562935, upload-time = "2026-09-13T18:48:10.978Z" }, + { url = "https://files.pythonhosted.org/packages/45/c4/2c8c4498340ea9aff87a9fd408309aa25d56dd51d7bbddfdb46a3c31424a/ast_serialize-0.11.2-cp315-abi3.abi3t-musllinux_1_2_i686.whl", hash = "sha256:57c0f5cb0021a5beb1e5e4d6e840ae2f23a28909703ef4d256a144cc1ad3d437", size = 1557109, upload-time = "2026-09-13T18:48:12.616Z" }, + { url = "https://files.pythonhosted.org/packages/0d/8b/c5d4e5226fa18885fe17f949aee3ab1aeb8389c384d946ec1b7c9489cc94/ast_serialize-0.11.2-cp315-abi3.abi3t-musllinux_1_2_ppc64le.whl", hash = "sha256:cd320a5c4f1f2742af97eea22954f776379175c5ef2504801e9a155f2ff9a4d7", size = 1691603, upload-time = "2026-09-13T18:48:14.293Z" }, + { url = "https://files.pythonhosted.org/packages/73/d6/1d2ca472586f9e3416a289a22f36eeb6dd6f47d77b1a4aba358405babbc7/ast_serialize-0.11.2-cp315-abi3.abi3t-musllinux_1_2_riscv64.whl", hash = "sha256:13b13afe32e845c86a573497729e1b7ddeb26c572c78bf50ece51da23b8fad5e", size = 1483053, upload-time = "2026-09-13T18:48:15.789Z" }, + { url = "https://files.pythonhosted.org/packages/0e/16/d3703a7c1e3c76b144ac9349a54d3926d0749918a8dc13a66cede208b8ec/ast_serialize-0.11.2-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl", hash = "sha256:9d80a81ec84660422579bdb8e789f656a794b48c7a1ae1261f6bd8bc1897d17d", size = 1502499, upload-time = "2026-09-13T18:48:17.405Z" }, + { url = "https://files.pythonhosted.org/packages/2b/e4/d974e55c2e247ef26ed1df01c74940583db9a5b3a8bcaad5732c6e2047fb/ast_serialize-0.11.2-cp315-abi3.abi3t-win32.whl", hash = "sha256:af8c003ce721b0099dd55cef4ba733500fc3054ea0cc8565d8957aaf7cccdeb4", size = 1119739, upload-time = "2026-09-13T18:48:19.005Z" }, + { url = "https://files.pythonhosted.org/packages/0d/00/d229443488e095054d5e0c0cc20689a2633b899d735849ff1b2c8e4f0cbf/ast_serialize-0.11.2-cp315-abi3.abi3t-win_amd64.whl", hash = "sha256:554d117cb916d8032d85007c654d179efbbfd446174c048062778136a922944f", size = 1158602, upload-time = "2026-09-13T18:48:20.524Z" }, + { url = "https://files.pythonhosted.org/packages/11/75/389fc1a6cfa0c4b2ce522f47d8401329d8bb11732e516d46465960fef1d9/ast_serialize-0.11.2-cp315-abi3.abi3t-win_arm64.whl", hash = "sha256:d60515335750d431e462af6e722bb55720a5e7827192777bddfd9c4376065a4d", size = 1128842, upload-time = "2026-09-13T18:48:22.052Z" }, + { url = "https://files.pythonhosted.org/packages/45/7d/c4f36898f19c728d091cdfdf960c9488e8d82bbe2e49ba13c05f43907a5d/ast_serialize-0.11.2-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:89499a439955931281986e97ca4dd3c064bf0d2e0027c0017344eb86667733a1", size = 897204, upload-time = "2026-09-13T18:48:23.695Z" }, + { url = "https://files.pythonhosted.org/packages/b1/54/f67120006fc73a55b6d057d4662d061fbb4eceafce3047c76ca8b382eb11/ast_serialize-0.11.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:daadf1c3e0224621607ffe16f1379e4bd372271ed2e1db8a67878f0bab3ef7e4", size = 1240734, upload-time = "2026-09-13T18:48:25.287Z" }, + { url = "https://files.pythonhosted.org/packages/9a/7e/8f2ab68bddbe58a66fbbaad87beeae3e7d7edddb17263d1fc423936cf34d/ast_serialize-0.11.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:1844ed9a487fb3de7325c52ddb33f2918b66b65cd54d3f8d83d23785ffe99fa4", size = 1228053, upload-time = "2026-09-13T18:48:26.788Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1b/8a69ab68f4c1603819f0481d756abdd8caf27cec7f1d77caa71007ebe997/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b17869f4ba261a5fa468a753328a548f4dbaf74b4eadae9e28aff66df7f1425b", size = 1292542, upload-time = "2026-09-13T18:48:28.295Z" }, + { url = "https://files.pythonhosted.org/packages/d1/ce/872f2e00f0467c289e483f0a34543463347243a2d0632748d89fcee5e0dc/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feb16d9c2a720e0120c58dd5d6e7b3c7c86b43249b60a3bc212bcb8fa031e2dd", size = 1294791, upload-time = "2026-09-13T18:48:29.969Z" }, + { url = "https://files.pythonhosted.org/packages/3a/82/36277c12af861c64b375c316135d8feffe3f400568463a8d2b2de4c2c4fb/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3109fe4805384effc8d0f8e41fbf875aa8f389af91b4348c1cfb60ea6e4cb82", size = 1567583, upload-time = "2026-09-13T18:48:31.85Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d7/ec643df91cea8bcbcb4e8011d6a8b08e5119b84f9554879f3e3c786d29d1/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abdb3e49ba053c3486ac1263bee9f16cc9a4a8abd9f8c90bfc21e3669f3ad9d1", size = 1312878, upload-time = "2026-09-13T18:48:33.495Z" }, + { url = "https://files.pythonhosted.org/packages/04/6f/4c992cd7841ba589fefb14ddc9aff2f6db7f2a615d4074f9ad04115b5ce0/ast_serialize-0.11.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7004ba572f09be34342ccb98dcd4bad5707d3d81adc8cb4c3f685d2a2c51bbc", size = 1312642, upload-time = "2026-09-13T18:48:35.294Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e3/22aaa209c231a83cfea004fd67dee7a7a54da3f169c6c460b14b96887385/ast_serialize-0.11.2-cp39-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:59c25f47524efa052971b860e128b1add0c94ede7dd16b2962952c85c3582365", size = 1319776, upload-time = "2026-09-13T18:48:36.866Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f7/d4685fb54d10108ce44d3bc893ef670854d61645d47ed96d73524db90c23/ast_serialize-0.11.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3a367e0e05ed2d1b747ceb07aa728a8c204cc008b589127e9bd4f40053d7575", size = 1365324, upload-time = "2026-09-13T18:48:38.412Z" }, + { url = "https://files.pythonhosted.org/packages/42/3a/250643ffad02bda520c50a9a5f02a5d43259a06f34ce393c91761d134d7e/ast_serialize-0.11.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:00bbf1f6669f813b48925b759f7ae4591067d456d443924055cab386e7e0a719", size = 1467653, upload-time = "2026-09-13T18:48:40.348Z" }, + { url = "https://files.pythonhosted.org/packages/c7/da/af66a646b9b7f8fdec95ce83fc7b1fe538b06864bc79bd554ac4fae2e6ea/ast_serialize-0.11.2-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ec1c20f89c3e0d83576e3c06f79375ce936266591fe0d5fd969914af3185cbaa", size = 1571914, upload-time = "2026-09-13T18:48:41.968Z" }, + { url = "https://files.pythonhosted.org/packages/34/82/77a9714564b9e8800087a8afec41527c65c39e49282baae2ac847b9c1c6a/ast_serialize-0.11.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:c58bb119b73657fdc5569692f316e1e25ca114bd62f7782eb527c6be438ba3a9", size = 1569862, upload-time = "2026-09-13T18:48:43.701Z" }, + { url = "https://files.pythonhosted.org/packages/65/06/fa77b52f46b9bd6dcd8ff2b880e3781f8c1a316bb1342bc3de92907c6f96/ast_serialize-0.11.2-cp39-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:f739e0b601be7300c5697a2573d9200bd1db74b34ab111ef9537b9d5dcd7f106", size = 1699020, upload-time = "2026-09-13T18:48:45.261Z" }, + { url = "https://files.pythonhosted.org/packages/e1/09/239c83153c7e0798e5867d6909cb06f53dccfef02f6999c8e2e21ecb98c3/ast_serialize-0.11.2-cp39-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:cae5addfbb54cc1d47fe947ef9138e9d83849ed1cbc72b819cf36d96a2315b07", size = 1492869, upload-time = "2026-09-13T18:48:46.922Z" }, + { url = "https://files.pythonhosted.org/packages/2f/eb/6108fb9a43fc7ab5529856e38e33c6e3e064fbfe375fdcbb208c7cd5438d/ast_serialize-0.11.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2fa3be25f7f5351b1b39c9f8a52779b2dbf21199efbae564b4746422e8edca4e", size = 1511621, upload-time = "2026-09-13T18:48:48.667Z" }, + { url = "https://files.pythonhosted.org/packages/8a/82/60367e58ef346a41ebc90d3f28593c1b8f5c2cb5314c7b2bbd98910ee131/ast_serialize-0.11.2-cp39-abi3-win32.whl", hash = "sha256:d70556a2f9230a44c99a655774cde823f056efc34466eabfb4085f0cb1ea9f99", size = 1125873, upload-time = "2026-09-13T18:48:50.661Z" }, + { url = "https://files.pythonhosted.org/packages/23/bf/b419c3205ce1143ba7c69baef4f0ba43c14d8712113bf34f9e0d27d609be/ast_serialize-0.11.2-cp39-abi3-win_amd64.whl", hash = "sha256:b9065dd23131a23b41f5bab3bf4e9b3c350a3fe8e36e8200eded9b729fcea484", size = 1165434, upload-time = "2026-09-13T18:48:52.169Z" }, + { url = "https://files.pythonhosted.org/packages/91/a7/c8bbb2173f7a7131b3b2412035b2d814ab5ef2ce9799bd06f07c451640e4/ast_serialize-0.11.2-cp39-abi3-win_arm64.whl", hash = "sha256:dab599cbdcb7b45b18c41fad746645580b3a24357082b7f0e8921cd373804f27", size = 1136031, upload-time = "2026-09-13T18:48:54.04Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, +] + +[[package]] +name = "bleach" +version = "6.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/3c/e12ac860709702bd5ebeb9b56a4fe334f1001246ee1b8f2b7ee28912df7d/bleach-6.4.0.tar.gz", hash = "sha256:4202482733d85cedd04e59fcb2f89f4e4c7c385a78d3c3c23c30446843a37452", size = 204857, upload-time = "2026-06-05T13:01:13.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl", hash = "sha256:4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081", size = 165109, upload-time = "2026-06-05T13:01:12.504Z" }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/b6/034f6802e9c3f6418966cfabb7db8c9252cc2429c5098f41cc43af804149/charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30", size = 363585, upload-time = "2026-08-15T08:16:46.646Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fa/6a7e2a7c4b5451912b8c417732df79574354443592a88d616de03da66ae5/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488", size = 251189, upload-time = "2026-08-15T08:16:48.287Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c8/ab42b07cfd82e919f427fcfaa7c41abae8242833ad1aad66d42bae40b669/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22", size = 239724, upload-time = "2026-08-15T08:16:49.67Z" }, + { url = "https://files.pythonhosted.org/packages/e7/80/b9348b5d3041209f98b4cdad7655766369233f1d533f4f4f7558e9717bec/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731", size = 280078, upload-time = "2026-08-15T08:16:51.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/38/083a24028304bc85bb9e376fed801178423dcbb67495f73b6ea0624e1894/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c", size = 276650, upload-time = "2026-08-15T08:16:52.625Z" }, + { url = "https://files.pythonhosted.org/packages/0d/35/731ac04aa0a097fc1c97f0994c375bdb230c6c96619db794208fe664e9ce/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8", size = 262325, upload-time = "2026-08-15T08:16:54.085Z" }, + { url = "https://files.pythonhosted.org/packages/f5/28/c2028e7021fb89c6e56868ed0e387b8e9aa811abdd2ab3208d6578d2c930/charset_normalizer-3.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486", size = 261140, upload-time = "2026-08-15T08:16:55.604Z" }, + { url = "https://files.pythonhosted.org/packages/28/f0/0c0ceec6d98b7daa62e361e418135d59685811d79ba11529aad5cdf15e84/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f", size = 252791, upload-time = "2026-08-15T08:16:57.103Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3e/48f4cd187b1c33189d86039e9cbe4f92c05454175504b44ff81806d4d1bf/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c", size = 240730, upload-time = "2026-08-15T08:16:58.418Z" }, + { url = "https://files.pythonhosted.org/packages/42/85/f9e22af69af67c54cce42be9455d9c81294f918b4ccc454db01f66efcac2/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18", size = 280791, upload-time = "2026-08-15T08:16:59.918Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4c/9044135f42127630b6fa742feb51256353f6ab87a78f2fdd1de3de955a7f/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5", size = 259598, upload-time = "2026-08-15T08:17:01.421Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ed/1dd7cfebb4e75812934c49ca3b79757d11948053f7937ab7070c151f3c55/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b", size = 278217, upload-time = "2026-08-15T08:17:02.782Z" }, + { url = "https://files.pythonhosted.org/packages/bf/eb/239c84503cc9e3ba6eb34686a24bc66e84f3924efdd7e38e751a19f6bc10/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6", size = 263417, upload-time = "2026-08-15T08:17:04.216Z" }, + { url = "https://files.pythonhosted.org/packages/37/ab/4e4510e1e288478e2c8333131d1c1382382ba8cd2165053c79e39d1da961/charset_normalizer-3.5.1-cp311-cp311-win32.whl", hash = "sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b", size = 181774, upload-time = "2026-08-15T08:17:05.58Z" }, + { url = "https://files.pythonhosted.org/packages/e3/57/32f0ccea59e8612057c61d6fd22ef2cb63cca93c9fe594094919696ac170/charset_normalizer-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9", size = 206653, upload-time = "2026-08-15T08:17:07.075Z" }, + { url = "https://files.pythonhosted.org/packages/17/d4/b65c433fc521e58b5f54293982a5e51c05cb5f2dd3f1c7a6acb65b75324e/charset_normalizer-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10", size = 185630, upload-time = "2026-08-15T08:17:08.502Z" }, + { url = "https://files.pythonhosted.org/packages/30/27/78873dc8b6a56357517b74b6bb9568b80450e7bb4f6ef7e3fa9d22aa0bd7/charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f", size = 344456, upload-time = "2026-08-15T08:17:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/be49ada26b1f0232d57aa89bbebf997a5cc2332a5616b6eca26ff680044d/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa", size = 238530, upload-time = "2026-08-15T08:17:11.563Z" }, + { url = "https://files.pythonhosted.org/packages/76/84/6f1290fa07ae6978d3960caa3eb1b8019bf9284ab7c2297b00c099ef4250/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369", size = 230200, upload-time = "2026-08-15T08:17:12.919Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a0/47b18adeed31c8f16ba9700f32c1b18594cfa09f47eb672a488c273c22bf/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893", size = 262222, upload-time = "2026-08-15T08:17:14.571Z" }, + { url = "https://files.pythonhosted.org/packages/38/fe/341861ac118dae06f3ec0eb487488af52128f2ef2faf0b11003944d22259/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0", size = 258951, upload-time = "2026-08-15T08:17:16.158Z" }, + { url = "https://files.pythonhosted.org/packages/6f/89/bb5108dc6c3651dca963f2b0a3ba19bbcb370c94e1b6d3e0e844a58e6dca/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08", size = 248801, upload-time = "2026-08-15T08:17:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ba/ef83ae3aca816393decfa3530976f38a79812d707b80b580ac33b83f9877/charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada", size = 244070, upload-time = "2026-08-15T08:17:19.191Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0b/c5292a2462d69b7378ea89793bbb5b2b6fcf6f7dd6d1667f9619094ad553/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9", size = 240110, upload-time = "2026-08-15T08:17:20.547Z" }, + { url = "https://files.pythonhosted.org/packages/46/22/111e5be3b740d5c2a5bfcedb3d237b6591e5c2e82ae9d6ffcb121fe0909c/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e", size = 232836, upload-time = "2026-08-15T08:17:21.895Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d2/d2aad6fe0dbb44b194bf3becb60f5a0ac48446ade999a47fe7bb41eb09a7/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6", size = 262712, upload-time = "2026-08-15T08:17:23.727Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/337e4663a5eae6de99db940ee8066d4145caafb61327db62deda15313cce/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf", size = 242977, upload-time = "2026-08-15T08:17:25.157Z" }, + { url = "https://files.pythonhosted.org/packages/ca/85/f82f8a92e31c7519410e2e1afdc630f28ec47490ce2c09a11c1a43cbb459/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71", size = 260207, upload-time = "2026-08-15T08:17:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/b7/52/643d11ffd60e9ac2fd1fb87e167a19285b9eefeff4a40e63c87cbfbeab36/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573", size = 250562, upload-time = "2026-08-15T08:17:27.971Z" }, + { url = "https://files.pythonhosted.org/packages/62/16/46556278c2168d12df9da7fede5dc6fc70e60301b26a82bbeec238c9cfe3/charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2", size = 178507, upload-time = "2026-08-15T08:17:29.277Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7a/4c6c298171e6b3e745633180ff59350fc0ca0db1ffd28df1e369e0579f71/charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2", size = 200551, upload-time = "2026-08-15T08:17:30.668Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d7/eb95a042f0dd22e304b0b6472b154f3546a1a039a9ee89ccb2a7f61591fc/charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a", size = 180700, upload-time = "2026-08-15T08:17:32.028Z" }, + { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, + { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, + { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, + { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, + { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, + { url = "https://files.pythonhosted.org/packages/29/cd/2b812ce5e888f1ce69a5350281e58aab07ae64a958ecae8912f30865718e/charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8", size = 212318, upload-time = "2026-08-15T08:18:04.403Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/a6ee107430768a5334e6d63f31f148a04a1a491ef161a1ac9415a73f2fa8/charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102", size = 224897, upload-time = "2026-08-15T08:18:05.997Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d9/35ae3f64f29d0179c35c3baefe575904df2913dde519129c7f75995a2b1d/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5", size = 194848, upload-time = "2026-08-15T08:18:07.397Z" }, + { url = "https://files.pythonhosted.org/packages/74/76/f2fc7380f056cc273a53af37f50d08ad54b2c59f61078f31432edcf1c2bd/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3", size = 198163, upload-time = "2026-08-15T08:18:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c", size = 341823, upload-time = "2026-08-15T08:18:10.458Z" }, + { url = "https://files.pythonhosted.org/packages/f1/5a/0e58b1c04a1596e0256f407274a92d5fb2ee21324409d1fab1da48a65b5b/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0", size = 242458, upload-time = "2026-08-15T08:18:11.989Z" }, + { url = "https://files.pythonhosted.org/packages/22/95/b4618ce912e6db0b1aae89ba788e38e8a7eba0f3025cc66e8c0699f977b2/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96", size = 226717, upload-time = "2026-08-15T08:18:13.401Z" }, + { url = "https://files.pythonhosted.org/packages/8a/76/c681192bbda3d55356db5dadd64381d5202b37c6b598fcda5282e88b5d3d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc", size = 266111, upload-time = "2026-08-15T08:18:14.961Z" }, + { url = "https://files.pythonhosted.org/packages/88/be/55127bfca72c0cff6c022488d140d7c5b04c771e3b72e9bdb4836d54979d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f", size = 263128, upload-time = "2026-08-15T08:18:16.515Z" }, + { url = "https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90", size = 251240, upload-time = "2026-08-15T08:18:18.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a5/cbe418bbc6ecdfc3e05a0116002897c4b403a5e838d697e64c78e9f0190d/charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506", size = 245282, upload-time = "2026-08-15T08:18:19.625Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a4/689bb42e8e7cd492f3cb64907c6bc00ad247ec9a3628cd3f8eed126e8ae1/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5", size = 244597, upload-time = "2026-08-15T08:18:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ce/9962938e179cf9f699d3f1e7b3114b5d7642dee6a893745229f9dd04f274/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e", size = 231376, upload-time = "2026-08-15T08:18:22.57Z" }, + { url = "https://files.pythonhosted.org/packages/85/54/46000450ada53bd9eac5429a2c8c54cd2d9b39c0c255f229aea9af0948a5/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5", size = 266715, upload-time = "2026-08-15T08:18:24.235Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/618749d70f792b44252a777bf89bfb86823b9bbc1ea13fe8ce759b07f38a/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3", size = 245848, upload-time = "2026-08-15T08:18:25.726Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3f/ffb64458527c7668031d5eb095d978de561958dc9f5b53f8e488a533e603/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3", size = 264521, upload-time = "2026-08-15T08:18:27.193Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ab/74a55fd803916a35ac461daf002708191aac19b546b80dc8cabfedc63d98/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36", size = 253054, upload-time = "2026-08-15T08:18:28.568Z" }, + { url = "https://files.pythonhosted.org/packages/a0/2a/6a9034b7d3c60b17499afb482df5878bf9fa20b50cc3887d5ef017a833db/charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7", size = 140580, upload-time = "2026-08-15T08:18:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/f3/46/1d362e1a00d035d66b9869e1281eee115907f7e390a16a07824ab5737360/charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b", size = 180325, upload-time = "2026-08-15T08:18:31.877Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b", size = 204175, upload-time = "2026-08-15T08:18:33.466Z" }, + { url = "https://files.pythonhosted.org/packages/ac/33/eeb384dbd8dec570661354592f4f2e1b2fcc92585624d146a000caf53841/charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687", size = 184123, upload-time = "2026-08-15T08:18:34.913Z" }, + { url = "https://files.pythonhosted.org/packages/1c/6c/c73fa9d5a85f6ab05395de61c5f6984e0a9ff40bb5ff888d46dff02526c6/charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348", size = 381682, upload-time = "2026-08-15T08:18:36.349Z" }, + { url = "https://files.pythonhosted.org/packages/30/c7/63565f860921457feba93bae6c86fb7746deb4cffeed2f375cb845318146/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef", size = 240826, upload-time = "2026-08-15T08:18:37.887Z" }, + { url = "https://files.pythonhosted.org/packages/06/ae/7ae8807410dfa33f8e6f1715740adeaafa8a816cc4cb33508f54b1f7c896/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885", size = 227861, upload-time = "2026-08-15T08:18:39.315Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a3/887c1642f0da26000b0e0652d91071113c0e72cea33952e225cf589f49a9/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375", size = 260758, upload-time = "2026-08-15T08:18:40.88Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/e6f5b9a3d0e55b0ef7505cd3765cdd48f22db89994c947b316f52f801fd8/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1", size = 259950, upload-time = "2026-08-15T08:18:42.351Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/e4e10a94d51cd1ee638aa7e00b65399e6b2a4e8376ab6d2eac9f95586671/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65", size = 249329, upload-time = "2026-08-15T08:18:43.914Z" }, + { url = "https://files.pythonhosted.org/packages/c4/25/d5f4198819e6059735a84e8d0bfb72dc33976da67b97adcd3fb5a5e07ec6/charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5", size = 243137, upload-time = "2026-08-15T08:18:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e925ca7569cf9fb9701fd82503fee73eea5268fdb856bdd64947092d3daa/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af", size = 242820, upload-time = "2026-08-15T08:18:46.842Z" }, + { url = "https://files.pythonhosted.org/packages/34/17/672c251a888ed2aebcdd2fe830ad0104e25ff83c43f5c4f9c15e9fc6853c/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1", size = 230504, upload-time = "2026-08-15T08:18:48.353Z" }, + { url = "https://files.pythonhosted.org/packages/3f/fc/f6a85abebd42ce4da2f1db0aa56cc6a0df1995e318b3875d14401b8381d1/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9", size = 263087, upload-time = "2026-08-15T08:18:49.859Z" }, + { url = "https://files.pythonhosted.org/packages/98/66/7c42677e739ba66746b297e2046918d793078094dc239e1e72768cffccc6/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a", size = 243269, upload-time = "2026-08-15T08:18:51.601Z" }, + { url = "https://files.pythonhosted.org/packages/de/d8/a50b79237f417af10f8c2a501ce8d1ca87829a22e69117891ca4ba20a69e/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032", size = 258766, upload-time = "2026-08-15T08:18:53.23Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1d/0fc91aeaeb3c83b748f532399ce67cf84604b48297405d740000f7a9e786/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e", size = 250814, upload-time = "2026-08-15T08:18:54.768Z" }, + { url = "https://files.pythonhosted.org/packages/ae/10/3d8c777cf9024615295aa1b808324ad5b4a77855869c00824bad74ffaf8a/charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4", size = 191074, upload-time = "2026-08-15T08:18:56.305Z" }, + { url = "https://files.pythonhosted.org/packages/4d/81/ae557d3c44d1a1d688696d60563413a0866a91b7ebc50f20df838be3d8c8/charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00", size = 216476, upload-time = "2026-08-15T08:18:57.889Z" }, + { url = "https://files.pythonhosted.org/packages/27/e9/61c01fb8b804692569c036b3fc50495814502dcf13a60649c6055390b02c/charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f", size = 194115, upload-time = "2026-08-15T08:18:59.418Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4e/8544831ef59d8f27ce92c80871380fdacc8076a8a56ed62f82e54f991333/charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af", size = 342048, upload-time = "2026-08-15T08:19:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a6/e3b46852424246065355644f4fb6dbccc0239a42a2eee27ecfc8957f0bcd/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8", size = 242997, upload-time = "2026-08-15T08:19:02.492Z" }, + { url = "https://files.pythonhosted.org/packages/03/3b/0cc9a26777334ab2f2e3089b948bbf4e4fe72ea70b897715ef6415043ec8/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90", size = 237014, upload-time = "2026-08-15T08:19:03.943Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c2/027335f0aa337a2a2e121bac1ad88c4f02ba6053ea0926802784f3db11af/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20", size = 266174, upload-time = "2026-08-15T08:19:05.598Z" }, + { url = "https://files.pythonhosted.org/packages/86/d3/e367787febe4e74769dec0f406f2c3c8d1b955fce5aee1fd0f94e8367a45/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449", size = 263361, upload-time = "2026-08-15T08:19:07.251Z" }, + { url = "https://files.pythonhosted.org/packages/af/3d/391b193eb9f3e84b02f9314088c386debdc0debee843535aaea2e2c6715d/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a", size = 252143, upload-time = "2026-08-15T08:19:08.816Z" }, + { url = "https://files.pythonhosted.org/packages/2e/57/de221f1745a90d418199761967e2776bfe2c275a1194220985e8c1d37833/charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0", size = 252086, upload-time = "2026-08-15T08:19:10.255Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e3/d119f86a01f9331e8186175f24873b1d74a7ee9e2e4b4d68f9947dae5afd/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e", size = 245231, upload-time = "2026-08-15T08:19:11.807Z" }, + { url = "https://files.pythonhosted.org/packages/26/de/d8e48c135ae480879539cdb179c8d3b50c7879497d75dd899b5763b69cee/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2", size = 241546, upload-time = "2026-08-15T08:19:13.416Z" }, + { url = "https://files.pythonhosted.org/packages/67/c4/217755fd1abc50d326c252922cd642002758095a81ff45010337b8b3ef65/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626", size = 267033, upload-time = "2026-08-15T08:19:14.981Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d7/34d8e404e358d2adcc5a228c2134643af00104c8fb0bf525f3688d756f05/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5", size = 252045, upload-time = "2026-08-15T08:19:16.618Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fa/40414471acf0aa0692ca77305aa00e434fcd8288f0941c93c30e9a5f8f2f/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774", size = 264866, upload-time = "2026-08-15T08:19:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/32/90/fcc850bae791abd2e0c041847f13e270aa08692a79f3e00de6d2dce1cb50/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7", size = 253932, upload-time = "2026-08-15T08:19:19.734Z" }, + { url = "https://files.pythonhosted.org/packages/af/af/53afe99068b3c10b4cbae592a52ef72a7c92c0188440e83ee3a078fd8f75/charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9", size = 180320, upload-time = "2026-08-15T08:19:21.37Z" }, + { url = "https://files.pythonhosted.org/packages/c9/bc/f46a132041b29e4a8779ed712d3df1bf112e94ca8de58b66d7ec2c0cf8b9/charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712", size = 204174, upload-time = "2026-08-15T08:19:23.088Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5d/9ed554480eda8e447b673648628fdc29574d23dbad01fe11837adedd1cae/charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7", size = 184126, upload-time = "2026-08-15T08:19:24.471Z" }, + { url = "https://files.pythonhosted.org/packages/3b/32/9b8929bf384061ee1fe5d9c27c6f9776d3d824039ad4e14c88ec00c7808e/charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663", size = 381441, upload-time = "2026-08-15T08:19:26.038Z" }, + { url = "https://files.pythonhosted.org/packages/96/10/e9aa7923d3ddac652c99a1c5f7be494e737e151566a44abe018daf757f2c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11", size = 241742, upload-time = "2026-08-15T08:19:27.532Z" }, + { url = "https://files.pythonhosted.org/packages/28/53/a2d249ebddf47b889a100c0bdcb61a2f9dbb8bc24ef325cc062e4f476877/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc", size = 235298, upload-time = "2026-08-15T08:19:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/7d/07/469f78af590f7d5cd48e20d8dbfa3d66deeff9ba37768c04d886b5afd45c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a", size = 262500, upload-time = "2026-08-15T08:19:30.955Z" }, + { url = "https://files.pythonhosted.org/packages/55/66/3bb56a47f7dcba014055b1a1d33c6f08bbe9c1e74dba154cfa25f90ae885/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4", size = 258888, upload-time = "2026-08-15T08:19:32.458Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c1/2adc2800903fb013210349313b710a5376856578d9e33e6b9a1d8b36714a/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004", size = 250243, upload-time = "2026-08-15T08:19:33.94Z" }, + { url = "https://files.pythonhosted.org/packages/95/b5/a18d0dd1157ab655cc2cb14a545f4a4784bbad70ab3502412e36097502d9/charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b", size = 249871, upload-time = "2026-08-15T08:19:35.413Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c3/525f508cd1e58d0450ac55ed40ac75bc3a97482c59def5278456a5fbf03c/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263", size = 243580, upload-time = "2026-08-15T08:19:36.886Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/49a91fe7e97c8140094ca5c64161ab623a70d9f636bf834eace14048acb5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee", size = 239807, upload-time = "2026-08-15T08:19:38.392Z" }, + { url = "https://files.pythonhosted.org/packages/d3/58/56a48c296601274c4689b864a8e2dfb209b81dfcb39472753ce95eea662b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c", size = 264083, upload-time = "2026-08-15T08:19:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/10/4c/dc48409274a1817ff349711d26c62aa0c597df865d4d69ef79160c859193/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e", size = 250317, upload-time = "2026-08-15T08:19:41.53Z" }, + { url = "https://files.pythonhosted.org/packages/81/58/d325912115caec62d6bdd77bbab5e0b7da5d234a9f20affdffcbcb530d0b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d", size = 258173, upload-time = "2026-08-15T08:19:43.07Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/b13b1ccae2c8ec63980d13be1890eb73f8aeabbfce02a24aabc0908788f5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61", size = 251960, upload-time = "2026-08-15T08:19:44.587Z" }, + { url = "https://files.pythonhosted.org/packages/1e/25/ed3f9919c5aef8cc818be1f972f565f7610d7b2076b8ebb98839516ffc3c/charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f", size = 191186, upload-time = "2026-08-15T08:19:46.293Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/43c2b3e9d8267092b913eb8b0603f0f71993c395632886bd37a7223f96cf/charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb", size = 215947, upload-time = "2026-08-15T08:19:47.853Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/9aad3e9c8865e5e0efa9a7f6f81c37a67635a985145ecd44528a81e088ee/charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a", size = 193909, upload-time = "2026-08-15T08:19:49.383Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, + { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, + { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, + { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + +[[package]] +name = "debugpy" +version = "1.8.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/9d/3cb6693342acf96802dba89934a5b8da43c201d764ebd1f2c0514a3d42bd/debugpy-1.8.22.tar.gz", hash = "sha256:e489c7268e1c7b41e13b438d9c533d2a7af73fb59bf8cd30fead8286c1c39c4e", size = 1710877, upload-time = "2026-09-15T21:44:02.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/4a/8c24c588088c622df6dacdc0110e9cc81b44781fe7a408113441e76aa955/debugpy-1.8.22-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:66e4ac3d6e7026e83e7d93d7ee2f51dd4a4e8dff673578d424e60796893e5b2c", size = 2217799, upload-time = "2026-09-15T21:44:11.57Z" }, + { url = "https://files.pythonhosted.org/packages/c7/14/1c9ff33eba51da70a8dfe2277cc13153bb3ffec79282b9acfcdbe1641d30/debugpy-1.8.22-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:192b73e8d53bbd60225220c0943627bf249ac93d0ea3090e23c45f3e0ceb6a35", size = 3074375, upload-time = "2026-09-15T21:44:13.349Z" }, + { url = "https://files.pythonhosted.org/packages/10/e8/1fa16a94af7d8b86c3ca336d7d32b78cb2c475266d0bb889732d2bc50310/debugpy-1.8.22-cp311-cp311-win32.whl", hash = "sha256:745e1800ec2961e5660c1a317c0a20e28c0fef4de36c04f17a21c33f2b37a92a", size = 5258392, upload-time = "2026-09-15T21:44:15.182Z" }, + { url = "https://files.pythonhosted.org/packages/32/1a/c086b883a4561017bfdd83c1bc70bf2b05ab6540ff767dedf207cadab938/debugpy-1.8.22-cp311-cp311-win_amd64.whl", hash = "sha256:1e76339d5510bc17e9181dba9577508afcb21aad5728f1a55ef74d7d97d255f3", size = 5277955, upload-time = "2026-09-15T21:44:16.986Z" }, + { url = "https://files.pythonhosted.org/packages/73/21/5c7f5c66eaeee57c9dadb0bbff22efddc8d99cdbd3d036c806175f1828cc/debugpy-1.8.22-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ad076f4f66cb8acb79e4384d48b1ea60a0b1957aa0b1112d4887ea3a4df60e0", size = 2499375, upload-time = "2026-09-15T21:44:18.478Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ec/7389798843643ea5bc6a08480ba1b855377c70e2ed90189c0a03594e401e/debugpy-1.8.22-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:8a697acec45dbc70d17fb5d9f4f61989fc294d273c69de487fd10cb35fdd75eb", size = 4000941, upload-time = "2026-09-15T21:44:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/20/f4/64ce7a2499550929e08654360b270409eeda3e321b7c27027d9c919aa36b/debugpy-1.8.22-cp312-cp312-win32.whl", hash = "sha256:12bc7f368182b517cf26c76a2393fff65354e365fa1552b6241e66edff17997b", size = 5359040, upload-time = "2026-09-15T21:44:22.218Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fe/e7d3b72874cdd327bda295d1995a01e426857ae9cbaaba74fd997bc3afbc/debugpy-1.8.22-cp312-cp312-win_amd64.whl", hash = "sha256:371a4ba4a5975eb958393903f3254cf983da7b1c7c178b3f987ee427f42515e3", size = 5398304, upload-time = "2026-09-15T21:44:24.119Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f4/fee6d40f5865aa84e1100c9df1a0f2cf8991776b61f11f433ff277df4415/debugpy-1.8.22-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:c21dd7e1ec22556bb41dc3bf6b86c603e440ec889c4acb27d7206354b2106c54", size = 2493531, upload-time = "2026-09-15T21:44:25.835Z" }, + { url = "https://files.pythonhosted.org/packages/bc/4f/8df91270afbf61fc5ab202951f28451194a7eb093704b26da11cb0ecd308/debugpy-1.8.22-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:c1ffb9953708b648ecf6acd2e5ad2c002bf68785ed618197dd4463a2a7226f39", size = 3994351, upload-time = "2026-09-15T21:44:27.31Z" }, + { url = "https://files.pythonhosted.org/packages/4f/11/2e34a4f21d6155b0c58003fd6fca9819df7d6fe7d7acd83b146b648a57ee/debugpy-1.8.22-cp313-cp313-win32.whl", hash = "sha256:ba810a66b437e3c43ca0ce0892404f010338286263ca8e5108442d76a9485337", size = 5359071, upload-time = "2026-09-15T21:44:29.064Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f5/c2b3e8260388d7b76bc4e5a3a29648a0ca47dca6a2721d6549ff2d944eee/debugpy-1.8.22-cp313-cp313-win_amd64.whl", hash = "sha256:f49b1d6cecf326b63c06d7f517e4a6642777f758c58cb799e7bc5a6dd74721c2", size = 5400362, upload-time = "2026-09-15T21:44:30.857Z" }, + { url = "https://files.pythonhosted.org/packages/ea/95/d97240bb68b86db8d0a07602be068aae9e50f17063d696a4c6f619975311/debugpy-1.8.22-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:e6744ac1850c73c2ba7b29a126cf9ab74efd1831190720e8fee17ef5389c8f5d", size = 2493148, upload-time = "2026-09-15T21:44:32.518Z" }, + { url = "https://files.pythonhosted.org/packages/70/9e/994fe1fb23dd4a5a8d059a0dc95da4b0821907200a61c2d5a4fdc21b6cf8/debugpy-1.8.22-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:0c1104233340196e5cbf5514e7dfdbb98968e730cfd7fdd6f3d72a082be838a9", size = 3961025, upload-time = "2026-09-15T21:44:34.387Z" }, + { url = "https://files.pythonhosted.org/packages/37/e0/66319918883cf6dd6dea3805210c3cafd9e65dfaa6f8b852482cff10a026/debugpy-1.8.22-cp314-cp314-win32.whl", hash = "sha256:feea785c7bbeb8cfd5b01a63f9061c899dc468c8be81671141a29305774fa294", size = 5359408, upload-time = "2026-09-15T21:44:36.128Z" }, + { url = "https://files.pythonhosted.org/packages/94/53/5b4d91f7fffb9393ac907133201d1da0c070d57e463ee8e2ec1db3cb63b6/debugpy-1.8.22-cp314-cp314-win_amd64.whl", hash = "sha256:d593a330297332ec435f3965c448b6d500e03f33675cf2063178bc76377a788e", size = 5397429, upload-time = "2026-09-15T21:44:38.429Z" }, + { url = "https://files.pythonhosted.org/packages/24/71/580df4aed96c9b23c9cbb049907d8ac1347050afdb8f450df20649d51578/debugpy-1.8.22-cp315-cp315-macosx_15_0_universal2.whl", hash = "sha256:a9eca6ab09a61534e923064400081e016f7e1d8430cc6e8b7a9cecd2f59e2b07", size = 2493380, upload-time = "2026-09-15T21:44:40.074Z" }, + { url = "https://files.pythonhosted.org/packages/b0/10/a323945b0966e560c40fe48470d2847bfc7692a8f550d7086e9a28f5b623/debugpy-1.8.22-cp315-cp315-manylinux_2_34_x86_64.whl", hash = "sha256:b7dbde1fb822d100802d505b2aed6d0813b1a0a2015d495cb8798b2215d5d1e5", size = 3975456, upload-time = "2026-09-15T21:44:41.623Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f9/4383635281999c3eaa44bf327de523ba42240b35eb87c1130adac4a829c6/debugpy-1.8.22-cp315-cp315-win32.whl", hash = "sha256:225d063f81708c2546999e7edfac0198b2d5c2f144797dc64858f867948633e0", size = 5359469, upload-time = "2026-09-15T21:44:43.234Z" }, + { url = "https://files.pythonhosted.org/packages/7b/14/4fe9f46a9c825c8cbc6dc4aebc2a885b0bceb37ce2a37699c170482e7a40/debugpy-1.8.22-cp315-cp315-win_amd64.whl", hash = "sha256:b17a4896520f1c6da09ce76ec8215df0b85b0b6f3617526a4c65c2315340875a", size = 5397869, upload-time = "2026-09-15T21:44:44.783Z" }, + { url = "https://files.pythonhosted.org/packages/56/3d/c7dc9f35bc9e22cdb53679f844bee40fd5cff871862f60595869a433400d/debugpy-1.8.22-py2.py3-none-any.whl", hash = "sha256:a9e9d3550e15ca479c59333e90845029190531f0cacfedab3b815a57bd913947", size = 5374857, upload-time = "2026-09-15T21:44:54.454Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "fastjsonschema" +version = "2.22.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/a4/9473c7c3b87009d9c1d74034e4a0f6a35ff0d42dd0f9866d0c3ec4e9217b/fastjsonschema-2.22.2.tar.gz", hash = "sha256:72064e12356a7d6ef02165be2946b9abadbdf238536e07eb587e3dbaa33099cf", size = 385171, upload-time = "2026-08-15T19:47:08.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/82/2755c7c982086f00d4dab85bc120ec35045a9fc2191893a6ce79afe94443/fastjsonschema-2.22.2-py3-none-any.whl", hash = "sha256:0fb3915616adac85ccfdd737d26be1089845d2019819505b42d39888458f74d4", size = 27413, upload-time = "2026-08-15T19:47:04.406Z" }, +] + +[[package]] +name = "fecfile" +version = "0.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytz" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/f8/ea2d13a0da8c7eaa0a2888ea27b9e2874f77f6a1bc8df17dfd15b2fd533c/fecfile-0.9.1.tar.gz", hash = "sha256:c3e6ba2038b83f92a8c5ceb98a85e40611436449a83371258db8535df07d9f5a", size = 34841, upload-time = "2025-05-03T15:58:32.595Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/25/60af6983ea521a93e4cecbc2feb22eaf18b1be547d078764e588d110d8cb/fecfile-0.9.1-py3-none-any.whl", hash = "sha256:2ad17b24b55f01283dfd8b750b78f3c5c04c0c2a640875e1ac08d378804ed613", size = 31166, upload-time = "2025-05-03T15:58:30.906Z" }, +] + +[[package]] +name = "idna" +version = "3.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "ipykernel" +version = "7.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio2" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/c4/e4a38f579de4225a561305666f7541cdabb30075def2aa1ac17bd73c1fb5/ipykernel-7.3.0.tar.gz", hash = "sha256:9acaaaf97d16355166e4085afe9d225bfbdf2b7ef520f9df3be8f2b248275e09", size = 184899, upload-time = "2026-06-10T08:41:25.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl", hash = "sha256:897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057", size = 120583, upload-time = "2026-06-10T08:41:23.648Z" }, +] + +[[package]] +name = "ipython" +version = "9.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "psutil", marker = "sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/32/99451b1283ec5d92ad77073f12e1c667dc10775384d8f15c2914207149dd/ipython-9.17.1.tar.gz", hash = "sha256:8919be8c27f20a6f4423145028063f6637b42a03ce57665bb12015ee1f073529", size = 4539289, upload-time = "2026-09-01T08:29:32.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/1e/65b59cf518c106aa755e7f7da3099027738687a862ec785060702a481320/ipython-9.17.1-py3-none-any.whl", hash = "sha256:6d1645743cfd1a07eb695d85aa2b5fa66721f8cbae9431d4049f7084bbf06509", size = 639038, upload-time = "2026-09-01T08:29:30.673Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "jedi" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/2a/906772148a06e48885039e0250c340b770a55bbf37b08d6ee0449df369c3/jupyter_client-8.10.0.tar.gz", hash = "sha256:9f7116294dca55f1785be880057d44544db9b1567718d92cb33c58886afb9497", size = 360653, upload-time = "2026-08-28T12:17:10.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/88/7c548de1f6c2ade7c931a3282da73f9274fa6a1531091be682f89c85efb9/jupyter_client-8.10.0-py3-none-any.whl", hash = "sha256:5f73f24f22fa25192cfff6b23c051932a2473a797b05734aff495b392103e14e", size = 110184, upload-time = "2026-08-28T12:17:09.028Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload-time = "2023-11-23T09:26:37.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload-time = "2023-11-23T09:26:34.325Z" }, +] + +[[package]] +name = "libfec-parser" +source = { editable = "." } + +[package.dev-dependencies] +dev = [ + { name = "fecfile" }, + { name = "ipykernel" }, + { name = "maturin" }, + { name = "mypy" }, + { name = "nbconvert" }, + { name = "pandas" }, + { name = "pytest" }, +] + +[package.metadata] + +[package.metadata.requires-dev] +dev = [ + { name = "fecfile" }, + { name = "ipykernel" }, + { name = "maturin", specifier = ">=1.15,<2" }, + { name = "mypy" }, + { name = "nbconvert" }, + { name = "pandas" }, + { name = "pytest", specifier = ">=8" }, +] + +[[package]] +name = "librt" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/9b/356320fbae2ac8467e21c5e73e1389c80468e4998c62cc7d3536cc51b614/librt-0.15.0.tar.gz", hash = "sha256:4e66cbe84437497d951b799d3e1551291b6fb3d643820a7014b3655d57a59162", size = 214338, upload-time = "2026-08-07T10:49:42.663Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/52/06790ced2ac7117f890c21bda43c39c958ec82aa665c0718e821d33ff939/librt-0.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:823b92cf3c18ecd08afc70c42473888b41b6e8ef5046f3b82c05c154a2fa3d22", size = 148039, upload-time = "2026-08-07T10:46:41.165Z" }, + { url = "https://files.pythonhosted.org/packages/e7/1d/8e150b7fc449a1f33c8a760965cc1f43b14fc1577d9d0b50ab2701420e74/librt-0.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70bc1b602cf59917e8f0c7a2cbc8bcc6fbc14d5486136b00707a79619121d63", size = 153067, upload-time = "2026-08-07T10:46:42.418Z" }, + { url = "https://files.pythonhosted.org/packages/51/87/a162bc5a66a35599dc619ecb215145f4de7d68e886b479b6d12593139f7c/librt-0.15.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:814ff83a25b5fce8b9c80c4dd803153fb5c5599fc74db9e022466938368957ef", size = 493087, upload-time = "2026-08-07T10:46:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/e5/3a/aeea1fc620cf48060d3065b37614edbf97043c099d0f50782bc8ca61d897/librt-0.15.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:57f5eeb6ad4c180de583b1038e61fe5fbd9796bb69a8a1c1a0c7ddbec4c8c60f", size = 485608, upload-time = "2026-08-07T10:46:45.038Z" }, + { url = "https://files.pythonhosted.org/packages/52/ff/fe571ad416f0856fd0d5578ffc2e6dc531891e586e36b647bcf50569cab8/librt-0.15.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82909c8f7eb9952656b65d3147afde4cf8e6d5a991eebc86418b5e65843b0ab8", size = 498723, upload-time = "2026-08-07T10:46:46.35Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e1/7a65eb5dedb1f00aebd948cdd8e17add48bf066cab3514e9daf84ab45a6c/librt-0.15.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f779070399f991400fc451719e0ea388eb7de313388bada2c127a35de05f798a", size = 516002, upload-time = "2026-08-07T10:46:47.599Z" }, + { url = "https://files.pythonhosted.org/packages/5f/45/59832b0ebfbd08c2742e6ece372ceb53f18bf1faef5d33c8daf3abebf749/librt-0.15.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bac89069bc496ebdf4f79ebb57bbd10d0b214c8454225deb672d91002bd17e18", size = 508607, upload-time = "2026-08-07T10:46:48.873Z" }, + { url = "https://files.pythonhosted.org/packages/ea/0d/37fa73f3b43ebd8259f91ae9102a15e5a54e65d581e48dea72df3e81d7a4/librt-0.15.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e0d00c708fb2f5822b152429b1ac80a58dbbbc3f6c232c4d13a3f7fcf2ea5b4c", size = 530422, upload-time = "2026-08-07T10:46:50.45Z" }, + { url = "https://files.pythonhosted.org/packages/26/02/e046c6fe7a5881ac34623242192f484426ba8a75595fd18f22c53a3f530f/librt-0.15.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6c6624fe268625869485553dd7cc1daf30d22558215bb2a4ff16f67a9801a31a", size = 534303, upload-time = "2026-08-07T10:46:51.693Z" }, + { url = "https://files.pythonhosted.org/packages/95/32/d5e6d861ab0366f3edf74f887ab0c9eb9f535aaf01d32b80b4f734daa179/librt-0.15.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f56b397858a23dacf35ede366ed2212fdc03a6a57a1ad36468ad6e9dc5fac091", size = 536084, upload-time = "2026-08-07T10:46:52.951Z" }, + { url = "https://files.pythonhosted.org/packages/2a/de/d69d725513fe53fc90c6d7a1f86e4428939bad2fb905b17fe4c18d413dde/librt-0.15.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4388184646efe2054911c5b00a1077d6d1ee86a95b7e8ba96dc7850a809f3f40", size = 514307, upload-time = "2026-08-07T10:46:54.194Z" }, + { url = "https://files.pythonhosted.org/packages/36/93/f8aded0d6682b4f25820fa86e0690f87f01df9fd7bd09ddb04d9167ad021/librt-0.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:97335f59082f9fe2ce6c2a9cc6433a0114bbb6cd4d5c09dd76c95c68b9f9a8b0", size = 557686, upload-time = "2026-08-07T10:46:55.443Z" }, + { url = "https://files.pythonhosted.org/packages/74/09/ffeb6bdeb6cd862b4272fddc8ad05f938dd25d020ed517e631813917d80a/librt-0.15.0-cp311-cp311-win32.whl", hash = "sha256:83380ffde38062a2e9bb55d83e74474f6614665528b98a6928720fc006dfffbb", size = 104917, upload-time = "2026-08-07T10:46:56.605Z" }, + { url = "https://files.pythonhosted.org/packages/96/28/7e2313a3ffbf0b4de7ba3da58a09e488507b4bd1ea2b5e69378354a23415/librt-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:f75720477ee05d509a310e856cacc8d909adc182f7b91193c207bcc26d7ee6db", size = 125886, upload-time = "2026-08-07T10:46:57.729Z" }, + { url = "https://files.pythonhosted.org/packages/39/9e/04b8c3cde014ef255ee785730425268354543acc38902093a40afa0dc164/librt-0.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:256237037a3ab001ae8d9803b2d43562a4c3aa38739843694349e4d5ebb0fd56", size = 111885, upload-time = "2026-08-07T10:46:58.787Z" }, + { url = "https://files.pythonhosted.org/packages/ba/39/99c25030e782bdfb7a21be8c05254806a2e4bbb05c8d50c2a2130acbfa05/librt-0.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e87bc679f86a99aa3b26e3c78eeb821a247c9a28eae48eaafcc32c3bf4c3bb9e", size = 151021, upload-time = "2026-08-07T10:47:00.057Z" }, + { url = "https://files.pythonhosted.org/packages/14/43/f4b1bd1b2888798a1409808889a25ea1ba49eaabce7d681ed27734c2df9d/librt-0.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71599e011ac880e8e45d46047d714871894c7d4ab6f25626f8d4f89da21f368d", size = 155267, upload-time = "2026-08-07T10:47:01.311Z" }, + { url = "https://files.pythonhosted.org/packages/0c/db/3ad9c965c72f1e1d6beeec44ec10a54e17be8ae042fbb4baade16cbadced/librt-0.15.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c802434092b769b1d613ed2e13fac15fbfce1934a74bd10283b03c0fae231cd1", size = 503136, upload-time = "2026-08-07T10:47:02.45Z" }, + { url = "https://files.pythonhosted.org/packages/4b/07/5888a6d76acd62ebce66c61b74d94e9370b9c32929f111e487bb6546f8ed/librt-0.15.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5500eeae393a184d14e1f35645962c27129d20c81afa4069e6ef826ebc2b3aaa", size = 496670, upload-time = "2026-08-07T10:47:03.675Z" }, + { url = "https://files.pythonhosted.org/packages/29/39/ab57cc2f5b276156da02bb7f5a8921bada1cb1993ffec99acf811c602c23/librt-0.15.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6ecfc32dfb46fb7b565bcd6abf9412acf978775a998273d22888a6d7953730dd", size = 513688, upload-time = "2026-08-07T10:47:04.981Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b9/bdbb0b648b5c2befb031f4c6f3b1dd857415e8fb492a25a3c764a6681e6c/librt-0.15.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cc46cfd15022e35084355478c9ac809d90b1152222706ac9a7655ec21df6fa", size = 531904, upload-time = "2026-08-07T10:47:06.211Z" }, + { url = "https://files.pythonhosted.org/packages/93/26/473c2e4b6c104e9e58e27ce95fc8005c8bd4fc36cae4f254371125a92db8/librt-0.15.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d5f51401d102c885b9ca509e62c79b1dbff286e1b9b047fde6f763780789356d", size = 524427, upload-time = "2026-08-07T10:47:07.592Z" }, + { url = "https://files.pythonhosted.org/packages/26/60/03b3abb82b41714671b907bf6989b228e31e6a8af52dec82b5b0728dc250/librt-0.15.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cc30523e3f1a23fb7511cc659834a0d01a1042bb9de359bc1c131cc4ec6c9656", size = 543155, upload-time = "2026-08-07T10:47:08.866Z" }, + { url = "https://files.pythonhosted.org/packages/f2/0e/9bb1f0a4affbd0a1888f4f79dc03ed2a299d9a2c26c59ab2a97dcbf11903/librt-0.15.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:59fe030d8ae4a57e3fb7756bf35a858de74e04066fc8555c53d0af979132af81", size = 546890, upload-time = "2026-08-07T10:47:10.327Z" }, + { url = "https://files.pythonhosted.org/packages/dc/84/6937a280d461f7de6e031ffb02edc2b7c3c90d49d630565ce8ff27cbc5f2/librt-0.15.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5a6526a2a956bbb1e4ae3568c82e650fc99119c66bb011ea60715744955a2b4d", size = 555163, upload-time = "2026-08-07T10:47:11.798Z" }, + { url = "https://files.pythonhosted.org/packages/bc/95/2a2853c1ee014bf102116e7f897a04beeaeb2461b45b79af98bdfb95f1ef/librt-0.15.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:85ea21ec6730194d67156b0e0b5430ccb1d61f8b8b907e39b37f9812b74a13f0", size = 535812, upload-time = "2026-08-07T10:47:13.279Z" }, + { url = "https://files.pythonhosted.org/packages/c9/4c/cf9601c1b4c5f09280acd5d83abdb2e68527a2be8257136eb42304218622/librt-0.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1e47b8ba865d7ede071a91a7163073bbaeb72541f1ef8a07d512c45c7b5007f2", size = 573688, upload-time = "2026-08-07T10:47:14.727Z" }, + { url = "https://files.pythonhosted.org/packages/47/6d/9ac7cbec46189a7625af4b5acbd25f10d827f4141b2002181848c8418923/librt-0.15.0-cp312-cp312-win32.whl", hash = "sha256:a5207ec414d1c4a2a7231b2086970dc036f94293cdf338190984958a013a42f1", size = 106138, upload-time = "2026-08-07T10:47:15.973Z" }, + { url = "https://files.pythonhosted.org/packages/38/d0/2ae99c83be86ce23f925ac1aeeedc777e97f427c4a8d190c70d0a16e9a87/librt-0.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:73b30cfa976659b3917c8f6153bdb0591c6a9ec6583599fd24a689b690622022", size = 126974, upload-time = "2026-08-07T10:47:17.049Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ef/dd24f9635c730b86b87587967dda7516b1845e8b17684603d31607fed598/librt-0.15.0-cp312-cp312-win_arm64.whl", hash = "sha256:a54cf9e0ef47b96af580849db5471142200568ce1e02cbf416addab551369570", size = 112292, upload-time = "2026-08-07T10:47:18.222Z" }, + { url = "https://files.pythonhosted.org/packages/e7/42/467b53a601b406ccd7b97c1fd54b59cb34f9185ad5ce7e9d5c3c4e8961c8/librt-0.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:db13ca398005abcbe538deda87b686d9bd08b7001cf40c4c06b444960ae10a26", size = 151029, upload-time = "2026-08-07T10:47:19.312Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e6/36c2299b7a94b84fdd01220d8a777a71be5be0925bb0dbdf71c0a06a34d9/librt-0.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa1f1995789dca3698bc550aaceb09a51bd5df0a057ff84ff15296cd1975b801", size = 155194, upload-time = "2026-08-07T10:47:20.398Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b6/ed5071f9325845e670bd36012757419767fbf56af77ed483077b9e4db541/librt-0.15.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55456ea87d8df21808446d03817be2f65e20391c1c615d9187440dff28cd08dc", size = 502568, upload-time = "2026-08-07T10:47:21.652Z" }, + { url = "https://files.pythonhosted.org/packages/7f/81/6450c67c3615d87704bcbc21323fafc69c799b06a044c447529f725d4b01/librt-0.15.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5a86a5a08c2235316bdb359d5dbb6ce0abfca7fac06363103e2c5af571d92f95", size = 496153, upload-time = "2026-08-07T10:47:22.925Z" }, + { url = "https://files.pythonhosted.org/packages/e1/d6/5f52b722bc75076954b3bfd49be15ea362df4d580c6fb315d0f617100d30/librt-0.15.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e56b6a368529bed262da40ce13f8fef590db0479819cca84f16a1f01ac356d0b", size = 513336, upload-time = "2026-08-07T10:47:24.213Z" }, + { url = "https://files.pythonhosted.org/packages/8d/e2/c08fd1d36ce63ea5a12b85c5d37f4550b5f86a692167e41e5a74222607ae/librt-0.15.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:234d8d394721fa0d786af15ebf1f3fb7f3ed82fd1cd0cde45c2f247b5d4281d2", size = 531661, upload-time = "2026-08-07T10:47:25.507Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d8/d9482fcbeb177b9eb87bb3899eeb3b42be690313c652f9e146b1d0681fb2/librt-0.15.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d8363d7accb0286ac3a0e633f396e93800dafb8150494505daf9515bbda591f3", size = 524487, upload-time = "2026-08-07T10:47:26.79Z" }, + { url = "https://files.pythonhosted.org/packages/10/cc/075171517b41f861753034fbb151b42cfc83bcc853849f24f5e66fd60ccf/librt-0.15.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0f0ee3644d951f31055ad07d77d92520e84505dd7a432cc4cd501dd70ee06785", size = 543201, upload-time = "2026-08-07T10:47:27.999Z" }, + { url = "https://files.pythonhosted.org/packages/b0/03/42c2330f37eeb475b6affeedd06518f60035f323af3a839335e3fc9fef2d/librt-0.15.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2cfd1a81a648806e6a7717be4cc4d1bb392fa229752bf8444ba365e381e984d6", size = 546467, upload-time = "2026-08-07T10:47:29.396Z" }, + { url = "https://files.pythonhosted.org/packages/57/1e/1ad4c5638f7e64d8560328bd25c54b409a661bdb6ff254b38ff90744288d/librt-0.15.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a6cd22c9da0d866558e46a041f1cc0c2bbb26b61b137b2347fa834c332e1d101", size = 555139, upload-time = "2026-08-07T10:47:30.815Z" }, + { url = "https://files.pythonhosted.org/packages/49/41/39fa7d15db1204cd1cbe6514680fbdc243adf754a0885061308f43afc013/librt-0.15.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:6d5225ef8801e4ea5e482fa9b5dfb891dd9ef6f6d870f1f25d449ca2c70ac218", size = 536050, upload-time = "2026-08-07T10:47:32.222Z" }, + { url = "https://files.pythonhosted.org/packages/1e/88/c6dcf0dd8e26dc0c9a499a2abab8646c86dcaf9ecea9524cb46d3686331a/librt-0.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d28a05796b99f749bf8794f17ba9ba1612d0076b802e9cfc62c554634e9ce3b", size = 573700, upload-time = "2026-08-07T10:47:33.527Z" }, + { url = "https://files.pythonhosted.org/packages/1b/9b/ab54c71a7918a7c34fa5327fb61390a77446a07a146fbfb1165250a61035/librt-0.15.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:2067ff438048cead9d223ca5675bae2a25e520a7c3e6c1498bf9c6892d22caab", size = 82194, upload-time = "2026-08-07T10:47:34.835Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b2/4f9a243bb892395f3becb80789ade13771701091f9f07ab8230247953ba8/librt-0.15.0-cp313-cp313-win32.whl", hash = "sha256:1cd3b721f24c206398b9e26da3c3a9c011e6e89d06f318ba8ebefc30f1003890", size = 106231, upload-time = "2026-08-07T10:47:36.251Z" }, + { url = "https://files.pythonhosted.org/packages/bf/af/64aff4885a40b93132382f2c314647d722574605416504379184ef3045ea/librt-0.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:f395a4a9a03ac062dbe9a9f82e0c720502e590a38feee6a757bc82e9c63afbd8", size = 126996, upload-time = "2026-08-07T10:47:37.453Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/335bccf6c7cb9028cb0b54aead27d9ece3f01f83bc6baa2abace5da655c1/librt-0.15.0-cp313-cp313-win_arm64.whl", hash = "sha256:0a15cb554761247d84a3ec0cbdf4078d70725384f0e4662c0fa3b26266eb60ad", size = 112188, upload-time = "2026-08-07T10:47:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/a8/93/949053fb462eecc4a9a5ee770a81f4b40be7b79538b245545d4aebc6b58b/librt-0.15.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f5de7feedc56337a088eb15cd9fafa9938367362221d8cc62c642b7f94821993", size = 149833, upload-time = "2026-08-07T10:47:39.86Z" }, + { url = "https://files.pythonhosted.org/packages/61/ca/8281aa6cd560a3420e4497729f6b704b53be3eeaaef82d5aeadddaf7441f/librt-0.15.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c0eb900c0e91f4aebe680845242e614f1864edfd44106380d0752ac29522bf8", size = 154088, upload-time = "2026-08-07T10:47:41.065Z" }, + { url = "https://files.pythonhosted.org/packages/dd/02/1a1662dceaba6a086360891448d5ce9a7d3555976cae59a31a39d744b9c7/librt-0.15.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e8c9a650a188e38bac005048cbe6342e81407782944d01934540ab75e417df21", size = 494215, upload-time = "2026-08-07T10:47:42.388Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/99211619dc656370a3740c33d2b0b6d5a3fb1e73689314f6ed477a397dc4/librt-0.15.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:92bfed8deec93df30286b9fe9e3b1dd17329cc076a192b4ee5ec223841d54953", size = 491173, upload-time = "2026-08-07T10:47:43.683Z" }, + { url = "https://files.pythonhosted.org/packages/d4/aa/5448d0b05f4579b635d3899176817ebf561af0e57bacd425b5b1887264c1/librt-0.15.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec4b19788f835711a2072f9dbe6b03b3bf32ed1f0fb30cf399bdd59d9f0c33fa", size = 505512, upload-time = "2026-08-07T10:47:45.314Z" }, + { url = "https://files.pythonhosted.org/packages/95/82/01940e40b83c43a546c4a3c896cf34ca272a9690899d55914e4827b3dcce/librt-0.15.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4c7bacb70930f3d0a56f4ecf1be474a1f0d941b01dd73b756f3c256d42cb879", size = 523073, upload-time = "2026-08-07T10:47:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/88/fa/759c0030f3ee371439eb26de34fc745807caf0abb878af7af4b8b7c3dd3d/librt-0.15.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3e79f05e4a08b4d880342673312bbc895b56df7765605796f15902eb5367d3ae", size = 515080, upload-time = "2026-08-07T10:47:48.319Z" }, + { url = "https://files.pythonhosted.org/packages/0b/27/894e072228fcb159703c655da69f8cd10dbed489c36e3df7dd032a2483be/librt-0.15.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a417149c0cba4d50b61e992e5a15e69eaf96746609b461cc4ed168aeef6b79dd", size = 534164, upload-time = "2026-08-07T10:47:49.875Z" }, + { url = "https://files.pythonhosted.org/packages/98/a3/0078e91c1f36f8815db17827de15650b9a3fe56c55fbf998c854b34e40d3/librt-0.15.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:da7a94d6a3411f579d72aa3e3bc5fbca7ed4549f3dbd7e5de3aa567333374285", size = 540616, upload-time = "2026-08-07T10:47:51.408Z" }, + { url = "https://files.pythonhosted.org/packages/86/33/81a29b796dd52a45e9ef7974c7732926e8f10f15b8d2be505665979f896d/librt-0.15.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:856f743ae607f2c1380eccb566c0038a9fb3eabf0fc2be2704d76d9f73557239", size = 545890, upload-time = "2026-08-07T10:47:52.818Z" }, + { url = "https://files.pythonhosted.org/packages/05/82/8be1baa1350e5d30cfd70ae79d0a6f4dc5862ef47f7bb2808aabc9bb86e5/librt-0.15.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:779a6e7c894737e5983e7790a9c78c4000c30e23c9aada08081bdbea53b0fa60", size = 523287, upload-time = "2026-08-07T10:47:54.165Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4f/d1be6a01a35c20ef734e0e44113f87d4af756a9354a89dcfbe3b4f8af5e1/librt-0.15.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:96bb17dbe8bab3c0954fbebfc69ed395599de75b6bbc35e3270a878e15d4dd65", size = 565868, upload-time = "2026-08-07T10:47:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/67/88/649cfa33f5825927b160610f670bdab012a64d627eddb94fa795ea4292fd/librt-0.15.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:7220697efaa6e5348fc3d18ee7f8563d4bfecd9872b37ffb915bfc1d08840622", size = 81619, upload-time = "2026-08-07T10:47:56.886Z" }, + { url = "https://files.pythonhosted.org/packages/22/31/8e88a8d5e48fc8d1a817787fb6811dfff6499acd6c8683dd83934aa6ede0/librt-0.15.0-cp314-cp314-win32.whl", hash = "sha256:f54598964d357b1c5ab77cf5d92f21e598fe0e23cdbe9618480807f81b4eba15", size = 100138, upload-time = "2026-08-07T10:47:58.093Z" }, + { url = "https://files.pythonhosted.org/packages/80/92/20fd6c4b6a1b1a564b076d55cd3d427d8428217d7638dc25a654cc4791d4/librt-0.15.0-cp314-cp314-win_amd64.whl", hash = "sha256:3ff5893a2c23d886aa9ce786de5ac6ddc74aeeaf90743682b74d920e117d2e28", size = 121258, upload-time = "2026-08-07T10:47:59.564Z" }, + { url = "https://files.pythonhosted.org/packages/fc/28/6af430b44d9ebb897b865a3c363b6dcace51357be2347cc0f8f869656a86/librt-0.15.0-cp314-cp314-win_arm64.whl", hash = "sha256:3722a099730704c9a3d70c879fc0f51daec25fe5f1555672d97bc595abeafb95", size = 106467, upload-time = "2026-08-07T10:48:01.097Z" }, + { url = "https://files.pythonhosted.org/packages/7e/aa/b42bb798942ced219f6d63b27e07f91237887a8d0bd0921666db79a13790/librt-0.15.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:38c0c7d4b6fc06c3324b3f9162c8391bfc4fd9dde53afe1033ce7edb48d5a714", size = 159523, upload-time = "2026-08-07T10:48:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/75/03/1b53cd4ef904e73b1d828a5f90143bf94a2967d7cfff0b9ccf93e12aa9b4/librt-0.15.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8b2fdd7ead3c995c37940a790690660d0ca006c302db26cc51933f6766866fc3", size = 161638, upload-time = "2026-08-07T10:48:03.725Z" }, + { url = "https://files.pythonhosted.org/packages/ac/c4/9f9c9fba097d49e9e694c2b4dc331df31884645ecbc58a93b4b5fc69d2c5/librt-0.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2fde98cf1fc4bac144ce23c2c4c017b924ba714509ea9334977b0b27050c837d", size = 701795, upload-time = "2026-08-07T10:48:05.135Z" }, + { url = "https://files.pythonhosted.org/packages/4c/05/0966840bda0380c8ae167b9043c6230202941cc90ea29c48e096964c765e/librt-0.15.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:e3b461183c5fa7681b48560f91515f53a953122fb30c71e07abc67d7ddf58c38", size = 682147, upload-time = "2026-08-07T10:48:06.555Z" }, + { url = "https://files.pythonhosted.org/packages/18/af/1c47ca573c30ea47d195aec26133af522fea1104afaace028d7b32247ea8/librt-0.15.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4bbcc257e3babea20a91715c361b24554ec4e8f51aa578568afc230799fe1a19", size = 696397, upload-time = "2026-08-07T10:48:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/2e/0f/1aed6223d4f9f9d1171a8596ff100ea4c3f7699fea7a4ba657c3e60daa6c/librt-0.15.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b845b8d48088fad0cadc84be4b8fda63203be7e9237b71015b3925443c1f35ab", size = 722542, upload-time = "2026-08-07T10:48:09.569Z" }, + { url = "https://files.pythonhosted.org/packages/c6/22/9e3a929aea456c97d69e6ef3884efea56d4807f97399471cc946baebd8af/librt-0.15.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b30e600e8f337b9bd7f39b86d9fdfedc73cc46e3d0f745931a23a234220bb7e2", size = 729709, upload-time = "2026-08-07T10:48:11.129Z" }, + { url = "https://files.pythonhosted.org/packages/e9/1b/c327ef6018e3a9ca0b8e7c5eddeeb331ba8f9b76c24e126d37d0f6d62faf/librt-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:64b0c8c35aa4c4ed79896359f3e0b285cbe4e610042106500da4811c322cc108", size = 752891, upload-time = "2026-08-07T10:48:12.558Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d1/d5f1ea02c56930087009e39db9b70660a663e76c730b27b925d786718457/librt-0.15.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0da0d94cb802f32a0524653e7201f2cef72d5f700a5407678f5290483d4fcd08", size = 745301, upload-time = "2026-08-07T10:48:14.55Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3c/5f7c585d15ebb2250c73e7c0ee4e9e47be72c65d520c07ddbcdc62037674/librt-0.15.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4a6369168d371207339b1e50d4532b06a7121586141f82599505a3f315751d47", size = 747921, upload-time = "2026-08-07T10:48:16.453Z" }, + { url = "https://files.pythonhosted.org/packages/7f/52/1443a446486eba966bcbca1696b472e4f210320ec42f490a47f48fbf0fdc/librt-0.15.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c434e072557ade9cbc642d052c89d031efe47d5c9614523619d0d74a02378e81", size = 727561, upload-time = "2026-08-07T10:48:18.089Z" }, + { url = "https://files.pythonhosted.org/packages/79/91/2270a9380f11725cf83ce1925a5e32dd1dde2be9bba597f25c10a38644e7/librt-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c7eec6a42018bc1d45763b1c162d3d2bf7c3b9a1b0ed30d3e91dcba390efefcc", size = 774417, upload-time = "2026-08-07T10:48:19.611Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/f4b1548d4f5b99186737fe27aec238e9823e8d5d23bf4df007c030689dc5/librt-0.15.0-cp314-cp314t-win32.whl", hash = "sha256:6912fa5e635d74529ac7cdb1bdf6ca3af4453da8d1edbe0110ee1cb4ad407ebf", size = 104381, upload-time = "2026-08-07T10:48:21.048Z" }, + { url = "https://files.pythonhosted.org/packages/80/b6/134afad262def1de04c0843c376d02135f1168af43f22e09a52bd8394727/librt-0.15.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8e11699ed745931c395acd3621b07062e0f840efa6935aad87a64ed0995f0915", size = 127034, upload-time = "2026-08-07T10:48:22.561Z" }, + { url = "https://files.pythonhosted.org/packages/99/5f/1b6846b20572bd699c9e9ec321a5f781845bee477df2aa2a43b28bc40119/librt-0.15.0-cp314-cp314t-win_arm64.whl", hash = "sha256:5d2a91724463bfed4f573cd7a9fdc856d2e230d0c0e5a61416a93481dccd8605", size = 110827, upload-time = "2026-08-07T10:48:23.804Z" }, + { url = "https://files.pythonhosted.org/packages/c6/44/4de9f4ddadb009a55c7758eb5736d62534a7daaf27bd71bc50e64b606b06/librt-0.15.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:8443e38dcfcfdbcf5add5118c623efd788d65ac2e25756d6251a54a06a4d0aca", size = 149843, upload-time = "2026-08-07T10:48:25.148Z" }, + { url = "https://files.pythonhosted.org/packages/1f/eb/5d9ab71e30119c44094e0275f38b47dd327aea0f843a080396677029d508/librt-0.15.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:6d15a29033c57490cfe2069097c6fc4049e4e65ffbb749be7dc453b7c4c68965", size = 154510, upload-time = "2026-08-07T10:48:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9c/8505d1b8f5e8c19587bd03f7429993b3e9ce5c06819d856bfb11d919374c/librt-0.15.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2c05c729b589e734c09578bf5964be48a911765484840d017bbc84f49d4c4ad", size = 497543, upload-time = "2026-08-07T10:48:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/1d/9a/3a8390775cb095765aded027ac9c63e7c8ea74e731498607544c6505de0e/librt-0.15.0-cp315-cp315-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:fa60887537e1d0cd2d9982269d33a709bf54b195cd2b9364fc0a758022af5bd9", size = 480452, upload-time = "2026-08-07T10:48:29.531Z" }, + { url = "https://files.pythonhosted.org/packages/e7/40/258a4a7117ee915d66de5cd9b8ade65a440993161107ce3a686f1859955c/librt-0.15.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d8bc24219b24c0af375718942ab75e3544b2763085f40f965be4326734ae8328", size = 507768, upload-time = "2026-08-07T10:48:31.007Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c6/2f4dd296c97a0b85b98894519b279408ec9dd602d4f692b1ea0e25dee670/librt-0.15.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86a21a7bd3fe3a419512ef424cc1c020f6771d0b29cfddff36d1635a855e63f0", size = 525122, upload-time = "2026-08-07T10:48:32.7Z" }, + { url = "https://files.pythonhosted.org/packages/49/dd/29eab42be13b2bf0ea8cb227135a45d44693e30a7e8b92871981ff56b82b/librt-0.15.0-cp315-cp315-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dbab647e88d90b3167b91efe7091e248653688ed4337e4f90907a722c7361bb9", size = 520371, upload-time = "2026-08-07T10:48:34.294Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/4bad71adeca8fe208b775c2a35417fa5a2584c8f4791daaf89a89450fea1/librt-0.15.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d8edcf6f550e918dca779c069b9e156385c60b406f99fc7641f32c52f7193659", size = 537258, upload-time = "2026-08-07T10:48:35.88Z" }, + { url = "https://files.pythonhosted.org/packages/4c/63/59dba6143fdcc7240c54458b629f3250000a61b8945890fc9efd451b19c5/librt-0.15.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:8b62076030baa2d8b1501a46bf0e19c27a489aa90671c55665bff7887f7660b0", size = 527432, upload-time = "2026-08-07T10:48:37.466Z" }, + { url = "https://files.pythonhosted.org/packages/ec/21/21a24c6a2327d8362580efebe77286bf47b0f4062ec5ea41766e609d3c7d/librt-0.15.0-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:d00d20d1818e82a07a0ee0aa89a98b17ed7916b92441090b683719cb20a59b6d", size = 548108, upload-time = "2026-08-07T10:48:39.384Z" }, + { url = "https://files.pythonhosted.org/packages/5a/6d/fc68c89a7971418b41f9a873623ff935cb864097544c6a2f8ce491c8ef5d/librt-0.15.0-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:4e6ee93fc3cf848dcbf0cce2eca73d8e7dcd0cc2b6df3a529d57750b30a4c55c", size = 529681, upload-time = "2026-08-07T10:48:41.392Z" }, + { url = "https://files.pythonhosted.org/packages/65/7e/c2d98766124400d722063a630b0fde38a9fc768705d37eecca15c47dc192/librt-0.15.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:32896a0af72508ea979e0acb4e4c04cbeeae04938167950d535c83c45597167d", size = 567736, upload-time = "2026-08-07T10:48:43.124Z" }, + { url = "https://files.pythonhosted.org/packages/55/6c/f8c34a95e3a515c6e1c192b89511e7253c89a7760c6b500d57ffdb8d2dc8/librt-0.15.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:ec3ba415afaf951f6951b1dd16d3c8e4f540065fc382d7e70b823a79567ca374", size = 81673, upload-time = "2026-08-07T10:48:44.645Z" }, + { url = "https://files.pythonhosted.org/packages/c9/9e/e23fa8e78679ec45728188650b39e8ff476c83b691c96f749217df3b1b7c/librt-0.15.0-cp315-cp315-win32.whl", hash = "sha256:d2813ba2503764f0450680c533d13df7cff9b49df1411062eded5f67db4195b9", size = 100081, upload-time = "2026-08-07T10:48:46.171Z" }, + { url = "https://files.pythonhosted.org/packages/e1/dc/3eb4c5e297343f0620a55532cd7c8d764d3001fa2159212dadf480464827/librt-0.15.0-cp315-cp315-win_amd64.whl", hash = "sha256:b87d67e33afaf265262f2a66db578284b88ee2e6fcd224579cb5c15518677ad8", size = 121228, upload-time = "2026-08-07T10:48:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/97/70/43abce19f04e49762f8ec834c8fafee13cc40fd6b94a72a24e534febfcd0/librt-0.15.0-cp315-cp315-win_arm64.whl", hash = "sha256:713bd7df21170b982e729e46870f31d6b437bd1a9b4648cffb529bd3c2ec5c4b", size = 106487, upload-time = "2026-08-07T10:48:49.095Z" }, + { url = "https://files.pythonhosted.org/packages/de/15/83f2deddb9368b8951ec8c9477269b5b9b8bd9bbf15e57402d0f38817dca/librt-0.15.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:3de789c82752730f94782a5ee518baf9c05edf85733aeaf73bb6e518755cdf54", size = 159448, upload-time = "2026-08-07T10:48:50.649Z" }, + { url = "https://files.pythonhosted.org/packages/06/bf/043097353f9b3c73b583d07f6b8e552795463f4bfc8caf85e42eee50c26a/librt-0.15.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:e0b5deec9a8664eb722c797241970fd4aa1894d25fda36a1ddac0f7407606bd6", size = 161686, upload-time = "2026-08-07T10:48:52.174Z" }, + { url = "https://files.pythonhosted.org/packages/f4/2a/8ae77f9719d42ce71cd708560a3557b38ac3c17a0383e57f87084de45bbe/librt-0.15.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5563302a8359bc2295bb7084d1a8ed1519df96afb30eb2aa4e0bff7b54228988", size = 710668, upload-time = "2026-08-07T10:48:53.782Z" }, + { url = "https://files.pythonhosted.org/packages/61/34/c0436ea134deb9a0d6da80a396a2739a81cb31e0418f7227239e23140898/librt-0.15.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:22d6263b9d39d7bbb286fa791945646e3218f1be2d693e36fb630f1d0e59cd13", size = 679396, upload-time = "2026-08-07T10:48:55.645Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/001e0d99aa9250d5cd5715a9081291a20656083459f9019cda15255329e1/librt-0.15.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39ffd14646190c454f0d86e0d256b33f00a87a26ab410e619773b841d0e41416", size = 704313, upload-time = "2026-08-07T10:48:57.46Z" }, + { url = "https://files.pythonhosted.org/packages/2d/53/b34fa9d0ff00f136f4d58ebb4c411ff634baed1eb412bb602a2bc8dcafcb/librt-0.15.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c47318cd3a61401452de11282242937e3e057c4fd3dbaf601e269d0928a06c0a", size = 729847, upload-time = "2026-08-07T10:48:59.231Z" }, + { url = "https://files.pythonhosted.org/packages/86/ac/fa4d7a424665040e95baf480a6d523446057684b6758624c85338e8a23b2/librt-0.15.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a56a1d4f859a82ca5b99fc4b82c9b027b15e3c455c5cd99e7d0719f27bb20b6c", size = 742736, upload-time = "2026-08-07T10:49:01.151Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f1/e17a9bb5de6fb8c3186ed1a7d68d21618b027ac2d3633e03d3b6109c67ae/librt-0.15.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:077471b3182db4e17c36ae91555f36a4d2c00080b267f749bcad34a478a9a302", size = 763454, upload-time = "2026-08-07T10:49:03.039Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ec/ecd02cd30935b931b9cdbfed6ab5a099c51b280b4e7baa274da80978ed27/librt-0.15.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:411ca4d1b905b860ceba7570dd6717a71dedaddcc4b0f77ece710aa41ee11f8d", size = 743296, upload-time = "2026-08-07T10:49:04.941Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b5/b3c2b8353ce820a4854f78d19321344242f89fa71c975b71132ba9bf242a/librt-0.15.0-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:1256589e0b0adb31751d685a68bce29d73407ddf4ef05d4188f49d5dcf9566d9", size = 756217, upload-time = "2026-08-07T10:49:06.825Z" }, + { url = "https://files.pythonhosted.org/packages/3c/52/6cc22542ba59146b05cca2a656f9ff8bb67e38e63d12c3b0cc183d837bf1/librt-0.15.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:f42b74a53e5f26a0ba0007411a7455b66c67ce4022a39cc1f56fc4efd65bcbab", size = 741934, upload-time = "2026-08-07T10:49:08.839Z" }, + { url = "https://files.pythonhosted.org/packages/40/32/a04b72b1aa86e3be23b2ecff8c1aad2dcc955bd3956d6d26e7e34267e57a/librt-0.15.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:291bf73caf78b9e88d6fae9bfd693207ff7d832e2fdbe2cf8e746bc13f5f892b", size = 783763, upload-time = "2026-08-07T10:49:10.661Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f0/89eb11dffbe9279ff37144dec786927314502ae0b114f1449dc78c458aab/librt-0.15.0-cp315-cp315t-win32.whl", hash = "sha256:c16d15ee371643ab48dc8248a3e680ebbeca573a13af2c3dd0c985b142d77162", size = 104313, upload-time = "2026-08-07T10:49:12.305Z" }, + { url = "https://files.pythonhosted.org/packages/6d/4a/1f1978c200f563beda63c36adff2d65bbecb81e365e8e69e572f5f70fbc6/librt-0.15.0-cp315-cp315t-win_amd64.whl", hash = "sha256:dbd605739f228912dc49027cb764456b9757750bdc2b6b7773164db7096c6fd1", size = 126889, upload-time = "2026-08-07T10:49:13.881Z" }, + { url = "https://files.pythonhosted.org/packages/38/a6/800800bfed7b1fb10fc3f3d557785c3854e80d3f7a9800d784b176a1fc2d/librt-0.15.0-cp315-cp315t-win_arm64.whl", hash = "sha256:84d244b00604d17df3fc7736c327892d6bba66181254aa4087be807b6c342bdc", size = 110700, upload-time = "2026-08-07T10:49:15.499Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, +] + +[[package]] +name = "maturin" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/c8/22e5e21b2679c9bce6415ca578034ca2cc9316be0642ae21e051a2d5198c/maturin-1.15.0.tar.gz", hash = "sha256:94b26cc8e8aba61a5f2099715fe640e18c5f678e9a500408b38761263954228a", size = 385504, upload-time = "2026-08-24T12:11:22.665Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/69/5c01b461044eb1f45ddcce006706eb88110c793cdb11c7ae0b5e08492e94/maturin-1.15.0-py3-none-linux_armv6l.whl", hash = "sha256:6bf6dc62e22d4dcfd5a51244ff0d58975fa4979c48209fe84159617648956d82", size = 10206220, upload-time = "2026-08-24T12:10:53.327Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1f/2b431554e11687cdb1077e0cdadcc118c53f611086b3af00c8545a67c6a5/maturin-1.15.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:cd35772633f489841132bc8e71d6fc7f842df30b9c05cd5cdf1ee1ddcb744cc7", size = 19416513, upload-time = "2026-08-24T12:10:56.126Z" }, + { url = "https://files.pythonhosted.org/packages/51/36/e23a21cb34a648b711036b9b2fe1d4f3f4ee24f8db54215d73f1a9a3a3ec/maturin-1.15.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c40b4eae7bf5ef1f4b1af8d623fe4105016f93578fb15b764e741d08ec3b92dd", size = 10014962, upload-time = "2026-08-24T12:10:58.486Z" }, + { url = "https://files.pythonhosted.org/packages/8c/80/33b15cb2d8f30f12c807955e8f2fd775027692904e30ec0784744ce8cd83/maturin-1.15.0-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:7eb066372f541f8eb4909c79c5d9bd0b9e8125980bdf1ec9e8aba23c6c8d6c55", size = 10196223, upload-time = "2026-08-24T12:11:00.696Z" }, + { url = "https://files.pythonhosted.org/packages/fe/91/b495e19e2f5c503b540452b2039115e7b2363867e8c5ad4179eb752fa92c/maturin-1.15.0-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:653020a63525bb224e5ab0adf02e17a2e08bc86dbea7fc1399c9a56d7529b99e", size = 10541186, upload-time = "2026-08-24T12:11:02.857Z" }, + { url = "https://files.pythonhosted.org/packages/5d/2b/2abff58037188d852b124871b1f0d720e1c2bfb3d4f1b03d87c52cd66488/maturin-1.15.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:0ebf9767892725083138e671c34482c660317a2f3d6a29fc0e0f34e9d8c99136", size = 10083468, upload-time = "2026-08-24T12:11:05.012Z" }, + { url = "https://files.pythonhosted.org/packages/3f/07/b7e9f8be99a6627849e81ac7b6694876bce8f50a92995fe17e3cf2610f0a/maturin-1.15.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:7ab7eebffd7b8debca2265985de4eaeb332141276d24b9560b5ad484d4b3add1", size = 10047786, upload-time = "2026-08-24T12:11:07.042Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ab/167e3cb7accee11b507dbe53e0e87aeccb376d44ae66284c96ee4df3a9fd/maturin-1.15.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:126e12e618b4db42f68c779a56d41f82a390145ba36ac3f621d057eb34f5ad9d", size = 13315332, upload-time = "2026-08-24T12:11:09.433Z" }, + { url = "https://files.pythonhosted.org/packages/14/4d/801379f646cbc6b00998e5289b0630a886be3a4ee4c75b6bc9b87478a7f1/maturin-1.15.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4f9d33e6c3f9615c8caceecbbbd440f8eb25a3ddeb687077682cd5eca2e9ae15", size = 10807183, upload-time = "2026-08-24T12:11:11.73Z" }, + { url = "https://files.pythonhosted.org/packages/89/27/2e612e1cbd1580e9e94d4722c227b5180dca27b32b955a34b79918aa1292/maturin-1.15.0-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:bf29beddd0c6708f112db51d5275fc28b28b9e9c9c5faae387eaef662918b176", size = 10413274, upload-time = "2026-08-24T12:11:14.04Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/202a7b4d75a51f20f84ec9ce3b7345b12b822207072164e2b1c6ef665125/maturin-1.15.0-py3-none-win32.whl", hash = "sha256:da649988be98e87e009e51b1bf0d301b6a301bc0cecbdd60d40d8ba60748d1ca", size = 8928744, upload-time = "2026-08-24T12:11:16.269Z" }, + { url = "https://files.pythonhosted.org/packages/40/dc/4e90da594986ba78dd3bc8a5921ecdcdb11085b22b02a412caab3b225601/maturin-1.15.0-py3-none-win_amd64.whl", hash = "sha256:552c2be4afd43fe8d5c9f3ec8d4c4756d973b8dcbe94c14084390301f50243e1", size = 10335085, upload-time = "2026-08-24T12:11:18.326Z" }, + { url = "https://files.pythonhosted.org/packages/8b/10/15d4314edf130955edf2dc237aa393a8a7c10f2b9b57b89fa2f61f915659/maturin-1.15.0-py3-none-win_arm64.whl", hash = "sha256:c7dc0c66c78d3debdd9c5aa807e861fbcbf07f3505d34b125df74c03986b0f48", size = 9713795, upload-time = "2026-08-24T12:11:20.83Z" }, +] + +[[package]] +name = "mistune" +version = "3.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/92/328a294a6de83bacb95bed01f04e0eaff4e3616ee359fc821a5dfc539b02/mistune-3.3.4.tar.gz", hash = "sha256:58b5c96d6fcb61190dfe5fae498d2b2065f99cf61e9649418fd54cf1ada86dfe", size = 121426, upload-time = "2026-07-22T05:22:30.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/e4/288365afae98953bc01de09f686f40d8ee84578135aa7767d5d4e60b5278/mistune-3.3.4-py3-none-any.whl", hash = "sha256:ee015381e955e370962968befe1d729ab60fafb6a715ac6751763fbce38c8d4a", size = 66862, upload-time = "2026-07-22T05:22:29.419Z" }, +] + +[[package]] +name = "mypy" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ast-serialize" }, + { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/6a/878cc1097d4035f82bd516658d0c528d2a9955bc7b363afcbd0b07fea11b/mypy-2.3.1.tar.gz", hash = "sha256:47c1b1207258513a9d93495f69c8be9de73916186f0e52703e8c461b7a623419", size = 3992554, upload-time = "2026-08-15T03:03:38.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/be/c624d4241484f37dc62839e177ab607a9b8b3e96f0866544ca99e8e41d51/mypy-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94f04929f1c44c35fb0061e912087edaf504acede963a4a7d00680bd089d8531", size = 13936739, upload-time = "2026-08-15T03:03:26.475Z" }, + { url = "https://files.pythonhosted.org/packages/53/84/e3cf72f90dce5960871c82551c8fba6da05fc1018f79be41c047bd126bdd/mypy-2.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5d716048611e85ca9eefb2e1baa5d73ede389b5820ded260ea27c757d667af8", size = 14166460, upload-time = "2026-08-15T03:01:50.565Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ff/6b97d58aa0f79a5ab9b472db1f6d6df1b11a51d74d0c08ab3760d3a613ba/mypy-2.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b091a455111214cb5c9d54a57b9618e9a49f9fe2a42e4e1ac86e9d104ed96ce8", size = 15100476, upload-time = "2026-08-15T03:03:12.079Z" }, + { url = "https://files.pythonhosted.org/packages/da/f0/cbb4b7d2ae3ac635f6b4f2d9b04070b8a92edf50da599d3b39e5ed109001/mypy-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df12e20c9efd614738c71b390007ecd0181125afc4ccafca04d78a1d2eed2c01", size = 15347826, upload-time = "2026-08-15T03:03:02.856Z" }, + { url = "https://files.pythonhosted.org/packages/5f/10/91dcdc6f8d43fc08e6a06ab1f9732f3abaaf835ac1b2e67b9dff56910855/mypy-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:52eaf3a155f35cf80b40220288c861eb45f14a2340c1f6cbfbdb0feff32879d1", size = 11142615, upload-time = "2026-08-15T03:03:36.316Z" }, + { url = "https://files.pythonhosted.org/packages/3d/8a/28d54535bf4b9aa43b2d8918c2ef660378b9f66b23d78dcee052744ae622/mypy-2.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:9b4eacbee8a69836c06eff6d0dd4e134a07c2b047755b30c08625fe214f322c6", size = 10141145, upload-time = "2026-08-15T03:03:07.406Z" }, + { url = "https://files.pythonhosted.org/packages/85/da/d6effc4f808a842d91edc22535dc9e799d2ff6e91449168b7f47a0771f54/mypy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a32bbbb940af990d3be0b8af321c7b6815bb1b3b48142fe7459b9cc5f58959ff", size = 14047547, upload-time = "2026-08-15T03:02:57.707Z" }, + { url = "https://files.pythonhosted.org/packages/e4/e6/478229701dab76f26485fc8ff5d6f241f393da22447400bbc56f6946aebe/mypy-2.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff715e45b2231a8e85de1d163d1b42791e4d7aab8f5145f85fee1b710b735aff", size = 14216515, upload-time = "2026-08-15T03:01:26.496Z" }, + { url = "https://files.pythonhosted.org/packages/8d/fe/7c42327a3b21e84681f691982cbfe43f334a3685f3b683b72c376476c4fa/mypy-2.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:858fc57d3d91fa728e33e7ad71def60fc6272694607b306cd3292db53ae39080", size = 15307789, upload-time = "2026-08-15T03:03:31.62Z" }, + { url = "https://files.pythonhosted.org/packages/59/f4/7e597edbe01b5a56fa958ce541302dcaabfed979966f1dffedbea0ea0fc2/mypy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:851833db876e7b650f93719c74b7879a08e338979c96054fdfc3bfd90a486355", size = 15548831, upload-time = "2026-08-15T03:03:15.55Z" }, + { url = "https://files.pythonhosted.org/packages/a3/52/cb31e084bc0314a1e384bdd677a4b80e55af04ccac077545e2238b9d320a/mypy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:4c5095a327483591c94e0c8d3ef9e50d4ab1369b541eae007c1f23bc2a41f6bb", size = 11226359, upload-time = "2026-08-15T03:03:29.002Z" }, + { url = "https://files.pythonhosted.org/packages/7a/47/88fcf6217b43fa2da81a8c2611370af18141536a4f0294bbf98b457d456d/mypy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:bbfe022634a2a195406bd469e888d2eaf193b02ba7e607391cd7640374aaae3b", size = 10214707, upload-time = "2026-08-15T03:02:48.807Z" }, + { url = "https://files.pythonhosted.org/packages/de/cf/862010ee800ca9c2bd0c4c0dacf0f092e5411824a09b8f97ad4be8fe250e/mypy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:114dff494000f18bd10d5d95d84b8567b26da60279ecbe838131841df20e635d", size = 13964542, upload-time = "2026-08-15T03:02:21.43Z" }, + { url = "https://files.pythonhosted.org/packages/75/5a/3f3a2107b41e3e92e617e25daaee121413b91e9784bea733131ed4fecc5d/mypy-2.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8637731bb5eee3671eb2c3200827aa3564ed8a9309ecee4d1afe77e6d031bdb", size = 14168922, upload-time = "2026-08-15T03:03:00.351Z" }, + { url = "https://files.pythonhosted.org/packages/8b/41/04dc4fe7e63d7820fa4eff272e95157d30cbea921388f3ab3fe77794cd0b/mypy-2.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c80fbc405ed8020f5ff3802dc18cf060197bcdd3fbdd6a26ef2fd34dfdd5226", size = 15244791, upload-time = "2026-08-15T03:02:31.089Z" }, + { url = "https://files.pythonhosted.org/packages/96/fc/c3053b26b9054949285aa868cb6af8c10e7591541cacd79c5dcc06a1fcf9/mypy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:84081f538ce27375045c02e3d7f81bd11d853400621ae245d87ce7b6c420ec74", size = 15501627, upload-time = "2026-08-15T03:03:34.128Z" }, + { url = "https://files.pythonhosted.org/packages/70/4e/d77daab008bbc4e5001374d7928f4a260d28f0e6747af444fc4763f7a310/mypy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:e9144ac16fde007096f9563eb2041b4433c2d705c4218edeb79e7e9d01035ee6", size = 11243961, upload-time = "2026-08-15T03:02:11.952Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f8/7eb68c136e4abd30569fe31ef2bfcb7eceae9952cab80017c04cd09f5d0c/mypy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:77ad9529e67dca28e511f5cd5671436584ce91f6d3bac159a353158187b986ac", size = 10213219, upload-time = "2026-08-15T03:02:26.361Z" }, + { url = "https://files.pythonhosted.org/packages/be/c4/42a49d44aeff804edf1b19acce0b49e8bd1a9c57dee9605dd8d980aa43d7/mypy-2.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:192abaedf75da1bc0b1cef104927e70ec49c1ef0031cc4825c7ee10a438ed24d", size = 13986778, upload-time = "2026-08-15T03:01:33.69Z" }, + { url = "https://files.pythonhosted.org/packages/45/13/9331fd2dfed7194d66c5304072894a8be3e51e9deda6863c1eceaa35a43d/mypy-2.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf678dffd16efcda2c15cbd30e9ecc0081388e29ea23687a88e686ed92638dc3", size = 14188467, upload-time = "2026-08-15T03:02:40.554Z" }, + { url = "https://files.pythonhosted.org/packages/78/f7/f4a34edab45667c5465855dc585a20e87978ffa8aee711445b7239d120c6/mypy-2.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e036f06b41630f4c8a1d48f9ac6aa26acc65f8be089973f5519da643318f03f", size = 15225538, upload-time = "2026-08-15T03:03:09.761Z" }, + { url = "https://files.pythonhosted.org/packages/40/05/534b3590757bd05794f73e07f6666c2a77b8597ffed795c94ce570096aa0/mypy-2.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:71af9c8a894e862b58e92abb08e53b05a384a1e5e5d6dc7cda59126211a53d82", size = 15480805, upload-time = "2026-08-15T03:01:41.134Z" }, + { url = "https://files.pythonhosted.org/packages/55/da/bdfba852e2562f599624af5bb7d29e36b0b4f526f2b8bac85efe0dd1803d/mypy-2.3.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:3c80cd23d85368bdd9f37d5231dfd97d35bcbf5bf41af96ef3a9b078ad1957f9", size = 7761712, upload-time = "2026-08-15T03:02:36.008Z" }, + { url = "https://files.pythonhosted.org/packages/98/31/60fc64a74cdba4f2a5d642d32317993e479163e1ac7d91b695e5d15e2264/mypy-2.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:4956f34d145e145562a0a0bf367f642bbc85c04ec2baf47ae015947c3169a85d", size = 11423968, upload-time = "2026-08-15T03:02:06.931Z" }, + { url = "https://files.pythonhosted.org/packages/a9/23/eb5950b24cd26ba3b78f87707a275568d633c77dae8e61c9661be6055ca6/mypy-2.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:cfb12e360242d23d91f5e978d94f58ea66acf5804c4fb6f2f794a20d4cb1b595", size = 10399323, upload-time = "2026-08-15T03:02:33.671Z" }, + { url = "https://files.pythonhosted.org/packages/82/c7/f80f4e46c0b9a00eb5f78a79d49dda8bdf56a5230f7257fb33e76be04da7/mypy-2.3.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e5f1c50bb05b64e2026b52867e8d21106f01313c744a2c4ecc34c90d12e8d6e2", size = 15121308, upload-time = "2026-08-15T03:01:46.053Z" }, + { url = "https://files.pythonhosted.org/packages/5d/74/9b04f17c7074cc5188f02fb63a2ca1d43fedf479e84fe3091c39061a1d7f/mypy-2.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:667196b352f4cf304ded4c10f90cfc179263a1acfb3cdcfa984bdfd340d498bc", size = 15536590, upload-time = "2026-08-15T03:01:35.941Z" }, + { url = "https://files.pythonhosted.org/packages/26/04/c837ef6208e567774e2ed1f863f8ba6ec4817b1b6dd426315e5d559b6ec9/mypy-2.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9c53e395c12cad2c6d4b67d5da7c6057638a132d85c08b73646b18f802a0045", size = 16791074, upload-time = "2026-08-15T03:01:31.073Z" }, + { url = "https://files.pythonhosted.org/packages/37/68/48730230afa45192d5bd429a6a2ff24a6f8dedda90fdf2b221792b54518f/mypy-2.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:18162b128c3f9c703cd35f5537446900b0d21a2549aa7a95d21380d2ef643fb0", size = 17069183, upload-time = "2026-08-15T03:02:28.566Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ea/ca23fc9c20eeda09a15c9cbcf50015d0e73f409f6ead059e42aa69a608ff/mypy-2.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:30c0477d4aab7b7f39c8397dc877f2c96b9fe5588ec379f372c56eb63d599f63", size = 12154679, upload-time = "2026-08-15T03:02:04.809Z" }, + { url = "https://files.pythonhosted.org/packages/3b/67/8d982126034990869466f73b8db80dcb2234a7ac39b4dad093e047a79835/mypy-2.3.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6941ab3619377bc3f32ca02876b07d27f216f5201604b664d3937ea0fdd23bb4", size = 10969159, upload-time = "2026-08-15T03:02:38.152Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f7/41e7f2d8117fbc7a7587286162ffe2f688984b69c46ed63cf5f2e4fc3bae/mypy-2.3.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:6f041a6de52c9217ca125e78ba0a335cb7fd98a1c0580978e49ab2b126f70b57", size = 13990694, upload-time = "2026-08-15T03:03:21.919Z" }, + { url = "https://files.pythonhosted.org/packages/06/85/8f665811a0c8f3bf6fa1d9acd665ec2d97a2bcc453ae68dcd92340941cd6/mypy-2.3.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5159ae60f5dbc3a498af5ba8365505808ac8031bc63f9e00304ad545d40bdd9b", size = 14203518, upload-time = "2026-08-15T03:01:48.455Z" }, + { url = "https://files.pythonhosted.org/packages/2d/82/91b866c8546b120bff83b73a439d90d2d63ef3aff113599e6b8e4d566848/mypy-2.3.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47a8a7a0a7f6f6e63995c0ac36fa0c07b127413fdc81f0439b7f3dccafd33561", size = 15220224, upload-time = "2026-08-15T03:01:23.577Z" }, + { url = "https://files.pythonhosted.org/packages/c8/78/c226c99208ee40de7c768369fa533f933afa003dfdc606ff021450724e91/mypy-2.3.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:2329c0501293d4e1f33bc15d04d6304d65a1cdda967ee93a05c1e681a3923133", size = 15501512, upload-time = "2026-08-15T03:02:09.453Z" }, + { url = "https://files.pythonhosted.org/packages/a9/e7/7cfb3f106c393979f4cc37ad6c0586044d50401e3c35b0c003e4f3ba6bc9/mypy-2.3.1-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:bb26deed807bdb0457cf3e3f1cd7c4a1cf9d66864eaf1b4a61e06805d4c6b1f9", size = 7761913, upload-time = "2026-08-15T03:01:55.65Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/52affefa273b97939a1f474ae4a349c8718635c15b941112dfab4291b0c1/mypy-2.3.1-cp315-cp315-win_amd64.whl", hash = "sha256:375d7013876a8233b2d05be185bfa09f689696cd999ce8b1cfe6acac5c80e8a3", size = 11422533, upload-time = "2026-08-15T03:03:24.101Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b7/75643e70c72a5b346d8a9b1543c967ea8824df2ee3fb7ccba652c272b7bb/mypy-2.3.1-cp315-cp315-win_arm64.whl", hash = "sha256:586b3612214cceabb3c0f588c97e7d1e535393f06a60e912e994f6b3ace97523", size = 10397931, upload-time = "2026-08-15T03:02:55.265Z" }, + { url = "https://files.pythonhosted.org/packages/10/ce/53be21f2d4adfcd26f63f1184a13ed797015ab463853f117e2e11e4d726f/mypy-2.3.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:ef0c6335cda9d807f8193d8ff6204a72bc909fa9882aacbca14f43cdb7188306", size = 15118669, upload-time = "2026-08-15T03:02:51.479Z" }, + { url = "https://files.pythonhosted.org/packages/62/43/20de757cd42989d291a17fad607742c4c74e875ce5cea00e5a5225020ac1/mypy-2.3.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e598c8c66401d26b150872154a286e6d484cf2789c3bb28a7556806298423021", size = 15545627, upload-time = "2026-08-15T03:03:05.132Z" }, + { url = "https://files.pythonhosted.org/packages/7e/fc/092bdf77ad280eaf501422f0f3b966012b528076cc13e41a774861c907d1/mypy-2.3.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eda22fd4efa9dcd39331d1dede9b5b8b8a7fd69af07592e778433da98610d29e", size = 16764157, upload-time = "2026-08-15T03:02:23.958Z" }, + { url = "https://files.pythonhosted.org/packages/94/5c/c94c4d62d909b07f552d0d9356d7acc943825558e602a64822ffa2231536/mypy-2.3.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:2a0ba2e57847849fb0d1fcdabb32786d223095ed8bc121dfe322bcdb3d9c46bc", size = 17073258, upload-time = "2026-08-15T03:02:14.573Z" }, + { url = "https://files.pythonhosted.org/packages/c0/f7/511a88b89e478053c02d22039bb8f3ce4183efe8fd7a4f0a5910a8bb0a32/mypy-2.3.1-cp315-cp315t-win_amd64.whl", hash = "sha256:3f7e865dd51f235f60a2dbcd8728a1c095f5ca28f095d48a725b84cd935735c4", size = 12135505, upload-time = "2026-08-15T03:02:16.714Z" }, + { url = "https://files.pythonhosted.org/packages/71/bf/02573b56964ecb0f7c644f915f53c325ae15c3faec521c5adf11599a32df/mypy-2.3.1-cp315-cp315t-win_arm64.whl", hash = "sha256:8ad80807dc3ab8ea978b1b2b6e4a657194ace1d4ef03e0e731aff1abd517da29", size = 10962647, upload-time = "2026-08-15T03:01:43.712Z" }, + { url = "https://files.pythonhosted.org/packages/8e/41/9675c7a1e78edecfba0b79e587a52594c56e189368261dc7b3a7fffb9527/mypy-2.3.1-py3-none-any.whl", hash = "sha256:6ed5c7e3419083268e5c9258bd1c1ef91af44a9e89374dbcaf37b775716e72eb", size = 2754338, upload-time = "2026-08-15T03:02:53.4Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nbclient" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/a5/b3bae4b590c0cbcada2c63a34f7580024e834a8ba213e949a2f906705787/nbclient-0.11.0.tar.gz", hash = "sha256:04a134a5b087f2c5887f228aca155db50169b8cd9334dee6942c8e927e56081a", size = 62535, upload-time = "2026-06-05T07:52:41.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/c9/94d73e5a01c5b926c3fa2496e97d7a8dc28ed5a77c0b2ed712f1a62e6694/nbclient-0.11.0-py3-none-any.whl", hash = "sha256:ef7fa0d59d6e1d41103933d8a445a18d5de860ca6b613b87b8574accdb3c2895", size = 25288, upload-time = "2026-06-05T07:52:40.115Z" }, +] + +[[package]] +name = "nbconvert" +version = "7.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/b1/708e53fe2e429c103c6e6e159106bcf0357ac41aa4c28772bd8402339051/nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2", size = 865311, upload-time = "2026-04-08T00:44:14.914Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8", size = 261927, upload-time = "2026-04-08T00:44:12.845Z" }, +] + +[[package]] +name = "nbformat" +version = "5.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/72/b3446efab8756e7df4b8ec587f8e611cb5a7249e4323db480802f1d3be04/nbformat-5.11.1.tar.gz", hash = "sha256:32d4521c68c6e7d5b29c76defaeed9f42ea733142b9b19f88277ce10390b9c4d", size = 147775, upload-time = "2026-08-17T08:10:51.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/69/ee613f74085ca7103f79cd08d579c4f3177d1d26e5d3d9528d2d6536a707/nbformat-5.11.1-py3-none-any.whl", hash = "sha256:cc6698fa75f4fab8755ead786317815f13a6fee3b53311c0abb1a8b51d52f7ec", size = 79849, upload-time = "2026-08-17T08:10:50.18Z" }, +] + +[[package]] +name = "nest-asyncio2" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/73/731debf26e27e0a0323d7bda270dc2f634b398e38f040a09da1f4351d0aa/nest_asyncio2-1.7.2.tar.gz", hash = "sha256:1921d70b92cc4612c374928d081552efb59b83d91b2b789d935c665fa01729a8", size = 14743, upload-time = "2026-02-13T00:34:04.386Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl", hash = "sha256:f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01", size = 7843, upload-time = "2026-02-13T00:34:02.691Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.12' and sys_platform == 'win32'", + "python_full_version < '3.12' and sys_platform == 'emscripten'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/13/01/11703282db468b85f6f7b8c7f22d058de5970d5c7e60a3a8aaa313c3de36/numpy-2.5.3.tar.gz", hash = "sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563", size = 20791231, upload-time = "2026-09-06T16:27:47.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/50/8fdbb16af64895706a45f06a4068e29db732ec180f3c1375f14123359138/numpy-2.5.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb189f09db39283b26bfd061ec16189e14f71c6755207f72a0f7540867afe5b9", size = 16994982, upload-time = "2026-09-06T16:24:29.244Z" }, + { url = "https://files.pythonhosted.org/packages/60/39/789131c1188c078dcb3a1692e72e1e050c68b88ffe72c9ccaac9bcd7a9cd/numpy-2.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f59a878c33d6b88122d80d239bb3b845d58708750b0cb06a09aebb9b18ec696c", size = 12009327, upload-time = "2026-09-06T16:24:32.491Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/a312e95696e5f601914dd8b6dd844692ba61670807417e24b68e337b5c70/numpy-2.5.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a72f874bc9e10e4b8f80426fb49716d5141f64442a0c8418065093ec8017fbb0", size = 5445405, upload-time = "2026-09-06T16:24:35.071Z" }, + { url = "https://files.pythonhosted.org/packages/30/d0/5623a1707ed4fe16e3909fe3cf5ee3da004ae677ad23d83bbf3adf1a6faf/numpy-2.5.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fc36dc566135b5eceec4cf89758fcb719266a019ef07dae1754ae7c9f617ef3e", size = 6783213, upload-time = "2026-09-06T16:24:37.253Z" }, + { url = "https://files.pythonhosted.org/packages/f1/32/84146fc020ad3c25f805f70ab60da46fe3c540a21369754a7e4369754b6f/numpy-2.5.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76c2c1e6bfa5c84adc6434dfbf013aa92096a7985221762c8f11fedfd20fff58", size = 15687872, upload-time = "2026-09-06T16:24:39.751Z" }, + { url = "https://files.pythonhosted.org/packages/65/af/aa78d1a88805456e212b65461354cd943197fb9acecc4c90fd12295123a3/numpy-2.5.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7e18c623bb5c95acb3b3328861272816ba199fb531921c5d6d0b675f1fde9e3", size = 16717410, upload-time = "2026-09-06T16:24:42.745Z" }, + { url = "https://files.pythonhosted.org/packages/3b/24/faa79d865e69a97ba17473b23a1b74094b2259c03e820c70297293b9ea49/numpy-2.5.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4f8929ee6c96bfbd7b4ed2032e0c03af86fe1826740ab61ddabf9072d06e57ff", size = 17040975, upload-time = "2026-09-06T16:24:45.961Z" }, + { url = "https://files.pythonhosted.org/packages/62/4a/8877e629445a7176297dffcaf9c485faa96a95d81728a62521ad55bd4c0f/numpy-2.5.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b5d93cf48f687479941d12b69c873ad2cc76bbd487f0091c2200636497f34034", size = 18476479, upload-time = "2026-09-06T16:24:49.35Z" }, + { url = "https://files.pythonhosted.org/packages/c8/db/35e1c2d38b04cbd5b731f9d71495e055e813197669d22b612f11748d2ff9/numpy-2.5.3-cp312-cp312-win32.whl", hash = "sha256:bf63afbe037eb5d2fe87fbcc7778e61da53ebaf21d938a4515aa73b62532a5d4", size = 6133378, upload-time = "2026-09-06T16:24:51.915Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a1/accf6d4f0c80c5d9ba9735d6b1550e444180599f34dec69ca01360f717ad/numpy-2.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0a59a421a32580a009e8a1751345bf829631b990dc1794b80514ab722b435def", size = 12567828, upload-time = "2026-09-06T16:24:54.255Z" }, + { url = "https://files.pythonhosted.org/packages/22/43/1764aff32e4652526ae2f71fa8b3efd8d25c8a3d6926914454e47138ed1e/numpy-2.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:ccb32e0525d29e8b0572eb84c9a57af0e7a4e615726927506f55063c62414034", size = 10485432, upload-time = "2026-09-06T16:24:57.278Z" }, + { url = "https://files.pythonhosted.org/packages/79/e5/8fb89cd46d14e35699d13bf943a5f5f441ecee8667120a1f6105ab89e349/numpy-2.5.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:66a78fe4556c60aceda5916f9eacd638b18e9e681016ec302dcb4682d6d4d034", size = 16991061, upload-time = "2026-09-06T16:25:00.411Z" }, + { url = "https://files.pythonhosted.org/packages/2f/06/9dc9e48b5e5e941c8b10350c5ff2d721da42a20517d911d15544246775ff/numpy-2.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92f30e89b8ee0ecf363033576c422b2f58fed6a80bed0aa48dff6d14c654663e", size = 12003676, upload-time = "2026-09-06T16:25:03.475Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2a/98282aa5b8f58b1157d440bb6282eed47e3632a5de53a714fbab17e659fe/numpy-2.5.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f9a2353b37a1a9e78fd82b27ad7e2a32a2d036604d18f02b05e3136c62ca3b09", size = 5439695, upload-time = "2026-09-06T16:25:05.978Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f9/b6533d777be9d6ffd29dc1be0867e563e6e8cc9a220ff1b716adc317f060/numpy-2.5.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:ccbc4665079665c3cf3bab4db9f6b095370cd6437d66be549b6c2a1fd19e1958", size = 6779395, upload-time = "2026-09-06T16:25:08.599Z" }, + { url = "https://files.pythonhosted.org/packages/73/85/735720d04ec197c5dcfacdfc9922667c7f1f5f496a279b7ba4d7c74c4cc7/numpy-2.5.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c76d5dde9f445058f83d0c02af00557a4db91de9a9a57c0df87d1535001d654b", size = 15681750, upload-time = "2026-09-06T16:25:11.173Z" }, + { url = "https://files.pythonhosted.org/packages/3a/1b/3b16a9bc514a440a7a0883684111dcb1ef1aee960af2ca95da8fc775f124/numpy-2.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5fa86b80fd24bcd1aff83ad23be44ea323de3f787be8f8b15d4a65621e25321", size = 16708577, upload-time = "2026-09-06T16:25:14.171Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/386f397831b07328b639c96c5b62719346cf4baf07c68d927239752b1534/numpy-2.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd4cb9ad3c7889b9b3fe0a9a9fb5d2ed26f9879bff2608d9f01aed147a20d231", size = 17042047, upload-time = "2026-09-06T16:25:17.582Z" }, + { url = "https://files.pythonhosted.org/packages/5f/3e/a700ecbf36e85ae8328fd3b0e12eeddc22ed6358a64cb2bd913e0d195d65/numpy-2.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1302b90c0e52281681b2975adfe8a860cb7b12216a27b4b0b4207c44bf7bccf0", size = 18465724, upload-time = "2026-09-06T16:25:20.949Z" }, + { url = "https://files.pythonhosted.org/packages/41/ee/38e785e88a4045f6ad1d1f2808dcdfafdca48c760260c0587bf171e29fc9/numpy-2.5.3-cp313-cp313-win32.whl", hash = "sha256:1c80eabb4035ecf4ca9cd49cde8a9fdd69a729e63e6474887d1523ade7aa277f", size = 6129003, upload-time = "2026-09-06T16:25:23.664Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ec/100f2b1794ede74a9b3d7ec6b9736927f56713414c1dfe19ab6c383494bf/numpy-2.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:71cad2b2a7451ab79d8f5e71b453485b6775963d5cf794179144a7463fe6e8ec", size = 12560965, upload-time = "2026-09-06T16:25:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/80/b1/7dc825ca94c12acebbce4c37caa5e198695eb31424bc579679f32b1bb49d/numpy-2.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:8e4dd766076855b5ff7ea52fa5f07ce26286726e0f8bff446b7739d02e6ea204", size = 10482343, upload-time = "2026-09-06T16:25:29.772Z" }, + { url = "https://files.pythonhosted.org/packages/70/78/cf416f15dc29375a229d9dfebf8db6e313f291580b39fa1a568b6052bb07/numpy-2.5.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:350ba9783ce969cf9f7ce6e6a9a58e1a6e2a19ca025b7ee448c4db727706212a", size = 16998686, upload-time = "2026-09-06T16:25:33.171Z" }, + { url = "https://files.pythonhosted.org/packages/9e/59/abcc2d8def4fd60eec7d87f92d27c13448ffd9ab14339bcc63a0d7a2fdea/numpy-2.5.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:012e66aca395d795496446e52aeeb5866312a5d4d3f27da270e5a0b43f70dc5c", size = 12013862, upload-time = "2026-09-06T16:25:36.748Z" }, + { url = "https://files.pythonhosted.org/packages/94/75/4640d2d6e4b64a049e48425a82728a41ef4adb61332d2cba68055774878b/numpy-2.5.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:adc1ada2662f8a5f960b8a10d9986897e7499ef07e06d4cfe7197f8cce923c07", size = 5449793, upload-time = "2026-09-06T16:25:39.476Z" }, + { url = "https://files.pythonhosted.org/packages/96/cd/625b57ae33d4ca560f32cc0b47b4a5922146d9beb998ddf773900d440a73/numpy-2.5.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:54a115e5a73b8fc44f0cebef486365a1894b5c9760685d4558b72b7c3eb846e0", size = 6785176, upload-time = "2026-09-06T16:25:42.069Z" }, + { url = "https://files.pythonhosted.org/packages/9c/72/12918652e7912ef9751e8694c88820fcd1908e0618cb23f5f3caa6004b7b/numpy-2.5.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be5a8381859b6da607c84f4f7d6847725f1cf1853ef8a2c9e115b7d58bef47dc", size = 15703377, upload-time = "2026-09-06T16:25:45.135Z" }, + { url = "https://files.pythonhosted.org/packages/45/8f/9beacf79ca7c650688ad0baa80931adb988fe6e6e5d5903c23cc3dbd70eb/numpy-2.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b0521d0f4aebb6e06189451025fa17a913287b13c03d5fe05c017333b654ea5b", size = 16711928, upload-time = "2026-09-06T16:25:48.461Z" }, + { url = "https://files.pythonhosted.org/packages/09/8d/41d0a56e1ac4c87495c897a211b1368691b7237aadabec8b3b8f3a74d48f/numpy-2.5.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9deb49575e5b0b94ed72c8a64ec4d033381adc27e9060ae842971f697ba96104", size = 17059507, upload-time = "2026-09-06T16:25:51.873Z" }, + { url = "https://files.pythonhosted.org/packages/08/1e/0dfbc5cc251d54e2af790f254d24ec38637fa97ec7d5d11de7ffed787098/numpy-2.5.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b00eefbcf0f292945c4b4dec2ae845389ef5bcdcd596e6e4328051db5b5ba694", size = 18471002, upload-time = "2026-09-06T16:25:55.233Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2c/dfa40f6991f8185c8c30ffd023dfcbb11888e823cfab9557b920f3bb7bed/numpy-2.5.3-cp314-cp314-win32.whl", hash = "sha256:c2381f82999704f818e2c987a865050e285ec3621262c66d40f5a96c8f899f8e", size = 6180485, upload-time = "2026-09-06T16:25:58.157Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/d2c08231e4fde7e415501fd02c715d96e98599b2d8384445933944152984/numpy-2.5.3-cp314-cp314-win_amd64.whl", hash = "sha256:2c25dfa72943e4336ddb6b0ee4277b47a0c85bede0807530ec68103bf58e2c10", size = 12698179, upload-time = "2026-09-06T16:26:00.789Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e9/dcdcc9b95cf5f49815055573aee1b11cfbf5299f38a180e437ded050810f/numpy-2.5.3-cp314-cp314-win_arm64.whl", hash = "sha256:15aa985ac73a8db02db7663381aa109510449d3819d37206caed27b33a65a8a6", size = 10769383, upload-time = "2026-09-06T16:26:04.011Z" }, + { url = "https://files.pythonhosted.org/packages/49/c4/af8bc08a7ef4e1529a7c0cf24969accce316b783999802089a581ec99272/numpy-2.5.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ac7bb1c52d445bd4f8f7f97fefe6abc3a084dc4d63df50d79b17fa2b78e89297", size = 12132668, upload-time = "2026-09-06T16:26:07.138Z" }, + { url = "https://files.pythonhosted.org/packages/c5/ae/0f15eb56d4ec5e13c1f7ff04ff407f997d1acbadb45d3e1f2e2645a8f43c/numpy-2.5.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e6ab667ba76450084eb64013762c438ea76d9d29cc676dcd6c2e9892ba37f841", size = 5568580, upload-time = "2026-09-06T16:26:09.828Z" }, + { url = "https://files.pythonhosted.org/packages/23/fb/c72a8f25d4b6e96c354e7ab45ace3b27dc11e5d6a13b6c7d0cd6b08bf112/numpy-2.5.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:f7fabeb6cea87d65f3b926de33d03fb016cfdc29314c90974383b5582ae72891", size = 6882634, upload-time = "2026-09-06T16:26:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/07/a9/968c90ed2ab15060c338e8137f1215b5a60756ae07328e0a60d1c6734df4/numpy-2.5.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fb6f8fb9ff0b3a69f52c66ce397b0246583e9f28616231b0e32ca49259a5fa6", size = 15748923, upload-time = "2026-09-06T16:26:15.092Z" }, + { url = "https://files.pythonhosted.org/packages/59/08/9df04103947b95e3b6b1f2ed1a70521f325647a31b82da6a2aae3a485508/numpy-2.5.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93e1f5447e2b1e479d7bd74701e84746b86450cff1fc368b132d195e2b8f8211", size = 16746748, upload-time = "2026-09-06T16:26:18.43Z" }, + { url = "https://files.pythonhosted.org/packages/41/a0/14c8d5fe5b53a334aabb653deb391c0fef49558f491880ea300ed6785224/numpy-2.5.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c00abe94c1a69d75d827dcf1c025b25c8a45d230b3bcd77a9020883a1b047653", size = 17111561, upload-time = "2026-09-06T16:26:22.113Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a6/d7e96e42f01522e154c32489640f16dfc4f6181d165d05fc3bec8c2c4999/numpy-2.5.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:536f963710a4e63934d80ac0dc4f478804a83e9a84b6828018f25d09953ada33", size = 18513945, upload-time = "2026-09-06T16:26:25.401Z" }, + { url = "https://files.pythonhosted.org/packages/25/39/3453afb7119d0449ef11c886874120ff180e2c337760e0e2d88f70f1a945/numpy-2.5.3-cp314-cp314t-win32.whl", hash = "sha256:4c8a6d2ebce6305fd82fbefca827775437147052a976ee7c94b36a0c1b52ac6c", size = 6335421, upload-time = "2026-09-06T16:26:28.175Z" }, + { url = "https://files.pythonhosted.org/packages/99/01/22815d2b19a1a746b1d45205cffebb3fe511a18acb75fba6c88491fc9894/numpy-2.5.3-cp314-cp314t-win_amd64.whl", hash = "sha256:9a37475425b431b4d060f23b4f52cd2f3aef6bc7c654bd760adf0040eec9d435", size = 12896420, upload-time = "2026-09-06T16:26:31.265Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ee/a7cbba67eeaff038dc29ca8b98a88396c8b0cc9c89d4924f4a27a5c9150b/numpy-2.5.3-cp314-cp314t-win_arm64.whl", hash = "sha256:2d8240cb4c16fd831074aa2b2cf9fc54664d826341d61c372245b96a74a49a9a", size = 10857177, upload-time = "2026-09-06T16:26:34.167Z" }, + { url = "https://files.pythonhosted.org/packages/45/56/78194492883ff5eec90423fe56a3a44b154da047d88a6307f629713c584f/numpy-2.5.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:a6391fafaba97500887132cd582abc6e19452b1ac775a47caa7b24490e152058", size = 16996531, upload-time = "2026-09-06T16:26:37.287Z" }, + { url = "https://files.pythonhosted.org/packages/11/39/dd55c0af90bbab564b09ae3b0aa60ec5c02b900fa4f1ba23440525c8b32d/numpy-2.5.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:09d5a423c71ad5feb5625844ad58050e35df43871004b52ac9c0ad44a56775be", size = 12012569, upload-time = "2026-09-06T16:26:40.707Z" }, + { url = "https://files.pythonhosted.org/packages/b6/51/04f67d32e4862b281b1cb84ceeaed3421189a84fb6fb51a391cd6d5009f7/numpy-2.5.3-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:f9579f383d1bf9df80081e72760e84960a7fd4f88cf0c9e535a8597c9bb646f5", size = 5448498, upload-time = "2026-09-06T16:26:43.435Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c9/25b4dc0dd1344ec26c7319e84fd4e9809d2b5628f4e12decd618036e5178/numpy-2.5.3-cp315-cp315-macosx_14_0_x86_64.whl", hash = "sha256:86bff898a431c0fb71f7610b75726e75a54d47b37edc9d537f48de63bb3c0b90", size = 6783026, upload-time = "2026-09-06T16:26:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c7/29285be1e5232a6e7ee3268a33c85843f5a8ee93350c6465cddd66ebbf76/numpy-2.5.3-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f3ed25271581281f2fccb1adcedfcde4c07362eec69189b50baf6f90e3ae159", size = 15697322, upload-time = "2026-09-06T16:26:49.415Z" }, + { url = "https://files.pythonhosted.org/packages/55/49/bbad5335fb4996a16881f853ff3e0ba582f01720e55c89b1c06b8fc42a90/numpy-2.5.3-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffdc76bfcae6b255dff75202c5e7feaf95b40246bc0a17944facc1fecf9f79ab", size = 16708995, upload-time = "2026-09-06T16:26:53.127Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e9/1df35483760b04a65ea44669f89dc64f30e5aca098b48ceb8b1310b0e0fe/numpy-2.5.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:116f96cadd935c6122e9228d676fe7ede19e741f5c8bb1c3cddbe0c51ccebea2", size = 17052508, upload-time = "2026-09-06T16:26:56.464Z" }, + { url = "https://files.pythonhosted.org/packages/b8/99/66e54da8265cc8be8a7382bf96edce17aaa2837d6f484432025932a3caa5/numpy-2.5.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:09ffa5d903faeaa5c4dd05009cf81c8bab9f2cb37c548b8d39b65b4cfa7c97f7", size = 18468224, upload-time = "2026-09-06T16:26:59.966Z" }, + { url = "https://files.pythonhosted.org/packages/01/bc/b5e90a91c115168d793dfd2ad9c69c438c2fe7a13a437e770bc5b078e732/numpy-2.5.3-cp315-cp315-win32.whl", hash = "sha256:e01c918ac3d48e18a927cf7b14a26a3e29ff2bdf2eacb976da0aecd6a43ed034", size = 6179919, upload-time = "2026-09-06T16:27:03.166Z" }, + { url = "https://files.pythonhosted.org/packages/37/ea/780748fd3985109075514ef8fc64cd25f943e40dde13a6d59141eb268fc8/numpy-2.5.3-cp315-cp315-win_amd64.whl", hash = "sha256:e931e4f499e0dc7ef29d269a8e5b35dd722e5d14be07df6240166ea7c6532fae", size = 12697656, upload-time = "2026-09-06T16:27:06.153Z" }, + { url = "https://files.pythonhosted.org/packages/b3/16/407be69a2a87c8cab64d95975a8977a426a29e138f07e276ec258f0fe4e5/numpy-2.5.3-cp315-cp315-win_arm64.whl", hash = "sha256:26e15e4aecd8617dfbaecb37d223e365d7b39411fba20454be2670a96aa74cb5", size = 10767601, upload-time = "2026-09-06T16:27:09.297Z" }, + { url = "https://files.pythonhosted.org/packages/44/bf/a97ffb01e41d50a32a9177aef942a4d0e389a3daf451d04e5f38ef6afb87/numpy-2.5.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:6cef4bb1706dfec49243c05d921eefb4e190d41e2528b30d8035ea1f36b4c24a", size = 17090092, upload-time = "2026-09-06T16:27:12.907Z" }, + { url = "https://files.pythonhosted.org/packages/d1/24/136c02f2c2af9a067a84d0c3aa10c99012c0476fa5066732fa4a4202557d/numpy-2.5.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:d1c89973648c85069c5046ad460f7b8a00218b29a2e42359ac8cc63e9ab94832", size = 12129429, upload-time = "2026-09-06T16:27:16.089Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6c/b47582d6597789bf946d5efbeb6b9e56fd8bcbd5efc6fbf51dbe1ea31eb3/numpy-2.5.3-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:214045a5bf00113a146ab9ee9730c44501af6723cdf1f6830932f7b5ef2e7af0", size = 5565452, upload-time = "2026-09-06T16:27:19.868Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/ef3cc6da73774202d4deae16bb321fd8298a4e0561e3539f8c4be237d916/numpy-2.5.3-cp315-cp315t-macosx_14_0_x86_64.whl", hash = "sha256:8617bbfae4486cf99c9f899966699428d19da931d06ca94ad3da986c76e15997", size = 6876736, upload-time = "2026-09-06T16:27:22.232Z" }, + { url = "https://files.pythonhosted.org/packages/9e/24/e3813329498596cb842703dcacac1741612ed9fb9c4e6a3e0c7e2ebbc597/numpy-2.5.3-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:595d020938c84e320bcf40ad71089e108eac0d377cd018e14a8c094f39e98d85", size = 15745777, upload-time = "2026-09-06T16:27:25.181Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9e/4e7a07fd0776dc2210cdacf2010be8665194d094defc10c419d7dea794cc/numpy-2.5.3-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f24021b9f22bc6301c37b196974a92c1c18dccedb6fef3dd252e95f2d6adbe4", size = 16746949, upload-time = "2026-09-06T16:27:28.576Z" }, + { url = "https://files.pythonhosted.org/packages/91/db/01674c0e20335057813a00c2ebd546ed25bff9ed7914f9bced00f8c55d94/numpy-2.5.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:71b39d9f935b6ec0f8753e3e2afb51e3efba6f2e05b68b32a40754d24bcd4a3c", size = 17108994, upload-time = "2026-09-06T16:27:31.946Z" }, + { url = "https://files.pythonhosted.org/packages/45/7a/584c5e71f8d378e57cac0b033891ed65c683ef90573ba4854e8c28203db0/numpy-2.5.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:6b05c171afb3aa07adbd20abc00aea86fe375beb0fdb9ef780ec5b7f63bab1c0", size = 18512266, upload-time = "2026-09-06T16:27:35.196Z" }, + { url = "https://files.pythonhosted.org/packages/a1/d2/4e1014173aa3c55e6a756e0e567290743a6ab33a288460374d7ef6bcd239/numpy-2.5.3-cp315-cp315t-win32.whl", hash = "sha256:f54660b0eb6b0b9f36e7fe1cdfdff472028dd0d14acd9b9b65098efbad059469", size = 6330292, upload-time = "2026-09-06T16:27:38.149Z" }, + { url = "https://files.pythonhosted.org/packages/6c/b0/ff5658a58199b7bcaad87bf260eef6713d9d42cca4e028f935b4fc5fbac6/numpy-2.5.3-cp315-cp315t-win_amd64.whl", hash = "sha256:1aad64d99730d013cfc6debafed22783b4fc5a7f4b8bc744d2d8cf7dcc880551", size = 12884918, upload-time = "2026-09-06T16:27:40.965Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0b/b12a2df5d1b774bd9007a6fdff9381145b6223d37f11afc9c37ab0efd9a1/numpy-2.5.3-cp315-cp315t-win_arm64.whl", hash = "sha256:befa1ae5bd6030b3f512b43ff3fa5290bbed6b84411a44244b14adf835f5b89d", size = 10850807, upload-time = "2026-09-06T16:27:43.868Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/17/d7b106e05bfa642e8694451e7d3d759c6a241c5386a5d962e4f66c047e06/pandas-3.0.6.tar.gz", hash = "sha256:66b07ef7315a31bfe1089cd3d71a7de781c9dca986762d0b4fe7c0ef17465d10", size = 4667686, upload-time = "2026-09-17T23:23:18.345Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/48/88e8d250d28efa8163294f6809a71683c7ee67f63ac7c33021c0503b3547/pandas-3.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:085e3786ae6b2e82b406266bce36690f72b9dc1421903ba9296b2981a9fcf586", size = 10391798, upload-time = "2026-09-17T23:20:20.96Z" }, + { url = "https://files.pythonhosted.org/packages/55/a6/39db5d41f3eb5d7846626312cb30e0cea48e988fc47a3725698bc931ad3c/pandas-3.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7564d86a94c2eb8ab290b07f63ddaae5c032fa53897c29a2ff2197d43aee8af", size = 10023718, upload-time = "2026-09-17T23:20:25.094Z" }, + { url = "https://files.pythonhosted.org/packages/54/b7/707e966129f77ee8a39d41a41bbd989b790b3fef581c6e26b821315cba6b/pandas-3.0.6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7c0afdcaf6661d795fcefc2f647ddd1136f62cdc153fba177c685d97a87808", size = 10612800, upload-time = "2026-09-17T23:20:27.99Z" }, + { url = "https://files.pythonhosted.org/packages/63/be/dfb6cc9329d0bbe76dadda8a1113d026bb996ec76c509221368dc68349f4/pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47121f9571503f724c9b93e297ab6254ac99c77adf5e9ed085ea419fd585c258", size = 11108900, upload-time = "2026-09-17T23:20:30.65Z" }, + { url = "https://files.pythonhosted.org/packages/1a/6f/3d58f15bbe972f3d7bfa13ee06d731785a76fe8d232c92b2655a8de14127/pandas-3.0.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:994a79608263fe1c14cc48ffa7300e2b834b7d1cb406ffe96a08828cb0cdd79b", size = 11630226, upload-time = "2026-09-17T23:20:33.582Z" }, + { url = "https://files.pythonhosted.org/packages/58/54/9b494de4a3dd92fc6eb19187db1b21afb50fdc21962f32ea1aca9f270cb2/pandas-3.0.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a3a22e07fe75347eaacc75b0e85297947af4fba6b4aae23916bd8b6828d0bba3", size = 12146942, upload-time = "2026-09-17T23:20:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/d3/dc/d2df02854aec5d47659acfb2be352eecc691845b2f86e99c84f1010a8671/pandas-3.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:2e5fa32ff162dfdbc280157d664f44d23049ae414725af9676df339c501d82cd", size = 9859246, upload-time = "2026-09-17T23:20:43.976Z" }, + { url = "https://files.pythonhosted.org/packages/79/1e/2a30df0d7dede5c195300a1820b0bc21cea3aa24e4c8b6c4431565ecc79a/pandas-3.0.6-cp311-cp311-win_arm64.whl", hash = "sha256:5e75072773c1b2f7cb63faa3a6f562aede11f3976f68ed34cb538bc091a28171", size = 9106923, upload-time = "2026-09-17T23:20:46.611Z" }, + { url = "https://files.pythonhosted.org/packages/77/4c/597d588c055d4373cff19cbbc32d4dd046c7be8fadee957585b5ba9e5b24/pandas-3.0.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7dac2d65e9087e8e7b5a45fe15c4920911a221df061ab629943ce016489145c7", size = 10397411, upload-time = "2026-09-17T23:20:49.465Z" }, + { url = "https://files.pythonhosted.org/packages/18/8f/48907c7c707b61a8e5018c32e1a3f70623209bfb59020a2f6196159d3aa7/pandas-3.0.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9dab635a549e58a053c7b0fa054dc0bd7be22f0ed9a720f4a85d5fb993276172", size = 10051279, upload-time = "2026-09-17T23:20:52.409Z" }, + { url = "https://files.pythonhosted.org/packages/67/fa/613d867c3d9554a61bafdec6f79565c8a3e73235feb52cc4a72ad2e0fa6a/pandas-3.0.6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3dccb584123b399c07562ac4d62543e90ede49ddf8ce3c13ffc64cbe828c281", size = 10303429, upload-time = "2026-09-17T23:20:55.597Z" }, + { url = "https://files.pythonhosted.org/packages/cb/67/0c0f18e38d7f2d2af8c24b3315bc4046e73bbdd4a5540405506671ad0c0d/pandas-3.0.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0704044b676496b8350e023b09f174a26772456c974a2b11c36bebb558c9490d", size = 10788193, upload-time = "2026-09-17T23:20:58.617Z" }, + { url = "https://files.pythonhosted.org/packages/39/53/1b57f3162501fe36687e4870e1b918a6458ca7386b173af75663ace95857/pandas-3.0.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e7c1905ef02c3d6d43d9dbd5b6ccb4da4870a0b0c821bbc103fbdb6f3ad2707b", size = 11323501, upload-time = "2026-09-17T23:21:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/f2/d2/b1182e8d39100369d7f13f4a125a3fb6b096fef112c46d0566c25781ff68/pandas-3.0.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:569e114072b24fc4970c12e2b4bab252671668a40b324318903380cab0254c0c", size = 11838173, upload-time = "2026-09-17T23:21:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/c7/33/5b717af24d2f27995e51e0875a269dddd373045216e34cf62e3aa764eaa1/pandas-3.0.6-cp312-cp312-pyemscripten_2024_0_wasm32.whl", hash = "sha256:2a8fc94be2ee5f1d86f97aacd8cc566f81680b6498e76f3007421bb5d98151bf", size = 7118499, upload-time = "2026-09-17T23:21:07.661Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2a/14b3b17cd75cef4a1ee1af4234eb41cc1afe4103b98c2d80e8916abfd42b/pandas-3.0.6-cp312-cp312-win_amd64.whl", hash = "sha256:3ef908d28590b3f42d7070e7ad8f9b34b442b260b7f3c1afb57e0040c58cdb1b", size = 9661439, upload-time = "2026-09-17T23:21:10.959Z" }, + { url = "https://files.pythonhosted.org/packages/3b/11/3d580a604a1e35d69f6676847bd12db7d14344bc677b717f4413e79c5d0d/pandas-3.0.6-cp312-cp312-win_arm64.whl", hash = "sha256:f4e7c52eb108d752e7592268108fd3e98efd76d83a3125cdd06c621c2e44359b", size = 8959806, upload-time = "2026-09-17T23:21:13.851Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/143605a1f6443ad50ebda78a31e5a3a10147fec2590e931584aaa5ff0a09/pandas-3.0.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ae8073aed8e21d1a7fe263dcdc6840743549722a6738198a0a46000fa9476f2", size = 10418900, upload-time = "2026-09-17T23:21:16.594Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ca/87f8548f73d452aab35e4a90f8b39ae303295e0f2ef0b4055c44d6b3f1be/pandas-3.0.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:60d81f9e1799b36f3739e7fff44d1fbb2e8fd5a271b3863e03de9715fccda0fa", size = 10064785, upload-time = "2026-09-17T23:21:19.677Z" }, + { url = "https://files.pythonhosted.org/packages/43/1a/d951442e5607c6e3b2462eff8f420797d428aa74b87c6ecfe4f48553626e/pandas-3.0.6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:097090508a1dd335013d39106fc10b20f4fd4a171638e47b77d55798ed9dab6c", size = 10245290, upload-time = "2026-09-17T23:21:22.797Z" }, + { url = "https://files.pythonhosted.org/packages/50/fa/96d50e1e6cd0b08b5e2b7c838f65ae644940f75a124063380b5ef73b6866/pandas-3.0.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e92d9fa834c7d877130027cddc0cad8dcff97c1f6cca26bd6310f847228b658", size = 10757657, upload-time = "2026-09-17T23:21:25.673Z" }, + { url = "https://files.pythonhosted.org/packages/7b/12/f82d13a2cb703e1a8acee7e01fdc2b898d9cd0c00f07d1dfce63af43e350/pandas-3.0.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b27c8d890e4aa2171437ae2a39de1d215e674158e4865c4023a8b31c932513b2", size = 11249114, upload-time = "2026-09-17T23:21:28.898Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ce/8aef2e561a2f2c8b38c913c67373c65ba6748174e763d27c80271b24bd17/pandas-3.0.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8029ec0f1f89e4f985929ce1f6626dabf3140d61a4e9c1215afdab34eaf9a5d", size = 11820511, upload-time = "2026-09-17T23:21:32.11Z" }, + { url = "https://files.pythonhosted.org/packages/c0/bd/63cb67e6903ef6d9c2871916dbcbc09d254da0fe8b870cf62e16b21945f2/pandas-3.0.6-cp313-cp313-win_amd64.whl", hash = "sha256:f3ce8a6968045481e91a3990e797e348ce13db45ee164a7095bbc824e26c09dd", size = 9638092, upload-time = "2026-09-17T23:21:34.883Z" }, + { url = "https://files.pythonhosted.org/packages/75/2e/e7b35b712edb068d382ddc8b2bea8a04974100515ba2daa22b478b265842/pandas-3.0.6-cp313-cp313-win_arm64.whl", hash = "sha256:cc39303913e2ea129915670de5d1c9fbd647f543bb72e5543bac8baa94e9e42f", size = 8952032, upload-time = "2026-09-17T23:21:37.729Z" }, + { url = "https://files.pythonhosted.org/packages/75/55/1a8875395b05ccd572cbca0b9255dcd2db6e6508e632a558c1a6884b39ad/pandas-3.0.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ee913a91669056c1de1a6b733fbfeab711de9e54e3bee2dfa5fe79d9457247d1", size = 10492213, upload-time = "2026-09-17T23:21:40.746Z" }, + { url = "https://files.pythonhosted.org/packages/35/61/47ae13476995cc8a40cd609e93e7cf11f273d8692925c2903cb6d38aa0d1/pandas-3.0.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ff51a4459ed036e93d1eb1bb5e6e7b28685d3cb6b7c12b91c05b31024e234729", size = 10156618, upload-time = "2026-09-17T23:21:44.142Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f2/cc5f2adb8d6e86a85d9fb5128f8cf205a61189336f70d1f7faf0d1b53ec9/pandas-3.0.6-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:654aae059295dbba6ecd2328ca12712a2cf1676214c8699f1c29213f7ccf9c34", size = 10375479, upload-time = "2026-09-17T23:21:47.159Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ba/ffdcb19be4ff6bfe7d969e7cef2c567c633df5a3a1cc1053394ad053bca8/pandas-3.0.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f51d7f651c8054c5e82a69265c98082e795d1442df7ca6edc3a545d61214b1", size = 10783244, upload-time = "2026-09-17T23:21:50.367Z" }, + { url = "https://files.pythonhosted.org/packages/77/5b/e150075b2c6eb69fae896f2d9239bc6ed07db97735971d53d66de6553460/pandas-3.0.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:22172a92e7ee678ec0140c7af4fc9366b55413834a1cd86af78b3caa0b0574de", size = 11382223, upload-time = "2026-09-17T23:21:53.355Z" }, + { url = "https://files.pythonhosted.org/packages/d6/8a/b441c587dc7355bf6e1f68a91b4f76a6c29740f0c23be3acc5d4ebbeea6d/pandas-3.0.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583be68728a31d0d750d5b8d9e00f02b153df0d4655f858bde93cb84cfc4227c", size = 11854881, upload-time = "2026-09-17T23:21:56.342Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e9/f43410fada510b43fec09993c08f552086c3d247d3ee801a678f3cb10ea5/pandas-3.0.6-cp314-cp314-win_amd64.whl", hash = "sha256:77ccbe5057aece6fc172b9b77f19c04335af6882bc2e10c8f3ee4e6bfb3da553", size = 9791672, upload-time = "2026-09-17T23:21:59.332Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9e/db14c059c21f9baa1907d436f8bf30e0c76c6288225c5e8b79a08ba8b2c5/pandas-3.0.6-cp314-cp314-win_arm64.whl", hash = "sha256:fb625f426b375bcc96e3a04c5d5d266cd7be6ae5d6866e0e703382ab5164068c", size = 9121246, upload-time = "2026-09-17T23:22:02.123Z" }, + { url = "https://files.pythonhosted.org/packages/67/ba/bad0f8dac020ab38a8637fddab01a57a82da7a496a6e6f19590aad53ab62/pandas-3.0.6-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9e492cd4bdba6778de4fe0df7f4590c012161ebcf9902dce01b01dc683105514", size = 10920612, upload-time = "2026-09-17T23:22:05.404Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a9/b500982e9aac6d52a58da4ad3f11e14168a315b06906b3f397c427878065/pandas-3.0.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d7dcd21238cbb4828ff148481ba01cac8946dc5121457b5aeba28636f8f99a60", size = 10570213, upload-time = "2026-09-17T23:22:08.44Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/e6ecd0073c98be8f840ac3125b955272835d7d9fd69f5944383b164deb5e/pandas-3.0.6-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ff482fa91fa2bafd92e8fe66ce3645c851824310f295c1f0a2f96e928fc4541", size = 10252356, upload-time = "2026-09-17T23:22:11.302Z" }, + { url = "https://files.pythonhosted.org/packages/04/f5/001e230a7a7803590d9275a1a3f7e1bb605e3a495cfe5e8d3a532090621b/pandas-3.0.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:db7ec631f26223beee8e5c9e0b8f23c24d8197bbd1d982421d4e3188bea51965", size = 10655952, upload-time = "2026-09-17T23:22:14.283Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ab/bab587148a3852c96aae26c4b5f9e04ce2221801ad94e166b4fbf969ede0/pandas-3.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd75ed0c840f709fc2ae26ddd9534ac77ca1a48ac0cce521a74acaa85f3340a7", size = 11274177, upload-time = "2026-09-17T23:22:17.352Z" }, + { url = "https://files.pythonhosted.org/packages/f3/32/74b48d87df2b80892d713c149abfe36d5db4de41b4eccb042a2bc07dafc1/pandas-3.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ef738d71d1059245b6bb03e312be06d8b3821326a83486c1ad03b9aba3710e44", size = 11719041, upload-time = "2026-09-17T23:22:20.227Z" }, + { url = "https://files.pythonhosted.org/packages/f6/c6/d64b72d64d7eb0fad9fe424d34138e45dee70ddbea1360dcd0adf30e28f6/pandas-3.0.6-cp314-cp314t-win_amd64.whl", hash = "sha256:429d9df32731ab01383ed98f2baa7a60368090d1a94fc06019a12062510e8630", size = 10191388, upload-time = "2026-09-17T23:22:23.524Z" }, + { url = "https://files.pythonhosted.org/packages/7a/30/5e5b2ccabeca73ae2b03fc82bca3eabb7466cf43737f05ac08d591665d47/pandas-3.0.6-cp314-cp314t-win_arm64.whl", hash = "sha256:a4dbd4dc65cbe645b92b8785d0f96dd7311010dc6606cf620e51b07b8788a12a", size = 9387796, upload-time = "2026-09-17T23:22:26.64Z" }, + { url = "https://files.pythonhosted.org/packages/b6/77/47c5fb0be8bdd00116814c2c40d9ec42dbeb943865ef95130fe58a898226/pandas-3.0.6-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:50c44cbf5820b6b91a5f74aae04972472aefadd3cd9fbd1010409d85528bd570", size = 10483960, upload-time = "2026-09-17T23:22:30.071Z" }, + { url = "https://files.pythonhosted.org/packages/09/08/a310cb2fefe6d2b4623ab2150da818d93d4e73e33b58e4d163bb74243c5a/pandas-3.0.6-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:eb6900de08ac85f93ac4948aa6b80842eba555875337b8359035ac9c43e92d34", size = 10149432, upload-time = "2026-09-17T23:22:32.818Z" }, + { url = "https://files.pythonhosted.org/packages/54/36/6af478ec3a26d7754555cd62c3101c589c0931b1d85398e4fa5403910a1c/pandas-3.0.6-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e25e2e1adee99ddfada6f7206a79ae8e9c8a8861b0e3eaaba165006d3eef18e", size = 10360981, upload-time = "2026-09-17T23:22:35.621Z" }, + { url = "https://files.pythonhosted.org/packages/43/20/5ece0e9cb79a6473216620db6a90546f578001c2bd857b77c444b27acad1/pandas-3.0.6-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ff44b2cb51cbd691c91f92c4ea6c71e34003f239ebd67c2e857dc898466b49c", size = 10776585, upload-time = "2026-09-17T23:22:38.427Z" }, + { url = "https://files.pythonhosted.org/packages/2f/b6/cd3038f31ade5e8d2b4e1c9549d4b31e4d598469562f47142b2ad9171c0a/pandas-3.0.6-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:5edd0a7abb0986ecce1ac81f56d99b6763f86aa6946dceb6c661224f90af5a19", size = 11385249, upload-time = "2026-09-17T23:22:41.18Z" }, + { url = "https://files.pythonhosted.org/packages/0a/87/05bb3003737f80375d7311774916a24d161e2e591abe8c672aed7813defc/pandas-3.0.6-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:1bcb3e9ed29e74a7439cedff9e2aefd3ea65de84d7de9ccb6c194192541bd60e", size = 11848595, upload-time = "2026-09-17T23:22:44.207Z" }, + { url = "https://files.pythonhosted.org/packages/c0/30/1c0d46acf236d19ef975e9cdd5d1e0dd54924b03f0ed8287096ad4a18152/pandas-3.0.6-cp315-cp315-win_amd64.whl", hash = "sha256:253e12cb9081b0afbac607920f6142975966bc315135e09de275fdbaa415d2de", size = 9783810, upload-time = "2026-09-17T23:22:47.097Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/df3304a9c2833c4810e7f1c887b04105b24731f9deef8b5d5d04522a375b/pandas-3.0.6-cp315-cp315-win_arm64.whl", hash = "sha256:97274c9adf6255bb48c620cd6959805efa7f09ea2167f0e0ae006a448cd2fca7", size = 9116820, upload-time = "2026-09-17T23:22:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/47/25/d5f6cce5efa17c38e4f752a875b4a26d66cfadd529cb8c81672f0376d6a6/pandas-3.0.6-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:265f562fdd1079f69f3de96dd425c3405224038c0af4f920c54bd240ee2c4640", size = 10894614, upload-time = "2026-09-17T23:22:53.223Z" }, + { url = "https://files.pythonhosted.org/packages/ea/8b/e1876bfdc1df06bafc022d33202b5663bd86c81df2a6140aacafd0344669/pandas-3.0.6-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:c6e4aae3e9bea26c6c9a20d88d96c86ec4a99b4db5fd516bcb4e829ab2c0ee36", size = 10546973, upload-time = "2026-09-17T23:22:56.155Z" }, + { url = "https://files.pythonhosted.org/packages/e9/27/e0a27a5a5c27f7db66657b44def9e93121fd0ad4f0808355b9898fcbf204/pandas-3.0.6-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a77a1a44e4d88f1c6a2a64d3eb12efec8420875722e14279800b173a7c7c2804", size = 10239717, upload-time = "2026-09-17T23:22:59.603Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4f/4eadb7d86a921c1e8bc70916cfe601ed667c4169118d17d69958611c21f8/pandas-3.0.6-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fa853a12e0b70927e2b1ee00d56d2224ec9cbb4b9d58348b5ad52d2f21150e", size = 10641275, upload-time = "2026-09-17T23:23:02.81Z" }, + { url = "https://files.pythonhosted.org/packages/c7/d1/eba72e9d905e84e79aefeefdcc6bc1abe15d9077973566643f4211636966/pandas-3.0.6-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:c826e9babb7790142c399f58599d8de679bea059d7b39c5b6efa2096fac37266", size = 11262919, upload-time = "2026-09-17T23:23:06.038Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8a/1c5bd2642b450e374b6191189f47c49538fe41f82348a66de6f647e6ab59/pandas-3.0.6-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:8fe77b408d82e2615674dfed62533b95e18a03610573877422aada4f625d4947", size = 11709148, upload-time = "2026-09-17T23:23:09.082Z" }, + { url = "https://files.pythonhosted.org/packages/73/3d/1b142bd0d0f1326a5d98c91c955b923cd1e06b5eecb428cd9d8817fa01c0/pandas-3.0.6-cp315-cp315t-win_amd64.whl", hash = "sha256:83e91d15738d7783c050197cef2f2cf82fc6353dae9865aa87ed1fa16aa4d55a", size = 10161518, upload-time = "2026-09-17T23:23:12.365Z" }, + { url = "https://files.pythonhosted.org/packages/0b/a3/6419c14da2adc1f09a6a183b8f91d7494d325b287f4ca984ac04f663638a/pandas-3.0.6-cp315-cp315t-win_arm64.whl", hash = "sha256:963ca21199097a84c7827c4678b04e30833084fbf8ef44fde3fa7180a29f8fa0", size = 9364529, upload-time = "2026-09-17T23:23:15.274Z" }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload-time = "2024-01-18T20:08:13.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload-time = "2024-01-18T20:08:11.28Z" }, +] + +[[package]] +name = "parso" +version = "0.8.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/24/92d90bebedf197eb15b144367ce6fd4ad2de571927cd09dde190a36db8fc/platformdirs-4.11.10.tar.gz", hash = "sha256:9cd351c078ccf7dda1fdc5f8ccb9d8f5258984c63990e6df3627dde0b70b51d0", size = 39389, upload-time = "2026-09-18T01:45:15.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/45/cae23ec98a49825d58de75c38cdb714605adeb6e6ab72a7ad2b28322892c/platformdirs-4.11.10-py3-none-any.whl", hash = "sha256:973c4c082b964958c71588448488d2b14fb253893dfbdb82325a14c84e540e8f", size = 24763, upload-time = "2026-09-18T01:45:13.878Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.53" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/9f/abfd2959e9261dd5217ca8551d4de211ca6ab26fe9b72cf44731ff6c4442/pure_eval-0.2.4.tar.gz", hash = "sha256:260c2774686e651b79f8b8e7fc9d80b3599ea6a66334b47d5f4abb69fc2c0ea1", size = 20563, upload-time = "2026-09-10T21:41:22.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/18/83376915176eb058cb86470eb7396388a13350b09a8f233a79303bbcbc5b/pure_eval-0.2.4-py3-none-any.whl", hash = "sha256:96cae060a313cfaad51bb761278bfb0e62dc0248d9315a81173752dc546cd37a", size = 11893, upload-time = "2026-09-10T21:41:21.532Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pytz" +version = "2026.3.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/8d/5b3d5631c2f4b4b8862f64cd0c9eb777b5710eeb5125b4be8dd0a200a4c0/pyzmq-27.2.0.tar.gz", hash = "sha256:54d4259d1bfae24ecdb5ca79f7acc2eac6c286a02d6a0ae617797cb45f0726d3", size = 292316, upload-time = "2026-08-20T19:08:21.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/2e/8897afa4538707d86645f51cc50e66b2b84900edb1be9dc9af2c2fc04e5d/pyzmq-27.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9216132843d139a123f243c07fe70f7487dce5041093dd77040f9adb5dc91872", size = 1457109, upload-time = "2026-08-20T19:06:26.022Z" }, + { url = "https://files.pythonhosted.org/packages/d1/bc/dbce7bc1654fa25b1e68b9bad9e547906f581ce919c186a88ed951cb794c/pyzmq-27.2.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d41ebb260b69329b7d4a2936d44c872c86dd785355b51366c8b14e07ed7e9373", size = 985701, upload-time = "2026-08-20T19:06:27.481Z" }, + { url = "https://files.pythonhosted.org/packages/95/cf/6981738b57c83fef33f356141ad83bf51e92f2f70c9d5767affd1a699f07/pyzmq-27.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:468139ddb2e494d06e586bd3a6835077e8b3764560c8db552fe685c5867fc24e", size = 714285, upload-time = "2026-08-20T19:06:28.962Z" }, + { url = "https://files.pythonhosted.org/packages/50/b5/13657961a845e29c28a4e7ac4202999ec90b3bba1890a5469ce2ae90359d/pyzmq-27.2.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39755dc4a923021bd0677990ffdbc21cff0e1ee1cf07fe3817acea153ef4cb67", size = 888465, upload-time = "2026-08-20T19:06:30.4Z" }, + { url = "https://files.pythonhosted.org/packages/58/5a/ca7ee7a767413d4ba858e93748b95e30b35b8c139849fba94de4433ea2e5/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:714f8cbd66c7e405338d668f79d2fe83fe923defe348e843be998603cf92eeff", size = 1705731, upload-time = "2026-08-20T19:06:31.819Z" }, + { url = "https://files.pythonhosted.org/packages/0b/8b/083f6184e4eba566c9a3cc9974b1b0fe327b7093788135ba8133edaa67a6/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1132805970045adb9f5f05dd57040978286a8e21a5475f2c2ddf1bc983b9a2c7", size = 2074243, upload-time = "2026-08-20T19:06:33.36Z" }, + { url = "https://files.pythonhosted.org/packages/57/f5/249362b664ae725d534c8843214fa9fd7fccd74532a19e24603954a88a7d/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b26f2d0493b79ce3c3112c8a12649418915582ba4707b8ed9f44febf2be71f42", size = 1926859, upload-time = "2026-08-20T19:06:34.796Z" }, + { url = "https://files.pythonhosted.org/packages/bf/cc/23c613c15f06d879f13364d14c17e5e4e8304049411e96c1410e6e56c3ea/pyzmq-27.2.0-cp311-cp311-win32.whl", hash = "sha256:44f261eca7dfb9904ea2b56428f59ab693bbe2715c0413a701f17b067ebf877c", size = 570747, upload-time = "2026-08-20T19:06:36.337Z" }, + { url = "https://files.pythonhosted.org/packages/dc/bc/bbbcf89003c93f18e33665c26e3c48d75e3915c3dd22887f3a7aea2c5e26/pyzmq-27.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b86e04f55af0f4d8cd8ecf14c0b8b81ebc8fd66fa20126b753514628ecadc7e", size = 644845, upload-time = "2026-08-20T19:06:37.711Z" }, + { url = "https://files.pythonhosted.org/packages/14/c5/4635d0ba2b8493edf6d5541fff0b07fa1d986fdfc29c596a53a21e20f9af/pyzmq-27.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:917d601e9540098f580d2723d0ce6402cdb6f02bc8dc2de74e0dca6e13bffd1b", size = 567495, upload-time = "2026-08-20T19:06:39.246Z" }, + { url = "https://files.pythonhosted.org/packages/57/8a/153532fa53db30e116118164f3af269a1f3966b3e2ba32c89b12fe864bd8/pyzmq-27.2.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:591c8de5851c5ea372194469fe97587b97c3b641e9a70f31bb3474acbfde0241", size = 1431074, upload-time = "2026-08-20T19:06:40.601Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ef/c08b91248bb90a9efa81fa00ba81b69c157c74d0c5efbb2c319d91babb62/pyzmq-27.2.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:00e73942ef12cecbc7951c4a9104bb8ffaed742abb13af2da6833d90dd368cef", size = 973915, upload-time = "2026-08-20T19:06:42.037Z" }, + { url = "https://files.pythonhosted.org/packages/b4/78/a3a3a86c2b00fadb92ece1ca4f8f028d62b2ce9ac3526097239ab2d6fba9/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f8079d0521fe94bbb401fe9407578b28f3701627c8be2c9f7e0c5b77dcb0109", size = 697722, upload-time = "2026-08-20T19:06:43.325Z" }, + { url = "https://files.pythonhosted.org/packages/62/2c/d5828306f795e8d34676d266823b74e2101e0ad3760d12083de3e02abbb2/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dea74fd65f1fc5f7fe167916a473ebe6ed6174e5e5d9de11ea6583661be6cf43", size = 872258, upload-time = "2026-08-20T19:06:44.627Z" }, + { url = "https://files.pythonhosted.org/packages/09/52/51253b78fd8739293e283407eeecb14215c02c71b6519af21f6eed8e69cd/pyzmq-27.2.0-cp312-abi3-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dcc99ca132b667a4ed750afd42db4ea73288f18425a9b2e3c0af095665c491f5", size = 739591, upload-time = "2026-08-20T19:06:46.214Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3e/142c85b67a4c9678629b0cf6d5125b29663d75be69bfaa57a3cac344d780/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b8d5f66e4a8246cf77f7b8f7902af64f00553368fa0373c89d99b78f0ad79394", size = 1689031, upload-time = "2026-08-20T19:06:47.612Z" }, + { url = "https://files.pythonhosted.org/packages/0e/ee/0776fb0f98ed1eb74d77240087fef0ab045b6ad15cb09555c6c5134c98ad/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:d1526b42a2e725b84ed226f37becedc250c6347594e5ed304e4e9aff68c9aec3", size = 2059547, upload-time = "2026-08-20T19:06:49.064Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0e/ec77f691a4aebe29ab6329f996fb0e0270c876a3016086e3ca6ef733bcae/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f707bcf2c1d007d14d70531d4dd7b41060881c73efa845580bf6faaf9ea24d42", size = 1910457, upload-time = "2026-08-20T19:06:50.783Z" }, + { url = "https://files.pythonhosted.org/packages/30/97/1f5530ff4fc271b4597048371d5af972c2baab51be132ba15874e0327a6a/pyzmq-27.2.0-cp312-abi3-win32.whl", hash = "sha256:fdaaa4ea3242f6ad298eb5177eb042aea5c73c30e76d20caee7b15af20d24ec2", size = 563450, upload-time = "2026-08-20T19:06:52.307Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/b83f7780dad22e0878e4c7bd9158ebd24ed12bc3d5e3a471cd0576f77ded/pyzmq-27.2.0-cp312-abi3-win_amd64.whl", hash = "sha256:2c218c6ab8bc447ba62054b581fd30209689d199c6ecb253f79615ca74a38e12", size = 628633, upload-time = "2026-08-20T19:06:53.809Z" }, + { url = "https://files.pythonhosted.org/packages/52/aa/3918b5ac7f9987bd9c421b065074fd7409ded88f856f2c704a24341877ec/pyzmq-27.2.0-cp312-abi3-win_arm64.whl", hash = "sha256:348d6fd3e4b81ae4580622ea8c2ea60224e84b2ac1b3be4482e6edc7de06e7a3", size = 556006, upload-time = "2026-08-20T19:06:55.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/5e/d0541596b48c5a19f85dcbea83d6673d8e91681cdf853eb194c31fc9766e/pyzmq-27.2.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:c551b9e2f86dc625fcb1a032c0d68042678caf96a8dd7c28796766b673bd5b52", size = 1127193, upload-time = "2026-08-20T19:06:56.545Z" }, + { url = "https://files.pythonhosted.org/packages/50/9f/8c7411bb283982d46e6d56dca6a095678c87eb0398daead12776d9881ac2/pyzmq-27.2.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:288cc790da0e3064a14a38ddc56ba169dada8c8af4cb86518db2bcbd380eedbb", size = 1166833, upload-time = "2026-08-20T19:06:58.011Z" }, + { url = "https://files.pythonhosted.org/packages/f9/84/a849161ff88b2de9b991cc8ab332218824741122fdc4fdf222a5b822ac8c/pyzmq-27.2.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:3d45189c0c3c99f817b7fefff0d32eeef684cf33e1e3c0fc4281515357c54702", size = 1134452, upload-time = "2026-08-20T19:06:59.898Z" }, + { url = "https://files.pythonhosted.org/packages/3c/34/ff4aaff0cfba2a4d7ad1a16ffedc52c6deb89fcf673d455085446b23f215/pyzmq-27.2.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:d61910b52be5b2cd8b248dbcbe3a1b0275556a7d99fb613fc43323b546e273b8", size = 1167520, upload-time = "2026-08-20T19:07:01.283Z" }, + { url = "https://files.pythonhosted.org/packages/b6/07/42111e9dc1041d78b4443d6eb1b82b027f1a58178dc8a38385effbc72ad5/pyzmq-27.2.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3ab6eb88590e510ab16715c32dbba12000da9bee989fdadd9ee19a234c492eb7", size = 1466289, upload-time = "2026-08-20T19:07:02.738Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b4/def7a478458da78665840564161772e7e938600c32a89f28e8b221b54d2d/pyzmq-27.2.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1ecbdd131b9669f62d3a45afee5527c7ae9f141e4301267f21714c90bd21725f", size = 975868, upload-time = "2026-08-20T19:07:04.155Z" }, + { url = "https://files.pythonhosted.org/packages/38/d5/e3e85f7fea37153097aaff49db9e33093909cc2a7b22c1ac4ebe546600fc/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3146385b94a760236c5eceff468a66a296a716ca98a2e0f9217b1518118466b1", size = 706054, upload-time = "2026-08-20T19:07:05.623Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ef/3b7d9449b223183222bf517245e1e53d5f1ab8c10be8b45f6a301b2f994a/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9846e881620dd62566ca76a53e384c3f37490faf4b9240aebc7498810dfca853", size = 878984, upload-time = "2026-08-20T19:07:07.153Z" }, + { url = "https://files.pythonhosted.org/packages/be/a5/8b49dbd494f6dcfda69dc4cade322a4b02706ef4e3d30cc366d4e369899f/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d9527e3dbaef1edaeeb2446fa7379446814a43ade8adc7c4a5ebe69437815ddd", size = 1697489, upload-time = "2026-08-20T19:07:08.945Z" }, + { url = "https://files.pythonhosted.org/packages/da/5a/4bb8280901130c26ea25f0cbb4a6d39d94250860c6b3dbd912f1cf48fca7/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:56b48fa9d478a3af7254f397697a62f5ad3e1bb677e200b2701f0c290d97e5af", size = 2064236, upload-time = "2026-08-20T19:07:10.384Z" }, + { url = "https://files.pythonhosted.org/packages/de/38/f433af66922554adb2b5f79e897018c8e19a90b9eaeb49c4814f8355ebe4/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bf0b6e4ce1bb089751c504c5493d6b0557eabd02dd21b76e9086cf964234b103", size = 1917424, upload-time = "2026-08-20T19:07:11.909Z" }, + { url = "https://files.pythonhosted.org/packages/36/81/ea1c1ae3f801d96ba2c269e056761ebcfe023476e651d3af2a7817962051/pyzmq-27.2.0-cp314-cp314t-win32.whl", hash = "sha256:fba8afcf265c6e9fbe1594cb045d4765c6c9a7d607653a8196067ef23566b843", size = 591103, upload-time = "2026-08-20T19:07:13.451Z" }, + { url = "https://files.pythonhosted.org/packages/8a/04/149a627707e780fa9f2c1ede3590c14fa6b18b5576d15744342622299a50/pyzmq-27.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d1bc1d380a91d954ed5fc9f12915dba014eed0978d2de05ee7ca688bdaac144a", size = 670215, upload-time = "2026-08-20T19:07:15.069Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/f9c3c1536c41ef3dbf765ea04218990e2056e558f98184ecd883767fc501/pyzmq-27.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:c7cfb75caa83f5153c687e9d2107f64b5ef0ef0d6edd260d3ff920baaaa69101", size = 582252, upload-time = "2026-08-20T19:07:16.582Z" }, + { url = "https://files.pythonhosted.org/packages/fa/00/78fe097a304a408275747ce43f20428789130b059c5649956277c20f30cf/pyzmq-27.2.0-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:c5129a8fe43ecc49b99eb75616603d483a3c2fcaef504988fafe8ea392aea98b", size = 1134295, upload-time = "2026-08-20T19:07:17.94Z" }, + { url = "https://files.pythonhosted.org/packages/f2/83/1c36270658d2ee56e23a3f9ef5fbcb94cbd2f9fe966a6641f2f38e697162/pyzmq-27.2.0-cp315-cp315-android_24_x86_64.whl", hash = "sha256:baa2ce3485145653194d6c8c5beedd1e9f0bf46a0919c9fa2fe2204fc35b74d9", size = 1167492, upload-time = "2026-08-20T19:07:19.476Z" }, + { url = "https://files.pythonhosted.org/packages/58/b2/f0ae223438d7faa991f6feefdc823815f11cc604f898738376b59fd96515/pyzmq-27.2.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e1ed46048d1920cabc96d952a0d5cfe4127ad8db572c335aae4e3c57b9278d7f", size = 1465992, upload-time = "2026-08-20T19:07:20.941Z" }, + { url = "https://files.pythonhosted.org/packages/59/46/fb56f3f37a6a0937b0e1d2885e808b5eedc171320bac85573cfae78fa9bc/pyzmq-27.2.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e0fa0bc6b1a184aee59b32efcd1b7f0e6d5b8f9387799e4c16a4cb66a86747d6", size = 976118, upload-time = "2026-08-20T19:07:22.577Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/a2c9bfd7c4d34eea1278493cd041bc000d41acb4463c89ceaad29dc813b6/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4bd6743e8bf854c3bfce892dd6578a514aabf128e37a4b2eafcf01856f7e44", size = 705968, upload-time = "2026-08-20T19:07:24.019Z" }, + { url = "https://files.pythonhosted.org/packages/d6/12/b906b269116b6591dc15c0acc5d04c043957c8a531d336999731f4b1d899/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95369ed6626afcfe2ac89832fb1b917c077fbeb905fbbe5d918349ce0222b89b", size = 879011, upload-time = "2026-08-20T19:07:25.428Z" }, + { url = "https://files.pythonhosted.org/packages/12/13/f96359534bfb77651c15f1fbfc4bfdd7ec3489d23f434706d39598dd0dcd/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:40124779c3a56ad5d91902df1ff89159cb414b6c1a0ee697abcc66cf5e6db62d", size = 1697496, upload-time = "2026-08-20T19:07:26.821Z" }, + { url = "https://files.pythonhosted.org/packages/21/b4/2c007ae5f2fe5eca86cbfbc874ed86b5135f2f7812615dfd78606d3c93f6/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:ec8a318dfc27c7d946651b3d9e8025d5734f30c168a822195601827207bac09b", size = 2064347, upload-time = "2026-08-20T19:07:28.315Z" }, + { url = "https://files.pythonhosted.org/packages/9b/88/767af3a6630c15215f3a66700ec79598a375edd1fdc9d75a3ad522178c01/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:88c0fac061bac269076edeb3a209acefc96cd6167c239daf1c2b404ac48d7012", size = 1917360, upload-time = "2026-08-20T19:07:29.693Z" }, + { url = "https://files.pythonhosted.org/packages/35/c1/80dd2d20d6e57bc68e1dce1e84bf3e76c9577c1bf728199985c8b4ea0fd1/pyzmq-27.2.0-cp315-cp315t-win32.whl", hash = "sha256:ac126d48cf18aa955daabef43bf0009ff76ad4deee437d09ecf15388214b5beb", size = 591073, upload-time = "2026-08-20T19:07:31.341Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b5/33b781666f3f52ae834bc9c8e38f4f0483a826c5a91cccc993292007bf10/pyzmq-27.2.0-cp315-cp315t-win_amd64.whl", hash = "sha256:edce90a1e588ec63adbf612cc0ad582de4169cd216c7ae53c15f42a2ee902f35", size = 670701, upload-time = "2026-08-20T19:07:32.895Z" }, + { url = "https://files.pythonhosted.org/packages/6e/97/bc4f0edefb992df4fdebcf9f0cc40f631cd4ed277e1ed59ef2cd99a5c8c5/pyzmq-27.2.0-cp315-cp315t-win_arm64.whl", hash = "sha256:a843094b4d3d633bc3623e47a2ff50742d6af02bc1f7606aa2e67e971e21878d", size = 581985, upload-time = "2026-08-20T19:07:34.19Z" }, + { url = "https://files.pythonhosted.org/packages/93/22/7187a1f0bf2b8bf8dc6b91762438fb9b472f684f2dc4cb74a24bf8957943/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a7c1144dc61777938e932a2c9011b980b89fd8ff3733033b34c44c299187a6e1", size = 875015, upload-time = "2026-08-20T19:08:01.692Z" }, + { url = "https://files.pythonhosted.org/packages/92/71/09b71620ad52bad4eb68b1516978ecaf52ef623c3fa16e0732a03cf3274c/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c218b816220d05acf6ab1bafca58926d95cbcc5fec5024724666030466308f0c", size = 774395, upload-time = "2026-08-20T19:08:03.108Z" }, + { url = "https://files.pythonhosted.org/packages/9c/cf/5c8eb9994a14ff5ee5b0cada339421748746c95aee0280c8b656741e8749/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ae6ebbc0bfe5a21ce21e32ba567bf73df2d93888109c65acbd42506cf9395759", size = 877994, upload-time = "2026-08-20T19:08:04.724Z" }, + { url = "https://files.pythonhosted.org/packages/97/64/e22094c5555e550b6450ecfcceb6a1205d893d9a18ae27764c8c45acfb16/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:679b5b1dde326a921ea2c9ec1f9ea3115bfe1b4735779bbc6eb0473a0ed93f71", size = 614492, upload-time = "2026-08-20T19:08:06.487Z" }, + { url = "https://files.pythonhosted.org/packages/d2/28/5b1042899caed18278c56d54a502f5254d463afe8aea1acbecc98e053391/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5c6d8744d10b5e1eadd90a7c58f8546acf6bf680ee463f7e6ada09ad6c9f802", size = 780574, upload-time = "2026-08-20T19:08:07.987Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/f134603a671c114c6b56eb912bba890f09e2d43b8a28d243be5a5507cf2f/pyzmq-27.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3ee8dd7031d5e23f632e0e7eee67183ca7d2536e0de35dc1e5d69f3471a791e8", size = 553961, upload-time = "2026-08-20T19:08:09.651Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.9.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/99/a6ca3beb3ccacb41fb3321d8a60e5566f9e6467601ef8eba6a17e1b89778/soupsieve-2.9.2.tar.gz", hash = "sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74", size = 122445, upload-time = "2026-08-07T00:57:24.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/dc/ad025c1ee131eba60c69f4dd5779b18fcf1e6b21a343e2162a84d5d133c7/soupsieve-2.9.2-py3-none-any.whl", hash = "sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823", size = 37370, upload-time = "2026-08-07T00:57:23.524Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "tinycss2" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/61/53d562a57b28c08eda40b258c0f975e360541943ad7c7bef897a40caafda/tornado-6.5.10.tar.gz", hash = "sha256:a6b1ccd08c04b4a06fb5aeb381be99de5ad1e5375c1785e31d78c880feb57687", size = 537910, upload-time = "2026-09-15T13:47:48.73Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/5b/ff5fc58fa2427c30dea74c90053f4fc5eda1e7f3833ed3ecc7147fe2b311/tornado-6.5.10-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:9261783640e23258694a9ff0795df430a5a7b0a651d3dd53dd0969ad6be16da7", size = 465883, upload-time = "2026-09-15T13:47:35.463Z" }, + { url = "https://files.pythonhosted.org/packages/ad/f5/cd7be26c34a3315532f3aef5f092465da8f59c334dd439d3c14aaef16461/tornado-6.5.10-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:83e6cf438b106c6b3852d70960967bb1b70c87438050dca0981e4b9aa751a4c1", size = 464046, upload-time = "2026-09-15T13:47:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/60/33/df6d7d04854a58619f8349a51e3edb138324130a7562b0bb21f115bb940f/tornado-6.5.10-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bdf942448169e5336451d0494d7e3d81cfa726d5aa312affdc4682dd62a62f6d", size = 467096, upload-time = "2026-09-15T13:47:38.559Z" }, + { url = "https://files.pythonhosted.org/packages/29/17/cc35dff68272d685cffd8600ffafbd8067e7d05e7348d9f80caddffbbd5f/tornado-6.5.10-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69acca6501eed74582b76dbbceee2a91613f54728e3e418346000d7103101676", size = 468067, upload-time = "2026-09-15T13:47:40.085Z" }, + { url = "https://files.pythonhosted.org/packages/c3/01/6e5349b4e1a53a4b4972a6716785e1fe7407f312063c3972690af8ff301b/tornado-6.5.10-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:66aaa3f57d30c6e6becee83ff28055d5930ac724214bde99393eefda83d5e015", size = 467901, upload-time = "2026-09-15T13:47:41.576Z" }, + { url = "https://files.pythonhosted.org/packages/28/5e/b4facf94370dba006819c8d304376f8b9fbec6b935b5e51bf45823a9790b/tornado-6.5.10-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4bd192b959f9128fb99b8898148070ba4574c9589b78bce42d1851131fe85828", size = 467308, upload-time = "2026-09-15T13:47:43.145Z" }, + { url = "https://files.pythonhosted.org/packages/56/ae/047938e828cafc8eca4c908fafb6588fee944e3af39a0af9d7b602499ae5/tornado-6.5.10-cp39-abi3-win32.whl", hash = "sha256:302eb1e0e3e159314eb591920529fdea80acca92df5510a2cec5bbd4f099ec72", size = 468387, upload-time = "2026-09-15T13:47:44.556Z" }, + { url = "https://files.pythonhosted.org/packages/d8/d4/5901517f05affd752490f6a654ba31b7474664e8dd80bd045a00c220bd88/tornado-6.5.10-cp39-abi3-win_amd64.whl", hash = "sha256:37ae8f150cecfdbf747fc4e12f5e9a97ecd8cf1d4cdb3f119e2de84b11196918", size = 468828, upload-time = "2026-09-15T13:47:45.961Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1a/fd497f3a7f7b74bb04f4b94536b5c9f80742b5d50501fd27977652ddec16/tornado-6.5.10-cp39-abi3-win_arm64.whl", hash = "sha256:ce045d3c298fddd30e89a2777f97039d1b641eb9518ac7b26a4721903539c694", size = 467847, upload-time = "2026-09-15T13:47:47.283Z" }, +] + +[[package]] +name = "traitlets" +version = "5.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/2e/a7fbfe268c8a3b32546930c0297c101d65a4a14c304ad5790a9f478f0e4e/traitlets-5.16.1.tar.gz", hash = "sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1", size = 166137, upload-time = "2026-08-03T08:32:36.848Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/66/0d785f0bc5e4315a96c989bb476d0fc07ea4f85132550c7b156ca2035d52/traitlets-5.16.1-py3-none-any.whl", hash = "sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b", size = 86211, upload-time = "2026-08-03T08:32:34.48Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/31/3d74fa778a63b98b7374323befcc0be5ab3bd94afd4096a0124e7379152c/tzdata-2026.4.tar.gz", hash = "sha256:f1b8bd365d8d210c55353f4d7f8d6d8561c0ba50d704b700d195a9424bba0d79", size = 199350, upload-time = "2026-09-12T12:56:03.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/bc/8737e8d54cf51106118039b83f485a4783112fab49ea9d044b234978a46e/tzdata-2026.4-py2.py3-none-any.whl", hash = "sha256:c2169a8b0a7a5e9674da5a135ccdfb2b3e671b333ed9fed17b41f73c34476e81", size = 347494, upload-time = "2026-09-12T12:56:01.67Z" }, +] + +[[package]] +name = "urllib3" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/7a/f98d4ada7c499565ab0c0fcef28a4e54fafa72b8228a6309803c80493c92/wcwidth-0.8.4.tar.gz", hash = "sha256:2dae09efa25253ae2874188e86d6861af3b1652aef4118cdf3f0bda288a957fb", size = 414609, upload-time = "2026-09-17T23:31:45.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/cc/9c0adc5861020de426ec71716b6c1bef8d90694b7d6d0a16202cdb1647f5/wcwidth-0.8.4-py3-none-any.whl", hash = "sha256:2097bb1d28a0ba8fe177c2eb607317f9b1627b03f33ebebfd3da670b337a65ba", size = 299474, upload-time = "2026-09-17T23:31:43.816Z" }, +] + +[[package]] +name = "webencodings" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/a0/8fd707bcb776a7be556bad06a2ea5fb9bd519df78ef8e26f70ccf0f38bff/webencodings-0.6.1.tar.gz", hash = "sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910", size = 15001, upload-time = "2026-08-15T14:22:57.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/c6/040cbc72480d789a5f40d63fb484d3106554c4dfa2d2b70ad5022057750f/webencodings-0.6.1-py3-none-any.whl", hash = "sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b", size = 8745, upload-time = "2026-08-15T14:22:56.31Z" }, +] From cef073d29d9a129f6cb95ff32653ea827324cd2c Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:33:17 -0700 Subject: [PATCH 10/13] py: maturin develop dev loop, Makefile without hardcoded wheels Co-Authored-By: Claude Fable 5.1 --- crates/fec-py/Makefile | 67 ++++++------- crates/fec-py/README.md | 24 ++--- crates/fec-py/demo-fecfile.py | 184 ---------------------------------- crates/fec-py/demo.py | 31 ------ 4 files changed, 40 insertions(+), 266 deletions(-) delete mode 100644 crates/fec-py/demo-fecfile.py delete mode 100644 crates/fec-py/demo.py diff --git a/crates/fec-py/Makefile b/crates/fec-py/Makefile index 10194bd..03c1c36 100644 --- a/crates/fec-py/Makefile +++ b/crates/fec-py/Makefile @@ -1,35 +1,32 @@ -.PHONY: build build-release demo demo-fecfile notebook test-pytest clean - -# Build development wheel -build: - maturin build -m Cargo.toml --out dist - -# Build release (optimized) wheel -build-release: - maturin build -m Cargo.toml --release --out dist - -# Run demo.py with sample FEC files from cache2 -demo: build - uv run --no-cache --no-project --isolated \ - --with "$$(ls dist/libfec_parser-*.whl | head -1)" \ - demo.py ../../cache2/*.fec - -# Run demo-fecfile.py with sample FEC files from cache2 -demo-fecfile: build - uv run --no-cache --no-project --isolated \ - --with "$$(ls dist/libfec_parser-*.whl | head -1)" \ - demo-fecfile.py ../../cache2/*.fec - -# Open examples/quickstart.ipynb in JupyterLab with the freshly built wheel installed -notebook: build - uv run --no-cache --no-project --isolated \ - --with "$$(ls $(CURDIR)/dist/libfec_parser-*.whl | head -1)" \ - --with pandas \ - --with jupyterlab \ - jupyter lab examples/quickstart.ipynb - -test-pytest: - uv run --no-cache --no-project --isolated \ - --with pytest \ - --with "$$(ls dist/libfec_parser-*.whl | head -1)" \ - pytest tests/ \ No newline at end of file +.PHONY: develop develop-release build build-release test test-network test-slow notebook stubs clean + +# One-time: uv venv && uv sync --group dev + +develop: ## incremental build into .venv (fast, debug) + uv run maturin develop --uv + +develop-release: ## same, optimized (for benchmarks / notebook) + uv run maturin develop --uv --release + +build: ## wheel into dist/ (what CI and releases do) + uv run maturin build --release --out dist + +build-release: build + +test: develop + uv run pytest tests + +test-network: develop + uv run pytest tests -m network + +test-slow: develop-release + uv run pytest tests -m slow + +notebook: develop-release + uv run --with jupyterlab jupyter lab examples/quickstart.ipynb + +stubs: develop ## ticket 09 fills this in + @echo "see todos/python/09-type-stubs.md" + +clean: + rm -rf dist .venv python/libfec_parser/*.so diff --git a/crates/fec-py/README.md b/crates/fec-py/README.md index 39c12e4..3564500 100644 --- a/crates/fec-py/README.md +++ b/crates/fec-py/README.md @@ -187,28 +187,20 @@ Takes the `bytes` of a filing and returns just its FEC format version. Build with `maturin`, not `cargo build`, which can't link a Python extension module on its own. ```bash -make build # debug wheel into dist/ -make build-release # optimized wheel into dist/ -make test-pytest # run tests/ against the wheel in dist/ -make notebook # build, then open examples/quickstart.ipynb in JupyterLab +cd crates/fec-py +uv venv && uv sync --group dev # once +make develop # after Rust changes +make test +make notebook ``` -The tests look for `.fec` files in the repo's `cache/` and `benchmarks/` directories and skip when none are found. See [`tests/README.md`](tests/README.md). +`make build` produces a wheel into `dist/`, which is what CI and releases install. -Rebuilt wheels keep the same filename, so `uv` will happily reuse a stale cached copy. Pass `--no-cache` whenever you `uv run --with` a wheel from `dist/`, as the Makefile targets do. +Tests run against the committed fixtures in [`tests/fixtures/`](tests/fixtures/) — see [`tests/README.md`](tests/README.md). **Releasing:** the version is read from `Cargo.toml` (not `pyproject.toml`) — bump it together with `crates/fec-cli/Cargo.toml` so the bindings stay in lockstep with the CLI. -To refresh the notebook's saved outputs after an API change: - -```bash -make build -cd examples -uv run --no-cache --no-project --isolated \ - --with "$(ls ../dist/libfec_parser-*.whl | head -1)" \ - --with pandas --with nbconvert --with ipykernel \ - jupyter nbconvert --to notebook --execute --inplace quickstart.ipynb -``` +To refresh the notebook's saved outputs after an API change, see `make notebook`. ## License diff --git a/crates/fec-py/demo-fecfile.py b/crates/fec-py/demo-fecfile.py deleted file mode 100644 index 31ce70c..0000000 --- a/crates/fec-py/demo-fecfile.py +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env python3 -""" -Demo script for libfec_parser.fecfile - a compatibility layer for the fecfile PyPI package. - -This demonstrates the API that mimics the original fecfile library: -- loads() - Parse FEC content from string/bytes -- from_file() - Load from a file path -- from_http() - Load from FEC website (if available) -- parse_header() - Parse just the header -- parse_line() - Parse a single line -- print_example() - Print a sample of the parsed data - -Usage: - python demo-fecfile.py [file2.fec] ... -""" - -import sys -from pathlib import Path -from libfec_parser.fecfile import loads, from_file, parse_header, parse_line, print_example - -def demo_loads(file_path): - """Demo the loads() function""" - print(f"\n{'='*70}") - print(f"Demo: loads() with file: {file_path}") - print('='*70) - - # Read file content - content = Path(file_path).read_text(encoding='utf-8', errors='ignore') - - # Parse with loads() - parsed = loads(content) - - print(f"\n📋 Header:") - print(f" FEC Version: {parsed['header']['fec_version']}") - print(f" Software: {parsed['header']['software_name']} v{parsed['header']['software_version']}") - - print(f"\n📄 Filing:") - print(f" Form Type: {parsed['filing']['form_type']}") - print(f" Filer ID: {parsed['filing'].get('filer_committee_id_number', 'N/A')}") - if 'committee_name' in parsed['filing']: - print(f" Committee: {parsed['filing']['committee_name']}") - - print(f"\n📊 Itemizations:") - for schedule, items in parsed['itemizations'].items(): - print(f" {schedule}: {len(items)} items") - - if parsed['text']: - print(f"\n📝 Text records: {len(parsed['text'])} items") - - return parsed - -def demo_from_file(file_path): - """Demo the from_file() function""" - print(f"\n{'='*70}") - print(f"Demo: from_file() with: {file_path}") - print('='*70) - - parsed = from_file(file_path) - - print(f"\n📋 Header:") - print(f" FEC Version: {parsed['header']['fec_version']}") - - print(f"\n📄 Filing:") - print(f" Form Type: {parsed['filing']['form_type']}") - - print(f"\n📊 Itemizations summary:") - total_items = sum(len(items) for items in parsed['itemizations'].values()) - print(f" Total itemization records: {total_items}") - - return parsed - -def demo_filter_itemizations(file_path): - """Demo the filter_itemizations option""" - print(f"\n{'='*70}") - print(f"Demo: loads() with filter_itemizations=['SA', 'SB']") - print('='*70) - - content = Path(file_path).read_text(encoding='utf-8', errors='ignore') - - # Parse with filter - parsed = loads(content, options={'filter_itemizations': ['SA', 'SB']}) - - print(f"\n📊 Filtered Itemizations (only SA and SB schedules):") - for schedule, items in parsed['itemizations'].items(): - print(f" {schedule}: {len(items)} items") - -def demo_parse_header(file_path): - """Demo the parse_header() function""" - print(f"\n{'='*70}") - print(f"Demo: parse_header()") - print('='*70) - - # Read just the first line (header) - with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: - header_line = f.readline() - - header, version, lines_consumed = parse_header(header_line) - - print(f"\n📋 Parsed Header:") - print(f" Version: {version}") - print(f" Lines consumed: {lines_consumed}") - print(f" Record type: {header['record_type']}") - print(f" Software: {header['software_name']} v{header['software_version']}") - -def demo_parse_line(file_path): - """Demo the parse_line() function""" - print(f"\n{'='*70}") - print(f"Demo: parse_line()") - print('='*70) - - # Read first few lines - with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: - lines = [f.readline() for _ in range(3)] - - # Parse header to get version - header, version, _ = parse_header(lines[0]) - - # Parse the cover line (second line) - cover = parse_line(lines[1], version, line_num=2) - - print(f"\n📄 Parsed Cover Line (line 2):") - print(f" Form type: {cover.get('form_type', 'N/A')}") - print(f" Fields in cover: {len(cover)}") - print(f" Sample fields: {list(cover.keys())[:5]}...") - -def demo_print_example(file_path): - """Demo the print_example() function""" - print(f"\n{'='*70}") - print(f"Demo: print_example()") - print('='*70) - - parsed = from_file(file_path) - - print("\n📋 Example output (first item of each type):") - print_example(parsed) - -def main(): - fec_files = sys.argv[1:] - - # Run demos on the first file - first_file = fec_files[0] - - print("\n" + "="*70) - print(f"FEC FILE COMPATIBILITY API DEMO") - print(f"File: {first_file}") - print("="*70) - - # Demo each function - try: - demo_from_file(first_file) - demo_loads(first_file) - demo_parse_header(first_file) - demo_parse_line(first_file) - demo_filter_itemizations(first_file) - demo_print_example(first_file) - except Exception as e: - print(f"\n❌ Error: {e}") - import traceback - traceback.print_exc() - sys.exit(1) - - # Process remaining files with brief output - if len(fec_files) > 1: - print(f"\n{'='*70}") - print(f"Processing remaining {len(fec_files) - 1} files...") - print('='*70) - - for fec_file in fec_files[1:]: - try: - parsed = from_file(fec_file) - total = sum(len(items) for items in parsed['itemizations'].values()) - print(f"\n✓ {Path(fec_file).name}: " - f"v{parsed['header']['fec_version']}, " - f"{parsed['filing']['form_type']}, " - f"{total} itemizations") - except Exception as e: - print(f"\n✗ {Path(fec_file).name}: Error - {e}") - - print(f"\n{'='*70}") - print("✨ Demo complete!") - print('='*70) - -if __name__ == "__main__": - main() diff --git a/crates/fec-py/demo.py b/crates/fec-py/demo.py deleted file mode 100644 index f4954a5..0000000 --- a/crates/fec-py/demo.py +++ /dev/null @@ -1,31 +0,0 @@ -# uv run --no-project --isolated --with 'libfec_parser @ file://../../dist/libfec_parser-0.1.0-cp39-abi3-macosx_11_0_arm64.whl' demo.py ... - -from libfec_parser.parser import fec_header -from pathlib import Path -import sys - -from libfec_parser.parser import Filing - -# input can be 1) path or 2) bytes, or 3) a file-like/url response object -f = Filing(sys.argv[1]) -print(f.header) -print(f.cover) -for itemization in f.itemizations: - print(itemization) - -def main() -> None: - # Get file paths from command line arguments - if len(sys.argv) < 2: - print("Usage: demo.py [fec_file2] [fec_file3] ...") - print("Example: demo.py 1887722.fec") - sys.exit(1) - - fec_files = sys.argv[1:] - - for fec_file in fec_files: - file_path = Path(fec_file) - result = fec_header(file_path.read_bytes()) - print(f"{fec_file}: {result}") - -if __name__ == "__main__": - main() \ No newline at end of file From 9bb348c85199b9166f5da2a746b947fd9314159c Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:40:43 -0700 Subject: [PATCH 11/13] py: type stubs and py.typed, stubtest in CI Co-Authored-By: Claude Fable 5.1 --- .github/workflows/test-python.yml | 11 +++ crates/fec-py/Makefile | 5 +- .../fec-py/python/libfec_parser/fecfile.pyi | 63 +++++++++++++ crates/fec-py/python/libfec_parser/parser.pyi | 91 +++++++++++++++++++ crates/fec-py/python/libfec_parser/py.typed | 0 crates/fec-py/stubtest-allowlist.txt | 6 ++ crates/fec-py/tests/test_fecfile.py | 10 +- crates/fec-py/tests/test_parser.py | 2 +- 8 files changed, 181 insertions(+), 7 deletions(-) create mode 100644 crates/fec-py/python/libfec_parser/fecfile.pyi create mode 100644 crates/fec-py/python/libfec_parser/parser.pyi create mode 100644 crates/fec-py/python/libfec_parser/py.typed create mode 100644 crates/fec-py/stubtest-allowlist.txt diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 861e338..ed730a9 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -45,6 +45,17 @@ jobs: shell: bash working-directory: crates/fec-py run: uv run --python .venv --no-project pytest tests -v -rs + - name: stubtest + # One job is enough: the stubs are platform- and version-independent. This + # runs against the *installed wheel*, so it also proves the wheel ships + # py.typed and the .pyi files. + if: matrix.os == 'ubuntu-latest' && matrix.python == '3.11' + shell: bash + working-directory: crates/fec-py + run: | + uv pip install --python .venv mypy + uv run --python .venv --no-project python -m mypy.stubtest libfec_parser --allowlist stubtest-allowlist.txt + uv run --python .venv --no-project mypy --check-untyped-defs tests - name: Smoke test - construct a Filing (guards against the pyo3 0.22 3.14 segfault) shell: bash working-directory: crates/fec-py diff --git a/crates/fec-py/Makefile b/crates/fec-py/Makefile index 03c1c36..7fb2993 100644 --- a/crates/fec-py/Makefile +++ b/crates/fec-py/Makefile @@ -25,8 +25,9 @@ test-slow: develop-release notebook: develop-release uv run --with jupyterlab jupyter lab examples/quickstart.ipynb -stubs: develop ## ticket 09 fills this in - @echo "see todos/python/09-type-stubs.md" +stubs: develop ## check python/libfec_parser/*.pyi against the built extension + uv run python -m mypy.stubtest libfec_parser --allowlist stubtest-allowlist.txt + uv run mypy --check-untyped-defs tests clean: rm -rf dist .venv python/libfec_parser/*.so diff --git a/crates/fec-py/python/libfec_parser/fecfile.pyi b/crates/fec-py/python/libfec_parser/fecfile.pyi new file mode 100644 index 0000000..741000a --- /dev/null +++ b/crates/fec-py/python/libfec_parser/fecfile.pyi @@ -0,0 +1,63 @@ +"""Type stubs for :mod:`libfec_parser.fecfile`. + +Hand-maintained and checked against the built extension by +`python -m mypy.stubtest` — see `crates/fec-py/Makefile`'s `stubs` target. The +implementation is `src/fecfile.rs`; the shapes mirror the `fecfile` package's +API. Every value in a parsed filing is a raw `str` today (no type coercion), +which is why the dicts below are `dict[str, str]`. +""" + +from typing import TypedDict + +__all__ = [ + "from_file", + "from_http", + "loads", + "parse_header", + "parse_line", + "print_example", +] + +class Options(TypedDict, total=False): + """Parse options, all optional. + + `filter_itemizations` keeps only the rows whose type starts with one of the + given prefixes (`[]` keeps none); `as_strings` is accepted for `fecfile` + compatibility and currently has no effect (values are always strings). + """ + + filter_itemizations: list[str] + as_strings: bool + +class Parsed(TypedDict): + """The parsed filing: header, cover, itemizations grouped by schedule, TEXT rows.""" + + header: dict[str, str] + filing: dict[str, str] + itemizations: dict[str, list[dict[str, str]]] + text: list[dict[str, str]] + +def loads( + input: str | bytes | bytearray | memoryview | list[str], + options: Options | None = None, +) -> Parsed: + """Parse filing contents held in memory.""" + +def from_file(file_path: str, options: Options | None = None) -> Parsed: + """Parse the filing at `file_path` (a `str`, not `os.PathLike`).""" + +def from_http( + file_number: int | str, options: Options | None = None +) -> Parsed | None: + """Download and parse a filing from docquery.fec.gov; `None` if not found.""" + +def parse_header(hdr: str | list[str]) -> tuple[dict[str, str], str, int]: + """Parse an `HDR` line into `(header, fec_version, lines_consumed)`.""" + +def parse_line( + line: str, version: str, _line_num: int | None = None +) -> dict[str, str]: + """Parse one row against the column mapping for `version`.""" + +def print_example(parsed: Parsed) -> None: + """Print `parsed` as JSON, keeping only the first row of each schedule.""" diff --git a/crates/fec-py/python/libfec_parser/parser.pyi b/crates/fec-py/python/libfec_parser/parser.pyi new file mode 100644 index 0000000..ed5c5ff --- /dev/null +++ b/crates/fec-py/python/libfec_parser/parser.pyi @@ -0,0 +1,91 @@ +"""Type stubs for :mod:`libfec_parser.parser`. + +Hand-maintained (pyo3's `experimental-inspect` output is the first draft only) and +checked against the built extension by `python -m mypy.stubtest` — see +`crates/fec-py/Makefile`'s `stubs` target. The implementation is `src/parser.rs`. +""" + +from typing import Protocol, final + +__all__ = ["Cover", "Filing", "Header", "Itemization", "fec_header"] + +class _Readable(Protocol): + """A binary file-like object: `read()` must return the filing's bytes.""" + + def read(self) -> bytes: ... + +@final +class Header: + """The filing's `HDR` record.""" + + @property + def record_type(self) -> str: ... + @property + def ef_type(self) -> str: ... + @property + def fec_version(self) -> str: ... + @property + def software_name(self) -> str: ... + @property + def software_version(self) -> str: ... + @property + def report_id(self) -> str | None: ... + @property + def report_number(self) -> str | None: ... + @property + def comment(self) -> str | None: ... + def __repr__(self) -> str: ... + +@final +class Cover: + """The filing's cover record (F3, F3X, …).""" + + @property + def form_type(self) -> str: ... + @property + def filer_id(self) -> str: ... + @property + def filer_name(self) -> str: ... + @property + def report_code(self) -> str | None: ... + @property + def coverage_from_date(self) -> str | None: ... + @property + def coverage_through_date(self) -> str | None: ... + def fields(self) -> dict[str, str | None]: + """The six cover attributes above as a dict.""" + +@final +class Itemization: + """One itemization row; a sequence of raw string fields.""" + + @property + def row_type(self) -> str: ... + def fields(self) -> list[str]: + """Every field of the row, in file order.""" + + def __len__(self) -> int: ... + def __getitem__(self, key: int, /) -> str: ... + def __repr__(self) -> str: ... + +@final +class Filing: + """A fully parsed filing: header, cover and every itemization row. + + `source` is a file path (`str`), the filing's bytes, or a binary file-like + object. `os.PathLike` is *not* accepted — pass `str(path)`. + """ + + def __new__( + cls, source: str | bytes | bytearray | memoryview | _Readable + ) -> Filing: ... + @property + def header(self) -> Header: ... + @property + def cover(self) -> Cover: ... + @property + def itemizations(self) -> list[Itemization]: ... + def __repr__(self) -> str: ... + +def fec_header(contents: bytes) -> str: + """The `fec_version` of a filing held entirely in memory.""" diff --git a/crates/fec-py/python/libfec_parser/py.typed b/crates/fec-py/python/libfec_parser/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/crates/fec-py/stubtest-allowlist.txt b/crates/fec-py/stubtest-allowlist.txt new file mode 100644 index 0000000..ff5a19c --- /dev/null +++ b/crates/fec-py/stubtest-allowlist.txt @@ -0,0 +1,6 @@ +# Stub-only types: they exist for annotations, not at runtime, so stubtest's +# "is not present at runtime" check cannot pass for them. `Options` describes the +# `options=` dict `loads`/`from_file`/`from_http` accept and `Parsed` the dict they +# return; both are plain `dict`s at runtime, by design (see src/fecfile.rs). +libfec_parser.fecfile.Options +libfec_parser.fecfile.Parsed diff --git a/crates/fec-py/tests/test_fecfile.py b/crates/fec-py/tests/test_fecfile.py index 8c9f71b..1fddbc7 100644 --- a/crates/fec-py/tests/test_fecfile.py +++ b/crates/fec-py/tests/test_fecfile.py @@ -121,7 +121,7 @@ def test_loads_with_as_strings_option(self, sample_fec_content): def test_loads_with_invalid_type(self): """Test loads() with invalid input type""" with pytest.raises(TypeError): - loads(12345) + loads(12345) # type: ignore[arg-type] # invalid type, on purpose def test_loads_with_empty_string(self): """Test loads() with empty string""" @@ -178,6 +178,7 @@ def fake_urlopen(url): # fecfile.rs calls urlopen(url) with one positional arg monkeypatch.setattr(urllib.request, "urlopen", fake_urlopen) result = from_http(1921705) + assert result is not None assert urls == ["https://docquery.fec.gov/dcdev/posted/1921705.fec"] assert result["header"]["fec_version"] == "8.5" @@ -194,6 +195,7 @@ def fake_urlopen(url): monkeypatch.setattr(urllib.request, "urlopen", fake_urlopen) result = from_http("1921705", options={'filter_itemizations': ['SA']}) + assert result is not None assert urls == ["https://docquery.fec.gov/dcdev/posted/1921705.fec"] assert set(result["itemizations"]) == {"Schedule A"} @@ -277,7 +279,7 @@ def test_parse_header_with_empty_string(self): def test_parse_header_with_invalid_type(self): """Test parse_header() with invalid type""" with pytest.raises(TypeError): - parse_header(12345) + parse_header(12345) # type: ignore[arg-type] # invalid type, on purpose class TestParseLine: @@ -349,10 +351,10 @@ def test_print_example_with_minimal_data(self, sample_fec_content): def test_print_example_with_missing_key(self): """Test print_example() with invalid dict""" - invalid_dict = {'header': {}} + invalid_dict: dict[str, dict[str, str]] = {'header': {}} with pytest.raises(KeyError): - print_example(invalid_dict) + print_example(invalid_dict) # type: ignore[arg-type] # missing keys, on purpose class TestIntegration: diff --git a/crates/fec-py/tests/test_parser.py b/crates/fec-py/tests/test_parser.py index dec4909..5750aa3 100644 --- a/crates/fec-py/tests/test_parser.py +++ b/crates/fec-py/tests/test_parser.py @@ -264,7 +264,7 @@ def test_filing_with_invalid_path(self): def test_filing_with_invalid_type(self): """Test Filing with invalid input type""" with pytest.raises(TypeError): - Filing(12345) # Invalid type + Filing(12345) # type: ignore[arg-type] # invalid type, on purpose def test_filing_with_invalid_data(self): """Test Filing with invalid FEC data""" From 21a4c58517639089b1abfccc3c1627105e58f3fe Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:50:52 -0700 Subject: [PATCH 12/13] release: build libfec_parser wheels and attach to GitHub Releases Co-Authored-By: Claude Fable 5.1 --- .github/workflows/build-python-bindings.yml | 144 ++++++++++++++++++ .github/workflows/publish-python-bindings.yml | 58 +++++++ .github/workflows/release.yml | 29 +++- crates/fec-py/README.md | 60 ++++++-- dist-workspace.toml | 9 +- 5 files changed, 284 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/build-python-bindings.yml create mode 100644 .github/workflows/publish-python-bindings.yml diff --git a/.github/workflows/build-python-bindings.yml b/.github/workflows/build-python-bindings.yml new file mode 100644 index 0000000..fe23ece --- /dev/null +++ b/.github/workflows/build-python-bindings.yml @@ -0,0 +1,144 @@ +# Build `libfec_parser` (crates/fec-py) wheels for the five supported platforms + an sdist. +# +# Assumed to run as a subworkflow of .github/workflows/release.yml; specifically, as a local +# artifacts job within `cargo-dist` (registered in dist-workspace.toml as +# `local-artifacts-jobs = [..., "./build-python-bindings"]`), hence the `workflow_call` + +# `plan` input shape. `plan` is unused here — the version comes from crates/fec-py/Cargo.toml, +# which is the same workspace version the tag names (D7). +# +# cargo-dist does NOT attach custom-job artifacts to the GitHub Release; the companion +# .github/workflows/publish-python-bindings.yml does that with `gh release upload`. +# +# Platforms are Q10 (plans/python/00-decisions.md): manylinux_2_17 x86_64 + aarch64, +# macOS x86_64 + arm64, Windows x64, plus an sdist. No musllinux, no armv7, no QEMU, and +# no free-threaded builds (D8) — one `cp311-abi3` wheel per platform, no interpreter matrix. +name: "Build libfec_parser wheels" + +on: + workflow_call: + inputs: + plan: + required: true + type: string + +jobs: + linux: + name: linux-${{ matrix.target }} + runs-on: ${{ matrix.runner }} + strategy: + fail-fast: false + matrix: + include: + - { runner: ubuntu-22.04, target: x86_64 } + # Native arm64 runner, so `manylinux: auto` picks quay.io/pypa/manylinux2014_aarch64 + # rather than a cross image, and there is no QEMU in the loop. + - { runner: ubuntu-22.04-arm, target: aarch64 } + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0 + - name: Build wheel + uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 + with: + working-directory: crates/fec-py + target: ${{ matrix.target }} + # `auto` == the manylinux2014 container (glibc 2.17). This is the fix for the CLI + # wheel's mistake: building on a bare ubuntu-22.04 host tags the wheel + # manylinux_2_34, which will not install on older glibc. + manylinux: auto + # `--compatibility pypi` makes a mis-tagged wheel fail the *build*. We never upload + # to PyPI (D1), but it is the cheapest correctness check for the manylinux tag. + args: --release --out dist --compatibility pypi + maturin-version: "1.15.0" + - name: Smoke test the wheel + shell: bash + run: | + uv venv .venv-smoke --python cpython-3.11 + uv pip install --python .venv-smoke crates/fec-py/dist/*.whl + uv run --python .venv-smoke --no-project python -c "from libfec_parser.parser import Filing; print(Filing('crates/fec-py/tests/fixtures/1921705.fec'))" + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: wheels_libfec_parser-linux-${{ matrix.target }} + path: crates/fec-py/dist + + macos: + name: macos-${{ matrix.target }} + runs-on: ${{ matrix.runner }} + strategy: + fail-fast: false + matrix: + include: + # `macos-15-intel` is the current x86_64 macOS label (macos-13 is retired); it is + # what `maturin generate-ci github` 1.15 emits — see + # plans/python/probes/maturin-1.15-generate-ci.yml. + - { runner: macos-15-intel, target: x86_64 } + - { runner: macos-latest, target: aarch64 } + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0 + - name: Build wheel + uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 + with: + working-directory: crates/fec-py + target: ${{ matrix.target }} + # No `manylinux:` key here. `--compatibility pypi` is kept: unlike the + # `manylinux*`/`musllinux*` values, `pypi` "applies on all platforms" + # (`maturin build --help`, 1.15.0), so it also rejects a macOS tag PyPI would. + args: --release --out dist --compatibility pypi + maturin-version: "1.15.0" + - name: Smoke test the wheel + shell: bash + run: | + uv venv .venv-smoke --python cpython-3.11 + uv pip install --python .venv-smoke crates/fec-py/dist/*.whl + uv run --python .venv-smoke --no-project python -c "from libfec_parser.parser import Filing; print(Filing('crates/fec-py/tests/fixtures/1921705.fec'))" + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: wheels_libfec_parser-macos-${{ matrix.target }} + path: crates/fec-py/dist + + windows: + name: windows-${{ matrix.target }} + runs-on: ${{ matrix.runner }} + strategy: + fail-fast: false + matrix: + include: + - { runner: windows-latest, target: x64 } + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0 + - name: Build wheel + uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 + with: + working-directory: crates/fec-py + target: ${{ matrix.target }} + args: --release --out dist --compatibility pypi + maturin-version: "1.15.0" + - name: Smoke test the wheel + # `shell: bash` (git-bash) so the `dist/*.whl` glob expands here the same way it + # does on the other runners; PowerShell would pass the literal string to uv. + shell: bash + run: | + uv venv .venv-smoke --python cpython-3.11 + uv pip install --python .venv-smoke crates/fec-py/dist/*.whl + uv run --python .venv-smoke --no-project python -c "from libfec_parser.parser import Filing; print(Filing('crates/fec-py/tests/fixtures/1921705.fec'))" + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: wheels_libfec_parser-windows-${{ matrix.target }} + path: crates/fec-py/dist + + sdist: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Build sdist + uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 + with: + working-directory: crates/fec-py + command: sdist + args: --out dist + maturin-version: "1.15.0" + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: wheels_libfec_parser-sdist + path: crates/fec-py/dist diff --git a/.github/workflows/publish-python-bindings.yml b/.github/workflows/publish-python-bindings.yml new file mode 100644 index 0000000..10bf435 --- /dev/null +++ b/.github/workflows/publish-python-bindings.yml @@ -0,0 +1,58 @@ +# Attach the `libfec_parser` wheels built by build-python-bindings.yml to the GitHub Release. +# +# Assumed to run as a subworkflow of .github/workflows/release.yml; specifically, as a publish +# job within `cargo-dist` (registered in dist-workspace.toml as +# `publish-jobs = [..., "./publish-python-bindings"]`), hence the `workflow_call` + `plan` +# input shape. Publish jobs run after `host`, so the Release already exists by now. +# +# Why this job exists at all: cargo-dist only puts `artifacts-*` (its own dist-manifest +# artifacts) on the Release page — verified on 0.0.31, whose assets contain no wheels even +# though build-pypi.yml runs as a local-artifacts job. Custom-job artifacts have to be +# uploaded by hand, which is what this does. +# +# Nothing here goes to PyPI (plans/python/00-decisions.md D1). +name: "Attach libfec_parser wheels to the GitHub Release" + +on: + workflow_call: + inputs: + plan: + required: true + type: string + +jobs: + attach: + runs-on: ubuntu-latest + permissions: + # `gh release upload` needs this. cargo-dist gives custom publish jobs + # `id-token: write` + `packages: write` by default, which *replaces* the + # workflow-level `contents: write` in release.yml, so dist-workspace.toml carries a + # `[dist.github-custom-job-permissions]` override granting `contents = "write"` to + # this job. Keep the two in sync. + contents: write + steps: + - name: Download wheels + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + # Deliberately `wheels_libfec_parser-*`, NOT `wheels_libfec-*`. + # download-artifact matches `pattern` with minimatch glob semantics, where `*` + # matches any run of characters but the literal `-` in `wheels_libfec-*` still has + # to be present: `wheels_libfec_parser-linux-x86_64` has `_` at that position, so + # publish-pypi.yml's `pattern: wheels_libfec-*` does not match these artifacts and + # the bindings can never be pushed to PyPI by that job (D1). + pattern: wheels_libfec_parser-* + path: wheels + merge-multiple: true + - name: Upload wheels to the GitHub Release + env: + GH_TOKEN: ${{ github.token }} + # `announcement_tag` is the key cargo-dist 0.30.3 puts the release tag under in + # the `dist plan` / `dist host --steps=create` JSON (verified locally: + # `dist plan --output-format=json | jq .announcement_tag` -> "v0.0.32"). + TAG: ${{ fromJson(inputs.plan).announcement_tag }} + run: | + set -euo pipefail + ls -l wheels + # Fail loudly rather than silently "succeeding" with nothing attached. + test -n "$(ls -A wheels)" + gh release upload "$TAG" wheels/* --clobber --repo "$GITHUB_REPOSITORY" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fb52ed8..719a627 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -174,12 +174,22 @@ jobs: plan: ${{ needs.plan.outputs.val }} secrets: inherit + custom-build-python-bindings: + needs: + - plan + if: ${{ needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload' }} + uses: ./.github/workflows/build-python-bindings.yml + with: + plan: ${{ needs.plan.outputs.val }} + secrets: inherit + # Build and package all the platform-agnostic(ish) things build-global-artifacts: needs: - plan - build-local-artifacts - custom-build-pypi + - custom-build-python-bindings runs-on: "ubuntu-latest" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -227,9 +237,10 @@ jobs: - plan - build-local-artifacts - custom-build-pypi + - custom-build-python-bindings - build-global-artifacts # Only run if we're "publishing", and only if plan, local and global didn't fail (skipped is fine) - if: ${{ always() && needs.plan.result == 'success' && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') && (needs.custom-build-pypi.result == 'skipped' || needs.custom-build-pypi.result == 'success') }} + if: ${{ always() && needs.plan.result == 'success' && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') && (needs.custom-build-pypi.result == 'skipped' || needs.custom-build-pypi.result == 'success') && (needs.custom-build-python-bindings.result == 'skipped' || needs.custom-build-python-bindings.result == 'success') }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} runs-on: "ubuntu-latest" @@ -303,15 +314,29 @@ jobs: "id-token": "write" "packages": "write" + custom-publish-python-bindings: + needs: + - plan + - host + if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }} + uses: ./.github/workflows/publish-python-bindings.yml + with: + plan: ${{ needs.plan.outputs.val }} + secrets: inherit + # publish jobs get escalated permissions + permissions: + "contents": "write" + announce: needs: - plan - host - custom-publish-pypi + - custom-publish-python-bindings # use "always() && ..." to allow us to wait for all publish jobs while # still allowing individual publish jobs to skip themselves (for prereleases). # "host" however must run to completion, no skipping allowed! - if: ${{ always() && needs.host.result == 'success' && (needs.custom-publish-pypi.result == 'skipped' || needs.custom-publish-pypi.result == 'success') }} + if: ${{ always() && needs.host.result == 'success' && (needs.custom-publish-pypi.result == 'skipped' || needs.custom-publish-pypi.result == 'success') && (needs.custom-publish-python-bindings.result == 'skipped' || needs.custom-publish-python-bindings.result == 'success') }} runs-on: "ubuntu-latest" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/crates/fec-py/README.md b/crates/fec-py/README.md index 3564500..78b4314 100644 --- a/crates/fec-py/README.md +++ b/crates/fec-py/README.md @@ -1,5 +1,10 @@ # libfec_parser +> **Alpha.** Wheels are published on [GitHub Releases](https://github.com/asg017/libfec/releases), +> not PyPI. The native `Filing` API will change in upcoming releases (see +> [`plans/python/`](../../plans/python/)); the `fecfile` module is not yet a drop-in +> replacement. + Python bindings for [libfec](https://github.com/asg017/libfec)'s `.fec` parser. Parse FEC electronic filings from a path, from bytes, or straight from the FEC's website, with the parsing done in Rust. ```python @@ -21,25 +26,40 @@ Two APIs are included: For a guided tour, including loading a filing into pandas, see [`examples/quickstart.ipynb`](examples/quickstart.ipynb). -> **Status:** early and unpublished. The package is not on PyPI yet, and the API may change. - -## Installation +## Install -`libfec_parser` has to be built from source for now. You'll need a [Rust toolchain](https://rustup.rs/) and [uv](https://docs.astral.sh/uv/) (or `pip install maturin`). +**Python 3.11 or newer.** `libfec_parser` is not on PyPI, so `pip install libfec-parser` +will not find it. Wheels are attached to every +[GitHub Release](https://github.com/asg017/libfec/releases); install one by URL with +[uv](https://docs.astral.sh/uv/): ```bash -git clone https://github.com/asg017/libfec -cd libfec/crates/fec-py +VERSION=0.0.33 # the release you want, from the releases page +uv pip install "https://github.com/asg017/libfec/releases/download/$VERSION/libfec_parser-$VERSION-cp311-abi3-macosx_11_0_arm64.whl" +``` + +Swap the platform tag at the end for your machine: + +| Platform | Filename | +| --- | --- | +| Linux x86_64 (glibc 2.17+) | `libfec_parser-$VERSION-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl` | +| Linux aarch64 (glibc 2.17+) | `libfec_parser-$VERSION-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl` | +| macOS Apple silicon | `libfec_parser-$VERSION-cp311-abi3-macosx_11_0_arm64.whl` | +| macOS Intel | `libfec_parser-$VERSION-cp311-abi3-macosx_10_12_x86_64.whl` | +| Windows x64 | `libfec_parser-$VERSION-cp311-abi3-win_amd64.whl` | -# Install into the active virtualenv -uvx maturin develop --release +One wheel per platform covers every Python from 3.11 up: they are built against the stable +ABI (`cp311-abi3`). On Python 3.10 and older the install is refused. -# ...or build a wheel into dist/ and install it wherever you like -uvx maturin build --release --out dist -pip install dist/libfec_parser-*.whl +Other platforms — musl Linux, armv7, 32-bit, BSD — build from the source distribution on the +same release page, which needs a [Rust toolchain](https://rustup.rs/): + +```bash +uv pip install "https://github.com/asg017/libfec/releases/download/$VERSION/libfec_parser-$VERSION.tar.gz" ``` -Wheels use the stable ABI (`abi3`), so one build works on Python 3.11 and up. +`pip install` works in place of `uv pip install` throughout. To build from a git checkout +instead, see [Development](#development). ## `fecfile` API @@ -182,6 +202,22 @@ item.fields() # all fields as a list[str] Takes the `bytes` of a filing and returns just its FEC format version. +## Known issues + +Three known gaps come from the underlying Rust parser (`fec-parser`), not the bindings. They +are tracked as parser bugs and deliberately **not** worked around here, so `fecfile` output +differs from the `fecfile` package on exactly these points: + +- **`[BEGINTEXT]…[ENDTEXT]` bodies are dropped.** F99 filings parse, but their free-form text + never reaches `filing["text"]`. +- **`_TODO_DUP` cover column names.** A few Form 3P cover-page columns come back with + placeholder names such as `_TODO_DUP1` instead of a real column name. +- **Non-UTF-8 bytes become U+FFFD.** Filings written in cp1252 (curly quotes, en dashes) decode + lossily: the offending bytes are replaced with `�` rather than transcoded. + +Background and the intended fixes are in [`plans/python/`](../../plans/python/) — see +[`00-decisions.md`](../../plans/python/00-decisions.md), "Deferred to `fec-parser`". + ## Development Build with `maturin`, not `cargo build`, which can't link a Python extension module on its own. diff --git a/dist-workspace.toml b/dist-workspace.toml index a193ce9..74b98f2 100644 --- a/dist-workspace.toml +++ b/dist-workspace.toml @@ -21,9 +21,14 @@ install-path = "CARGO_HOME" # Whether to install an updater program install-updater = false # Local artifacts jobs to run in CI -local-artifacts-jobs = ["./build-pypi"] +local-artifacts-jobs = ["./build-pypi", "./build-python-bindings"] # Publish jobs to run in CI -publish-jobs = ["./publish-pypi"] +publish-jobs = ["./publish-pypi", "./publish-python-bindings"] +# `publish-python-bindings` runs `gh release upload`, which needs `contents: write`. +# Custom publish jobs otherwise get only `{ id-token = "write", packages = "write" }`, which +# *replaces* release.yml's workflow-level `contents: write` for that job. Overriding the +# permissions drops those defaults, which is fine: the job needs neither. +github-custom-job-permissions = { "publish-python-bindings" = { contents = "write" } } [dist.github-custom-runners] aarch64-apple-darwin = "macos-latest" From 735d88bdab917878678a28aee81fee68261feb63 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Fri, 18 Sep 2026 14:44:21 -0700 Subject: [PATCH 13/13] py: execute quickstart notebook in CI Co-Authored-By: Claude Fable 5.1 --- .github/workflows/test-python.yml | 7 ++ crates/fec-py/Makefile | 5 +- crates/fec-py/README.md | 2 +- crates/fec-py/examples/quickstart.ipynb | 146 ++++++++++++------------ 4 files changed, 84 insertions(+), 76 deletions(-) diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index ed730a9..2e09ee7 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -56,6 +56,13 @@ jobs: uv pip install --python .venv mypy uv run --python .venv --no-project python -m mypy.stubtest libfec_parser --allowlist stubtest-allowlist.txt uv run --python .venv --no-project mypy --check-untyped-defs tests + - name: Execute quickstart notebook + if: matrix.os == 'ubuntu-latest' && matrix.python == '3.11' + shell: bash + working-directory: crates/fec-py + run: | + uv pip install --python .venv pandas nbconvert ipykernel + uv run --python .venv --no-project jupyter nbconvert --to notebook --execute --ExecutePreprocessor.timeout=120 --output /tmp/quickstart-out.ipynb examples/quickstart.ipynb - name: Smoke test - construct a Filing (guards against the pyo3 0.22 3.14 segfault) shell: bash working-directory: crates/fec-py diff --git a/crates/fec-py/Makefile b/crates/fec-py/Makefile index 7fb2993..49717b9 100644 --- a/crates/fec-py/Makefile +++ b/crates/fec-py/Makefile @@ -1,4 +1,4 @@ -.PHONY: develop develop-release build build-release test test-network test-slow notebook stubs clean +.PHONY: develop develop-release build build-release test test-network test-slow notebook notebook-check stubs clean # One-time: uv venv && uv sync --group dev @@ -25,6 +25,9 @@ test-slow: develop-release notebook: develop-release uv run --with jupyterlab jupyter lab examples/quickstart.ipynb +notebook-check: develop-release ## re-execute the notebook in place, re-recording outputs + uv run jupyter nbconvert --to notebook --execute --inplace --ExecutePreprocessor.timeout=120 examples/quickstart.ipynb + stubs: develop ## check python/libfec_parser/*.pyi against the built extension uv run python -m mypy.stubtest libfec_parser --allowlist stubtest-allowlist.txt uv run mypy --check-untyped-defs tests diff --git a/crates/fec-py/README.md b/crates/fec-py/README.md index 78b4314..6818100 100644 --- a/crates/fec-py/README.md +++ b/crates/fec-py/README.md @@ -236,7 +236,7 @@ Tests run against the committed fixtures in [`tests/fixtures/`](tests/fixtures/) **Releasing:** the version is read from `Cargo.toml` (not `pyproject.toml`) — bump it together with `crates/fec-cli/Cargo.toml` so the bindings stay in lockstep with the CLI. -To refresh the notebook's saved outputs after an API change, see `make notebook`. +To refresh the notebook's saved outputs after an API change, run `make notebook-check`. ## License diff --git a/crates/fec-py/examples/quickstart.ipynb b/crates/fec-py/examples/quickstart.ipynb index c45d798..7a03d88 100644 --- a/crates/fec-py/examples/quickstart.ipynb +++ b/crates/fec-py/examples/quickstart.ipynb @@ -31,10 +31,10 @@ "id": "97559d2b", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:29.734731Z", - "iopub.status.busy": "2026-09-18T19:47:29.734648Z", - "iopub.status.idle": "2026-09-18T19:47:29.740787Z", - "shell.execute_reply": "2026-09-18T19:47:29.740428Z" + "iopub.execute_input": "2026-09-18T21:41:00.207314Z", + "iopub.status.busy": "2026-09-18T21:41:00.207222Z", + "iopub.status.idle": "2026-09-18T21:41:00.214682Z", + "shell.execute_reply": "2026-09-18T21:41:00.214155Z" } }, "outputs": [ @@ -42,7 +42,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1721696.fec: 263,105 bytes\n" + "../tests/fixtures/1721696.fec: 263,105 bytes\n" ] } ], @@ -51,12 +51,10 @@ "from pathlib import Path\n", "\n", "FILING_ID = 1721696\n", - "path = Path(f\"{FILING_ID}.fec\")\n", - "\n", + "candidates = [Path(f\"../tests/fixtures/{FILING_ID}.fec\"), Path(f\"{FILING_ID}.fec\")]\n", + "path = next((p for p in candidates if p.exists()), candidates[-1])\n", "if not path.exists():\n", - " url = f\"https://docquery.fec.gov/dcdev/posted/{FILING_ID}.fec\"\n", - " with urllib.request.urlopen(url) as response:\n", - " path.write_bytes(response.read())\n", + " urllib.request.urlretrieve(f\"https://docquery.fec.gov/dcdev/posted/{FILING_ID}.fec\", path)\n", "\n", "print(f\"{path}: {path.stat().st_size:,} bytes\")" ] @@ -82,10 +80,10 @@ "id": "c4dc682d", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:29.742132Z", - "iopub.status.busy": "2026-09-18T19:47:29.742056Z", - "iopub.status.idle": "2026-09-18T19:47:29.836031Z", - "shell.execute_reply": "2026-09-18T19:47:29.835577Z" + "iopub.execute_input": "2026-09-18T21:41:00.215796Z", + "iopub.status.busy": "2026-09-18T21:41:00.215719Z", + "iopub.status.idle": "2026-09-18T21:41:00.362406Z", + "shell.execute_reply": "2026-09-18T21:41:00.361857Z" } }, "outputs": [ @@ -113,10 +111,10 @@ "id": "2fda64ba", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:29.837372Z", - "iopub.status.busy": "2026-09-18T19:47:29.837287Z", - "iopub.status.idle": "2026-09-18T19:47:29.839394Z", - "shell.execute_reply": "2026-09-18T19:47:29.839078Z" + "iopub.execute_input": "2026-09-18T21:41:00.363554Z", + "iopub.status.busy": "2026-09-18T21:41:00.363472Z", + "iopub.status.idle": "2026-09-18T21:41:00.365475Z", + "shell.execute_reply": "2026-09-18T21:41:00.365102Z" } }, "outputs": [ @@ -154,10 +152,10 @@ "id": "0b8b8ce5", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:29.840628Z", - "iopub.status.busy": "2026-09-18T19:47:29.840552Z", - "iopub.status.idle": "2026-09-18T19:47:29.842498Z", - "shell.execute_reply": "2026-09-18T19:47:29.842156Z" + "iopub.execute_input": "2026-09-18T21:41:00.366622Z", + "iopub.status.busy": "2026-09-18T21:41:00.366563Z", + "iopub.status.idle": "2026-09-18T21:41:00.368631Z", + "shell.execute_reply": "2026-09-18T21:41:00.368203Z" } }, "outputs": [ @@ -223,10 +221,10 @@ "id": "27976117", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:29.843644Z", - "iopub.status.busy": "2026-09-18T19:47:29.843557Z", - "iopub.status.idle": "2026-09-18T19:47:29.845463Z", - "shell.execute_reply": "2026-09-18T19:47:29.845106Z" + "iopub.execute_input": "2026-09-18T21:41:00.369721Z", + "iopub.status.busy": "2026-09-18T21:41:00.369665Z", + "iopub.status.idle": "2026-09-18T21:41:00.371589Z", + "shell.execute_reply": "2026-09-18T21:41:00.371214Z" } }, "outputs": [ @@ -251,10 +249,10 @@ "id": "35da23b5", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:29.846497Z", - "iopub.status.busy": "2026-09-18T19:47:29.846418Z", - "iopub.status.idle": "2026-09-18T19:47:29.848940Z", - "shell.execute_reply": "2026-09-18T19:47:29.848576Z" + "iopub.execute_input": "2026-09-18T21:41:00.372473Z", + "iopub.status.busy": "2026-09-18T21:41:00.372411Z", + "iopub.status.idle": "2026-09-18T21:41:00.374386Z", + "shell.execute_reply": "2026-09-18T21:41:00.374096Z" } }, "outputs": [ @@ -306,10 +304,10 @@ "id": "40abb0c3", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:29.850050Z", - "iopub.status.busy": "2026-09-18T19:47:29.849972Z", - "iopub.status.idle": "2026-09-18T19:47:30.113248Z", - "shell.execute_reply": "2026-09-18T19:47:30.112842Z" + "iopub.execute_input": "2026-09-18T21:41:00.375369Z", + "iopub.status.busy": "2026-09-18T21:41:00.375298Z", + "iopub.status.idle": "2026-09-18T21:41:00.588101Z", + "shell.execute_reply": "2026-09-18T21:41:00.587726Z" } }, "outputs": [ @@ -445,10 +443,10 @@ "id": "a7c19fea", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.114303Z", - "iopub.status.busy": "2026-09-18T19:47:30.114232Z", - "iopub.status.idle": "2026-09-18T19:47:30.116280Z", - "shell.execute_reply": "2026-09-18T19:47:30.115955Z" + "iopub.execute_input": "2026-09-18T21:41:00.589163Z", + "iopub.status.busy": "2026-09-18T21:41:00.589091Z", + "iopub.status.idle": "2026-09-18T21:41:00.590971Z", + "shell.execute_reply": "2026-09-18T21:41:00.590658Z" } }, "outputs": [ @@ -481,10 +479,10 @@ "id": "42d2d765", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.117176Z", - "iopub.status.busy": "2026-09-18T19:47:30.117123Z", - "iopub.status.idle": "2026-09-18T19:47:30.124586Z", - "shell.execute_reply": "2026-09-18T19:47:30.124193Z" + "iopub.execute_input": "2026-09-18T21:41:00.591896Z", + "iopub.status.busy": "2026-09-18T21:41:00.591837Z", + "iopub.status.idle": "2026-09-18T21:41:00.597362Z", + "shell.execute_reply": "2026-09-18T21:41:00.597097Z" } }, "outputs": [ @@ -653,10 +651,10 @@ "id": "9ff31696", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.125752Z", - "iopub.status.busy": "2026-09-18T19:47:30.125686Z", - "iopub.status.idle": "2026-09-18T19:47:30.129856Z", - "shell.execute_reply": "2026-09-18T19:47:30.129485Z" + "iopub.execute_input": "2026-09-18T21:41:00.598489Z", + "iopub.status.busy": "2026-09-18T21:41:00.598435Z", + "iopub.status.idle": "2026-09-18T21:41:00.602235Z", + "shell.execute_reply": "2026-09-18T21:41:00.601914Z" } }, "outputs": [ @@ -820,10 +818,10 @@ "id": "ac9c1b61", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.130909Z", - "iopub.status.busy": "2026-09-18T19:47:30.130825Z", - "iopub.status.idle": "2026-09-18T19:47:30.155984Z", - "shell.execute_reply": "2026-09-18T19:47:30.155644Z" + "iopub.execute_input": "2026-09-18T21:41:00.603331Z", + "iopub.status.busy": "2026-09-18T21:41:00.603276Z", + "iopub.status.idle": "2026-09-18T21:41:00.605683Z", + "shell.execute_reply": "2026-09-18T21:41:00.605411Z" } }, "outputs": [ @@ -849,10 +847,10 @@ "id": "f3bb01e6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.158229Z", - "iopub.status.busy": "2026-09-18T19:47:30.158146Z", - "iopub.status.idle": "2026-09-18T19:47:30.178617Z", - "shell.execute_reply": "2026-09-18T19:47:30.178220Z" + "iopub.execute_input": "2026-09-18T21:41:00.606547Z", + "iopub.status.busy": "2026-09-18T21:41:00.606496Z", + "iopub.status.idle": "2026-09-18T21:41:00.608637Z", + "shell.execute_reply": "2026-09-18T21:41:00.608373Z" } }, "outputs": [ @@ -892,10 +890,10 @@ "id": "f359ccc6", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.179860Z", - "iopub.status.busy": "2026-09-18T19:47:30.179787Z", - "iopub.status.idle": "2026-09-18T19:47:30.182577Z", - "shell.execute_reply": "2026-09-18T19:47:30.182294Z" + "iopub.execute_input": "2026-09-18T21:41:00.609466Z", + "iopub.status.busy": "2026-09-18T21:41:00.609422Z", + "iopub.status.idle": "2026-09-18T21:41:00.611786Z", + "shell.execute_reply": "2026-09-18T21:41:00.611498Z" } }, "outputs": [ @@ -957,10 +955,10 @@ "id": "f49c7ad7", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.183817Z", - "iopub.status.busy": "2026-09-18T19:47:30.183744Z", - "iopub.status.idle": "2026-09-18T19:47:30.191602Z", - "shell.execute_reply": "2026-09-18T19:47:30.191185Z" + "iopub.execute_input": "2026-09-18T21:41:00.612724Z", + "iopub.status.busy": "2026-09-18T21:41:00.612674Z", + "iopub.status.idle": "2026-09-18T21:41:00.615322Z", + "shell.execute_reply": "2026-09-18T21:41:00.615065Z" } }, "outputs": [ @@ -988,10 +986,10 @@ "id": "6d534255", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.192714Z", - "iopub.status.busy": "2026-09-18T19:47:30.192643Z", - "iopub.status.idle": "2026-09-18T19:47:30.194921Z", - "shell.execute_reply": "2026-09-18T19:47:30.194554Z" + "iopub.execute_input": "2026-09-18T21:41:00.616289Z", + "iopub.status.busy": "2026-09-18T21:41:00.616234Z", + "iopub.status.idle": "2026-09-18T21:41:00.618055Z", + "shell.execute_reply": "2026-09-18T21:41:00.617774Z" } }, "outputs": [ @@ -1043,10 +1041,10 @@ "id": "3dc69314", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.196009Z", - "iopub.status.busy": "2026-09-18T19:47:30.195943Z", - "iopub.status.idle": "2026-09-18T19:47:30.200107Z", - "shell.execute_reply": "2026-09-18T19:47:30.199822Z" + "iopub.execute_input": "2026-09-18T21:41:00.618940Z", + "iopub.status.busy": "2026-09-18T21:41:00.618887Z", + "iopub.status.idle": "2026-09-18T21:41:00.621560Z", + "shell.execute_reply": "2026-09-18T21:41:00.621221Z" } }, "outputs": [ @@ -1073,10 +1071,10 @@ "id": "4130a7fd", "metadata": { "execution": { - "iopub.execute_input": "2026-09-18T19:47:30.201113Z", - "iopub.status.busy": "2026-09-18T19:47:30.201053Z", - "iopub.status.idle": "2026-09-18T19:47:30.205145Z", - "shell.execute_reply": "2026-09-18T19:47:30.204830Z" + "iopub.execute_input": "2026-09-18T21:41:00.622446Z", + "iopub.status.busy": "2026-09-18T21:41:00.622393Z", + "iopub.status.idle": "2026-09-18T21:41:00.624940Z", + "shell.execute_reply": "2026-09-18T21:41:00.624705Z" } }, "outputs": [